Skip to content

Commit

Permalink
fix: Update game's avatars with worksheet's code on change (#1454)
Browse files Browse the repository at this point in the history
* fix: Update game's avatars with worksheet's code on change
  • Loading branch information
faucomte97 committed Jan 28, 2021
1 parent 38f11aa commit 110636f
Show file tree
Hide file tree
Showing 3 changed files with 113 additions and 73 deletions.
136 changes: 68 additions & 68 deletions Pipfile.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 10 additions & 1 deletion aimmo/serializers.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import json
from rest_framework import serializers

from aimmo.models import Game
from aimmo.models import Game, Avatar, Worksheet


class GameSerializer(serializers.Serializer):
Expand Down Expand Up @@ -39,5 +39,14 @@ def update(self, instance, validated_data):
instance.worksheet_id = validated_data.get(
"worksheet_id", instance.worksheet_id
)

if "worksheet_id" in validated_data:
avatars = Avatar.objects.filter(game=instance)
worksheet = Worksheet.objects.get(id=instance.worksheet_id)

for avatar in avatars:
avatar.code = worksheet.starter_code
avatar.save()

instance.save()
return instance
39 changes: 35 additions & 4 deletions aimmo/tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,9 @@
from django.contrib.auth.models import User
from django.test import Client, TestCase
from django.urls import reverse
from rest_framework import status

from portal.forms.add_game import AddGameForm
from portal.game_creator import create_game
from rest_framework import status

from aimmo import app_settings, models
from aimmo.models import Game, Worksheet
Expand Down Expand Up @@ -56,10 +55,10 @@ def setUpTestData(cls):
cls.klass2, _, _ = create_class_directly(cls.user.email)
cls.klass2.save()
cls.worksheet: Worksheet = Worksheet.objects.create(
name="test worksheet", starter_code="test code"
name="test worksheet", starter_code="test code 1"
)
cls.worksheet2: Worksheet = Worksheet.objects.create(
name="test worksheet 2", starter_code="test code"
name="test worksheet 2", starter_code="test code 2"
)
cls.game = models.Game(
id=1, name="test", game_class=cls.klass, worksheet=cls.worksheet
Expand Down Expand Up @@ -442,3 +441,35 @@ def test_adding_a_game_creates_an_avatar(self):
game = models.Game.objects.get(pk=2)
avatar = game.avatar_set.get(owner=client.session["_auth_user_id"])
assert avatar is not None

def test_update_game_worksheet_updates_avatar_codes(self):
# Set up the first avatar
first_user = self.user
models.Avatar(owner=first_user, code=self.CODE, game=self.game).save()
client1 = self.login()

# Set up the second avatar
_, _, second_user = create_school_student_directly(self.klass.access_code)
models.Avatar(owner=second_user.new_user, code=self.CODE, game=self.game).save()

client2 = Client()
client2.login(username="test2", password="password2")

data = json.dumps({"worksheet_id": self.worksheet2.id})

response = client1.put(
reverse("game-detail", kwargs={"pk": self.game.id}),
data,
content_type="application/json",
)

assert response.status_code == 200

game = models.Game.objects.get(id=1)
avatar1 = models.Avatar.objects.get(id=1)
avatar2 = models.Avatar.objects.get(id=2)

assert game.worksheet == self.worksheet2

assert avatar1.code == self.worksheet2.starter_code
assert avatar2.code == self.worksheet2.starter_code

0 comments on commit 110636f

Please sign in to comment.