def setUp(self): """ eenmalige setup voor alle tests wordt als eerste aangeroepen """ # maak een RK wedstrijd aan self.wedstrijd = CompetitieWedstrijd( beschrijving='test wedstrijd RK', datum_wanneer='2020-01-01', tijd_begin_aanmelden='09:00', tijd_begin_wedstrijd='10:00', tijd_einde_wedstrijd='16:00', vereniging=self.ver) # koppelt wedstrijd aan de vereniging # TODO: locatie koppelen self.wedstrijd.save() self.deelcomp18_rk_wedstrijden_plan = self.testdata.deelcomp18_rk[ self.rayon_nr].plan self.deelcomp18_rk_wedstrijden_plan.wedstrijden.add(self.wedstrijd.pk) self.deelcomp25_rk_wedstrijden_plan = self.testdata.deelcomp25_rk[ self.rayon_nr].plan bad_path = '/tmp/CompRayon/files/' os.makedirs(bad_path, exist_ok=True) self.xlsm_fpath_indiv = bad_path + 'template-excel-rk-indiv.xlsm' self.xlsm_fpath_teams = bad_path + 'template-excel-rk-teams.xlsm' for fpath in (self.xlsm_fpath_indiv, self.xlsm_fpath_teams): try: os.remove(fpath) except FileNotFoundError: pass
def _maak_uitslag(self, sporterboog): # maak 2x wedstrijd + uitslag + score voor deze schutterboog, met geschiedenis uur_00 = datetime.time(hour=0) uur_18 = datetime.time(hour=18) uur_19 = datetime.time(hour=19) uur_22 = datetime.time(hour=22) uitslag18 = CompetitieWedstrijdUitslag(max_score=300, afstand_meter=18) uitslag18.save() uitslag25 = CompetitieWedstrijdUitslag(max_score=250, afstand_meter=25) uitslag25.save() CompetitieWedstrijd(beschrijving='Test wedstrijdje 18m', datum_wanneer=datetime.date(year=2020, month=10, day=10), tijd_begin_aanmelden=uur_18, tijd_begin_wedstrijd=uur_19, tijd_einde_wedstrijd=uur_22, uitslag=uitslag18, vereniging=self.nhbver1).save() CompetitieWedstrijd(beschrijving='Test wedstrijdje 25m', datum_wanneer=datetime.date(year=2020, month=10, day=11), tijd_begin_aanmelden=uur_00, tijd_begin_wedstrijd=uur_00, tijd_einde_wedstrijd=uur_00, uitslag=uitslag25).save() score = Score(sporterboog=sporterboog, afstand_meter=18, waarde=260) score.save() ScoreHist(score=score, oude_waarde=0, nieuwe_waarde=290, door_account=self.account_hwl).save() ScoreHist(score=score, oude_waarde=290, nieuwe_waarde=260, door_account=self.account_hwl).save() uitslag18.scores.add(score) score = Score(sporterboog=sporterboog, afstand_meter=25, waarde=234) score.save() ScoreHist(score=score, oude_waarde=SCORE_WAARDE_VERWIJDERD, nieuwe_waarde=234, door_account=self.account_hwl).save() ScoreHist(score=score, oude_waarde=0, nieuwe_waarde=SCORE_WAARDE_VERWIJDERD, door_account=self.account_hwl).save() ScoreHist(score=score, oude_waarde=0, nieuwe_waarde=1, door_account=self.account_hwl).save() uitslag25.scores.add(score)
def _maak_wedstrijden(self): self.wedstrijden = list() # maak een ronde + plan ronde = maak_deelcompetitie_ronde(self.deelcomp_regio_18) self.ronde = ronde de_tijd = datetime.time(hour=20) # maak binnen het plan drie wedstrijden voor deze vereniging for volgnr in range(3): wedstrijd = CompetitieWedstrijd(vereniging=self.nhbver1, datum_wanneer=datetime.date( year=2020, month=1, day=5 + volgnr * 3), tijd_begin_aanmelden=de_tijd, tijd_begin_wedstrijd=de_tijd, tijd_einde_wedstrijd=de_tijd) if volgnr <= 1: uitslag = CompetitieWedstrijdUitslag(max_score=300, afstand_meter=12) uitslag.save() wedstrijd.uitslag = uitslag wedstrijd.beschrijving = "Test - Dit is een testje %s" % volgnr if volgnr == 1: score = Score(sporterboog=self.sporterboog_100001, waarde=123, afstand_meter=12) score.save() uitslag.scores.add(score) wedstrijd.save() ronde.plan.wedstrijden.add(wedstrijd) wedstrijd.indiv_klassen.set(IndivWedstrijdklasse.objects.all()) self.wedstrijden.append(wedstrijd) # for # maak voor de vereniging een wedstrijd die niets met de competitie te doen heeft wedstrijd = CompetitieWedstrijd(vereniging=self.nhbver1, datum_wanneer=datetime.date(year=2020, month=2, day=1), tijd_begin_aanmelden=de_tijd, tijd_begin_wedstrijd=de_tijd, tijd_einde_wedstrijd=de_tijd) wedstrijd.save()
def post(self, request, *args, **kwargs): """ Deze functie wordt aangeroepen als de knop 'Regel toevoegen' gebruikt wordt in de RK planning, om een nieuwe wedstrijd toe te voegen. """ # alleen de RKO mag de planning uitbreiden if self.rol_nu != Rollen.ROL_RKO: raise PermissionDenied() try: rk_deelcomp_pk = int( kwargs['rk_deelcomp_pk'][:6]) # afkappen voor de veiligheid deelcomp_rk = ( DeelCompetitie.objects.select_related( 'competitie', 'nhb_regio').get( pk=rk_deelcomp_pk, laag=LAAG_RK, # moet voor RK zijn nhb_rayon=self.functie_nu.nhb_rayon) ) # moet juiste rayon zijn except (ValueError, DeelCompetitie.DoesNotExist): raise Http404('Competitie niet gevonden') # maak het plan aan, als deze nog niet aanwezig was if not deelcomp_rk.plan: deelcomp_rk.plan = CompetitieWedstrijdenPlan() deelcomp_rk.plan.save() deelcomp_rk.save() wedstrijd = CompetitieWedstrijd() wedstrijd.datum_wanneer = deelcomp_rk.competitie.rk_eerste_wedstrijd wedstrijd.tijd_begin_aanmelden = datetime.time(hour=10, minute=0, second=0) wedstrijd.tijd_begin_wedstrijd = wedstrijd.tijd_begin_aanmelden wedstrijd.tijd_einde_wedstrijd = wedstrijd.tijd_begin_aanmelden wedstrijd.save() deelcomp_rk.plan.wedstrijden.add(wedstrijd) return HttpResponseRedirect( reverse('CompRayon:rayon-wijzig-wedstrijd', kwargs={'wedstrijd_pk': wedstrijd.pk}))
def test_rcl_bad_opslaan(self): # post zonder inlog self.client.logout() with self.assert_max_queries(20): resp = self.client.post(self.url_uitslag_opslaan) self.assert403(resp) self.e2e_login_and_pass_otp(self.testdata.comp18_account_rcl[101]) self.e2e_wissel_naar_functie(self.testdata.comp18_functie_rcl[101]) # get (bestaat niet) with self.assert_max_queries(20): resp = self.client.get(self.url_uitslag_opslaan) self.assertEqual(resp.status_code, 405) # 405 = method not allowed # post zonder data with self.assert_max_queries(20): resp = self.client.post(self.url_uitslag_opslaan) self.assert404(resp) # 404 = not found / not allowed # post zonder wedstrijd_pk json_data = {'hallo': 'daar'} with self.assert_max_queries(20): resp = self.client.post(self.url_uitslag_opslaan, json.dumps(json_data), content_type='application/json') self.assert404(resp) self.assert404(resp) # 404 = not found / not allowed # post met niet bestaande wedstrijd_pk json_data = {'wedstrijd_pk': 999999} with self.assert_max_queries(20): resp = self.client.post(self.url_uitslag_opslaan, json.dumps(json_data), content_type='application/json') self.assert404(resp) # 404 = not found / not allowed # post met wedstrijd_pk die nog geen uitslag heeft json_data = {'wedstrijd_pk': self.wedstrijd18_pk} with self.assert_max_queries(20): resp = self.client.post(self.url_uitslag_opslaan, json.dumps(json_data), content_type='application/json') self.assert404(resp) # 404 = not found / not allowed # post met wedstrijd_pk waar deze RCL geen toegang toe heeft with self.assert_max_queries(20): self.client.get(self.url_uitslag_invoeren % self.wedstrijd25_pk) json_data = {'wedstrijd_pk': self.wedstrijd25_pk} with self.assert_max_queries(20): resp = self.client.post(self.url_uitslag_opslaan, json.dumps(json_data), content_type='application/json') self.assert403(resp) # wedstrijd die niet bij de competitie hoort with self.assert_max_queries(20): resp = self.client.get(self.url_uitslag_invoeren % self.wedstrijd18_pk) self.assertEqual(resp.status_code, 200) # 200 = OK wedstrijd = CompetitieWedstrijd.objects.get(pk=self.wedstrijd18_pk) wedstrijd2 = CompetitieWedstrijd( beschrijving="niet in een plan", datum_wanneer=wedstrijd.datum_wanneer, tijd_begin_aanmelden=wedstrijd.tijd_begin_aanmelden, tijd_begin_wedstrijd=wedstrijd.tijd_begin_wedstrijd, tijd_einde_wedstrijd=wedstrijd.tijd_einde_wedstrijd, uitslag=wedstrijd.uitslag) wedstrijd2.save() json_data = {'wedstrijd_pk': wedstrijd2.pk} with self.assert_max_queries(20): resp = self.client.post(self.url_uitslag_opslaan, json.dumps(json_data), content_type='application/json') self.assert404(resp) # 404 = not found / not allowed
class TestCompRayonFormulieren(E2EHelpers, TestCase): """ tests voor de CompRayon applicatie, Formulieren functie """ test_after = ('Competitie.test_fase', 'CompRayon.test_teams_rko', 'CompRayon.test_teams_rko') url_forms = '/bondscompetities/rk/download-formulier/%s/' # wedstrijd_pk url_forms_download_indiv = '/bondscompetities/rk/download-formulier-indiv/%s/%s/' # wedstrijd_pk, klasse_pk url_forms_download_teams = '/bondscompetities/rk/download-formulier-teams/%s/%s/' # wedstrijd_pk, klasse_pk testdata = None regio_nr = 113 rayon_nr = 4 ver_nr = 0 @classmethod def setUpTestData(cls): print('CompRayon.test_formulieren: populating testdata start') s1 = timezone.now() cls.testdata = testdata.TestData() cls.testdata.maak_accounts() cls.testdata.maak_clubs_en_sporters() cls.testdata.maak_bondscompetities() cls.ver_nr = cls.testdata.regio_ver_nrs[cls.regio_nr] cls.ver = cls.testdata.vereniging[cls.ver_nr] cls.testdata.maak_inschrijvingen_regiocompetitie(18, cls.ver_nr) cls.testdata.maak_rk_deelnemers(18, cls.ver_nr, cls.regio_nr) cls.testdata.maak_inschrijvingen_rk_teamcompetitie(18, cls.ver_nr) # TODO: competitie doorzetten naar fase K zodat de team.klasse ingevuld is s2 = timezone.now() d = s2 - s1 print( 'CompRayon.test_formulieren: populating testdata took %s seconds' % d.seconds) def setUp(self): """ eenmalige setup voor alle tests wordt als eerste aangeroepen """ # maak een RK wedstrijd aan self.wedstrijd = CompetitieWedstrijd( beschrijving='test wedstrijd RK', datum_wanneer='2020-01-01', tijd_begin_aanmelden='09:00', tijd_begin_wedstrijd='10:00', tijd_einde_wedstrijd='16:00', vereniging=self.ver) # koppelt wedstrijd aan de vereniging # TODO: locatie koppelen self.wedstrijd.save() self.deelcomp18_rk_wedstrijden_plan = self.testdata.deelcomp18_rk[ self.rayon_nr].plan self.deelcomp18_rk_wedstrijden_plan.wedstrijden.add(self.wedstrijd.pk) self.deelcomp25_rk_wedstrijden_plan = self.testdata.deelcomp25_rk[ self.rayon_nr].plan bad_path = '/tmp/CompRayon/files/' os.makedirs(bad_path, exist_ok=True) self.xlsm_fpath_indiv = bad_path + 'template-excel-rk-indiv.xlsm' self.xlsm_fpath_teams = bad_path + 'template-excel-rk-teams.xlsm' for fpath in (self.xlsm_fpath_indiv, self.xlsm_fpath_teams): try: os.remove(fpath) except FileNotFoundError: pass # for @staticmethod def _make_bad_xlsm_file(fpath): with zipfile.ZipFile(fpath, 'w') as xlsm: xlsm.writestr('hello.txt', 'Hello World') def test_get_forms(self): url = self.url_forms % self.wedstrijd.pk # ophalen zonder inlog self.client.logout() with self.assert_max_queries(20): resp = self.client.get(url) self.assert403(resp) self.e2e_login_and_pass_otp(self.testdata.account_hwl[self.ver_nr]) self.e2e_wissel_naar_functie(self.testdata.functie_hwl[self.ver_nr]) # geen klassen with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_template_used(resp, ('comprayon/hwl-download-rk-formulier.dtl', 'plein/site_layout.dtl')) self.assert_html_ok(resp) # alleen indiv klassen self.wedstrijd.indiv_klassen.set([ self.testdata.comp18_klassen_indiv['R'][0].indiv, self.testdata.comp18_klassen_indiv['R'][-1].indiv ]) with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_template_used(resp, ('comprayon/hwl-download-rk-formulier.dtl', 'plein/site_layout.dtl')) self.assert_html_ok(resp) # indiv + teams klassen self.wedstrijd.team_klassen.set([ self.testdata.comp18_klassen_team['R'][0].team, self.testdata.comp18_klassen_team['R'][-1].team ]) with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_template_used(resp, ('comprayon/hwl-download-rk-formulier.dtl', 'plein/site_layout.dtl')) self.assert_html_ok(resp) # alleen teams klassen self.wedstrijd.indiv_klassen.set([]) with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_template_used(resp, ('comprayon/hwl-download-rk-formulier.dtl', 'plein/site_layout.dtl')) self.assert_html_ok(resp) # wedstrijd niet in een plan self.deelcomp18_rk_wedstrijden_plan.wedstrijden.remove( self.wedstrijd.pk) with self.assert_max_queries(20): resp = self.client.get(url) self.assert404(resp, 'Geen wedstrijden plan') # 25m1p plan self.deelcomp25_rk_wedstrijden_plan.wedstrijden.add(self.wedstrijd.pk) with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.deelcomp25_rk_wedstrijden_plan.wedstrijden.remove( self.wedstrijd.pk) # wedstrijd van een niet-RK deelcompetitie plan = self.testdata.deelcomp18_bk.plan plan.wedstrijden.add(self.wedstrijd.pk) with self.assert_max_queries(20): resp = self.client.get(url) self.assert404(resp, 'Verkeerde competitie') # niet bestaande wedstrijd with self.assert_max_queries(20): resp = self.client.get(self.url_forms % 'xxx') self.assert404(resp, 'Wedstrijd niet gevonden') def test_download_indiv(self): klasse = self.testdata.comp18_klassen_indiv['R'][0] url = self.url_forms_download_indiv % (self.wedstrijd.pk, klasse.pk) # ophalen zonder inlog self.client.logout() with self.assert_max_queries(20): resp = self.client.get(url) self.assert403(resp) self.e2e_login_and_pass_otp(self.testdata.account_hwl[self.ver_nr]) self.e2e_wissel_naar_functie(self.testdata.functie_hwl[self.ver_nr]) with self.assert_max_queries(20): resp = self.client.get(url) self.assert200_file(resp) # niet bestaand RK programma with self.settings(INSTALL_PATH='/tmp'): resp = self.client.get(url) self.assert404(resp, 'Kan RK programma niet vinden') # kapot RK programma self._make_bad_xlsm_file(self.xlsm_fpath_indiv) with self.settings(INSTALL_PATH='/tmp'): resp = self.client.get(url) self.assert404(resp, 'Kan RK programma niet openen') # niet bestaande wedstrijd with self.assert_max_queries(20): resp = self.client.get(self.url_forms_download_indiv % (999999, 'xxx')) self.assert404(resp, 'Wedstrijd niet gevonden') # niet bestaande klasse with self.assert_max_queries(20): resp = self.client.get(self.url_forms_download_indiv % (self.wedstrijd.pk, 'xxx')) self.assert404(resp, 'Klasse niet gevonden') # wedstrijd niet in een plan self.deelcomp18_rk_wedstrijden_plan.wedstrijden.remove( self.wedstrijd.pk) with self.assert_max_queries(20): resp = self.client.get(url) self.assert404(resp, 'Geen wedstrijden plan') # wedstrijd van een niet-RK deelcompetitie plan = self.testdata.deelcomp18_bk.plan plan.wedstrijden.add(self.wedstrijd.pk) with self.assert_max_queries(20): resp = self.client.get(url) self.assert404(resp, 'Verkeerde competitie') def test_download_teams(self): klasse = self.testdata.comp18_klassen_team['R'][0] url = self.url_forms_download_teams % (self.wedstrijd.pk, klasse.pk) # ophalen zonder inlog self.client.logout() with self.assert_max_queries(20): resp = self.client.get(url) self.assert403(resp) self.e2e_login_and_pass_otp(self.testdata.account_hwl[self.ver_nr]) self.e2e_wissel_naar_functie(self.testdata.functie_hwl[self.ver_nr]) with self.assert_max_queries(20): resp = self.client.get(url) self.assert200_file(resp) # niet bestaand RK programma with self.settings(INSTALL_PATH='/tmp'): resp = self.client.get(url) self.assert404(resp, 'Kan RK programma niet vinden') # kapot RK programma self._make_bad_xlsm_file(self.xlsm_fpath_teams) with self.settings(INSTALL_PATH='/tmp'): resp = self.client.get(url) self.assert404(resp, 'Kan RK programma niet openen') # niet bestaande wedstrijd with self.assert_max_queries(20): resp = self.client.get(self.url_forms_download_teams % (999999, 'xxx')) self.assert404(resp, 'Wedstrijd niet gevonden') # niet bestaande klasse with self.assert_max_queries(20): resp = self.client.get(self.url_forms_download_teams % (self.wedstrijd.pk, 'xxx')) self.assert404(resp, 'Klasse niet gevonden') # wedstrijd niet in een plan self.deelcomp18_rk_wedstrijden_plan.wedstrijden.remove( self.wedstrijd.pk) with self.assert_max_queries(20): resp = self.client.get(url) self.assert404(resp, 'Geen wedstrijden plan') # wedstrijd van een niet-RK deelcompetitie plan = self.testdata.deelcomp18_bk.plan plan.wedstrijden.add(self.wedstrijd.pk) with self.assert_max_queries(20): resp = self.client.get(url) self.assert404(resp, 'Verkeerde competitie')