Skip to content

Commit 5aca93e

Browse files
authored
Merge pull request #19 from graphql-python/feat-map-field
Feature: Support MapField
2 parents 642f741 + b9fa32c commit 5aca93e

File tree

4 files changed

+48
-16
lines changed

4 files changed

+48
-16
lines changed

graphene_mongo/tests/fixtures.py

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,24 @@
33

44
def setup_fixtures():
55
Editor.drop_collection()
6-
editor1 = Editor(id='1', first_name='Penny', last_name='Hardaway')
6+
editor1 = Editor(
7+
id='1',
8+
first_name='Penny',
9+
last_name='Hardaway',
10+
metadata={'age': '20', 'nickname': '$1'}
11+
)
712
editor1.save()
8-
editor2 = Editor(id='2', first_name='Grant', last_name='Hill')
13+
editor2 = Editor(
14+
id='2',
15+
first_name='Grant',
16+
last_name='Hill'
17+
)
918
editor2.save()
10-
editor3 = Editor(id='3', first_name='Dennis', last_name='Rodman')
19+
editor3 = Editor(
20+
id='3',
21+
first_name='Dennis',
22+
last_name='Rodman'
23+
)
1124
editor3.save()
1225

1326
Article.drop_collection()
@@ -17,8 +30,13 @@ def setup_fixtures():
1730
article2.save()
1831

1932
Reporter.drop_collection()
20-
reporter1 = Reporter(id='1', first_name='Allen', last_name='Iverson',
21-
email='[email protected]', awards=['2010-mvp'])
33+
reporter1 = Reporter(
34+
id='1',
35+
first_name='Allen',
36+
last_name='Iverson',
37+
38+
awards=['2010-mvp']
39+
)
2240
reporter1.articles = [article1, article2]
2341
embedded_article1 = EmbeddedArticle(
2442
headline='Real',
@@ -33,11 +51,22 @@ def setup_fixtures():
3351
reporter1.save()
3452

3553
Player.drop_collection()
36-
player1 = Player(first_name='Michael', last_name='Jordan')
54+
player1 = Player(
55+
first_name='Michael',
56+
last_name='Jordan'
57+
)
3758
player1.save()
38-
player2 = Player(first_name='Magic', last_name='Johnson', opponent=player1)
59+
player2 = Player(
60+
first_name='Magic',
61+
last_name='Johnson',
62+
opponent=player1
63+
)
3964
player2.save()
40-
player3 = Player(first_name='Larry', last_name='Bird', players=[player1, player2])
65+
player3 = Player(
66+
first_name='Larry',
67+
last_name='Bird',
68+
players=[player1, player2]
69+
)
4170
player3.save()
4271

4372
player1.players = [player2]

graphene_mongo/tests/models.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class Editor(Document):
1717
id = StringField(primary_key=True)
1818
first_name = StringField(required=True)
1919
last_name = StringField(required=True)
20-
20+
metadata = MapField(field=StringField())
2121

2222
class Pet(Document):
2323

@@ -54,8 +54,6 @@ class Reporter(Document):
5454
articles = ListField(ReferenceField(Article))
5555
embedded_articles = ListField(EmbeddedDocumentField(EmbeddedArticle))
5656
embedded_list_articles = EmbeddedDocumentListField(EmbeddedArticle)
57-
# FIXME
58-
# custom_map = MapField(field=StringField())
5957
awards = ListField(StringField())
6058

6159

graphene_mongo/tests/test_converter.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,9 @@ def test_should_date_convert_string():
6666
def test_should_dict_convert_json():
6767
assert_conversion(mongoengine.DictField, graphene.JSONString)
6868

69-
# FIXME
70-
# def test_should_convert_map_to_json():
71-
# assert_conversion(mongoengine.MapField, graphene.JSONString)
69+
70+
def test_should_convert_map_to_json():
71+
assert_conversion(mongoengine.MapField, graphene.JSONString, field=mongoengine.StringField())
7272

7373

7474
def test_should_field_convert_list():

graphene_mongo/tests/test_query.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ def resolve_editors(self, *args, **kwargs):
2828
query = '''
2929
query EditorQuery {
3030
editor {
31-
firstName
31+
firstName,
32+
metadata
3233
}
3334
editors {
3435
firstName,
@@ -38,7 +39,8 @@ def resolve_editors(self, *args, **kwargs):
3839
'''
3940
expected = {
4041
'editor': {
41-
'firstName': 'Penny'
42+
'firstName': 'Penny',
43+
'metadata': '{"age": "20", "nickname": "$1"}'
4244
},
4345
'editors': [{
4446
'firstName': 'Penny',
@@ -55,6 +57,9 @@ def resolve_editors(self, *args, **kwargs):
5557
schema = graphene.Schema(query=Query)
5658
result = schema.execute(query)
5759
assert not result.errors
60+
metadata = result.data['editor'].pop('metadata')
61+
expected_metadata = expected['editor'].pop('metadata')
62+
assert(json.loads(metadata)) == dict(json.loads(expected_metadata))
5863
assert dict(result.data['editor']) == expected['editor']
5964
assert all(item in result.data['editors'] for item in expected['editors'])
6065

0 commit comments

Comments
 (0)