def test_existing_tournament(self):
     tournament = TournamentFactory()
     data = self.simple_data()
     data['full_name'] = tournament.full_name
     form = CompetitionForm(data=data)
     self.assertTrue(form.is_valid(), form.errors.as_json())
     form.save()
     competition = Competition.objects.get()
     self.assertEqual(competition.tournament, tournament)
 def test_simple_create(self):
     data = self.simple_data()
     form = CompetitionForm(data=data)
     self.assertTrue(form.is_valid(), form.errors.as_json())
     form.save()
     competition = Competition.objects.get()
     self.assert_shoot_fields(competition, data)
     self.assert_session_fields(competition, data)
     self.assert_result_mode_fields(competition, data)
 def test_session_fields_change(self):
     competition = CompetitionFactory.create()
     SessionRoundFactory.create(session__competition=competition, session__start=datetime.datetime(2015, 1, 1, 9), shot_round=self.rnd)
     ResultsModeFactory.create(competition=competition)
     form = CompetitionForm(instance=competition)
     data = form.initial
     data['archers_per_target'] = 2
     form = CompetitionForm(instance=competition, data=data)
     self.assertTrue(form.is_valid(), form.errors.as_json())
     form.save()
     session = competition.session_set.get()
     self.assertEqual(session.archers_per_target, 2)
 def test_simple_update(self):
     competition = CompetitionFactory.create()
     SessionRoundFactory.create(session__competition=competition, shot_round=self.rnd)
     ResultsModeFactory.create(competition=competition)
     data = self.simple_data()
     form = CompetitionForm(instance=competition, data=data)
     self.assertTrue(form.is_valid(), form.errors.as_json())
     form.save()
     competition.refresh_from_db()
     self.assert_shoot_fields(competition, data)
     self.assert_session_fields(competition, data)
     self.assert_result_mode_fields(competition, data)
 def test_session_rounds_change(self):
     competition = CompetitionFactory.create()
     SessionRoundFactory.create(session__competition=competition, session__start=datetime.datetime(2015, 1, 1, 9), shot_round=self.rnd)
     ResultsModeFactory.create(competition=competition)
     new_round = RoundFactory.create()
     form = CompetitionForm(instance=competition)
     data = form.initial
     data['session_1_rounds'] = [new_round.pk]
     form = CompetitionForm(instance=competition, data=data)
     self.assertTrue(form.is_valid(), form.errors.as_json())
     form.save()
     session = competition.session_set.get()
     self.assertSequenceEqual(session.sessionround_set.values_list('shot_round', flat=True), [new_round.pk])
 def test_result_modes_add(self):
     competition = CompetitionFactory.create()
     SessionRoundFactory.create(session__competition=competition, session__start=datetime.datetime(2015, 1, 1, 9), shot_round=self.rnd)
     ResultsModeFactory.create(competition=competition, mode='by-round')
     form = CompetitionForm(instance=competition)
     data = form.initial
     data.update({
         'result_modes': ['by-round', 'by-session'],
     })
     form = CompetitionForm(instance=competition, data=data)
     self.assertTrue(form.is_valid(), form.errors.as_json())
     form.save()
     result_modes = {rm.mode for rm in competition.result_modes.all()}
     self.assertEqual(result_modes, {'by-round', 'by-session'})
 def test_session_delete(self):
     competition = CompetitionFactory.create()
     SessionRoundFactory.create(session__competition=competition, session__start=datetime.datetime(2015, 1, 1, 9), shot_round=self.rnd)
     SessionRoundFactory.create(session__competition=competition, session__start=datetime.datetime(2015, 1, 1, 12), shot_round=self.rnd)
     ResultsModeFactory.create(competition=competition)
     form = CompetitionForm(instance=competition)
     data = form.initial
     data.pop('session_2_time')
     data.pop('session_2_rounds')
     form = CompetitionForm(instance=competition, data=data)
     self.assertTrue(form.is_valid(), form.errors.as_json())
     form.save()
     competition.refresh_from_db()
     self.assert_session_fields(competition, data)
 def multiple_sessions_on_create(self):
     data = self.simple_data()
     data.update({
         'session_2_time': '2015-01-01 12:00:00',
         'session_2_rounds': [self.rnd.pk],
     })
     form = CompetitionForm(data=data)
     self.assertTrue(form.is_valid(), form.errors.as_json())
     form.save()
     competition = Competition.objects.get()
     self.assertEqual(competition.session_set.count(), 2)
     sessions = competition.session_set.all()
     self.assertEqual(sessions[0].start, datetime.datetime(2015, 1, 1, 9))
     self.assertEqual(sessions[1].start, datetime.datetime(2015, 1, 1, 12))
     for session in sessions:
         self.assertEqual(session.archers_per_target, data['archers_per_target'])
         self.assertEqual(session.scoring_system, data['scoring_system'])
         self.assertEqual(session.arrows_entered_per_end, data['arrows_entered_per_end'])
         self.assertSequenceEqual(session.sessionround_set.values_list('shot_round', flat=True), [self.rnd.pk])
 def test_session_add(self):
     competition = CompetitionFactory.create()
     SessionRoundFactory.create(session__competition=competition, session__start=datetime.datetime(2015, 1, 1, 9), shot_round=self.rnd)
     ResultsModeFactory.create(competition=competition)
     form = CompetitionForm(instance=competition)
     data = form.initial
     data.update({
         'session_2_time': '2015-01-01 12:00:00',
         'session_2_rounds': [self.rnd.pk],
     })
     form = CompetitionForm(instance=competition, data=data)
     self.assertTrue(form.is_valid(), form.errors.as_json())
     form.save()
     self.assertEqual(competition.session_set.count(), 2)
     sessions = competition.session_set.all()
     self.assertEqual(sessions[0].start, datetime.datetime(2015, 1, 1, 9))
     self.assertEqual(sessions[1].start, datetime.datetime(2015, 1, 1, 12))
     for session in sessions:
         self.assertEqual(session.archers_per_target, data['archers_per_target'])
         self.assertEqual(session.scoring_system, data['scoring_system'])
         self.assertEqual(session.arrows_entered_per_end, data['arrows_entered_per_end'])
         self.assertSequenceEqual(session.sessionround_set.values_list('shot_round', flat=True), [self.rnd.pk])