source: main/waeup.ikoba/branches/uli-payments/src/waeup/ikoba/tests/test_fees.py @ 12124

Last change on this file since 12124 was 11997, checked in by Henrik Bettermann, 10 years ago

propset svn:keywords "Id"

  • Property svn:keywords set to Id
File size: 4.9 KB
Line 
1# Tests for fee management.
2import unittest
3from zope.interface.verify import verifyClass, verifyObject
4from waeup.ikoba.fees import IFeeTable
5from waeup.ikoba.fees import FeeTable, nested_list, nested_tuple
6
7SAMPLE_PARAMS = (('locals', 'non-locals'), ('art', 'science'),
8                 ('fac1', 'fac2'))
9
10SAMPLE_VALUES = (((10, 20),   # locals, art, fac1/fac2
11                  (11, 21)),  #         science, fac1/fac2
12                 ((12, 22),   # non-locals, art, fac1/fac2
13                  (13, 23)))  #         science, fac1/fac2
14
15class HelperTests(unittest.TestCase):
16
17    def test_nested_list(self):
18        # we can turn nested lists into nested tuples
19        self.assertEqual(
20            nested_list(()), [])
21        self.assertEqual(
22            nested_list((1,)), [1])
23        self.assertEqual(
24            nested_list(((1,2), (3,))), [[1,2],[3]])
25        self.assertEqual(
26            nested_list((((1,2),(3,4)),(5,6))), [[[1,2],[3,4]],[5,6]])
27        return
28
29    def test_nested_tuples(self):
30        # we can turn nested tuples into nested lists
31        self.assertEqual(
32            nested_tuple([]), ())
33        self.assertEqual(
34            nested_tuple([1,]), (1,))
35        self.assertEqual(
36            nested_tuple([[1,2], [3,]]), ((1,2),(3,)))
37        self.assertEqual(
38            nested_tuple([[[1,2],[3,4]],[5,6]]), (((1,2),(3,4)),(5,6)))
39        return
40
41class FeeTests(unittest.TestCase):
42
43    def test_iface(self):
44        # make sure, we comply with interfaces
45        obj = FeeTable()
46        verifyClass(IFeeTable, FeeTable)
47        verifyObject(IFeeTable, obj)
48        return
49
50    def test_constructor(self):
51        # we can set values in constructor
52        fees = FeeTable(params=SAMPLE_PARAMS, values=SAMPLE_VALUES)
53        self.assertEqual(fees.values, SAMPLE_VALUES)
54        self.assertEqual(fees.params, SAMPLE_PARAMS)
55        return
56
57    def test_import_values(self):
58        # we can import a set of values (clearing old stuff)
59        fees = FeeTable()
60        fees.import_values(SAMPLE_PARAMS, SAMPLE_VALUES)
61        self.assertEqual(fees.params, SAMPLE_PARAMS)
62        self.assertEqual(fees.values, SAMPLE_VALUES)
63        return
64
65    def test_import_values_no_values(self):
66        # w/o values the table is emptied
67        fees = FeeTable()
68        fees.import_values()
69        self.assertEqual(fees.params, ())
70        self.assertEqual(fees.values, ())
71        return
72
73    def test_as_dict(self):
74        # we can get a fee table as dict
75        fees = FeeTable(SAMPLE_PARAMS, SAMPLE_VALUES)
76        result = fees.as_dict()
77        self.assertEqual(
78            result,
79            {
80                ('locals', 'art', 'fac1'): 10,
81                ('locals', 'science', 'fac1'): 11,
82                ('non-locals', 'art', 'fac1'): 12,
83                ('non-locals', 'science', 'fac1'): 13,
84                ('locals', 'art', 'fac2'): 20,
85                ('locals', 'science', 'fac2'): 21,
86                ('non-locals', 'art', 'fac2'): 22,
87                ('non-locals', 'science', 'fac2'): 23,
88                }
89            )
90
91    def test_get_fee(self):
92        # we can get values
93        fees = FeeTable(SAMPLE_PARAMS, SAMPLE_VALUES)
94        result1 = fees.get_fee(('locals', 'science', 'fac2'),)
95        result2 = fees.get_fee(('non-locals', 'art', 'fac1'),)
96        self.assertEqual(result1, 21)
97        self.assertEqual(result2, 12)
98        return
99
100    def test_get_fee_invalid_key(self):
101        # invalid param values will raise a key error
102        fees = FeeTable(SAMPLE_PARAMS, SAMPLE_VALUES)
103        self.assertRaises(
104            KeyError, fees.get_fee, ('NONSENSE', 'science', 'fac2'))
105        self.assertRaises(
106            KeyError, fees.get_fee, ('locals', 'NONSENSE', 'fac2'))
107        self.assertRaises(
108            KeyError, fees.get_fee, ('locals', 'science', 'NONSENSE'))
109        # also the order of params matters
110        self.assertRaises( # 'science' and 'locals' is wrong order...
111            KeyError, fees.get_fee, ('science', 'locals', 'fac2'))
112        return
113
114    def test_set_fee(self):
115        # we can set values
116        fees = FeeTable(SAMPLE_PARAMS, SAMPLE_VALUES)
117        result1 = fees.get_fee(('locals', 'science', 'fac2'),)
118        fees.set_fee(('locals', 'science', 'fac2'), 42)
119        result2 = fees.get_fee(('locals', 'science', 'fac2'),)
120        self.assertEqual(result1, 21)
121        self.assertEqual(result2, 42)
122        return
123
124    def test_set_fee_invalid(self):
125        # invalid param values will raise a key error
126        fees = FeeTable(SAMPLE_PARAMS, SAMPLE_VALUES)
127        self.assertRaises(
128            KeyError, fees.set_fee, ('NONSENSE', 'science', 'fac2'), 12)
129        self.assertRaises(
130            KeyError, fees.set_fee, ('locals', 'NONSENSE', 'fac2'), 12)
131        self.assertRaises(
132            KeyError, fees.set_fee, ('locals', 'science', 'NONSENSE'), 12)
133       # also the order of params matters
134        self.assertRaises( # 'science' and 'locals' is wrong order...
135            KeyError, fees.set_fee, ('science', 'locals', 'fac2'), 12)
136        return
Note: See TracBrowser for help on using the repository browser.