You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
123 lines
2.3 KiB
123 lines
2.3 KiB
from mock import patch |
|
|
|
from graphene import Interface, ObjectType, Schema |
|
from graphene.relay import Node |
|
|
|
from ..registry import reset_global_registry |
|
from ..types import DjangoObjectType |
|
from .models import Article as ArticleModel |
|
from .models import Reporter as ReporterModel |
|
|
|
reset_global_registry() |
|
|
|
|
|
class Reporter(DjangoObjectType): |
|
'''Reporter description''' |
|
class Meta: |
|
model = ReporterModel |
|
|
|
|
|
class Article(DjangoObjectType): |
|
'''Article description''' |
|
class Meta: |
|
model = ArticleModel |
|
interfaces = (Node, ) |
|
|
|
|
|
class RootQuery(ObjectType): |
|
node = Node.Field() |
|
|
|
|
|
schema = Schema(query=RootQuery, types=[Article, Reporter]) |
|
|
|
|
|
def test_django_interface(): |
|
assert issubclass(Node, Interface) |
|
assert issubclass(Node, Node) |
|
|
|
|
|
@patch('graphene_django.tests.models.Article.objects.get', return_value=Article(id=1)) |
|
def test_django_get_node(get): |
|
article = Article.get_node(1, None, None) |
|
get.assert_called_with(id=1) |
|
assert article.id == 1 |
|
|
|
|
|
def test_django_objecttype_map_correct_fields(): |
|
fields = Reporter._meta.fields |
|
assert list(fields.keys()) == ['id', 'first_name', 'last_name', 'email', 'pets', 'a_choice', 'articles', 'films'] |
|
|
|
|
|
def test_django_objecttype_with_node_have_correct_fields(): |
|
fields = Article._meta.fields |
|
assert list(fields.keys()) == ['id', 'headline', 'pub_date', 'reporter', 'lang', 'importance'] |
|
|
|
|
|
def test_schema_representation(): |
|
expected = """ |
|
schema { |
|
query: RootQuery |
|
} |
|
|
|
type Article implements Node { |
|
id: ID! |
|
headline: String |
|
pubDate: DateTime |
|
reporter: Reporter |
|
lang: ArticleLang |
|
importance: ArticleImportance |
|
} |
|
|
|
type ArticleConnection { |
|
pageInfo: PageInfo! |
|
edges: [ArticleEdge] |
|
} |
|
|
|
type ArticleEdge { |
|
node: Article |
|
cursor: String! |
|
} |
|
|
|
enum ArticleImportance { |
|
VERY_IMPORTANT |
|
NOT_AS_IMPORTANT |
|
} |
|
|
|
enum ArticleLang { |
|
SPANISH |
|
ENGLISH |
|
} |
|
|
|
scalar DateTime |
|
|
|
interface Node { |
|
id: ID! |
|
} |
|
|
|
type PageInfo { |
|
hasNextPage: Boolean! |
|
hasPreviousPage: Boolean! |
|
startCursor: String |
|
endCursor: String |
|
} |
|
|
|
type Reporter { |
|
id: ID |
|
firstName: String |
|
lastName: String |
|
email: String |
|
pets: [Reporter] |
|
aChoice: ReporterA_choice |
|
articles(before: String, after: String, first: Int, last: Int): ArticleConnection |
|
} |
|
|
|
enum ReporterA_choice { |
|
THIS |
|
THAT |
|
} |
|
|
|
type RootQuery { |
|
node(id: ID!): Node |
|
} |
|
""".lstrip() |
|
assert str(schema) == expected
|
|
|