| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 import unittest |
| 2 from boto.mws.connection import MWSConnection | 3 from boto.mws.connection import MWSConnection |
| 3 from boto.mws.response import (ResponseFactory, ResponseElement, Element, | 4 from boto.mws.response import (ResponseFactory, ResponseElement, Element, |
| 4 MemberList, ElementList, SimpleList) | 5 MemberList, ElementList, SimpleList) |
| 5 | 6 |
| 6 | 7 |
| 7 from tests.unit import AWSMockServiceTestCase | 8 from tests.unit import AWSMockServiceTestCase |
| 8 | 9 |
| 9 | 10 |
| 10 class TestMWSResponse(AWSMockServiceTestCase): | 11 class TestMWSResponse(AWSMockServiceTestCase): |
| 11 connection_class = MWSConnection | 12 connection_class = MWSConnection |
| (...skipping 10 matching lines...) Expand all Loading... |
| 22 text = """<Test9Response><Test9Result> | 23 text = """<Test9Response><Test9Result> |
| 23 <Item> | 24 <Item> |
| 24 <Foo>Bar</Foo> | 25 <Foo>Bar</Foo> |
| 25 <Nest> | 26 <Nest> |
| 26 <Zip>Zap</Zip> | 27 <Zip>Zap</Zip> |
| 27 <Zam>Zoo</Zam> | 28 <Zam>Zoo</Zam> |
| 28 </Nest> | 29 </Nest> |
| 29 <Bif>Bam</Bif> | 30 <Bif>Bam</Bif> |
| 30 </Item> | 31 </Item> |
| 31 </Test9Result></Test9Response>""" | 32 </Test9Result></Test9Response>""" |
| 32 obj = self.issue_test('Test9', Test9Result, text) | 33 obj = self.check_issue(Test9Result, text) |
| 33 Item = obj._result.Item | 34 Item = obj._result.Item |
| 34 useful = lambda x: not x[0].startswith('_') | 35 useful = lambda x: not x[0].startswith('_') |
| 35 nest = dict(filter(useful, Item.Nest.__dict__.items())) | 36 nest = dict(filter(useful, Item.Nest.__dict__.items())) |
| 36 self.assertEqual(nest, dict(Zip='Zap', Zam='Zoo')) | 37 self.assertEqual(nest, dict(Zip='Zap', Zam='Zoo')) |
| 37 useful = lambda x: not x[0].startswith('_') and not x[0] == 'Nest' | 38 useful = lambda x: not x[0].startswith('_') and not x[0] == 'Nest' |
| 38 item = dict(filter(useful, Item.__dict__.items())) | 39 item = dict(filter(useful, Item.__dict__.items())) |
| 39 self.assertEqual(item, dict(Foo='Bar', Bif='Bam', Zoom=None)) | 40 self.assertEqual(item, dict(Foo='Bar', Bif='Bam', Zoom=None)) |
| 40 | 41 |
| 41 def test_parsing_member_list_specification(self): | 42 def test_parsing_member_list_specification(self): |
| 42 class Test8extra(ResponseElement): | 43 class Test8extra(ResponseElement): |
| 43 Foo = SimpleList() | 44 Foo = SimpleList() |
| 44 | 45 |
| 45 class Test8Result(ResponseElement): | 46 class Test8Result(ResponseElement): |
| 46 Item = MemberList(SimpleList) | 47 Item = MemberList(SimpleList) |
| 47 Extra = MemberList(Test8extra) | 48 Extra = MemberList(Test8extra) |
| 48 | 49 |
| 49 text = """<Test8Response><Test8Result> | 50 text = """<Test8Response><Test8Result> |
| 50 <Item> | 51 <Item> |
| 51 <member>0</member> | 52 <member>0</member> |
| 52 <member>1</member> | 53 <member>1</member> |
| 53 <member>2</member> | 54 <member>2</member> |
| 54 <member>3</member> | 55 <member>3</member> |
| 55 </Item> | 56 </Item> |
| 56 <Extra> | 57 <Extra> |
| 57 <member><Foo>4</Foo><Foo>5</Foo></member> | 58 <member><Foo>4</Foo><Foo>5</Foo></member> |
| 58 <member></member> | 59 <member></member> |
| 59 <member><Foo>6</Foo><Foo>7</Foo></member> | 60 <member><Foo>6</Foo><Foo>7</Foo></member> |
| 60 </Extra> | 61 </Extra> |
| 61 </Test8Result></Test8Response>""" | 62 </Test8Result></Test8Response>""" |
| 62 obj = self.issue_test('Test8', Test8Result, text) | 63 obj = self.check_issue(Test8Result, text) |
| 63 self.assertSequenceEqual( | 64 self.assertSequenceEqual( |
| 64 map(int, obj._result.Item), | 65 map(int, obj._result.Item), |
| 65 range(4), | 66 range(4), |
| 66 ) | 67 ) |
| 67 self.assertSequenceEqual( | 68 self.assertSequenceEqual( |
| 68 map(lambda x: map(int, x.Foo), obj._result.Extra), | 69 map(lambda x: map(int, x.Foo), obj._result.Extra), |
| 69 [[4, 5], [], [6, 7]], | 70 [[4, 5], [], [6, 7]], |
| 70 ) | 71 ) |
| 71 | 72 |
| 72 def test_parsing_nested_lists(self): | 73 def test_parsing_nested_lists(self): |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 109 <Simple>1</Simple> | 110 <Simple>1</Simple> |
| 110 <Simple>2</Simple> | 111 <Simple>2</Simple> |
| 111 <Simple>3</Simple> | 112 <Simple>3</Simple> |
| 112 </List> | 113 </List> |
| 113 <List> | 114 <List> |
| 114 <Complex>Bar</Complex> | 115 <Complex>Bar</Complex> |
| 115 </List> | 116 </List> |
| 116 </member> | 117 </member> |
| 117 </Item> | 118 </Item> |
| 118 </Test7Result></Test7Response>""" | 119 </Test7Result></Test7Response>""" |
| 119 obj = self.issue_test('Test7', Test7Result, text) | 120 obj = self.check_issue(Test7Result, text) |
| 120 item = obj._result.Item | 121 item = obj._result.Item |
| 121 self.assertEqual(len(item), 3) | 122 self.assertEqual(len(item), 3) |
| 122 nests = [z.Nest for z in filter(lambda x: x.Nest, item)] | 123 nests = [z.Nest for z in filter(lambda x: x.Nest, item)] |
| 123 self.assertSequenceEqual( | 124 self.assertSequenceEqual( |
| 124 [[y.Data for y in nest] for nest in nests], | 125 [[y.Data for y in nest] for nest in nests], |
| 125 [[u'2', u'4', u'6'], [u'1', u'3', u'5']], | 126 [[u'2', u'4', u'6'], [u'1', u'3', u'5']], |
| 126 ) | 127 ) |
| 127 self.assertSequenceEqual( | 128 self.assertSequenceEqual( |
| 128 [element.Simple for element in item[1].List], | 129 [element.Simple for element in item[1].List], |
| 129 [[u'4', u'5', u'6'], [u'7', u'8', u'9']], | 130 [[u'4', u'5', u'6'], [u'7', u'8', u'9']], |
| (...skipping 14 matching lines...) Expand all Loading... |
| 144 | 145 |
| 145 text = """<Test6Response><Test6Result> | 146 text = """<Test6Response><Test6Result> |
| 146 <Item> | 147 <Item> |
| 147 <member><Value>One</Value></member> | 148 <member><Value>One</Value></member> |
| 148 <member><Value>Two</Value> | 149 <member><Value>Two</Value> |
| 149 <Error>Four</Error> | 150 <Error>Four</Error> |
| 150 </member> | 151 </member> |
| 151 <member><Value>Six</Value></member> | 152 <member><Value>Six</Value></member> |
| 152 </Item> | 153 </Item> |
| 153 </Test6Result></Test6Response>""" | 154 </Test6Result></Test6Response>""" |
| 154 obj = self.issue_test('Test6', Test6Result, text) | 155 obj = self.check_issue(Test6Result, text) |
| 155 self.assertSequenceEqual( | 156 self.assertSequenceEqual( |
| 156 [e.Value for e in obj._result.Item], | 157 [e.Value for e in obj._result.Item], |
| 157 ['One', 'Two', 'Six'], | 158 ['One', 'Two', 'Six'], |
| 158 ) | 159 ) |
| 159 self.assertTrue(obj._result.Item[1].Error == 'Four') | 160 self.assertTrue(obj._result.Item[1].Error == 'Four') |
| 160 with self.assertRaises(AttributeError) as e: | 161 with self.assertRaises(AttributeError) as e: |
| 161 obj._result.Item[2].Error | 162 obj._result.Item[2].Error |
| 162 | 163 |
| 163 def test_parsing_empty_member_list(self): | 164 def test_parsing_empty_member_list(self): |
| 164 class Test5Result(ResponseElement): | 165 class Test5Result(ResponseElement): |
| 165 Item = MemberList(Nest=MemberList()) | 166 Item = MemberList(Nest=MemberList()) |
| 166 | 167 |
| 167 text = """<Test5Response><Test5Result> | 168 text = """<Test5Response><Test5Result> |
| 168 <Item/> | 169 <Item/> |
| 169 </Test5Result></Test5Response>""" | 170 </Test5Result></Test5Response>""" |
| 170 obj = self.issue_test('Test5', Test5Result, text) | 171 obj = self.check_issue(Test5Result, text) |
| 171 self.assertSequenceEqual(obj._result.Item, []) | 172 self.assertSequenceEqual(obj._result.Item, []) |
| 172 | 173 |
| 173 def test_parsing_missing_member_list(self): | 174 def test_parsing_missing_member_list(self): |
| 174 class Test4Result(ResponseElement): | 175 class Test4Result(ResponseElement): |
| 175 Item = MemberList(NestedItem=MemberList()) | 176 Item = MemberList(NestedItem=MemberList()) |
| 176 | 177 |
| 177 text = """<Test4Response><Test4Result> | 178 text = """<Test4Response><Test4Result> |
| 178 </Test4Result></Test4Response>""" | 179 </Test4Result></Test4Response>""" |
| 179 obj = self.issue_test('Test4', Test4Result, text) | 180 obj = self.check_issue(Test4Result, text) |
| 180 self.assertSequenceEqual(obj._result.Item, []) | 181 self.assertSequenceEqual(obj._result.Item, []) |
| 181 | 182 |
| 182 def test_parsing_element_lists(self): | 183 def test_parsing_element_lists(self): |
| 183 class Test1Result(ResponseElement): | 184 class Test1Result(ResponseElement): |
| 184 Item = ElementList() | 185 Item = ElementList() |
| 185 | 186 |
| 186 text = """<Test1Response><Test1Result> | 187 text = """<Test1Response><Test1Result> |
| 187 <Item><Foo>Bar</Foo></Item> | 188 <Item><Foo>Bar</Foo></Item> |
| 188 <Item><Zip>Bif</Zip></Item> | 189 <Item><Zip>Bif</Zip></Item> |
| 189 <Item><Foo>Baz</Foo> | 190 <Item><Foo>Baz</Foo> |
| 190 <Zam>Zoo</Zam></Item> | 191 <Zam>Zoo</Zam></Item> |
| 191 </Test1Result></Test1Response>""" | 192 </Test1Result></Test1Response>""" |
| 192 obj = self.issue_test('Test1', Test1Result, text) | 193 obj = self.check_issue(Test1Result, text) |
| 193 self.assertTrue(len(obj._result.Item) == 3) | 194 self.assertTrue(len(obj._result.Item) == 3) |
| 194 elements = lambda x: getattr(x, 'Foo', getattr(x, 'Zip', '?')) | 195 elements = lambda x: getattr(x, 'Foo', getattr(x, 'Zip', '?')) |
| 195 elements = map(elements, obj._result.Item) | 196 elements = map(elements, obj._result.Item) |
| 196 self.assertSequenceEqual(elements, ['Bar', 'Bif', 'Baz']) | 197 self.assertSequenceEqual(elements, ['Bar', 'Bif', 'Baz']) |
| 197 | 198 |
| 198 def test_parsing_missing_lists(self): | 199 def test_parsing_missing_lists(self): |
| 199 class Test2Result(ResponseElement): | 200 class Test2Result(ResponseElement): |
| 200 Item = ElementList() | 201 Item = ElementList() |
| 201 | 202 |
| 202 text = """<Test2Response><Test2Result> | 203 text = """<Test2Response><Test2Result> |
| 203 </Test2Result></Test2Response>""" | 204 </Test2Result></Test2Response>""" |
| 204 obj = self.issue_test('Test2', Test2Result, text) | 205 obj = self.check_issue(Test2Result, text) |
| 205 self.assertEqual(obj._result.Item, []) | 206 self.assertEqual(obj._result.Item, []) |
| 206 | 207 |
| 207 def test_parsing_simple_lists(self): | 208 def test_parsing_simple_lists(self): |
| 208 class Test3Result(ResponseElement): | 209 class Test3Result(ResponseElement): |
| 209 Item = SimpleList() | 210 Item = SimpleList() |
| 210 | 211 |
| 211 text = """<Test3Response><Test3Result> | 212 text = """<Test3Response><Test3Result> |
| 212 <Item>Bar</Item> | 213 <Item>Bar</Item> |
| 213 <Item>Bif</Item> | 214 <Item>Bif</Item> |
| 214 <Item>Baz</Item> | 215 <Item>Baz</Item> |
| 215 </Test3Result></Test3Response>""" | 216 </Test3Result></Test3Response>""" |
| 216 obj = self.issue_test('Test3', Test3Result, text) | 217 obj = self.check_issue(Test3Result, text) |
| 217 self.assertSequenceEqual(obj._result.Item, ['Bar', 'Bif', 'Baz']) | 218 self.assertSequenceEqual(obj._result.Item, ['Bar', 'Bif', 'Baz']) |
| 218 | 219 |
| 219 def issue_test(self, action, klass, text): | 220 def check_issue(self, klass, text): |
| 220 cls = ResponseFactory(action, force=klass) | 221 action = klass.__name__[:-len('Result')] |
| 221 return self.service_connection._parse_response(cls, text) | 222 factory = ResponseFactory(scopes=[{klass.__name__: klass}]) |
| 223 parser = factory(action, connection=self.service_connection) |
| 224 return self.service_connection._parse_response(parser, 'text/xml', text) |
| 222 | 225 |
| 223 | 226 |
| 224 if __name__ == "__main__": | 227 if __name__ == "__main__": |
| 225 unittest.main() | 228 unittest.main() |
| OLD | NEW |