99TEST_TABLE_HASH_KEY_NAME = "test_primary_key"
1010
1111TEST_ITEM1_KEY = "first_item"
12- TEST_ITEM1 = {
13- TEST_TABLE_HASH_KEY_NAME : TEST_ITEM1_KEY ,
14- "foo" : "bar"
15- }
12+ TEST_ITEM1 = {TEST_TABLE_HASH_KEY_NAME : TEST_ITEM1_KEY , "foo" : "bar" }
1613
1714TEST_ITEM2_KEY = "second_item"
18- TEST_ITEM2 = {
19- TEST_TABLE_HASH_KEY_NAME : TEST_ITEM2_KEY ,
20- "foo2" : "bar2"
21- }
15+ TEST_ITEM2 = {TEST_TABLE_HASH_KEY_NAME : TEST_ITEM2_KEY , "foo2" : "bar2" }
2216
2317TEST_ATTRIBUTES = {"foo" : "bar" }
2418
19+
2520@pytest .fixture
2621def mapping (mocker ):
2722 boto3_session = mocker .MagicMock ()
@@ -34,122 +29,156 @@ def mapping(mocker):
3429def test_init (mapping ):
3530 assert mapping .key_names == (TEST_TABLE_HASH_KEY_NAME ,)
3631
32+
3733def test_scan (mapping , mocker ):
3834 mapping .table .scan = mocker .MagicMock (return_value = {"Items" : [TEST_ITEM1 ]})
3935 assert next (mapping .scan ()) == TEST_ITEM1
4036
37+
4138def test_scan_pages (mapping , mocker ):
42- mapping .table .scan = mocker .MagicMock (side_effect = [
43- {"Items" : [TEST_ITEM1 ], "LastEvaluatedKey" : "to_be_continued" }, {"Items" : [TEST_ITEM2 ]}
44- ])
39+ mapping .table .scan = mocker .MagicMock (
40+ side_effect = [
41+ {"Items" : [TEST_ITEM1 ], "LastEvaluatedKey" : "to_be_continued" },
42+ {"Items" : [TEST_ITEM2 ]},
43+ ]
44+ )
4545 results = mapping .scan ()
4646 assert next (results ) == TEST_ITEM1
4747 assert next (results ) == TEST_ITEM2
4848 assert mapping .table .scan .call_count == 2
4949
50+
5051def test_get_item (mapping , mocker ):
5152 mapping .table .get_item = mocker .MagicMock (return_value = {"Item" : TEST_ITEM1 })
5253 assert mapping .get_item (TEST_ITEM1_KEY ) == TEST_ITEM1
53- mapping .table .get_item .assert_called_with (Key = {TEST_TABLE_HASH_KEY_NAME : TEST_ITEM1_KEY })
54+ mapping .table .get_item .assert_called_with (
55+ Key = {TEST_TABLE_HASH_KEY_NAME : TEST_ITEM1_KEY }
56+ )
57+
5458
5559def test_invalid_keys (mapping ):
5660 with pytest .raises (ValueError ):
5761 mapping .get_item ((TEST_ITEM1_KEY , TEST_ITEM2_KEY ))
5862
63+
5964def test_get_item_non_existing (mapping , mocker ):
6065 mapping .table .get_item = mocker .MagicMock (return_value = {})
6166 with pytest .raises (KeyError ):
6267 mapping .get_item (TEST_ITEM1_KEY )
6368
69+
6470def test_get_item_accessor (mapping , mocker ):
6571 mapping .table .get_item = mocker .MagicMock (return_value = {"Item" : TEST_ITEM1 })
6672 mapping .modify_item = mocker .MagicMock ()
6773 accessor = mapping .get_item (TEST_ITEM1_KEY )
68- mapping .table .get_item .assert_called_with (Key = {TEST_TABLE_HASH_KEY_NAME : TEST_ITEM1_KEY })
74+ mapping .table .get_item .assert_called_with (
75+ Key = {TEST_TABLE_HASH_KEY_NAME : TEST_ITEM1_KEY }
76+ )
6977 accessor ["new_attrib" ] = "foobar"
7078 mapping .modify_item .assert_called_with (TEST_ITEM1_KEY , {"new_attrib" : "foobar" })
7179
80+
7281def test_set_item (mapping , mocker ):
7382 mapping .table .put_item = mocker .MagicMock ()
7483 mapping .set_item (TEST_ITEM1_KEY , TEST_ATTRIBUTES )
7584 mapping .table .put_item .assert_called_with (
7685 Item = {TEST_TABLE_HASH_KEY_NAME : TEST_ITEM1_KEY , ** TEST_ATTRIBUTES }
7786 )
7887
88+
7989def test_put_item (mapping , mocker ):
8090 mapping .set_item = mocker .MagicMock ()
8191 mapping .put_item (TEST_ITEM1_KEY , TEST_ATTRIBUTES )
8292 mapping .set_item .assert_called_with (TEST_ITEM1_KEY , TEST_ATTRIBUTES )
8393
94+
8495def test_del_item (mapping , mocker ):
8596 mapping .table .delete_item = mocker .MagicMock ()
8697 mapping .del_item (TEST_ITEM1_KEY , check_existing = False )
87- mapping .table .delete_item .assert_called_with (Key = {TEST_TABLE_HASH_KEY_NAME : TEST_ITEM1_KEY })
98+ mapping .table .delete_item .assert_called_with (
99+ Key = {TEST_TABLE_HASH_KEY_NAME : TEST_ITEM1_KEY }
100+ )
101+
88102
89103def test_del_item_non_existing (mapping , mocker ):
90104 mapping .table .delete_item = mocker .MagicMock ()
91105 mapping .keys = mocker .MagicMock (return_value = [TEST_ITEM2_KEY ])
92106 with pytest .raises (KeyError ):
93107 mapping .del_item (TEST_ITEM1_KEY )
94108
109+
95110def test_modify_item (mapping , mocker ):
96111 mapping .table .update_item = mocker .MagicMock ()
97- mapping .modify_item (TEST_ITEM1_KEY , {"new1" : "foobar!" , "new2" : "bar_foo!" , "zombie" : None })
112+ mapping .modify_item (
113+ TEST_ITEM1_KEY , {"new1" : "foobar!" , "new2" : "bar_foo!" , "zombie" : None }
114+ )
98115 mapping .table .update_item .assert_called_with (
99116 Key = {TEST_TABLE_HASH_KEY_NAME : TEST_ITEM1_KEY },
100- UpdateExpression = ' set #key0 = :value0, #key1 = :value1 remove #key2' ,
101- ExpressionAttributeValues = {' :value0' : ' foobar!' , ' :value1' : ' bar_foo!' },
102- ExpressionAttributeNames = {' #key0' : ' new1' , ' #key1' : ' new2' , ' #key2' : ' zombie' },
117+ UpdateExpression = " set #key0 = :value0, #key1 = :value1 remove #key2" ,
118+ ExpressionAttributeValues = {" :value0" : " foobar!" , " :value1" : " bar_foo!" },
119+ ExpressionAttributeNames = {" #key0" : " new1" , " #key1" : " new2" , " #key2" : " zombie" },
103120 )
104121
122+
105123def test_modify_empty (mapping ):
106124 with pytest .warns (UserWarning ):
107125 mapping .modify_item (TEST_ITEM1_KEY , {})
108126
127+
109128def test_op_iter (mapping , mocker ):
110- mapping .scan = mocker .MagicMock (return_value = [
111- {TEST_TABLE_HASH_KEY_NAME : TEST_ITEM1_KEY },
112- {TEST_TABLE_HASH_KEY_NAME : TEST_ITEM2_KEY },
113- ])
129+ mapping .scan = mocker .MagicMock (
130+ return_value = [
131+ {TEST_TABLE_HASH_KEY_NAME : TEST_ITEM1_KEY },
132+ {TEST_TABLE_HASH_KEY_NAME : TEST_ITEM2_KEY },
133+ ]
134+ )
114135 assert list (mapping ) == [TEST_ITEM1_KEY , TEST_ITEM2_KEY ]
115136 mapping .scan .assert_called_with (ProjectionExpression = TEST_TABLE_HASH_KEY_NAME )
116137
138+
117139def test_op_len (mapping ):
118140 mapping .table .item_count = 42
119141 assert len (mapping ) == 42
120142
143+
121144def test_op_getitem (mapping , mocker ):
122145 mapping .get_item = mocker .MagicMock (return_value = TEST_ITEM1 )
123146 assert mapping [TEST_ITEM1_KEY ] == TEST_ITEM1
124147 mapping .get_item .assert_called_with (TEST_ITEM1_KEY )
125148
149+
126150def test_op_setitem (mapping , mocker ):
127151 mapping .set_item = mocker .MagicMock ()
128152 mapping [TEST_ITEM1_KEY ] = TEST_ITEM1
129153 mapping .set_item .assert_called_with (TEST_ITEM1_KEY , TEST_ITEM1 )
130154
155+
131156def test_op_delitem (mapping , mocker ):
132157 mapping .del_item = mocker .MagicMock ()
133158 del mapping [TEST_ITEM1_KEY ]
134159 mapping .del_item .assert_called_with (TEST_ITEM1_KEY )
135160
161+
136162def test_items_view (mapping , mocker ):
137163 mapping .scan = mocker .MagicMock (return_value = [TEST_ITEM1 , TEST_ITEM2 ])
138164 items = mapping .items ()
139165 assert list (items ) == [(TEST_ITEM1_KEY , TEST_ITEM1 ), (TEST_ITEM2_KEY , TEST_ITEM2 )]
140166
167+
141168def test_values_view (mapping , mocker ):
142169 mapping .scan = mocker .MagicMock (return_value = [TEST_ITEM1 ])
143170 values = mapping .values ()
144171 assert TEST_ITEM1 in values
145172 assert TEST_ITEM2 not in values
146173 assert list (values ) == [TEST_ITEM1 ]
147174
175+
148176def test_keys_view (mapping , mocker ):
149177 mapping .table .get_item = mocker .MagicMock (side_effect = [{"Item" : TEST_ITEM1 }])
150178 keys = mapping .keys ()
151179 assert TEST_ITEM1_KEY in keys
152180
181+
153182def test_keys_view_non_existing (mapping , mocker ):
154183 mapping .table .get_item = mocker .MagicMock (side_effect = [{}])
155184 keys = mapping .keys ()
0 commit comments