UtilsTests   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 77
Duplicated Lines 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
c 3
b 0
f 0
dl 0
loc 77
rs 10
wmc 7

6 Methods

Rating   Name   Duplication   Size   Complexity  
A test_range_return_x_or_not() 0 9 1
A test_range_return_large_request() 0 7 1
A test_parse_range_header() 0 29 2
A test_range_return_no_range() 0 6 1
A test_range_return_filtered() 0 7 1
A test_range_return_max_return() 0 12 1
1
# -*- coding: utf-8 -*-
2
'''
3
Tests for the utility module.
4
5
.. versionadded:: 0.1.0
6
'''
7
8
from crabpy_pyramid.utils import (
9
    parse_range_header,
10
    range_return
11
)
12
13
import unittest
14
15
from pyramid.testing import DummyRequest
16
17
class UtilsTests(unittest.TestCase):
18
19
    def test_parse_range_header(self):
20
        headers = [
21
            {
22
                'header': 'items=0-19',
23
                'result': {
24
                    'start': 0,
25
                    'finish': 19,
26
                    'count': 20
27
                }
28
            }, {
29
                'header': 'items:0-19',
30
                'result': False
31
            }, {
32
                'header': 'test',
33
                'result': False
34
            }, {
35
                'header': 'items=t-t',
36
                'result': False
37
            }, {
38
                'header': 'items=10-0',
39
                'result': {
40
                    'start': 10,
41
                    'finish': 10,
42
                    'count': 1
43
                }
44
            }]
45
        for header in headers:
46
            res = parse_range_header(header['header'])
47
            self.assertEquals(res, header['result'])
48
49
    def test_range_return_no_range(self):
50
        items = range(10)
51
        req = DummyRequest()
52
        filtered = range_return(req, items)
53
        self.assertEquals(items, filtered)
54
        self.assertEquals(req.response.headers['Content-Range'], 'items 0-9/10')
55
56
    def test_range_return_filtered(self):
57
        items = range(10)
58
        req = DummyRequest()
59
        req.headers['Range'] = 'items=0-4'
60
        filtered = range_return(req, items)
61
        self.assertEquals(items[0:5], filtered)
62
        self.assertEquals(req.response.headers['Content-Range'], 'items 0-4/10')
63
64
    def test_range_return_x_or_not(self):
65
        items = range(10)
66
        req = DummyRequest()
67
        req.headers['Range'] = 'items=0-4'
68
        filtered_no_x = range_return(req, items)
69
        req_x = DummyRequest()
70
        req_x.headers['X-Range'] = 'items=0-4'
71
        filtered_x = range_return(req_x, items)
72
        self.assertEquals(filtered_x, filtered_no_x)
73
74
    def test_range_return_large_request(self):
75
        items = range(10)
76
        req = DummyRequest()
77
        req.headers['Range'] = 'items=0-100'
78
        filtered = range_return(req, items)
79
        self.assertEquals(items, filtered)
80
        self.assertEquals(req.response.headers['Content-Range'], 'items 0-9/10')
81
        
82
    def test_range_return_max_return(self):
83
        items = range (9999)
84
        req = DummyRequest()
85
        req.headers['Range'] = 'items=0-9999'
86
        filtered = range_return(req, items)
87
        self.assertEquals(items[0:5000], filtered)
88
        self.assertEqual(req.response.headers['Content-Range'], 'items 0-4999/9999')
89
        items = range(14999)
90
        req.headers['Range'] = 'items=5000-15000'
91
        filtered = range_return(req, items)
92
        self.assertEqual(items[5000:10000], filtered)
93
        self.assertEqual(req.response.headers['Content-Range'], 'items 5000-9999/14999')
94