mirror of
https://github.com/veekun/pokedex.git
synced 2024-08-20 18:16:34 +00:00
Fix Roserade's Central Kalos dex number and add tests
Roserade and Roselia were mistakenly sharing dex number 72. Presumably an error from the original X/Y spreadsheet. I guess we never reripped these after 3DS rom dumping became possible. Regardless of how it happened, add a test and some database constraints to ensure that it doesn't happen again. - Add a test for gaps in pokedex numbers - Add uniqueness constraints to pokemon_dex_numbers. A species can only appear once per pokedex, and a number cannot be used more than once per pokedex.
This commit is contained in:
parent
f8e7637e9e
commit
ad429ab128
3 changed files with 26 additions and 2 deletions
|
@ -3084,7 +3084,7 @@ species_id,pokedex_id,pokedex_number
|
||||||
407,5,27
|
407,5,27
|
||||||
407,6,27
|
407,6,27
|
||||||
407,9,135
|
407,9,135
|
||||||
407,12,72
|
407,12,73
|
||||||
407,15,99
|
407,15,99
|
||||||
408,1,408
|
408,1,408
|
||||||
408,5,36
|
408,5,36
|
||||||
|
|
|
|
@ -1771,6 +1771,13 @@ class PokemonDexNumber(TableBase):
|
||||||
pokedex_number = Column(Integer, nullable=False,
|
pokedex_number = Column(Integer, nullable=False,
|
||||||
doc=u"Number of the Pokémon in that the Pokédex")
|
doc=u"Number of the Pokémon in that the Pokédex")
|
||||||
|
|
||||||
|
__table_args__ = (
|
||||||
|
UniqueConstraint(pokedex_id, pokedex_number),
|
||||||
|
UniqueConstraint(pokedex_id, species_id),
|
||||||
|
{},
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class PokemonEggGroup(TableBase):
|
class PokemonEggGroup(TableBase):
|
||||||
u"""Maps an Egg group to a species; each species belongs to one or two egg groups."""
|
u"""Maps an Egg group to a species; each species belongs to one or two egg groups."""
|
||||||
__tablename__ = 'pokemon_egg_groups'
|
__tablename__ = 'pokemon_egg_groups'
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import pytest
|
import pytest
|
||||||
parametrize = pytest.mark.parametrize
|
parametrize = pytest.mark.parametrize
|
||||||
|
|
||||||
|
from collections import Counter
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from sqlalchemy.orm import aliased, joinedload, lazyload
|
from sqlalchemy.orm import aliased, joinedload, lazyload
|
||||||
|
@ -69,7 +70,7 @@ def test_nonzero_autoincrement_ids(session, cls):
|
||||||
pytest.fail("No zero id in %s" % cls.__name__)
|
pytest.fail("No zero id in %s" % cls.__name__)
|
||||||
|
|
||||||
def test_unique_form_order(session):
|
def test_unique_form_order(session):
|
||||||
"""Check that tone PokemonForm.order value isn't used for more species"""
|
"""Check that one PokemonForm.order value isn't used for more species"""
|
||||||
|
|
||||||
species_by_form_order = {}
|
species_by_form_order = {}
|
||||||
|
|
||||||
|
@ -88,6 +89,22 @@ def test_unique_form_order(session):
|
||||||
species_by_form_order[form.order].name,
|
species_by_form_order[form.order].name,
|
||||||
form.species.name))
|
form.species.name))
|
||||||
|
|
||||||
|
def test_pokedex_numbers(session):
|
||||||
|
"""Check that pokedex numbers are contiguous (there are no gaps)"""
|
||||||
|
|
||||||
|
dex_query = session.query(tables.Pokedex).order_by(tables.Pokedex.id)
|
||||||
|
failed = False
|
||||||
|
for dex in dex_query:
|
||||||
|
query = session.query(tables.PokemonDexNumber.pokedex_number).filter_by(pokedex_id=dex.id)
|
||||||
|
numbers = set([x[0] for x in query.all()])
|
||||||
|
for i in range(1, max(numbers)):
|
||||||
|
if i not in numbers:
|
||||||
|
print("number {n} is missing from the {dex.name} pokedex".format(n=i, dex=dex))
|
||||||
|
failed = True
|
||||||
|
|
||||||
|
assert not failed, "missing pokedex numbers"
|
||||||
|
|
||||||
|
|
||||||
def test_default_forms(session):
|
def test_default_forms(session):
|
||||||
"""Check that each pokemon has one default form and each species has one
|
"""Check that each pokemon has one default form and each species has one
|
||||||
default pokemon."""
|
default pokemon."""
|
||||||
|
|
Loading…
Reference in a new issue