UtilsTests.test_parse_range_header()   A
last analyzed

Complexity

Conditions 2

Size

Total Lines 29

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
c 1
b 0
f 0
dl 0
loc 29
rs 9.184
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