mirror of
https://github.com/PokeAPI/pokeapi
synced 2024-11-10 06:04:18 +00:00
Merge pull request #88 from SiMylo/master
Fixing Issue #85 (Duplicated Move Data)
This commit is contained in:
commit
12640795ff
2 changed files with 69 additions and 18 deletions
|
@ -2272,8 +2272,10 @@ class PokemonDetailSerializer(serializers.ModelSerializer):
|
|||
method_objects = MoveLearnMethod.objects.all()
|
||||
method_data = MoveLearnMethodSummarySerializer(method_objects, many=True, context=self.context).data
|
||||
|
||||
# Get moves related to this pokemon and pull out unique Move IDs
|
||||
pokemon_moves = PokemonMove.objects.filter(pokemon_id=obj).order_by('level')
|
||||
# Get moves related to this pokemon and pull out unique Move IDs. Note that it's important to order
|
||||
# by the same column we're using to determine if the entries are unique. Otherwise distinct() will
|
||||
# return apparent duplicates.
|
||||
pokemon_moves = PokemonMove.objects.filter(pokemon_id=obj).order_by('move_id')
|
||||
move_ids = pokemon_moves.values('move_id').distinct()
|
||||
move_list = []
|
||||
|
||||
|
|
|
@ -1806,17 +1806,11 @@ class APIData():
|
|||
return pokemon_item
|
||||
|
||||
@classmethod
|
||||
def setup_pokemon_move_data(self, pokemon, level=0, order=1):
|
||||
|
||||
move = self.setup_move_data(
|
||||
name='mv for pkmn')
|
||||
def setup_pokemon_move_data(self, pokemon, move, version_group, level=0, order=1):
|
||||
|
||||
move_learn_method = self.setup_move_learn_method_data(
|
||||
name='mv lrn mthd for pkmn')
|
||||
|
||||
version_group = self.setup_version_group_data(
|
||||
name='ver grp for pkmn')
|
||||
|
||||
pokemon_move = PokemonMove.objects.create (
|
||||
pokemon = pokemon,
|
||||
version_group = version_group,
|
||||
|
@ -3535,8 +3529,21 @@ class APITests(APIData, APITestCase):
|
|||
pokemon_stat = self.setup_pokemon_stat_data(pokemon=pokemon)
|
||||
pokemon_type = self.setup_pokemon_type_data(pokemon=pokemon)
|
||||
pokemon_item = self.setup_pokemon_item_data(pokemon=pokemon)
|
||||
pokemon_move = self.setup_pokemon_move_data(pokemon=pokemon)
|
||||
pokemon_game_index = self.setup_pokemon_game_index_data(pokemon=pokemon, game_index=10)
|
||||
# To test issue #85, we will create one move that has multiple
|
||||
# learn levels in different version groups. Later, we'll
|
||||
# assert that we only got one move record back.
|
||||
pokemon_move = self.setup_move_data(name='mv for pkmn')
|
||||
pokemon_moves = []
|
||||
for move in range(0,4):
|
||||
version_group = self.setup_version_group_data(
|
||||
name='ver grp '+str(move)+' for pkmn')
|
||||
new_move = self.setup_pokemon_move_data(
|
||||
pokemon=pokemon,
|
||||
move=pokemon_move,
|
||||
version_group=version_group,
|
||||
level=move)
|
||||
pokemon_moves.append(new_move)
|
||||
|
||||
encounter_method = self.setup_encounter_method_data(name='encntr mthd for lctn area')
|
||||
location_area1 = self.setup_location_area_data(name='lctn1 area for base pkmn')
|
||||
|
@ -3580,14 +3587,56 @@ class APITests(APIData, APITestCase):
|
|||
self.assertEqual(response.data['held_items'][0]['version_details'][0]['rarity'], pokemon_item.rarity)
|
||||
self.assertEqual(response.data['held_items'][0]['version_details'][0]['version']['name'], pokemon_item.version.name)
|
||||
self.assertEqual(response.data['held_items'][0]['version_details'][0]['version']['url'], '{}{}/version/{}/'.format(test_host, api_v2, pokemon_item.version.pk))
|
||||
# move params
|
||||
self.assertEqual(response.data['moves'][0]['move']['name'], pokemon_move.move.name)
|
||||
self.assertEqual(response.data['moves'][0]['move']['url'], '{}{}/move/{}/'.format(test_host, api_v2, pokemon_move.move.pk))
|
||||
self.assertEqual(response.data['moves'][0]['version_group_details'][0]['level_learned_at'], pokemon_move.level)
|
||||
self.assertEqual(response.data['moves'][0]['version_group_details'][0]['version_group']['name'], pokemon_move.version_group.name)
|
||||
self.assertEqual(response.data['moves'][0]['version_group_details'][0]['version_group']['url'], '{}{}/version-group/{}/'.format(test_host, api_v2, pokemon_move.version_group.pk))
|
||||
self.assertEqual(response.data['moves'][0]['version_group_details'][0]['move_learn_method']['name'], pokemon_move.move_learn_method.name)
|
||||
self.assertEqual(response.data['moves'][0]['version_group_details'][0]['move_learn_method']['url'], '{}{}/move-learn-method/{}/'.format(test_host, api_v2, pokemon_move.move_learn_method.pk))
|
||||
# move params -- Make sure that we only got one move back,
|
||||
# but that we got all of the distinct version group and learn
|
||||
# level values. (See issue #85)
|
||||
# Number of Moves
|
||||
expected = 1
|
||||
actual = len(response.data['moves'])
|
||||
self.assertEqual(expected, actual)
|
||||
# Move name
|
||||
expected = pokemon_moves[0].move.name
|
||||
actual = response.data['moves'][0]['move']['name']
|
||||
self.assertEqual(expected, actual)
|
||||
# Move URL
|
||||
expected = '{}{}/move/{}/'.format(
|
||||
test_host,
|
||||
api_v2,
|
||||
pokemon_moves[0].move.pk)
|
||||
actual = response.data['moves'][0]['move']['url']
|
||||
self.assertEqual(expected, actual)
|
||||
# Numbver of version groups
|
||||
expected = len(pokemon_moves)
|
||||
actual = len(response.data['moves'][0]['version_group_details'])
|
||||
self.assertEqual(expected, actual)
|
||||
for i in range(0,len(pokemon_moves)):
|
||||
version = response.data['moves'][0]['version_group_details'][i]
|
||||
# Learn Level
|
||||
expected = pokemon_moves[i].level
|
||||
actual = version['level_learned_at']
|
||||
self.assertEqual(expected ,actual)
|
||||
# Version Group Name
|
||||
expected = pokemon_moves[i].version_group.name
|
||||
actual = version['version_group']['name']
|
||||
self.assertEqual(expected, actual)
|
||||
# Version Group URL
|
||||
expected = '{}{}/version-group/{}/'.format(
|
||||
test_host,
|
||||
api_v2,
|
||||
pokemon_moves[i].version_group.pk)
|
||||
actual = version['version_group']['url']
|
||||
self.assertEqual(expected, actual)
|
||||
# Learn Method Name
|
||||
expected = pokemon_moves[i].move_learn_method.name
|
||||
actual = version['move_learn_method']['name']
|
||||
self.assertEqual(expected, actual)
|
||||
# Learn Method URL
|
||||
expected = '{}{}/move-learn-method/{}/'.format(
|
||||
test_host,
|
||||
api_v2,
|
||||
pokemon_moves[i].move_learn_method.pk)
|
||||
actual = version['move_learn_method']['url']
|
||||
self.assertEqual(expected, actual)
|
||||
# game indices params
|
||||
self.assertEqual(response.data['game_indices'][0]['game_index'], pokemon_game_index.game_index)
|
||||
self.assertEqual(response.data['game_indices'][0]['version']['name'], pokemon_game_index.version.name)
|
||||
|
|
Loading…
Reference in a new issue