Improved testing

This commit is contained in:
Syrus Akbary 2015-09-29 23:40:40 -07:00
parent a7774f0be4
commit 35ec787501
12 changed files with 338 additions and 1 deletions

View File

@ -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

View File

@ -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
View File

View 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
View 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',
}
}

View File

View 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)

View 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

View 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

View 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

View 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

View File

@ -5,6 +5,7 @@ envlist = py27
deps=
pytest>=2.7.2
django>=1.8.0,<1.9
pytest-django
flake8
six
blinker
@ -12,3 +13,6 @@ deps=
commands=
py.test
flake8
[pytest]
DJANGO_SETTINGS_MODULE = tests.django_settings