From cc93abc75293eb21ff1c754d5a88a02791d1fa43 Mon Sep 17 00:00:00 2001 From: Gesche Gierse Date: Wed, 21 Apr 2021 00:23:20 +0200 Subject: [PATCH] add integration test for create + next part and fix bugs - story part of a story needs to start with current user - turn number needs to be increased --- stories/writingtogether/tests/test_views.py | 62 ++++++++++++++++++++- stories/writingtogether/views.py | 6 +- 2 files changed, 63 insertions(+), 5 deletions(-) diff --git a/stories/writingtogether/tests/test_views.py b/stories/writingtogether/tests/test_views.py index ac80dbd..36cb83e 100644 --- a/stories/writingtogether/tests/test_views.py +++ b/stories/writingtogether/tests/test_views.py @@ -2,7 +2,7 @@ from django.contrib.auth import get_user_model from django.test import TestCase from django.urls import reverse -from writingtogether.models import Story, StoryPart +from writingtogether.models import Story, StoryPart, StoryRound User = get_user_model() @@ -89,4 +89,62 @@ class TestViews(TestCase): # each story has 2 story parts self.assertEqual(story_user1_parts.count(), 2) self.assertEqual(story_user2_parts.count(), 2) - self.assertEqual(story_user3_parts.count(), 2) \ No newline at end of file + self.assertEqual(story_user3_parts.count(), 2) + + def test_integration_create_and_next_part(self): + response = self.client.post( + reverse('writing:create_story_round'), + { + 'name': 'test round', + 'participants': [self.user1.pk, self.user2.pk], + 'number_of_rounds': 2 + } + ) + + story_round = StoryRound.objects.get() + + result = story_round.get_next_story_part(self.user1) + + story_user1 = Story.objects.get(started_by=self.user1.pk) + self.assertEqual(result.part_of, story_user1) + self.assertEqual(result.turn_number, 0) + self.assertEqual(result.user_id, self.user1.pk) + + def test_integration_create_and_next_part__more_rounds(self): + response = self.client.post( + reverse('writing:create_story_round'), + { + 'name': 'test round', + 'participants': [self.user1.pk, self.user2.pk], + 'number_of_rounds': 4 + } + ) + + story_round = StoryRound.objects.get() + result = story_round.get_next_story_part(self.user1) + + story_user1 = Story.objects.get(started_by=self.user1.pk) + self.assertEqual(result.part_of, story_user1) + self.assertEqual(result.turn_number, 0) + self.assertEqual(result.user_id, self.user1.pk) + + def test_integration_create_and_next_part__second_round(self): + response = self.client.post( + reverse('writing:create_story_round'), + { + 'name': 'test round', + 'participants': [self.user1.pk, self.user2.pk], + 'number_of_rounds': 4 + } + ) + + story_round = StoryRound.objects.get() + story_round.current_turn = 1 + story_round.save() + + result = story_round.get_next_story_part(self.user1) + + story_user2 = Story.objects.get(started_by=self.user2.pk) + self.assertEqual(result.part_of, story_user2) + self.assertEqual(result.turn_number, 1) + self.assertEqual(result.user_id, self.user1.pk) diff --git a/stories/writingtogether/views.py b/stories/writingtogether/views.py index 81004c6..ec7454c 100644 --- a/stories/writingtogether/views.py +++ b/stories/writingtogether/views.py @@ -34,7 +34,7 @@ class StoryRoundCreate(CreateView): sorted_participants = sorted([user.pk for user in form.cleaned_data['participants']]) number_of_participants = len(sorted_participants) - for user_id in sorted_participants: + for user_index, user_id in enumerate(sorted_participants): story = Story.objects.create( part_of_round=self.object, started_by_id=user_id @@ -43,10 +43,10 @@ class StoryRoundCreate(CreateView): previous_part=None for i in range(form.cleaned_data['number_of_rounds']): current_part = StoryPart.objects.create( - user_id=sorted_participants[i % number_of_participants], + user_id=sorted_participants[(user_index + i) % number_of_participants], previous_part=previous_part, part_of=story, - turn_number=0 + turn_number=i, ) previous_part = current_part