Skip to content

Commit 46d5350

Browse files
committed
Resources tests
resources.core * Also detected and fixed memory bug
1 parent 6c00db9 commit 46d5350

File tree

4 files changed

+84
-4
lines changed

4 files changed

+84
-4
lines changed

pygithub3/resources/base.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ def __set_attrs(self):
2222
for attr in self._attrs:
2323
setattr(self, attr, self._attrs[attr])
2424

25+
def __str__(self):
26+
return "<%s>" % self.__class__.__name__
27+
2528
def __repr__(self):
2629
return self.__str__()
2730

@@ -59,19 +62,21 @@ def parse_collection_map(resource, raw_resources):
5962
elif hasattr(raw_resources, '__iter__'):
6063
return [resource.__load(raw_resource)
6164
for raw_resource in raw_resources]
62-
raw_resource.update(
65+
66+
new_resource = raw_resource.copy()
67+
new_resource.update(
6368
{attr: parse_date(raw_resource[attr])
6469
for attr in self._dates if attr in raw_resource})
65-
raw_resource.update(
70+
new_resource.update(
6671
{attr: parse_map(resource, raw_resource[attr])
6772
for attr, resource in self._maps.items()
6873
if attr in raw_resource})
69-
raw_resource.update(
74+
new_resource.update(
7075
{attr: parse_collection_map(resource, raw_resource[attr])
7176
for attr, resource in self._collection_maps.items()
7277
if attr in raw_resource})
7378

74-
return self(raw_resource)
79+
return self(new_resource)
7580

7681

7782
class Raw(Resource):

pygithub3/tests/resources/__init__.py

Whitespace-only changes.
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
#!/usr/bin/env python
2+
# -*- encoding: utf-8 -*-
3+
4+
from unittest import TestCase
5+
from datetime import datetime
6+
7+
from pygithub3.resources.base import Resource, Raw, json
8+
from pygithub3.tests.utils.resources import Nested, Simple, HasSimple
9+
10+
simple_resource = dict(type='simple')
11+
has_simple = dict(type='has_simple', simple=simple_resource)
12+
github_return = dict(
13+
id=1,
14+
name='name_test',
15+
date='2008-01-14T04:33:35Z',
16+
simple=simple_resource,
17+
list_collection=[has_simple] * 2,
18+
items_collections=dict(arg1=has_simple, arg2=has_simple)
19+
)
20+
21+
22+
class TestResourceMapping(TestCase):
23+
24+
def setUp(self):
25+
self.r = Nested.loads(github_return)
26+
27+
def test_attrs_map(self):
28+
self.assertEqual(self.r.id, 1)
29+
self.assertEqual(self.r.name, 'name_test')
30+
self.assertEqual(self.r.date, datetime(2008, 1, 14, 4, 33, 35))
31+
32+
def test_MAPS(self):
33+
self.assertIsInstance(self.r.simple, Simple)
34+
self.assertEqual(self.r.simple.type, 'simple')
35+
36+
def test_LIST_collection_map(self):
37+
has_simple_objects = filter(lambda x: isinstance(x, HasSimple),
38+
self.r.list_collection)
39+
self.assertEqual(len(has_simple_objects), 2)
40+
self.assertEqual(self.r.list_collection[0].type, 'has_simple')
41+
self.assertEqual(self.r.list_collection[0].simple.type, 'simple')
42+
43+
def test_DICT_collection_map(self):
44+
arg1_has_simple = self.r.items_collections['arg1']
45+
self.assertEqual(arg1_has_simple.type, 'has_simple')
46+
self.assertEqual(arg1_has_simple.simple.type, 'simple')
47+
48+
49+
class TestRawResource(TestCase):
50+
""" Litle obvious :P """
51+
52+
def test_return_original_copy(self):
53+
self.r = Raw.loads(github_return)
54+
self.assertEqual(id(self.r), id(github_return))

pygithub3/tests/utils/resources.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#!/usr/bin/env python
2+
# -*- encoding: utf-8 -*-
3+
4+
from pygithub3.resources.base import Resource
5+
6+
7+
class Simple(Resource):
8+
pass
9+
10+
11+
class HasSimple(Resource):
12+
_maps = {'simple': Simple}
13+
14+
15+
class Nested(Resource):
16+
_dates = ('date', )
17+
_maps = {'simple': Simple}
18+
_collection_maps = {
19+
'list_collection': HasSimple,
20+
'items_collections': HasSimple
21+
}

0 commit comments

Comments
 (0)