tests covering all endpoints. working on adding some convenience attributes to api resources to help connect them two way style. tests will probably need some small tweaks

This commit is contained in:
Adickes 2015-11-15 22:29:30 -05:00
commit 1f480cedac
18 changed files with 2091 additions and 359 deletions

View file

@ -51,6 +51,7 @@ router.register(r"ability", AbilityResource)
router.register(r"ability-change", AbilityChangeResource)
router.register(r"berry", BerryResource)
router.register(r"berry-firmness", BerryFirmnessResource)
router.register(r"berry-flavor", BerryFlavorResource)
router.register(r"characteristic", CharacteristicResource)
router.register(r"contest-type", ContestTypeResource)
router.register(r"contest-effect", ContestEffectResource)
@ -70,7 +71,7 @@ router.register(r"item-fling-effect", ItemFlingEffectResource)
router.register(r"item-pocket", ItemPocketResource)
router.register(r"language", LanguageResource)
router.register(r"location", LocationResource)
router.register(r"location-area", LocationAreaResource) # ?
router.register(r"location-area", LocationAreaResource)
# router.register(r"machine", MachineResource)
router.register(r"move", MoveResource)
router.register(r"move-ailment", MoveMetaAilmentResource)

View file

@ -538,16 +538,16 @@ for index, info in enumerate(data):
model.save()
clearTable(ItemFlingEffectDescription)
clearTable(ItemFlingEffectEffectText)
data = loadData('item_fling_effect_prose.csv')
for index, info in enumerate(data):
if index > 0:
model = ItemFlingEffectDescription (
model = ItemFlingEffectEffectText (
item_fling_effect = ItemFlingEffect.objects.get(pk = int(info[0])),
language = Language.objects.get(pk = int(info[1])),
description = info[2]
effect = info[2]
)
model.save()
@ -766,6 +766,102 @@ for index, info in enumerate(data):
#############
# CONTEST #
#############
clearTable(ContestType)
data = loadData('contest_types.csv')
for index, info in enumerate(data):
if index > 0:
model = ContestType (
id = int(info[0]),
name = info[1]
)
model.save()
clearTable(ContestTypeName)
data = loadData('contest_type_names.csv')
for index, info in enumerate(data):
if index > 0:
model = ContestTypeName (
contest_type = ContestType.objects.get(pk = int(info[0])),
language = Language.objects.get(pk = int(info[1])),
name = info[2],
flavor = info[3],
color = info[4]
)
model.save()
clearTable(ContestEffect)
data = loadData('contest_effects.csv')
for index, info in enumerate(data):
if index > 0:
model = ContestEffect (
id = int(info[0]),
appeal = int(info[1]),
jam = int(info[2])
)
model.save()
clearTable(ContestEffectEffectText)
data = loadData('contest_effect_prose.csv')
for index, info in enumerate(data):
if index > 0:
model = ContestEffectEffectText (
contest_effect = ContestEffect.objects.get(pk = int(info[0])),
language = Language.objects.get(pk = int(info[1])),
effect = info[3]
)
model.save()
model = ContestEffectFlavorText (
contest_effect = ContestEffect.objects.get(pk = int(info[0])),
language = Language.objects.get(pk = int(info[1])),
flavor_text = info[2]
)
model.save()
clearTable(SuperContestEffect)
data = loadData('super_contest_effects.csv')
for index, info in enumerate(data):
if index > 0:
model = SuperContestEffect (
id = int(info[0]),
appeal = int(info[1])
)
model.save()
clearTable(SuperContestEffectFlavorText)
data = loadData('super_contest_effect_prose.csv')
for index, info in enumerate(data):
if index > 0:
model = SuperContestEffectFlavorText (
super_contest_effect = SuperContestEffect.objects.get(pk = int(info[0])),
language = Language.objects.get(pk = int(info[1])),
flavor_text = info[2]
)
model.save()
###########
# MOVES #
###########
@ -934,11 +1030,11 @@ for index, info in enumerate(data):
move_effect_chance = int(info[11]) if info[11] != '' else None,
contest_type_id = int(info[12]) if info[12] != '' else None,
contest_type = ContestType.objects.get(pk = int(info[12])) if info[12] != '' else None,
contest_effect_id = int(info[13]) if info[13] != '' else None,
contest_effect = ContestEffect.objects.get(pk = int(info[13])) if info[13] != '' else None,
super_contest_effect_id = int(info[14]) if info[14] != '' else None
super_contest_effect = SuperContestEffect.objects.get(pk = int(info[14])) if info[14] != '' else None
)
model.save()
@ -1164,75 +1260,6 @@ for index, info in enumerate(data):
model.save()
#############
# CONTEST #
#############
clearTable(ContestType)
data = loadData('contest_types.csv')
for index, info in enumerate(data):
if index > 0:
model = ContestType (
id = int(info[0]),
name = info[1]
)
model.save()
clearTable(ContestTypeName)
data = loadData('contest_type_names.csv')
for index, info in enumerate(data):
if index > 0:
model = ContestTypeName (
contest_type = ContestType.objects.get(pk = int(info[0])),
language = Language.objects.get(pk = int(info[1])),
name = info[2],
flavor = info[3],
color = info[4]
)
model.save()
clearTable(ContestEffect)
data = loadData('contest_effects.csv')
for index, info in enumerate(data):
if index > 0:
model = ContestEffect (
id = int(info[0]),
appeal = int(info[1]),
jam = int(info[2])
)
model.save()
clearTable(ContestEffectEffectText)
data = loadData('contest_effect_prose.csv')
for index, info in enumerate(data):
if index > 0:
model = ContestEffectEffectText (
contest_effect = ContestEffect.objects.get(pk = int(info[0])),
language = Language.objects.get(pk = int(info[1])),
effect = info[3]
)
model.save()
model = ContestEffectFlavorText (
contest_effect = ContestEffect.objects.get(pk = int(info[0])),
language = Language.objects.get(pk = int(info[1])),
flavor_text = info[2]
)
model.save()
clearTable(ContestCombo)
data = loadData('contest_combos.csv')
@ -1245,34 +1272,7 @@ for index, info in enumerate(data):
)
model.save()
clearTable(SuperContestEffect)
data = loadData('super_contest_effects.csv')
for index, info in enumerate(data):
if index > 0:
model = SuperContestEffect (
id = int(info[0]),
appeal = int(info[1])
)
model.save()
clearTable(SuperContestEffectFlavorText)
data = loadData('super_contest_effect_prose.csv')
for index, info in enumerate(data):
if index > 0:
model = SuperContestEffectFlavorText (
super_contest_effect = SuperContestEffect.objects.get(pk = int(info[0])),
language = Language.objects.get(pk = int(info[1])),
flavor_text = info[2]
)
model.save()
clearTable(SuperContestCombo)
data = loadData('super_contest_combos.csv')
@ -1343,19 +1343,52 @@ for index, info in enumerate(data):
clearTable(BerryFlavor)
data = loadData('berry_flavors.csv')
data = loadData('contest_types.csv') #this is not an error
for index, info in enumerate(data):
if index > 0:
# get the english name for this contest type
contest_type_name = ContestTypeName.objects.get(contest_type_id=int(info[0]), language_id=9)
model = BerryFlavor (
berry = Berry.objects.get(pk = int(info[0])),
contest_type = ContestType.objects.get(pk = int(info[1])),
flavor = int(info[2])
id = int(info[0]),
name = contest_type_name.flavor.lower(),
contest_type = ContestType.objects.get(pk = int(info[0]))
)
model.save()
clearTable(BerryFlavorName)
data = loadData('contest_type_names.csv') #this is not an error
for index, info in enumerate(data):
if index > 0:
model = BerryFlavorName (
berry_flavor = BerryFlavor.objects.get(pk = int(info[0])),
language = Language.objects.get(pk = int(info[1])),
name = info[3]
)
model.save()
clearTable(BerryFlavorMap)
data = loadData('berry_flavors.csv') #this is not an error
for index, info in enumerate(data):
if index > 0:
model = BerryFlavorMap (
berry = Berry.objects.get(pk = int(info[0])),
berry_flavor = BerryFlavor.objects.get(pk = int(info[1])),
potency = int(info[2])
)
model.save()
############
# NATURE #
@ -1367,13 +1400,26 @@ data = loadData('natures.csv')
for index, info in enumerate(data):
if index > 0:
decreased_stat = None
increased_stat = None
hates_flavor = None
likes_flavor = None
if (info[2] != info[3]):
decreased_stat = Stat.objects.get(pk = int(info[2]))
increased_stat = Stat.objects.get(pk = int(info[3]))
if (info[4] != info[5]):
hates_flavor = BerryFlavor.objects.get(pk = int(info[4]))
likes_flavor = BerryFlavor.objects.get(pk = int(info[5]))
nature = Nature (
id = int(info[0]),
name = info[1],
decreased_stat = Stat.objects.get(pk = int(info[2])),
increased_stat = Stat.objects.get(pk = int(info[3])),
hates_flavor = BerryFlavor.objects.get(pk = int(info[4])),
likes_flavor = BerryFlavor.objects.get(pk = int(info[5])),
decreased_stat = decreased_stat,
increased_stat = increased_stat,
hates_flavor = hates_flavor,
likes_flavor = likes_flavor,
game_index = info[6]
)
nature.save()

View file

@ -59,7 +59,7 @@ admin.site.register(ItemAttributeMap)
admin.site.register(ItemAttributeDescription)
admin.site.register(ItemFlavorText)
admin.site.register(ItemFlingEffect)
admin.site.register(ItemFlingEffectDescription)
admin.site.register(ItemFlingEffectEffectText)
admin.site.register(ItemGameIndex)
admin.site.register(ItemName)
admin.site.register(ItemPocketName)

View file

@ -0,0 +1,41 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('pokemon_v2', '0001_squashed_0011_auto_20151108_0352'),
]
operations = [
migrations.CreateModel(
name='BerryFlavorName',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('name', models.CharField(max_length=100)),
('berry_flavor', models.ForeignKey(related_name='berryflavorname', blank=True, to='pokemon_v2.BerryFlavor', null=True)),
('language', models.ForeignKey(related_name='berryflavorname_language', blank=True, to='pokemon_v2.Language', null=True)),
],
options={
'abstract': False,
},
bases=(models.Model,),
),
migrations.RemoveField(
model_name='berryflavor',
name='berry',
),
migrations.RemoveField(
model_name='berryflavor',
name='flavor',
),
migrations.AddField(
model_name='berryflavor',
name='name',
field=models.CharField(default='name', max_length=100),
preserve_default=False,
),
]

View file

@ -0,0 +1,26 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('pokemon_v2', '0002_auto_20151110_1756'),
]
operations = [
migrations.CreateModel(
name='BerryFlavorMap',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('potency', models.IntegerField()),
('berry', models.ForeignKey(related_name='berryflavormap', blank=True, to='pokemon_v2.Berry', null=True)),
('berry_flavor', models.ForeignKey(related_name='berryflavormap', blank=True, to='pokemon_v2.BerryFlavor', null=True)),
],
options={
},
bases=(models.Model,),
),
]

View file

@ -0,0 +1,38 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('pokemon_v2', '0003_berryflavormap'),
]
operations = [
migrations.CreateModel(
name='ItemFlingEffectEffectText',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('description', models.CharField(default='', max_length=1000)),
('item_fling_effect', models.ForeignKey(related_name='itemflingeffecteffecttext', blank=True, to='pokemon_v2.ItemFlingEffect', null=True)),
('language', models.ForeignKey(related_name='itemflingeffecteffecttext_language', blank=True, to='pokemon_v2.Language', null=True)),
],
options={
'abstract': False,
},
bases=(models.Model,),
),
migrations.RemoveField(
model_name='itemflingeffectdescription',
name='item_fling_effect',
),
migrations.RemoveField(
model_name='itemflingeffectdescription',
name='language',
),
migrations.DeleteModel(
name='ItemFlingEffectDescription',
),
]

View file

@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('pokemon_v2', '0004_auto_20151111_0531'),
]
operations = [
migrations.RemoveField(
model_name='itemflingeffecteffecttext',
name='description',
),
migrations.AddField(
model_name='itemflingeffecteffecttext',
name='effect',
field=models.CharField(default='string', max_length=4000),
preserve_default=False,
),
]

View file

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('pokemon_v2', '0005_auto_20151111_0541'),
]
operations = [
migrations.AlterField(
model_name='palpark',
name='pal_park_area',
field=models.ForeignKey(related_name='palpark', blank=True, to='pokemon_v2.PalParkArea', null=True),
preserve_default=True,
),
]

View file

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('pokemon_v2', '0006_auto_20151111_2216'),
]
operations = [
migrations.AlterField(
model_name='berry',
name='berry_firmness',
field=models.ForeignKey(related_name='berry', blank=True, to='pokemon_v2.BerryFirmness', null=True),
preserve_default=True,
),
]

View file

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('pokemon_v2', '0007_auto_20151113_1414'),
]
operations = [
migrations.AlterField(
model_name='berryflavor',
name='contest_type',
field=models.OneToOneField(related_name='berryflavor', null=True, blank=True, to='pokemon_v2.ContestType'),
preserve_default=True,
),
]

View file

@ -0,0 +1,44 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('pokemon_v2', '0008_auto_20151114_0241'),
]
operations = [
migrations.RemoveField(
model_name='move',
name='contest_effect_id',
),
migrations.RemoveField(
model_name='move',
name='contest_type_id',
),
migrations.RemoveField(
model_name='move',
name='super_contest_effect_id',
),
migrations.AddField(
model_name='move',
name='contest_effect',
field=models.ForeignKey(related_name='move', blank=True, to='pokemon_v2.ContestEffect', null=True),
preserve_default=True,
),
migrations.AddField(
model_name='move',
name='contest_type',
field=models.ForeignKey(related_name='move', blank=True, to='pokemon_v2.ContestType', null=True),
preserve_default=True,
),
migrations.AddField(
model_name='move',
name='super_contest_effect',
field=models.ForeignKey(related_name='move', blank=True, to='pokemon_v2.SuperContestEffect', null=True),
preserve_default=True,
),
]

View file

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('pokemon_v2', '0009_auto_20151114_0433'),
]
operations = [
migrations.AlterField(
model_name='pokemonspecies',
name='pokemon_habitat',
field=models.ForeignKey(related_name='pokemonspecies', blank=True, to='pokemon_v2.PokemonHabitat', null=True),
preserve_default=True,
),
]

View file

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('pokemon_v2', '0010_auto_20151116_0219'),
]
operations = [
migrations.AlterField(
model_name='pokemonspecies',
name='pokemon_shape',
field=models.ForeignKey(related_name='pokemonspecies', blank=True, to='pokemon_v2.PokemonShape', null=True),
preserve_default=True,
),
]

View file

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('pokemon_v2', '0011_auto_20151116_0230'),
]
operations = [
migrations.AlterField(
model_name='generation',
name='region',
field=models.OneToOneField(related_name='generation', null=True, blank=True, to='pokemon_v2.Region'),
preserve_default=True,
),
]

View file

@ -30,6 +30,22 @@ class HasContestType(models.Model):
abstract = True
class HasContestEffect(models.Model):
contest_effect = models.ForeignKey('ContestEffect', blank=True, null=True, related_name="%(class)s")
class Meta:
abstract = True
class HasSuperContestEffect(models.Model):
super_contest_effect = models.ForeignKey('SuperContestEffect', blank = True, null = True, related_name="%(class)s")
class Meta:
abstract = True
class HasDescription(models.Model):
description = models.CharField(max_length=1000, default='')
@ -321,7 +337,7 @@ class HasMoveLearnMethod(models.Model):
class HasPokemonShape(models.Model):
pokemon_shape = models.ForeignKey('PokemonShape', blank=True, null=True, )
pokemon_shape = models.ForeignKey('PokemonShape', blank=True, null=True, related_name="%(class)s")
class Meta:
abstract = True
@ -449,8 +465,9 @@ class LanguageName(IsName):
# GENERATION MODELS #
#######################
class Generation(HasName, HasRegion):
pass
class Generation(HasName):
region = models.OneToOneField('Region', blank=True, null=True, related_name="%(class)s")
class GenerationName(IsName, HasGeneration):
@ -595,7 +612,7 @@ class ItemFlingEffect(HasName):
pass
class ItemFlingEffectDescription(IsDescription, HasFlingEffect):
class ItemFlingEffectEffectText(HasLanguage, HasEffect, HasFlingEffect):
pass
@ -661,14 +678,12 @@ class ContestEffect(models.Model):
jam = models.IntegerField()
class ContestEffectEffectText(HasLanguage, HasEffect):
contest_effect = models.ForeignKey(ContestEffect, blank=True, null=True, related_name="%(class)s")
class ContestEffectEffectText(HasLanguage, HasEffect, HasContestEffect):
pass
class ContestEffectFlavorText(HasLanguage, HasFlavorText):
contest_effect = models.ForeignKey(ContestEffect, blank=True, null=True, related_name="%(class)s")
class ContestEffectFlavorText(HasLanguage, HasFlavorText, HasContestEffect):
pass
class ContestCombo(models.Model):
@ -694,7 +709,7 @@ class BerryFirmnessName(IsName):
class Berry(HasName, HasItem, HasNature):
berry_firmness = models.ForeignKey(BerryFirmness, blank=True, null=True)
berry_firmness = models.ForeignKey(BerryFirmness, blank=True, null=True, related_name="%(class)s")
natural_gift_power = models.IntegerField()
@ -709,11 +724,30 @@ class Berry(HasName, HasItem, HasNature):
smoothness = models.IntegerField()
class BerryFlavor(HasContestType):
"""
Berry Flavors are a bit of a hack because their relationship
in terms of flavors to contest types is really awkward the
way it was handled in the veekun data set. Berry Flavor here
does not match the csv table. Berry Flavor Map
is a table fabricated just to suit this project.
"""
class BerryFlavor(HasName):
contest_type = models.OneToOneField('ContestType', blank=True, null=True, related_name="%(class)s")
class BerryFlavorName(IsName):
berry_flavor = models.ForeignKey(BerryFlavor, blank=True, null=True, related_name="%(class)s")
class BerryFlavorMap(models.Model):
berry = models.ForeignKey(Berry, blank=True, null=True, related_name="%(class)s")
flavor = models.IntegerField()
berry_flavor = models.ForeignKey(BerryFlavor, blank=True, null=True, related_name="%(class)s")
potency = models.IntegerField()
@ -855,7 +889,7 @@ class EncounterConditionValueMap(models.Model):
# MOVE MODELS #
#################
class Move(HasName, HasGeneration, HasType, HasMoveDamageClass, HasMoveEffect, HasMoveTarget):
class Move(HasName, HasGeneration, HasType, HasMoveDamageClass, HasMoveEffect, HasMoveTarget, HasContestType, HasContestEffect, HasSuperContestEffect):
power = models.IntegerField(blank = True, null = True)
@ -867,11 +901,6 @@ class Move(HasName, HasGeneration, HasType, HasMoveDamageClass, HasMoveEffect, H
move_effect_chance = models.IntegerField(blank = True, null = True)
contest_type_id = models.IntegerField(blank = True, null = True)
contest_effect_id = models.IntegerField(blank = True, null = True)
super_contest_effect_id = models.IntegerField(blank = True, null = True)
class MoveName(HasMove, IsName):
@ -1097,7 +1126,7 @@ class PalParkAreaName(IsName):
class PalPark(HasPokemonSpecies):
pal_park_area = models.ForeignKey(PalParkArea, blank = True, null = True)
pal_park_area = models.ForeignKey(PalParkArea, blank = True, null = True, related_name="%(class)s")
base_score = models.IntegerField(blank = True, null = True)
@ -1114,9 +1143,8 @@ class SuperContestEffect(models.Model):
appeal = models.IntegerField()
class SuperContestEffectFlavorText(IsFlavorText):
super_contest_effect = models.ForeignKey(SuperContestEffect, blank = True, null = True, related_name="%(class)s")
class SuperContestEffectFlavorText(IsFlavorText, HasSuperContestEffect):
pass
class SuperContestCombo(models.Model):
@ -1178,7 +1206,7 @@ class PokemonSpecies(HasName, HasGeneration, HasPokemonColor,
evolution_chain = models.ForeignKey(EvolutionChain, blank=True, null=True)
pokemon_habitat = models.ForeignKey('PokemonHabitat', blank=True, null=True)
pokemon_habitat = models.ForeignKey('PokemonHabitat', blank=True, null=True, related_name="%(class)s")
gender_rate = models.IntegerField()

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -86,6 +86,12 @@ class BerryFirmnessResource(PokeapiCommonViewset):
serializer_class = BerryFirmnessDetailSerializer
list_serializer_class = BerryFirmnessSummarySerializer
class BerryFlavorResource(PokeapiCommonViewset):
queryset = BerryFlavor.objects.all()
serializer_class = BerryFlavorDetailSerializer
list_serializer_class = BerryFlavorSummarySerializer
class CharacteristicResource(PokeapiCommonViewset):
@ -220,7 +226,7 @@ class LocationResource(PokeapiCommonViewset):
list_serializer_class = LocationSummarySerializer
class LocationAreaResource(PokeapiCommonViewset):
class LocationAreaResource(ListOrDetailSerialRelation, viewsets.ReadOnlyModelViewSet):
queryset = LocationArea.objects.all()
serializer_class = LocationAreaDetailSerializer