mirror of
https://github.com/graphql-python/graphene.git
synced 2025-02-02 04:34:13 +03:00
Improved testing
This commit is contained in:
parent
a7774f0be4
commit
35ec787501
|
@ -3,7 +3,8 @@ sudo: false
|
|||
python:
|
||||
- 2.7
|
||||
install:
|
||||
- pip install pytest pytest-cov coveralls flake8 six blinker singledispatch django
|
||||
- pip install pytest pytest-cov coveralls flake8 six blinker
|
||||
- pip install -e .[django]
|
||||
- pip install git+https://github.com/dittos/graphqllib.git # Last version of graphqllib
|
||||
- pip install graphql-relay
|
||||
- python setup.py develop
|
||||
|
|
1
setup.py
1
setup.py
|
@ -56,6 +56,7 @@ setup(
|
|||
extras_require={
|
||||
'django': [
|
||||
'Django>=1.8.0,<1.9',
|
||||
'pytest-django',
|
||||
'singledispatch>=3.4.0.3',
|
||||
],
|
||||
},
|
||||
|
|
0
tests/__init__.py
Normal file
0
tests/__init__.py
Normal file
|
@ -44,6 +44,13 @@ def test_should_raise_if_model_is_invalid():
|
|||
assert 'articles (Article) model not mapped in current schema' in str(excinfo.value)
|
||||
|
||||
|
||||
|
||||
def test_should_map_fields_correctly():
|
||||
class ReporterType2(DjangoObjectType):
|
||||
class Meta:
|
||||
model = Reporter
|
||||
assert ReporterType2._meta.fields_map.keys() == ['articles', 'first_name', 'last_name', 'id', 'email']
|
||||
|
||||
def test_should_map_fields():
|
||||
class ReporterType(DjangoObjectType):
|
||||
class Meta:
|
||||
|
|
13
tests/django_settings.py
Normal file
13
tests/django_settings.py
Normal file
|
@ -0,0 +1,13 @@
|
|||
SECRET_KEY = 1
|
||||
|
||||
INSTALLED_APPS = [
|
||||
'graphql.contrib.django',
|
||||
'tests.starwars_django',
|
||||
]
|
||||
|
||||
DATABASES={
|
||||
'default': {
|
||||
'ENGINE': 'django.db.backends.sqlite3',
|
||||
'NAME': 'tests/django.sqlite',
|
||||
}
|
||||
}
|
0
tests/starwars_django/__init__.py
Normal file
0
tests/starwars_django/__init__.py
Normal file
98
tests/starwars_django/data.py
Normal file
98
tests/starwars_django/data.py
Normal file
|
@ -0,0 +1,98 @@
|
|||
from collections import namedtuple
|
||||
|
||||
from .models import Ship, Faction
|
||||
|
||||
def initialize():
|
||||
rebels = Faction(
|
||||
id='1',
|
||||
name='Alliance to Restore the Republic',
|
||||
)
|
||||
rebels.save()
|
||||
|
||||
empire = Faction(
|
||||
id='2',
|
||||
name='Galactic Empire',
|
||||
)
|
||||
empire.save()
|
||||
|
||||
|
||||
xwing = Ship(
|
||||
id='1',
|
||||
name='X-Wing',
|
||||
faction=rebels,
|
||||
)
|
||||
xwing.save()
|
||||
|
||||
ywing = Ship(
|
||||
id='2',
|
||||
name='Y-Wing',
|
||||
faction=rebels,
|
||||
)
|
||||
ywing.save()
|
||||
|
||||
awing = Ship(
|
||||
id='3',
|
||||
name='A-Wing',
|
||||
faction=rebels,
|
||||
)
|
||||
awing.save()
|
||||
|
||||
# Yeah, technically it's Corellian. But it flew in the service of the rebels,
|
||||
# so for the purposes of this demo it's a rebel ship.
|
||||
falcon = Ship(
|
||||
id='4',
|
||||
name='Millenium Falcon',
|
||||
faction=rebels,
|
||||
)
|
||||
falcon.save()
|
||||
|
||||
homeOne = Ship(
|
||||
id='5',
|
||||
name='Home One',
|
||||
faction=rebels,
|
||||
)
|
||||
homeOne.save()
|
||||
|
||||
tieFighter = Ship(
|
||||
id='6',
|
||||
name='TIE Fighter',
|
||||
faction=empire,
|
||||
)
|
||||
tieFighter.save()
|
||||
|
||||
tieInterceptor = Ship(
|
||||
id='7',
|
||||
name='TIE Interceptor',
|
||||
faction=empire,
|
||||
)
|
||||
tieInterceptor.save()
|
||||
|
||||
executor = Ship(
|
||||
id='8',
|
||||
name='Executor',
|
||||
faction=empire,
|
||||
)
|
||||
executor.save()
|
||||
|
||||
|
||||
def createShip(shipName, factionId):
|
||||
nextShip = len(data['Ship'].keys())+1
|
||||
newShip = Ship(
|
||||
id=str(nextShip),
|
||||
name=shipName
|
||||
)
|
||||
newShip.save()
|
||||
return newShip
|
||||
|
||||
|
||||
def getShip(_id):
|
||||
return Ship.objects.get(id=_id)
|
||||
|
||||
def getFaction(_id):
|
||||
return Faction.objects.get(id=_id)
|
||||
|
||||
def getRebels():
|
||||
return getFaction(1)
|
||||
|
||||
def getEmpire():
|
||||
return getFaction(2)
|
17
tests/starwars_django/models.py
Normal file
17
tests/starwars_django/models.py
Normal file
|
@ -0,0 +1,17 @@
|
|||
from __future__ import absolute_import
|
||||
from django.db import models
|
||||
|
||||
|
||||
class Faction(models.Model):
|
||||
name = models.CharField(max_length=50)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class Ship(models.Model):
|
||||
name = models.CharField(max_length=50)
|
||||
faction = models.ForeignKey(Faction, related_name='ships')
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
48
tests/starwars_django/schema.py
Normal file
48
tests/starwars_django/schema.py
Normal file
|
@ -0,0 +1,48 @@
|
|||
import graphene
|
||||
from graphene import resolve_only_args, relay
|
||||
from graphene.contrib.django import (
|
||||
DjangoObjectType,
|
||||
DjangoNode
|
||||
)
|
||||
from .models import Ship as ShipModel, Faction as FactionModel
|
||||
from .data import (
|
||||
getFaction,
|
||||
getShip,
|
||||
getRebels,
|
||||
getEmpire,
|
||||
)
|
||||
|
||||
schema = graphene.Schema(name='Starwars Django Relay Schema')
|
||||
|
||||
class Ship(DjangoNode):
|
||||
class Meta:
|
||||
model = ShipModel
|
||||
|
||||
@classmethod
|
||||
def get_node(cls, id):
|
||||
return Ship(getShip(id))
|
||||
|
||||
class Faction(DjangoNode):
|
||||
class Meta:
|
||||
model = FactionModel
|
||||
|
||||
@classmethod
|
||||
def get_node(cls, id):
|
||||
return Faction(getFaction(id))
|
||||
|
||||
|
||||
class Query(graphene.ObjectType):
|
||||
rebels = graphene.Field(Faction)
|
||||
empire = graphene.Field(Faction)
|
||||
node = relay.NodeField()
|
||||
|
||||
@resolve_only_args
|
||||
def resolve_rebels(self):
|
||||
return Faction(getRebels())
|
||||
|
||||
@resolve_only_args
|
||||
def resolve_empire(self):
|
||||
return Faction(getEmpire())
|
||||
|
||||
|
||||
schema.query = Query
|
43
tests/starwars_django/test_connections.py
Normal file
43
tests/starwars_django/test_connections.py
Normal file
|
@ -0,0 +1,43 @@
|
|||
# import pytest
|
||||
# from graphql.core import graphql
|
||||
|
||||
# from .models import *
|
||||
# from .schema import schema
|
||||
# from .data import initialize, getFaction
|
||||
|
||||
# pytestmark = pytest.mark.django_db
|
||||
|
||||
# def test_correct_fetch_first_ship_rebels():
|
||||
# initialize()
|
||||
# print schema.Faction._meta.fields_map
|
||||
# query = '''
|
||||
# query RebelsShipsQuery {
|
||||
# rebels {
|
||||
# name,
|
||||
# ships(first: 1) {
|
||||
# edges {
|
||||
# node {
|
||||
# name
|
||||
# }
|
||||
# }
|
||||
# }
|
||||
# }
|
||||
# }
|
||||
# '''
|
||||
# expected = {
|
||||
# 'rebels': {
|
||||
# 'name': 'Alliance to Restore the Republic',
|
||||
# 'ships': {
|
||||
# 'edges': [
|
||||
# {
|
||||
# 'node': {
|
||||
# 'name': 'X-Wing'
|
||||
# }
|
||||
# }
|
||||
# ]
|
||||
# }
|
||||
# }
|
||||
# }
|
||||
# result = schema.execute(query)
|
||||
# assert not result.errors
|
||||
# assert result.data == expected
|
105
tests/starwars_django/test_objectidentification.py
Normal file
105
tests/starwars_django/test_objectidentification.py
Normal file
|
@ -0,0 +1,105 @@
|
|||
# from pytest import raises
|
||||
# from graphql.core import graphql
|
||||
|
||||
# from .schema import schema
|
||||
|
||||
# def test_correctly_fetches_id_name_rebels():
|
||||
# query = '''
|
||||
# query RebelsQuery {
|
||||
# rebels {
|
||||
# id
|
||||
# name
|
||||
# }
|
||||
# }
|
||||
# '''
|
||||
# expected = {
|
||||
# 'rebels': {
|
||||
# 'id': 'RmFjdGlvbjox',
|
||||
# 'name': 'Alliance to Restore the Republic'
|
||||
# }
|
||||
# }
|
||||
# result = schema.execute(query)
|
||||
# assert not result.errors
|
||||
# assert result.data == expected
|
||||
|
||||
# def test_correctly_refetches_rebels():
|
||||
# query = '''
|
||||
# query RebelsRefetchQuery {
|
||||
# node(id: "RmFjdGlvbjox") {
|
||||
# id
|
||||
# ... on Faction {
|
||||
# name
|
||||
# }
|
||||
# }
|
||||
# }
|
||||
# '''
|
||||
# expected = {
|
||||
# 'node': {
|
||||
# 'id': 'RmFjdGlvbjox',
|
||||
# 'name': 'Alliance to Restore the Republic'
|
||||
# }
|
||||
# }
|
||||
# result = schema.execute(query)
|
||||
# assert not result.errors
|
||||
# assert result.data == expected
|
||||
|
||||
# def test_correctly_fetches_id_name_empire():
|
||||
# query = '''
|
||||
# query EmpireQuery {
|
||||
# empire {
|
||||
# id
|
||||
# name
|
||||
# }
|
||||
# }
|
||||
# '''
|
||||
# expected = {
|
||||
# 'empire': {
|
||||
# 'id': 'RmFjdGlvbjoy',
|
||||
# 'name': 'Galactic Empire'
|
||||
# }
|
||||
# }
|
||||
# result = schema.execute(query)
|
||||
# assert not result.errors
|
||||
# assert result.data == expected
|
||||
|
||||
# def test_correctly_refetches_empire():
|
||||
# query = '''
|
||||
# query EmpireRefetchQuery {
|
||||
# node(id: "RmFjdGlvbjoy") {
|
||||
# id
|
||||
# ... on Faction {
|
||||
# name
|
||||
# }
|
||||
# }
|
||||
# }
|
||||
# '''
|
||||
# expected = {
|
||||
# 'node': {
|
||||
# 'id': 'RmFjdGlvbjoy',
|
||||
# 'name': 'Galactic Empire'
|
||||
# }
|
||||
# }
|
||||
# result = schema.execute(query)
|
||||
# assert not result.errors
|
||||
# assert result.data == expected
|
||||
|
||||
# def test_correctly_refetches_xwing():
|
||||
# query = '''
|
||||
# query XWingRefetchQuery {
|
||||
# node(id: "U2hpcDox") {
|
||||
# id
|
||||
# ... on Ship {
|
||||
# name
|
||||
# }
|
||||
# }
|
||||
# }
|
||||
# '''
|
||||
# expected = {
|
||||
# 'node': {
|
||||
# 'id': 'U2hpcDox',
|
||||
# 'name': 'X-Wing'
|
||||
# }
|
||||
# }
|
||||
# result = schema.execute(query)
|
||||
# assert not result.errors
|
||||
# assert result.data == expected
|
Loading…
Reference in New Issue
Block a user