def test_verwijder_score_fail(self): # maak 100024 aan f1 = io.StringIO() f2 = io.StringIO() with self.assert_max_queries(61): management.call_command('import_nhb_crm', './NhbStructuur/management/testfiles/testfile_14.json', '--sim_now=2020-07-01', stderr=f1, stdout=f2) # maak een schutterboog aan boog_r = BoogType.objects.get(afkorting='R') sporter = Sporter.objects.get(lid_nr="100024") sporterboog = SporterBoog(sporter=sporter, boogtype=boog_r) sporterboog.save() score_indiv_ag_opslaan(sporterboog, 18, 5.678, None, "") # probeer 100024 te verwijderen f1 = io.StringIO() f2 = io.StringIO() with self.assert_max_queries(40): management.call_command('import_nhb_crm', './NhbStructuur/management/testfiles/testfile_16.json', '--sim_now=2020-07-01', stderr=f1, stdout=f2) # print("f1: %s" % f1.getvalue()) # print("f2: %s" % f2.getvalue()) self.assertTrue("[INFO] Lid 100024 Voornaam van der Achternaam [V, 2000] wordt nu verwijderd" in f2.getvalue()) self.assertTrue('[ERROR] Onverwachte fout bij het verwijderen van een lid' in f1.getvalue())
def setUp(self): """ initialisatie van de test case """ self.account_admin = self.e2e_create_account_admin() self.account_normaal = self.e2e_create_account('normaal', '*****@*****.**', 'Normaal') self.account_hwl = self.e2e_create_account('hwl', '*****@*****.**', 'Secretaris') self.e2e_account_accepteert_vhpg(self.account_hwl) # maak een test vereniging ver = NhbVereniging() ver.naam = "Grote Club" ver.ver_nr = "1000" ver.regio = NhbRegio.objects.get(regio_nr=111) ver.save() self.nhbver1 = ver self.functie_hwl = maak_functie('HWL 1000', 'HWL') self.functie_hwl.nhb_ver = ver self.functie_hwl.save() self.functie_hwl.accounts.add(self.account_hwl) # maak een test lid aan sporter = Sporter() sporter.lid_nr = 100001 sporter.geslacht = "M" sporter.voornaam = "Ramon" sporter.achternaam = "de Tester" sporter.geboorte_datum = datetime.date(year=1972, month=3, day=4) sporter.sinds_datum = datetime.date(year=2010, month=11, day=12) sporter.bij_vereniging = ver sporter.account = self.account_normaal sporter.email = sporter.account.email sporter.save() self.sporter_100001 = sporter self.boog_r = BoogType.objects.get(afkorting='R') self.boog_c = BoogType.objects.get(afkorting='C') # maak 2 schutterboog aan sporterboog = SporterBoog(sporter=sporter, boogtype=self.boog_c, voor_wedstrijd=True) sporterboog.save() self.sporterboog_100001c = sporterboog sporterboog = SporterBoog(sporter=sporter, boogtype=self.boog_r, voor_wedstrijd=True) sporterboog.save() self.sporterboog_100001r = sporterboog # maak een AG aan score_indiv_ag_opslaan(sporterboog, 18, 9.123, None, 'test melding') score_indiv_ag_opslaan(sporterboog, 25, 9.251, self.account_hwl, 'test melding') self._maak_uitslag(sporterboog)
def _regioschutters_inschrijven(self): boog_c = BoogType.objects.get(afkorting='C') klasse_r = CompetitieKlasse.objects.filter(indiv__boogtype__afkorting='R', indiv__is_onbekend=False, indiv__niet_voor_rk_bk=False)[0] klasse_c = CompetitieKlasse.objects.filter(indiv__boogtype__afkorting='C', indiv__is_onbekend=False, indiv__niet_voor_rk_bk=False)[0] # recurve, lid 1 RegioCompetitieSchutterBoog(deelcompetitie=self.deelcomp_regio_101, sporterboog=self.sporterboog, bij_vereniging=self.sporterboog.sporter.bij_vereniging, klasse=klasse_r, aantal_scores=7).save() # compound, lid 1 sporterboog = SporterBoog(sporter=self.lid_sporter_1, boogtype=boog_c, voor_wedstrijd=True) sporterboog.save() RegioCompetitieSchutterBoog(deelcompetitie=self.deelcomp_regio_101, sporterboog=sporterboog, bij_vereniging=sporterboog.sporter.bij_vereniging, klasse=klasse_c, aantal_scores=6).save() # compound, lid2 sporterboog = SporterBoog(sporter=self.lid_sporter_2, boogtype=boog_c, voor_wedstrijd=True) sporterboog.save() RegioCompetitieSchutterBoog(deelcompetitie=self.deelcomp_regio_101, sporterboog=sporterboog, bij_vereniging=sporterboog.sporter.bij_vereniging, klasse=klasse_c, aantal_scores=6).save()
class TestScoreOpslaan(E2EHelpers, TestCase): """ tests voor de Score applicatie, functie Opslaan """ def setUp(self): """ initialisatie van de test case """ self.account_normaal = self.e2e_create_account('normaal', '*****@*****.**', 'Normaal') # maak een test lid aan sporter = Sporter() sporter.lid_nr = 100001 sporter.geslacht = "M" sporter.voornaam = "Ramon" sporter.achternaam = "de Tester" sporter.email = "*****@*****.**" sporter.geboorte_datum = datetime.date(year=1972, month=3, day=4) sporter.sinds_datum = datetime.date(year=2010, month=11, day=12) sporter.save() # maak een sporterboog aan self.sporterboog = SporterBoog( boogtype=BoogType.objects.get(afkorting='R'), sporter=sporter) self.sporterboog.save() def test_opslaan(self): self.assertEqual(Score.objects.count(), 0) self.assertEqual(ScoreHist.objects.count(), 0) afstand = 18 gemiddelde = 9.876 waarde = int(gemiddelde * 1000) account = self.account_normaal notitie = "Dit is een notities" # de eerste keer wordt het Score object aangemaakt res = score_indiv_ag_opslaan(self.sporterboog, afstand, gemiddelde, account, notitie) self.assertEqual(res, True) self.assertEqual(Score.objects.count(), 1) score = Score.objects.all()[0] self.assertEqual(score.afstand_meter, afstand) self.assertEqual(score.waarde, waarde) self.assertEqual(score.sporterboog, self.sporterboog) self.assertTrue(str(score) != "") score.type = SCORE_TYPE_GEEN self.assertTrue("(geen score)" in str(score)) score.type = SCORE_TYPE_INDIV_AG self.assertTrue("(indiv AG)" in str(score)) score.type = SCORE_TYPE_TEAM_AG self.assertTrue("(team AG)" in str(score)) score.type = SCORE_TYPE_SCORE self.assertTrue(str(score) != "") self.assertEqual(ScoreHist.objects.count(), 1) scorehist = ScoreHist.objects.all()[0] self.assertEqual(scorehist.oude_waarde, 0) self.assertEqual(scorehist.nieuwe_waarde, waarde) self.assertEqual(scorehist.door_account, account) self.assertEqual(scorehist.notitie, notitie) self.assertTrue(str(scorehist) != "") # dezelfde score nog een keer opslaan resulteert in een reject res = score_indiv_ag_opslaan(self.sporterboog, afstand, gemiddelde, account, notitie) self.assertEqual(res, False) # tweede keer wordt er alleen een ScoreHist object aangemaakt gemiddelde2 = 8.765 waarde2 = int(gemiddelde2 * 1000) notitie2 = "Dit is de tweede notitie" res = score_indiv_ag_opslaan(self.sporterboog, afstand, gemiddelde2, account, notitie2) self.assertEqual(res, True) self.assertEqual(Score.objects.count(), 1) score = Score.objects.all()[0] self.assertEqual(score.afstand_meter, afstand) self.assertEqual(score.waarde, waarde2) self.assertEqual(score.sporterboog, self.sporterboog) self.assertEqual(ScoreHist.objects.count(), 2) scorehist = ScoreHist.objects.exclude(pk=scorehist.pk).all()[0] self.assertEqual(scorehist.oude_waarde, waarde) self.assertEqual(scorehist.nieuwe_waarde, waarde2) self.assertEqual(scorehist.door_account, account) self.assertEqual(scorehist.notitie, notitie2) gemiddelde = 8.345 res = score_teams_ag_opslaan(self.sporterboog, afstand, gemiddelde, account, notitie) self.assertEqual(res, True) self.assertEqual(ScoreHist.objects.count(), 3) scorehist = ScoreHist.objects.get(score__waarde=8345) score = scorehist.score self.assertTrue('(team AG)' in str(score)) score.sporterboog = None self.assertTrue(str(score) != '') def test_wanneer(self): res = wanneer_ag_vastgesteld(18) self.assertIsNone(res) score_indiv_ag_opslaan(self.sporterboog, 18, 9.123, None, "test") res = wanneer_ag_vastgesteld(18) self.assertIsNotNone(res)
def setUp(self): """ eenmalige setup voor alle tests wordt als eerste aangeroepen """ # deze test is afhankelijk van de standaard regio's self.regio_101 = regio = NhbRegio.objects.get(regio_nr=101) # maak een test vereniging ver = NhbVereniging() ver.naam = "Grote Club" ver.ver_nr = 1000 ver.regio = regio # secretaris kan nog niet ingevuld worden ver.save() # maak een volwassen test lid aan (komt in groep met klasse onbekend) sporter = Sporter() sporter.lid_nr = 100001 sporter.geslacht = "M" sporter.voornaam = "Ramon" sporter.achternaam = "de Tester" sporter.email = "*****@*****.**" sporter.geboorte_datum = datetime.date(year=1972, month=3, day=4) sporter.sinds_datum = datetime.date(year=2010, month=11, day=12) sporter.bij_vereniging = ver self.account_lid = self.e2e_create_account(sporter.lid_nr, sporter.email, sporter.voornaam) sporter.account = self.account_lid sporter.save() self.sporter_100001 = sporter self.functie_hwl = maak_functie('HWL test', 'HWL') self.functie_hwl.nhb_ver = ver self.functie_hwl.save() self.functie_hwl.accounts.add(self.account_lid) # maak een jeugdlid aan (komt in BB jeugd zonder klasse onbekend) sporter = Sporter() sporter.lid_nr = 100002 sporter.geslacht = "M" sporter.voornaam = "Ramon" sporter.achternaam = "het Testertje" sporter.email = "*****@*****.**" sporter.geboorte_datum = datetime.date(year=2008, month=3, day=4) sporter.sinds_datum = datetime.date(year=2015, month=11, day=12) sporter.bij_vereniging = ver self.account_jeugdlid = self.e2e_create_account( sporter.lid_nr, sporter.email, sporter.voornaam) sporter.account = self.account_jeugdlid sporter.save() self.sporter_100002 = sporter boog_bb = BoogType.objects.get(afkorting='BB') boog_ib = BoogType.objects.get(afkorting='IB') # maak een sporterboog aan voor het jeugdlid (nodig om aan te melden) sporterboog = SporterBoog(sporter=self.sporter_100002, boogtype=boog_bb, voor_wedstrijd=False) sporterboog.save() self.sporterboog_100002 = sporterboog sporter = Sporter() sporter.lid_nr = 100003 sporter.geslacht = "V" sporter.voornaam = "Zus" sporter.achternaam = "de Testerin" sporter.email = "*****@*****.**" sporter.geboorte_datum = datetime.date(year=2008, month=3, day=4) sporter.sinds_datum = datetime.date(year=2015, month=11, day=12) sporter.bij_vereniging = ver sporter.save() self.sporter_100003 = sporter # maak een sporterboog aan voor het lid (nodig om aan te melden) sporterboog = SporterBoog(sporter=self.sporter_100003, boogtype=boog_bb, voor_wedstrijd=True) sporterboog.save() self.sporterboog_100003 = sporterboog # maak een sporterboog aan voor het lid (nodig om aan te melden) sporterboog = SporterBoog(sporter=self.sporter_100001, boogtype=boog_ib, voor_wedstrijd=True) sporterboog.save() # (strategisch gekozen) historische data om klassengrenzen uit te bepalen histcomp = HistCompetitie() histcomp.seizoen = '2018/2019' histcomp.comp_type = '18' histcomp.klasse = 'Testcurve1' # TODO: kan de klasse een spatie bevatten? histcomp.is_team = False histcomp.save() self.histcomp = histcomp # een ouder seizoen dat niet gebruikt moet worden histcomp2 = HistCompetitie() histcomp2.seizoen = '2017/2018' histcomp2.comp_type = '18' histcomp2.klasse = 'Testcurve2' histcomp2.is_team = False histcomp2.save() # record voor het volwassen lid rec = HistCompetitieIndividueel() rec.histcompetitie = histcomp rec.rank = 1 rec.schutter_nr = self.sporter_100001.lid_nr rec.schutter_naam = self.sporter_100001.volledige_naam() rec.vereniging_nr = ver.ver_nr rec.vereniging_naam = ver.naam rec.boogtype = 'R' rec.score1 = 10 rec.score2 = 20 rec.score3 = 30 rec.score4 = 40 rec.score5 = 50 rec.score6 = 60 rec.score7 = 70 rec.totaal = 80 rec.gemiddelde = 5.321 rec.save() # nog een record voor het volwassen lid rec = HistCompetitieIndividueel() rec.histcompetitie = histcomp2 rec.rank = 1 rec.schutter_nr = self.sporter_100001.lid_nr rec.schutter_naam = self.sporter_100001.volledige_naam() rec.vereniging_nr = ver.ver_nr rec.vereniging_naam = ver.naam rec.boogtype = 'R' rec.score1 = 11 rec.score2 = 21 rec.score3 = 31 rec.score4 = 41 rec.score5 = 51 rec.score6 = 61 rec.score7 = 71 rec.totaal = 81 rec.gemiddelde = 6.12 rec.save() # nog een record voor het volwassen lid rec = HistCompetitieIndividueel() rec.histcompetitie = histcomp rec.rank = 100 rec.schutter_nr = self.sporter_100001.lid_nr rec.schutter_naam = self.sporter_100001.volledige_naam() rec.vereniging_nr = ver.ver_nr rec.vereniging_naam = ver.naam rec.boogtype = 'IB' rec.score1 = 11 rec.score2 = 21 rec.score3 = 31 rec.score4 = 41 rec.score5 = 51 rec.score6 = 61 rec.score7 = 71 rec.totaal = 81 rec.gemiddelde = 6.12 rec.save() # maak een record aan zonder eindgemiddelde rec = HistCompetitieIndividueel() rec.histcompetitie = histcomp rec.rank = 1 rec.schutter_nr = self.sporter_100002.lid_nr rec.schutter_naam = self.sporter_100002.volledige_naam() rec.vereniging_nr = ver.ver_nr rec.vereniging_naam = ver.naam rec.boogtype = 'C' rec.score1 = 0 rec.score2 = 0 rec.score3 = 0 rec.score4 = 0 rec.score5 = 0 rec.score6 = 0 rec.score7 = 0 rec.totaal = 0 rec.gemiddelde = 0.0 rec.save() # record voor het jeugdlid rec = HistCompetitieIndividueel() rec.histcompetitie = histcomp rec.rank = 1 rec.schutter_nr = self.sporter_100002.lid_nr rec.schutter_naam = self.sporter_100002.volledige_naam() rec.vereniging_nr = ver.ver_nr rec.vereniging_naam = ver.naam rec.boogtype = 'BB' rec.score1 = 10 rec.score2 = 20 rec.score3 = 30 rec.score4 = 40 rec.score5 = 50 rec.score6 = 60 rec.score7 = 70 rec.totaal = 80 rec.gemiddelde = 5.321 rec.save() # maak een record aan voor iemand die geen lid meer is rec = HistCompetitieIndividueel() rec.histcompetitie = histcomp rec.rank = 1 rec.schutter_nr = 991111 rec.schutter_naam = "Die is weg" rec.vereniging_nr = ver.ver_nr rec.vereniging_naam = ver.naam rec.boogtype = 'BB' rec.score1 = 10 rec.score2 = 20 rec.score3 = 30 rec.score4 = 40 rec.score5 = 50 rec.score6 = 60 rec.score7 = 70 rec.totaal = 80 rec.gemiddelde = 5.321 rec.save()
class TestCompetitiePlanningBond(E2EHelpers, TestCase): """ tests voor de Competitie applicatie, planning voor het BK """ test_after = ('Competitie.test_fase', 'Competitie.test_beheerders', 'Competitie.test_competitie') url_doorzetten_rk = '/bondscompetities/%s/doorzetten/rk/' # comp_pk url_doorzetten_bk = '/bondscompetities/%s/doorzetten/bk/' # comp_pk testdata = None @classmethod def setUpTestData(cls): cls.testdata = testdata.TestData() cls.testdata.maak_accounts() def _prep_beheerder_lid(self, voornaam): lid_nr = self._next_lid_nr self._next_lid_nr += 1 sporter = Sporter( lid_nr=lid_nr, geslacht="M", voornaam=voornaam, achternaam="Tester", email=voornaam.lower() + "@nhb.test", geboorte_datum=datetime.date(year=1972, month=3, day=4), sinds_datum=datetime.date(year=2010, month=11, day=12), bij_vereniging=self.nhbver_101) sporter.save() return self.e2e_create_account(lid_nr, sporter.email, sporter.voornaam, accepteer_vhpg=True) def setUp(self): """ eenmalige setup voor alle tests wordt als eerste aangeroepen """ self._next_lid_nr = 100001 self.rayon_1 = NhbRayon.objects.get(rayon_nr=1) self.rayon_2 = NhbRayon.objects.get(rayon_nr=2) self.regio_101 = NhbRegio.objects.get(regio_nr=101) self.regio_105 = NhbRegio.objects.get(regio_nr=105) self.regio_112 = NhbRegio.objects.get(regio_nr=112) # maak een test vereniging ver = NhbVereniging() ver.naam = "Zuidelijke Club" ver.ver_nr = "1111" ver.regio = self.regio_112 # secretaris kan nog niet ingevuld worden ver.save() self.nhbver_112 = ver # maak een test vereniging ver = NhbVereniging() ver.naam = "Grote Club" ver.ver_nr = "1000" ver.regio = self.regio_101 # secretaris kan nog niet ingevuld worden ver.save() self.nhbver_101 = ver loc = WedstrijdLocatie(banen_18m=1, banen_25m=1, adres='De Spanning 1, Houtdorp') loc.save() loc.verenigingen.add(ver) self.loc = loc # maak HWL functie aan voor deze vereniging self.functie_hwl = maak_functie("HWL Vereniging %s" % ver.ver_nr, "HWL") self.functie_hwl.nhb_ver = ver self.functie_hwl.save() # maak test leden aan die we kunnen koppelen aan beheerders functies self.account_bko_18 = self._prep_beheerder_lid('BKO') self.account_rko1_18 = self._prep_beheerder_lid('RKO1') self.account_rko2_18 = self._prep_beheerder_lid('RKO2') self.account_rcl101_18 = self._prep_beheerder_lid('RCL101') self.account_rcl101_25 = self._prep_beheerder_lid('RCL101-25') self.account_rcl112_18 = self._prep_beheerder_lid('RCL112') self.account_schutter = self._prep_beheerder_lid('Schutter') self.lid_sporter_1 = Sporter.objects.get(lid_nr=self.account_schutter.username) self.account_schutter2 = self._prep_beheerder_lid('Schutter2') self.lid_sporter_2 = Sporter.objects.get(lid_nr=self.account_schutter2.username) self.boog_r = BoogType.objects.get(afkorting='R') self.sporterboog = SporterBoog(sporter=self.lid_sporter_1, boogtype=self.boog_r, voor_wedstrijd=True) self.sporterboog.save() # creëer een competitie met deelcompetities competities_aanmaken(jaar=2019) self.comp_18 = Competitie.objects.get(afstand='18') self.comp_25 = Competitie.objects.get(afstand='25') # klassengrenzen vaststellen om de competitie voorbij fase A te krijgen self.e2e_login_and_pass_otp(self.testdata.account_bb) self.e2e_wisselnaarrol_bb() self.url_klassengrenzen_vaststellen_18 = '/bondscompetities/%s/klassengrenzen/vaststellen/' % self.comp_18.pk resp = self.client.post(self.url_klassengrenzen_vaststellen_18) self.assert_is_redirect_not_plein(resp) # check for success self.deelcomp_bond_18 = DeelCompetitie.objects.filter(competitie=self.comp_18, laag=LAAG_BK)[0] self.deelcomp_rayon1_18 = DeelCompetitie.objects.filter(competitie=self.comp_18, laag=LAAG_RK, nhb_rayon=self.rayon_1)[0] self.deelcomp_regio_101 = DeelCompetitie.objects.filter(competitie=self.comp_18, laag=LAAG_REGIO, nhb_regio=self.regio_101)[0] self.functie_bko_18 = self.deelcomp_bond_18.functie self.functie_bko_18.accounts.add(self.account_bko_18) self.functie_rko1_18 = self.deelcomp_rayon1_18.functie self.functie_rko1_18.accounts.add(self.account_rko1_18) # maak nog een test vereniging, zonder HWL functie ver = NhbVereniging() ver.naam = "Kleine Club" ver.ver_nr = "1100" ver.regio = self.regio_101 # secretaris kan nog niet ingevuld worden ver.save() def _regioschutters_inschrijven(self): boog_c = BoogType.objects.get(afkorting='C') klasse_r = CompetitieKlasse.objects.filter(indiv__boogtype__afkorting='R', indiv__is_onbekend=False, indiv__niet_voor_rk_bk=False)[0] klasse_c = CompetitieKlasse.objects.filter(indiv__boogtype__afkorting='C', indiv__is_onbekend=False, indiv__niet_voor_rk_bk=False)[0] # recurve, lid 1 RegioCompetitieSchutterBoog(deelcompetitie=self.deelcomp_regio_101, sporterboog=self.sporterboog, bij_vereniging=self.sporterboog.sporter.bij_vereniging, klasse=klasse_r, aantal_scores=7).save() # compound, lid 1 sporterboog = SporterBoog(sporter=self.lid_sporter_1, boogtype=boog_c, voor_wedstrijd=True) sporterboog.save() RegioCompetitieSchutterBoog(deelcompetitie=self.deelcomp_regio_101, sporterboog=sporterboog, bij_vereniging=sporterboog.sporter.bij_vereniging, klasse=klasse_c, aantal_scores=6).save() # compound, lid2 sporterboog = SporterBoog(sporter=self.lid_sporter_2, boogtype=boog_c, voor_wedstrijd=True) sporterboog.save() RegioCompetitieSchutterBoog(deelcompetitie=self.deelcomp_regio_101, sporterboog=sporterboog, bij_vereniging=sporterboog.sporter.bij_vereniging, klasse=klasse_c, aantal_scores=6).save() def test_doorzetten_rk(self): self.e2e_login_and_pass_otp(self.testdata.account_bb) self.e2e_wissel_naar_functie(self.functie_bko_18) url = self.url_doorzetten_rk % self.comp_18.pk # fase F: pagina zonder knop 'doorzetten' zet_competitie_fase(self.comp_18, 'F') self.comp_18.bepaal_fase() self.assertEqual(self.comp_18.fase, 'F') with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used(resp, ('competitie/bko-doorzetten-naar-rk.dtl', 'plein/site_layout.dtl')) # sluit alle deelcompetitie regio for obj in DeelCompetitie.objects.filter(competitie=self.comp_18, is_afgesloten=False, laag=LAAG_REGIO): obj.is_afgesloten = True obj.save() # for # fase G: pagina met knop 'doorzetten' zet_competitie_fase(self.comp_18, 'G') self.comp_18.bepaal_fase() self.assertEqual(self.comp_18.fase, 'G') with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used(resp, ('competitie/bko-doorzetten-naar-rk.dtl', 'plein/site_layout.dtl')) # nu echt doorzetten self._regioschutters_inschrijven() self.assertEqual(3, RegioCompetitieSchutterBoog.objects.count()) self.assertEqual(0, KampioenschapSchutterBoog.objects.count()) with self.assert_max_queries(20): resp = self.client.post(url) self.assert_is_redirect(resp, '/bondscompetities/') # redirect = Success # laat de mutatie verwerken management.call_command('regiocomp_mutaties', '1', '--quick', stderr=io.StringIO(), stdout=io.StringIO()) self.assertEqual(3, KampioenschapSchutterBoog.objects.count()) def test_doorzetten_rk_geen_lid(self): # variant van doorzetten_rk met een lid dat niet meer bij een vereniging aangesloten is self.e2e_login_and_pass_otp(self.testdata.account_bb) self.e2e_wissel_naar_functie(self.functie_bko_18) # fase F: pagina zonder knop 'doorzetten' zet_competitie_fase(self.comp_18, 'F') # sluit alle deelcompetitie regio for obj in DeelCompetitie.objects.filter(competitie=self.comp_18, is_afgesloten=False, laag=LAAG_REGIO): obj.is_afgesloten = True obj.save() # for # fase G: pagina met knop 'doorzetten' zet_competitie_fase(self.comp_18, 'G') # nu echt doorzetten self._regioschutters_inschrijven() self.assertEqual(3, RegioCompetitieSchutterBoog.objects.count()) self.assertEqual(0, KampioenschapSchutterBoog.objects.count()) self.lid_sporter_2.bij_vereniging = None self.lid_sporter_2.save() url = self.url_doorzetten_rk % self.comp_18.pk with self.assert_max_queries(20): resp = self.client.post(url) self.assert_is_redirect(resp, '/bondscompetities/') # redirect = Success # laat de mutatie verwerken management.call_command('regiocomp_mutaties', '1', '--quick', stderr=io.StringIO(), stdout=io.StringIO()) # het lid zonder vereniging komt NIET in de RK selectie self.assertEqual(2, KampioenschapSchutterBoog.objects.count()) # verdere tests in test_planning_rayon.test_geen_vereniging check def test_doorzetten_bk(self): self.e2e_login_and_pass_otp(self.testdata.account_bb) self.e2e_wissel_naar_functie(self.functie_bko_18) url = self.url_doorzetten_bk % self.comp_18.pk # fase M: pagina zonder knop 'doorzetten' zet_competitie_fase(self.comp_18, 'M') self.comp_18.bepaal_fase() self.assertEqual(self.comp_18.fase, 'M') with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used(resp, ('competitie/bko-doorzetten-naar-bk.dtl', 'plein/site_layout.dtl')) # alle rayonkampioenschappen afsluiten for obj in DeelCompetitie.objects.filter(competitie=self.comp_18, is_afgesloten=False, laag=LAAG_RK): obj.is_afgesloten = True obj.save() # for # fase N: pagina met knop 'doorzetten' zet_competitie_fase(self.comp_18, 'N') self.comp_18.bepaal_fase() self.assertEqual(self.comp_18.fase, 'N') with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used(resp, ('competitie/bko-doorzetten-naar-bk.dtl', 'plein/site_layout.dtl')) # nu echt doorzetten with self.assert_max_queries(20): resp = self.client.post(url) self.assert_is_redirect(resp, '/bondscompetities/') # redirect = Success self.assertTrue(str(self.deelcomp_bond_18) != '') deelcomp_bk_18 = DeelCompetitie.objects.get(competitie=self.comp_18, laag=LAAG_BK) objs = KampioenschapSchutterBoog.objects.filter(deelcompetitie=deelcomp_bk_18) self.assertEqual(objs.count(), 0) # worden nog niet gemaakt, dus 0 team_klasse = CompetitieKlasse.objects.filter(indiv=None)[0] deeln_bk = KampioenschapSchutterBoog(deelcompetitie=deelcomp_bk_18, sporterboog=self.sporterboog, klasse=team_klasse) self.assertTrue(str(deeln_bk) != '') def test_doorzetten_bad(self): # moet BKO zijn self.e2e_login_and_pass_otp(self.testdata.account_bb) self.e2e_wisselnaarrol_bb() with self.assert_max_queries(20): resp = self.client.get(self.url_doorzetten_rk % 999999) self.assert403(resp) with self.assert_max_queries(20): resp = self.client.get(self.url_doorzetten_bk % 999999) self.assert403(resp) # niet bestaande comp_pk self.e2e_wissel_naar_functie(self.functie_bko_18) with self.assert_max_queries(20): resp = self.client.get(self.url_doorzetten_rk % 999999) self.assert404(resp) # 404 = Not found/allowed with self.assert_max_queries(20): resp = self.client.post(self.url_doorzetten_rk % 999999) self.assert404(resp) # 404 = Not found/allowed with self.assert_max_queries(20): resp = self.client.get(self.url_doorzetten_bk % 999999) self.assert404(resp) # 404 = Not found/allowed with self.assert_max_queries(20): resp = self.client.post(self.url_doorzetten_bk % 999999) self.assert404(resp) # 404 = Not found/allowed # juiste comp_pk maar verkeerde fase zet_competitie_fase(self.comp_18, 'C') with self.assert_max_queries(20): resp = self.client.get(self.url_doorzetten_rk % self.comp_18.pk) self.assert404(resp) # 404 = Not found/allowed with self.assert_max_queries(20): resp = self.client.post(self.url_doorzetten_rk % self.comp_18.pk) self.assert404(resp) # 404 = Not found/allowed with self.assert_max_queries(20): resp = self.client.get(self.url_doorzetten_bk % self.comp_18.pk) self.assert404(resp) # 404 = Not found/allowed with self.assert_max_queries(20): resp = self.client.post(self.url_doorzetten_bk % self.comp_18.pk) self.assert404(resp) # 404 = Not found/allowed
def setUp(self): """ eenmalige setup voor alle tests wordt als eerste aangeroepen """ self.regio_111 = NhbRegio.objects.get(regio_nr=111) # maak een test vereniging ver = NhbVereniging() ver.naam = "Grote Club" ver.ver_nr = "1000" ver.regio = self.regio_111 # secretaris kan nog niet ingevuld worden ver.save() self.nhbver1 = ver # maak de SEC functie self.functie_sec = maak_functie("SEC test", "SEC") self.functie_sec.nhb_ver = ver self.functie_sec.save() # maak de HWL functie self.functie_hwl = maak_functie("HWL test", "HWL") self.functie_hwl.nhb_ver = ver self.functie_hwl.save() # maak de WL functie self.functie_wl = maak_functie("WL test", "WL") self.functie_wl.nhb_ver = ver self.functie_wl.save() # maak het lid aan dat WL wordt sporter = Sporter() sporter.lid_nr = 100001 sporter.geslacht = "M" sporter.voornaam = "Ramon" sporter.achternaam = "de Tester" sporter.email = "*****@*****.**" sporter.geboorte_datum = datetime.date(year=1972, month=3, day=4) sporter.sinds_datum = datetime.date(year=2010, month=11, day=12) sporter.bij_vereniging = ver sporter.save() self.account_wl = self.e2e_create_account(sporter.lid_nr, sporter.email, sporter.voornaam, accepteer_vhpg=True) self.functie_wl.accounts.add(self.account_wl) sporter.account = self.account_wl sporter.save() self.sporter_100001 = sporter boog_r = BoogType.objects.get(afkorting='R') sporterboog = SporterBoog(sporter=sporter, boogtype=boog_r, voor_wedstrijd=True) sporterboog.save() self.sporterboog_100001 = sporterboog voorkeuren = SporterVoorkeuren(sporter=self.sporter_100001, opmerking_para_sporter="test para opmerking") voorkeuren.save() # maak een jeugdlid aan sporter = Sporter() sporter.lid_nr = 100002 sporter.geslacht = "V" sporter.voornaam = "Ramona" sporter.achternaam = "de Jeugdschutter" sporter.email = "" sporter.geboorte_datum = datetime.date(year=2010, month=3, day=4) sporter.sinds_datum = datetime.date(year=2010, month=11, day=12) sporter.bij_vereniging = ver sporter.save() self.sporter_100002 = sporter # maak nog een jeugdlid aan, in dezelfde leeftijdsklasse sporter = Sporter() sporter.lid_nr = 100012 sporter.geslacht = "V" sporter.voornaam = "Andrea" sporter.achternaam = "de Jeugdschutter" sporter.email = "" sporter.geboorte_datum = datetime.date(year=2010, month=3, day=4) sporter.sinds_datum = datetime.date(year=2010, month=10, day=10) sporter.bij_vereniging = ver sporter.save() self.sporter_100012 = sporter # maak het lid aan dat HWL wordt sporter = Sporter() sporter.lid_nr = 100003 sporter.geslacht = "V" sporter.voornaam = "Ramona" sporter.achternaam = "de Testerin" sporter.email = "*****@*****.**" sporter.geboorte_datum = datetime.date(year=1972, month=3, day=4) sporter.sinds_datum = datetime.date(year=2010, month=11, day=12) sporter.bij_vereniging = ver self.account_hwl = self.e2e_create_account(sporter.lid_nr, sporter.email, sporter.voornaam, accepteer_vhpg=True) self.functie_hwl.accounts.add(self.account_hwl) sporter.account = self.account_hwl sporter.save() self.sporter_100003 = sporter # maak het lid aan dat SEC wordt sporter = Sporter() sporter.lid_nr = 100004 sporter.geslacht = "M" sporter.voornaam = "Ramon" sporter.achternaam = "de Secretaris" sporter.email = "*****@*****.**" sporter.geboorte_datum = datetime.date(year=1971, month=5, day=28) sporter.sinds_datum = datetime.date(year=2000, month=1, day=31) sporter.bij_vereniging = ver sporter.save() self.account_sec = self.e2e_create_account(sporter.lid_nr, sporter.email, sporter.voornaam, accepteer_vhpg=True) self.functie_sec.accounts.add(self.account_sec) sporter.account = self.account_sec sporter.save() self.lid_100004 = sporter # maak een lid aan van een andere vereniging # maak een test vereniging ver2 = NhbVereniging() ver2.naam = "Andere Club" ver2.ver_nr = "1222" ver2.regio = self.regio_111 # secretaris kan nog niet ingevuld worden ver2.save() self.nhbver2 = ver2 # BB worden self.e2e_login_and_pass_otp(self.testdata.account_bb) self.e2e_wisselnaarrol_bb() self.e2e_check_rol('BB') # maak de competitie aan die nodig is voor deze tests self._maak_competitie() self._maak_wedstrijden() self._maak_inschrijvingen()
def _maak_inschrijvingen(self): # schrijf iemand in boog_ib = BoogType.objects.get(afkorting='IB') boog_r = BoogType.objects.get(afkorting='R') boog_c = BoogType.objects.get(afkorting='C') # sporter 1 aanmelden sporterboog = self.sporterboog_100001 SporterVoorkeuren(sporter=sporterboog.sporter, voorkeur_eigen_blazoen=True).save() klasse = (CompetitieKlasse .objects .filter(competitie=self.comp_18, indiv__boogtype=boog_r, indiv__is_onbekend=True))[0] RegioCompetitieSchutterBoog( deelcompetitie=self.deelcomp_regio_18, sporterboog=sporterboog, bij_vereniging=sporterboog.sporter.bij_vereniging, klasse=klasse).save() klasse = (CompetitieKlasse .objects .filter(competitie=self.comp_25, indiv__boogtype=boog_r, indiv__is_onbekend=True))[0] RegioCompetitieSchutterBoog( deelcompetitie=self.deelcomp_regio_25, sporterboog=sporterboog, bij_vereniging=sporterboog.sporter.bij_vereniging, klasse=klasse).save() # Schutter 2 aanmelden klasse = (CompetitieKlasse .objects .filter(competitie=self.comp_18, indiv__boogtype=boog_c, indiv__is_onbekend=False))[0] sporterboog = SporterBoog(sporter=self.sporter_100002, boogtype=boog_c, voor_wedstrijd=True) sporterboog.save() aanmelding = RegioCompetitieSchutterBoog(deelcompetitie=self.deelcomp_regio_18, sporterboog=sporterboog, bij_vereniging=sporterboog.sporter.bij_vereniging, klasse=klasse) aanmelding.save() klasse = (CompetitieKlasse .objects .filter(competitie=self.comp_25, indiv__boogtype=boog_c, indiv__is_onbekend=False))[0] aanmelding = RegioCompetitieSchutterBoog(deelcompetitie=self.deelcomp_regio_25, sporterboog=sporterboog, bij_vereniging=sporterboog.sporter.bij_vereniging, klasse=klasse) aanmelding.save() # aspirant schutter aanmelden self.sporter_100012.geboorte_datum = datetime.date(year=self.comp_18.begin_jaar - 10, month=1, day=1) self.sporter_100012.save() klasse = (CompetitieKlasse .objects .filter(competitie=self.comp_18, indiv__boogtype=boog_ib, indiv__beschrijving__contains="Aspirant"))[0] sporterboog = SporterBoog(sporter=self.sporter_100012, boogtype=boog_ib, voor_wedstrijd=True) sporterboog.save() aanmelding = RegioCompetitieSchutterBoog(deelcompetitie=self.deelcomp_regio_18, sporterboog=sporterboog, bij_vereniging=sporterboog.sporter.bij_vereniging, klasse=klasse) aanmelding.save() klasse = (CompetitieKlasse .objects .filter(competitie=self.comp_25, indiv__boogtype=boog_ib, indiv__beschrijving__contains="Aspirant"))[0] RegioCompetitieSchutterBoog( deelcompetitie=self.deelcomp_regio_25, sporterboog=sporterboog, bij_vereniging=sporterboog.sporter.bij_vereniging, klasse=klasse).save() # Schutter 3 aanmelden klasse = (CompetitieKlasse .objects .filter(competitie=self.comp_18, indiv__boogtype=boog_r))[0] sporterboog = SporterBoog(sporter=self.sporter_100003, boogtype=boog_r, voor_wedstrijd=True) sporterboog.save() RegioCompetitieSchutterBoog( deelcompetitie=self.deelcomp_regio_18, sporterboog=sporterboog, bij_vereniging=sporterboog.sporter.bij_vereniging, klasse=klasse).save()
def aanvangsgemiddelden_vaststellen_voor_afstand(afstand: int): """ deze functie gooit de huidige aanvangsgemiddelden van alle sporters voor gegeven afstand weg en bepaalt daarna de nieuwe AG's aan de hand van de meest recente historische competitie uitslag """ # zoek uit wat de meest recente HistComp is histcomps = (HistCompetitie .objects .filter(comp_type=afstand) .order_by('-seizoen')) if len(histcomps) == 0: schrijf_in_logboek(None, 'Competitie', 'Geen historisch uitslag om aanvangsgemiddelden vast te stellen voor %sm' % afstand) return seizoen = histcomps[0].seizoen schrijf_in_logboek(None, 'Competitie', 'Aanvangsgemiddelden vaststellen voor de %sm met uitslag seizoen %s' % (afstand, seizoen)) histcomps = histcomps.filter(seizoen=seizoen) # het eindjaar van de competitie was bepalend voor de klasse # daarmee kunnen we bepalen of de sporter aspirant was eindjaar = int(seizoen.split('/')[1]) # maak een cache aan van boogtype boogtype_dict = dict() # [afkorting] = BoogType for obj in BoogType.objects.all(): boogtype_dict[obj.afkorting] = obj # for # maak een cache aan van nhb leden # we filteren hier niet op inactieve leden sporter_dict = dict() # [lid_nr] = Sporter for obj in Sporter.objects.all(): sporter_dict[obj.lid_nr] = obj # for # maak een cache aan van sporter-boog sporterboog_cache = dict() # [lid_nr, boogtype_afkorting] = SporterBoog for sporterboog in SporterBoog.objects.select_related('sporter', 'boogtype'): tup = (sporterboog.sporter.lid_nr, sporterboog.boogtype.afkorting) sporterboog_cache[tup] = sporterboog # for # verwijder alle bestaande aanvangsgemiddelden Score.objects.filter(type=SCORE_TYPE_INDIV_AG, afstand_meter=afstand).all().delete() minimum_aantal_scores = {18: settings.COMPETITIE_18M_MINIMUM_SCORES_VOOR_AG, 25: settings.COMPETITIE_25M_MINIMUM_SCORES_VOOR_AG} # doorloop alle individuele histcomp records die bij dit seizoen horen bulk_score = list() for histcomp in histcomps: for obj in (HistCompetitieIndividueel .objects .select_related('histcompetitie') .filter(histcompetitie=histcomp)): if (obj.gemiddelde > AG_NUL and obj.boogtype in boogtype_dict and obj.tel_aantal_scores() >= minimum_aantal_scores[afstand]): # haal het sporterboog record op, of maak een nieuwe aan try: tup = (obj.schutter_nr, obj.boogtype) sporterboog = sporterboog_cache[tup] except KeyError: # nieuw record nodig sporterboog = SporterBoog() sporterboog.boogtype = boogtype_dict[obj.boogtype] sporterboog.voor_wedstrijd = True try: sporterboog.sporter = sporter_dict[obj.schutter_nr] except KeyError: # geen lid meer - skip sporterboog = None else: sporterboog.save() # zet het nieuwe record in de cache, anders krijgen we dupes tup = (sporterboog.sporter.lid_nr, sporterboog.boogtype.afkorting) sporterboog_cache[tup] = sporterboog else: if not sporterboog.voor_wedstrijd: sporterboog.voor_wedstrijd = True sporterboog.save(update_fields=['voor_wedstrijd']) if sporterboog: # aspiranten schieten op een grotere kaart en altijd op 18m # daarom AG van aspirant niet overnemen als deze cadet wordt # aangezien er maar 1 klasse is, is het AG niet nodig # voorbeeld: eindjaar = 2019 # geboortejaar = 2006 --> leeftijd was 13, dus aspirant # geboortejaar = 2005 --> leeftijd was 14, dus cadet was_aspirant = (eindjaar - sporterboog.sporter.geboorte_datum.year) <= MAXIMALE_WEDSTRIJDLEEFTIJD_ASPIRANT # zoek het score record erbij if not was_aspirant: # aanvangsgemiddelde voor deze afstand waarde = int(obj.gemiddelde * 1000) score = Score(sporterboog=sporterboog, type=SCORE_TYPE_INDIV_AG, waarde=waarde, afstand_meter=afstand) bulk_score.append(score) if len(bulk_score) >= 500: Score.objects.bulk_create(bulk_score) bulk_score = list() # for # for if len(bulk_score) > 0: # pragma: no branch Score.objects.bulk_create(bulk_score) del bulk_score # maak nu alle ScoreHist entries in 1x aan # (dit kost de meeste tijd) # hiervoor hebben we Score.pk nodig en die kregen we niet uit bovenstaande Score.objects.bulk_create bulk_scorehist = list() notitie = "Uitslag competitie seizoen %s" % histcomp.seizoen for score in (Score .objects .filter(type=SCORE_TYPE_INDIV_AG, afstand_meter=afstand)): scorehist = ScoreHist(score=score, oude_waarde=0, nieuwe_waarde=score.waarde, door_account=None, notitie=notitie) bulk_scorehist.append(scorehist) if len(bulk_scorehist) > 250: ScoreHist.objects.bulk_create(bulk_scorehist) bulk_scorehist = list() # for if len(bulk_scorehist) > 0: # pragma: no branch ScoreHist.objects.bulk_create(bulk_scorehist)
class TestCompRegioTeams(E2EHelpers, TestCase): """ tests voor de CompRegio applicatie, Teams functies voor de RCL """ test_after = ('Competitie.test_fase', 'Competitie.test_beheerders', 'Competitie.test_competitie') url_afsluiten_regio = '/bondscompetities/regio/planning/%s/afsluiten/' # deelcomp_pk url_regio_instellingen = '/bondscompetities/regio/instellingen/%s/regio-%s/' # comp_pk, regio-nr url_regio_globaal = '/bondscompetities/regio/instellingen/%s/globaal/' # comp_pk url_ag_controle = '/bondscompetities/regio/%s/ag-controle/regio-%s/' # comp_pk, regio-nr url_regio_teams = '/bondscompetities/regio/%s/teams/' # deelcomp_pk url_regio_teams_alle = '/bondscompetities/regio/%s/teams/%s/' # comp_pk, subset = auto/alle/rayon_nr url_team_ronde = '/bondscompetities/regio/%s/team-ronde/' # deelcomp_pk testdata = None @classmethod def setUpTestData(cls): cls.testdata = testdata.TestData() cls.testdata.maak_accounts() def _prep_beheerder_lid(self, voornaam): lid_nr = self._next_lid_nr self._next_lid_nr += 1 sporter = Sporter() sporter.lid_nr = lid_nr sporter.geslacht = "M" sporter.voornaam = voornaam sporter.achternaam = "Tester" sporter.email = voornaam.lower() + "@nhb.test" sporter.geboorte_datum = datetime.date(year=1972, month=3, day=4) sporter.sinds_datum = datetime.date(year=2010, month=11, day=12) sporter.bij_vereniging = self.nhbver_101 sporter.save() return self.e2e_create_account(lid_nr, sporter.email, sporter.voornaam, accepteer_vhpg=True) def setUp(self): """ eenmalige setup voor alle tests wordt als eerste aangeroepen """ self._next_lid_nr = 100001 self.rayon_1 = NhbRayon.objects.get(rayon_nr=1) self.rayon_2 = NhbRayon.objects.get(rayon_nr=2) self.regio_101 = NhbRegio.objects.get(regio_nr=101) self.regio_105 = NhbRegio.objects.get(regio_nr=105) self.regio_112 = NhbRegio.objects.get(regio_nr=112) # maak een test vereniging ver = NhbVereniging() ver.naam = "Zuidelijke Club" ver.ver_nr = 1111 ver.regio = self.regio_112 # secretaris kan nog niet ingevuld worden ver.save() self.nhbver_112 = ver # maak een test vereniging ver = NhbVereniging() ver.naam = "Grote Club" ver.ver_nr = 1000 ver.regio = self.regio_101 # secretaris kan nog niet ingevuld worden ver.save() self.nhbver_101 = ver loc = WedstrijdLocatie(banen_18m=1, banen_25m=1, adres='De Spanning 1, Houtdorp') loc.save() loc.verenigingen.add(ver) self.loc = loc # maak HWL functie aan voor deze vereniging self.functie_hwl = maak_functie("HWL Vereniging %s" % ver.ver_nr, "HWL") self.functie_hwl.nhb_ver = ver self.functie_hwl.save() self.functie_wl = maak_functie("WL Vereniging %s" % ver.ver_nr, "WL") self.functie_wl.nhb_ver = ver self.functie_wl.save() # maak test leden aan die we kunnen koppelen aan beheerders functies self.account_bko_18 = self._prep_beheerder_lid('BKO') self.account_rko1_18 = self._prep_beheerder_lid('RKO1') self.account_rko2_18 = self._prep_beheerder_lid('RKO2') self.account_rcl101_18 = self._prep_beheerder_lid('RCL101') self.account_rcl101_25 = self._prep_beheerder_lid('RCL101-25') self.account_rcl112_18 = self._prep_beheerder_lid('RCL112') self.account_schutter = self._prep_beheerder_lid('Schutter') self.lid_sporter = Sporter.objects.get( lid_nr=self.account_schutter.username) self.boog_r = BoogType.objects.get(afkorting='R') self.sporterboog = SporterBoog(sporter=self.lid_sporter, boogtype=self.boog_r, voor_wedstrijd=True) self.sporterboog.save() # creëer een competitie met deelcompetities competities_aanmaken(jaar=2019) self.comp_18 = Competitie.objects.get(afstand='18') self.comp_25 = Competitie.objects.get(afstand='25') # een parallel competitie is noodzakelijk om corner-cases te raken competities_aanmaken(jaar=2020) # klassengrenzen vaststellen om de competitie voorbij fase A te krijgen self.e2e_login_and_pass_otp(self.testdata.account_bb) self.e2e_wisselnaarrol_bb() self.url_klassengrenzen_vaststellen_18 = '/bondscompetities/%s/klassengrenzen/vaststellen/' % self.comp_18.pk resp = self.client.post(self.url_klassengrenzen_vaststellen_18) self.assert_is_redirect_not_plein(resp) # check for success klasse = CompetitieKlasse.objects.get(competitie=self.comp_18, team__volgorde=10, is_voor_teams_rk_bk=False) klasse.min_ag = 29.0 klasse.save() klasse = CompetitieKlasse.objects.get(competitie=self.comp_18, team__volgorde=11, is_voor_teams_rk_bk=False) klasse.min_ag = 25.0 klasse.save() self.client.logout() self.klasse_recurve_onbekend = (CompetitieKlasse.objects.filter( indiv__boogtype=self.boog_r, indiv__is_onbekend=True).all())[0] self.deelcomp_bond_18 = DeelCompetitie.objects.filter( laag=LAAG_BK, competitie=self.comp_18)[0] self.deelcomp_rayon1_18 = DeelCompetitie.objects.filter( laag=LAAG_RK, competitie=self.comp_18, nhb_rayon=self.rayon_1)[0] self.deelcomp_rayon2_18 = DeelCompetitie.objects.filter( laag=LAAG_RK, competitie=self.comp_18, nhb_rayon=self.rayon_2)[0] self.deelcomp_regio101_18 = DeelCompetitie.objects.filter( laag=LAAG_REGIO, competitie=self.comp_18, nhb_regio=self.regio_101)[0] self.deelcomp_regio101_25 = DeelCompetitie.objects.filter( laag=LAAG_REGIO, competitie=self.comp_25, nhb_regio=self.regio_101)[0] self.deelcomp_regio112_18 = DeelCompetitie.objects.filter( laag=LAAG_REGIO, competitie=self.comp_18, nhb_regio=self.regio_112)[0] self.cluster_101a_18 = NhbCluster.objects.get(regio=self.regio_101, letter='a', gebruik='18') self.cluster_101e_25 = NhbCluster.objects.get(regio=self.regio_101, letter='e', gebruik='25') self.functie_bko_18 = self.deelcomp_bond_18.functie self.functie_rko1_18 = self.deelcomp_rayon1_18.functie self.functie_rko2_18 = self.deelcomp_rayon2_18.functie self.functie_rcl101_18 = self.deelcomp_regio101_18.functie self.functie_rcl101_25 = self.deelcomp_regio101_25.functie self.functie_rcl112_18 = self.deelcomp_regio112_18.functie self.functie_bko_18.accounts.add(self.account_bko_18) self.functie_rko1_18.accounts.add(self.account_rko1_18) self.functie_rko2_18.accounts.add(self.account_rko2_18) self.functie_rcl101_18.accounts.add(self.account_rcl101_18) self.functie_rcl101_25.accounts.add(self.account_rcl101_25) self.functie_rcl112_18.accounts.add(self.account_rcl112_18) # maak nog een test vereniging, zonder HWL functie # stop deze in een cluster ver = NhbVereniging() ver.naam = "Kleine Club" ver.ver_nr = "1100" ver.regio = self.regio_101 ver.save() ver.clusters.add(self.cluster_101e_25) def _verwerk_mutaties(self, max_mutaties=20, show_warnings=True, show_all=False): # vraag de achtergrond taak om de mutaties te verwerken f1 = io.StringIO() f2 = io.StringIO() with self.assert_max_queries(max_mutaties): management.call_command('regiocomp_mutaties', '1', '--quick', stderr=f1, stdout=f2) if show_all: # pragma: no cover print(f1.getvalue()) print(f2.getvalue()) elif show_warnings: lines = f1.getvalue() + '\n' + f2.getvalue() for line in lines.split('\n'): if line.startswith('[WARNING] '): # pragma: no cover print(line) # for def _maak_teams(self, deelcomp): """ schrijf een aantal teams in """ teamtype_r = TeamType.objects.get(afkorting='R') klasse_r_ere = CompetitieKlasse.objects.get( competitie=deelcomp.competitie, team__volgorde=10, is_voor_teams_rk_bk=False) # zie WKL_TEAM in BasisTypen migrations team1 = RegiocompetitieTeam(deelcompetitie=deelcomp, vereniging=self.nhbver_112, volg_nr=1, team_type=teamtype_r, team_naam='Test team 1', aanvangsgemiddelde=20.0, klasse=klasse_r_ere) team1.save() team2 = RegiocompetitieTeam(deelcompetitie=deelcomp, vereniging=self.nhbver_112, volg_nr=1, team_type=teamtype_r, team_naam='Test team 2', aanvangsgemiddelde=21.123, klasse=klasse_r_ere) team2.save() team3 = RegiocompetitieTeam(deelcompetitie=deelcomp, vereniging=self.nhbver_112, volg_nr=1, team_type=teamtype_r, team_naam='Test team 3', aanvangsgemiddelde=18.042, klasse=klasse_r_ere) team3.save() # initiële schutters in het team # gekoppelde_schutters = models.ManyToManyField(RegioCompetitieSchutterBoog, # blank=True) # mag leeg zijn poule = RegiocompetitieTeamPoule(deelcompetitie=deelcomp, beschrijving='Test poule') poule.save() poule.teams.add(team1) poule.teams.add(team2) poule.teams.add(team3) # 3 teams zorgt voor een wedstrijd met een Bye def test_regio_teams(self): # RCL ziet teams self.e2e_login_and_pass_otp(self.account_rcl112_18) self.e2e_wissel_naar_functie(self.functie_rcl112_18) team_r = TeamType.objects.get(afkorting='R') klasse_r_ere = CompetitieKlasse.objects.get(competitie=self.comp_18, team__volgorde=10, is_voor_teams_rk_bk=False) # create two complete teams RegiocompetitieTeam(deelcompetitie=self.deelcomp_regio112_18, vereniging=self.nhbver_112, volg_nr=1, team_type=team_r, team_naam='Test team 1', aanvangsgemiddelde=25.0, klasse=klasse_r_ere).save() RegiocompetitieTeam(deelcompetitie=self.deelcomp_regio112_18, vereniging=self.nhbver_112, volg_nr=2, team_type=team_r, team_naam='Test team 2', aanvangsgemiddelde=24.5, klasse=klasse_r_ere).save() # create a partial team RegiocompetitieTeam(deelcompetitie=self.deelcomp_regio112_18, vereniging=self.nhbver_112, volg_nr=3, team_type=team_r, team_naam='Test team 2', aanvangsgemiddelde=0.0).save() temp_team = RegiocompetitieTeam( deelcompetitie=self.deelcomp_regio112_18, vereniging=self.nhbver_112, volg_nr=3, team_type=team_r, team_naam='', aanvangsgemiddelde=0.0) self.assertTrue(temp_team.maak_team_naam_kort() != '') url = self.url_regio_teams % self.deelcomp_regio112_18.pk with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used( resp, ('compregio/rcl-teams.dtl', 'plein/site_layout.dtl')) # verkeerde deelcomp resp = self.client.get(self.url_regio_teams % self.deelcomp_regio101_18.pk) self.assert403(resp) # niet bestaande deelcomp resp = self.client.get(self.url_regio_teams % 999999) self.assert404(resp) # 404 = Not allowed # logout self.client.logout() resp = self.client.get(url) self.assert403(resp) # 25m self.e2e_login_and_pass_otp(self.account_rcl101_25) self.e2e_wissel_naar_functie(self.functie_rcl101_25) url = self.url_regio_teams % self.deelcomp_regio101_25.pk with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK # BB self.e2e_login_and_pass_otp(self.testdata.account_admin) self.e2e_wisselnaarrol_bb() url = self.url_regio_teams_alle % (self.comp_18.pk, 'auto') with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used( resp, ('compregio/rcl-teams.dtl', 'plein/site_layout.dtl')) url = self.url_regio_teams_alle % (self.comp_18.pk, 'alle') with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used( resp, ('compregio/rcl-teams.dtl', 'plein/site_layout.dtl')) url = self.url_regio_teams_alle % (self.comp_18.pk, '3') # rayon_nr with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used( resp, ('compregio/rcl-teams.dtl', 'plein/site_layout.dtl')) self.e2e_wissel_naar_functie(self.functie_rko1_18) url = self.url_regio_teams_alle % (self.comp_18.pk, 'auto') with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used( resp, ('compregio/rcl-teams.dtl', 'plein/site_layout.dtl')) url = self.url_regio_teams_alle % (999999, 'auto') with self.assert_max_queries(20): resp = self.client.get(url) self.assert404(resp, 'Competitie niet gevonden') url = self.url_regio_teams_alle % (self.comp_18.pk, '999999' ) # rayon_nr with self.assert_max_queries(20): resp = self.client.get(url) self.assert404(resp, 'Selectie wordt niet ondersteund') self.e2e_wissel_naar_functie(self.functie_rcl101_18) url = self.url_regio_teams_alle % (self.comp_18.pk, 'auto') with self.assert_max_queries(20): resp = self.client.get(url) self.assert404(resp, 'Selectie wordt niet ondersteund') def test_ag_controle(self): self.e2e_login_and_pass_otp(self.account_rcl112_18) self.e2e_wissel_naar_functie(self.functie_rcl112_18) url = self.url_ag_controle % (self.comp_18.pk, 112) with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used( resp, ('compregio/rcl-ag-controle.dtl', 'plein/site_layout.dtl')) # maak een inschrijving met handmatig AG RegioCompetitieSchutterBoog( sporterboog=self.sporterboog, bij_vereniging=self.sporterboog.sporter.bij_vereniging, deelcompetitie=self.deelcomp_regio112_18, klasse=self.klasse_recurve_onbekend, inschrijf_voorkeur_team=True, ag_voor_team_mag_aangepast_worden=True, ag_voor_team=5.0).save() with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) # verkeerde fase zet_competitie_fase(self.comp_18, 'K') with self.assert_max_queries(20): resp = self.client.get(url) self.assert404(resp) # bad pk with self.assert_max_queries(20): resp = self.client.get(self.url_ag_controle % (999999, 999999)) self.assert404(resp) # verkeerde regio with self.assert_max_queries(20): resp = self.client.get(self.url_ag_controle % (self.comp_18.pk, 110)) self.assert403(resp) def test_team_ronde_2p(self): self.e2e_login_and_pass_otp(self.account_rcl112_18) self.e2e_wissel_naar_functie(self.functie_rcl112_18) self.assertEqual(self.deelcomp_regio112_18.huidige_team_ronde, 0) self.deelcomp_regio112_18.regio_team_punten_model = TEAM_PUNTEN_MODEL_TWEE self.deelcomp_regio112_18.save( update_fields=['regio_team_punten_model']) url = self.url_team_ronde % 999999 with self.assert_max_queries(20): resp = self.client.get(url) self.assert404(resp, 'Competitie bestaat niet') with self.assert_max_queries(20): resp = self.client.post(url) self.assert404(resp, 'Competitie bestaat niet') url = self.url_team_ronde % self.deelcomp_regio112_18.pk with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used( resp, ('compregio/rcl-team-ronde.dtl', 'plein/site_layout.dtl')) urls = self.extract_all_urls(resp, skip_menu=True) # print('urls: %s' % repr(urls)) self.assertTrue(len(urls) == 1) self.assertTrue(url in urls) # maak een paar teams aan self._maak_teams(self.deelcomp_regio112_18) # start de eerste ronde op with self.assert_max_queries(20): resp = self.client.post(url, {'snel': 1}) self.assert_is_redirect( resp, '/bondscompetities/%s/' % self.deelcomp_regio112_18.competitie.pk) # nog een paar om concurrency echt flink te testen self.client.post(url, {'snel': 1}) self.client.post(url, {'snel': 1}) self._verwerk_mutaties(51, show_warnings=False) self.deelcomp_regio112_18 = DeelCompetitie.objects.get( pk=self.deelcomp_regio112_18.pk) self.assertEqual(self.deelcomp_regio112_18.huidige_team_ronde, 1) # doorzetten zonder scores werkt niet with self.assert_max_queries(20): resp = self.client.post(url, {'snel': 1}) self.assert404(resp, 'Te weinig scores') self.deelcomp_regio112_18 = DeelCompetitie.objects.get( pk=self.deelcomp_regio112_18.pk) self.assertEqual(self.deelcomp_regio112_18.huidige_team_ronde, 1) self._verwerk_mutaties(20) self.deelcomp_regio112_18 = DeelCompetitie.objects.get( pk=self.deelcomp_regio112_18.pk) self.assertEqual(self.deelcomp_regio112_18.huidige_team_ronde, 1) # voer een paar scores in for ronde_team in RegiocompetitieRondeTeam.objects.all(): ronde_team.team_score = 100 + ronde_team.pk ronde_team.save(update_fields=['team_score']) # for # doorzetten met scores werkt wel with self.assert_max_queries(20): resp = self.client.post(url, {'snel': 1}) self.assert_is_redirect( resp, '/bondscompetities/%s/' % self.deelcomp_regio112_18.competitie.pk) self._verwerk_mutaties(39) self.deelcomp_regio112_18 = DeelCompetitie.objects.get( pk=self.deelcomp_regio112_18.pk) self.assertEqual(self.deelcomp_regio112_18.huidige_team_ronde, 2) with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used( resp, ('compregio/rcl-team-ronde.dtl', 'plein/site_layout.dtl')) # nog een rondje, dan komen in het schema met head-to-head wedstrijden # voer weer een paar scores in for ronde_team in RegiocompetitieRondeTeam.objects.all(): ronde_team.team_score = 100 + ronde_team.pk ronde_team.save(update_fields=['team_score']) # for # doorzetten with self.assert_max_queries(20): resp = self.client.post(url, {'snel': 1}) self.assert_is_redirect( resp, '/bondscompetities/%s/' % self.deelcomp_regio112_18.competitie.pk) self._verwerk_mutaties(39) self.deelcomp_regio112_18 = DeelCompetitie.objects.get( pk=self.deelcomp_regio112_18.pk) self.assertEqual(self.deelcomp_regio112_18.huidige_team_ronde, 3) def test_team_ronde_f1(self): self.e2e_login_and_pass_otp(self.account_rcl112_18) self.e2e_wissel_naar_functie(self.functie_rcl112_18) self.assertEqual(self.deelcomp_regio112_18.huidige_team_ronde, 0) self.deelcomp_regio112_18.regio_team_punten_model = TEAM_PUNTEN_MODEL_FORMULE1 self.deelcomp_regio112_18.save( update_fields=['regio_team_punten_model']) # maak een paar teams aan self._maak_teams(self.deelcomp_regio112_18) url = self.url_team_ronde % self.deelcomp_regio112_18.pk with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used( resp, ('compregio/rcl-team-ronde.dtl', 'plein/site_layout.dtl')) # start de eerste ronde op with self.assert_max_queries(20): resp = self.client.post(url, {'snel': 1}) self.assert_is_redirect( resp, '/bondscompetities/%s/' % self.deelcomp_regio112_18.competitie.pk) self._verwerk_mutaties(39) self.deelcomp_regio112_18 = DeelCompetitie.objects.get( pk=self.deelcomp_regio112_18.pk) self.assertEqual(self.deelcomp_regio112_18.huidige_team_ronde, 1) # doorzetten zonder scores werkt niet with self.assert_max_queries(20): resp = self.client.post(url, {'snel': 1}) self.assert404(resp, 'Te weinig scores') self.deelcomp_regio112_18 = DeelCompetitie.objects.get( pk=self.deelcomp_regio112_18.pk) self.assertEqual(self.deelcomp_regio112_18.huidige_team_ronde, 1) self._verwerk_mutaties(20) self.deelcomp_regio112_18 = DeelCompetitie.objects.get( pk=self.deelcomp_regio112_18.pk) self.assertEqual(self.deelcomp_regio112_18.huidige_team_ronde, 1) # voer een paar scores in top_teams = list( RegiocompetitieRondeTeam.objects.values_list('pk', flat=True)) top_teams = top_teams[-2:] for ronde_team in RegiocompetitieRondeTeam.objects.all(): if ronde_team.pk in top_teams: ronde_team.team_score = 999 else: ronde_team.team_score = 100 + ronde_team.pk ronde_team.save(update_fields=['team_score']) # for # doorzetten met scores werkt wel with self.assert_max_queries(20): resp = self.client.post(url, {'snel': 1}) self.assert_is_redirect( resp, '/bondscompetities/%s/' % self.deelcomp_regio112_18.competitie.pk) self._verwerk_mutaties(39) self.deelcomp_regio112_18 = DeelCompetitie.objects.get( pk=self.deelcomp_regio112_18.pk) self.assertEqual(self.deelcomp_regio112_18.huidige_team_ronde, 2) # controleer de wp verdeling: de twee top teams hebben dezelfde score, dus dezelfde wp wps = list( RegiocompetitieRondeTeam.objects.filter( pk__in=top_teams).values_list('team_punten', flat=True)) self.assertEqual(wps, [10, 10]) def test_team_ronde_som(self): self.e2e_login_and_pass_otp(self.account_rcl112_18) self.e2e_wissel_naar_functie(self.functie_rcl112_18) self.assertEqual(self.deelcomp_regio112_18.huidige_team_ronde, 0) self.deelcomp_regio112_18.regio_team_punten_model = TEAM_PUNTEN_MODEL_SOM_SCORES self.deelcomp_regio112_18.save( update_fields=['regio_team_punten_model']) # maak een paar teams aan self._maak_teams(self.deelcomp_regio112_18) url = self.url_team_ronde % self.deelcomp_regio112_18.pk with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used( resp, ('compregio/rcl-team-ronde.dtl', 'plein/site_layout.dtl')) # start de eerste ronde op with self.assert_max_queries(20): resp = self.client.post(url, {'snel': 1}) self.assert_is_redirect( resp, '/bondscompetities/%s/' % self.deelcomp_regio112_18.competitie.pk) self._verwerk_mutaties(39) self.deelcomp_regio112_18 = DeelCompetitie.objects.get( pk=self.deelcomp_regio112_18.pk) self.assertEqual(self.deelcomp_regio112_18.huidige_team_ronde, 1) # doorzetten zonder scores werkt niet with self.assert_max_queries(20): resp = self.client.post(url, {'snel': 1}) self.assert404(resp, 'Te weinig scores') self.deelcomp_regio112_18 = DeelCompetitie.objects.get( pk=self.deelcomp_regio112_18.pk) self.assertEqual(self.deelcomp_regio112_18.huidige_team_ronde, 1) self._verwerk_mutaties(20) self.deelcomp_regio112_18 = DeelCompetitie.objects.get( pk=self.deelcomp_regio112_18.pk) self.assertEqual(self.deelcomp_regio112_18.huidige_team_ronde, 1) # voor een paar scores in for ronde_team in RegiocompetitieRondeTeam.objects.all(): ronde_team.team_score = 100 + ronde_team.pk ronde_team.save(update_fields=['team_score']) # for # doorzetten met scores werkt wel with self.assert_max_queries(20): resp = self.client.post(url, {'snel': 1}) self.assert_is_redirect( resp, '/bondscompetities/%s/' % self.deelcomp_regio112_18.competitie.pk) self._verwerk_mutaties(39) self.deelcomp_regio112_18 = DeelCompetitie.objects.get( pk=self.deelcomp_regio112_18.pk) self.assertEqual(self.deelcomp_regio112_18.huidige_team_ronde, 2)
def setUp(self): """ initialisatie van de test case """ regio_111 = NhbRegio.objects.get(pk=111) boog_r = BoogType.objects.get(afkorting='R') boog_bb = BoogType.objects.get(afkorting='BB') boog_ib = BoogType.objects.get(afkorting='IB') teamtype_r = TeamType.objects.get(afkorting='R') datum = datetime.date(year=2000, month=1, day=1) comp = Competitie( beschrijving='Test', afstand='18', begin_jaar=2000, uiterste_datum_lid=datum, begin_aanmeldingen=datum, einde_aanmeldingen=datum, einde_teamvorming=datum, eerste_wedstrijd=datum, laatst_mogelijke_wedstrijd=datum, datum_klassengrenzen_rk_bk_teams=datum, rk_eerste_wedstrijd=datum, rk_laatste_wedstrijd=datum, bk_eerste_wedstrijd=datum, bk_laatste_wedstrijd=datum) comp.save() self.comp = comp deelcomp = DeelCompetitie( competitie=comp, laag=LAAG_REGIO, nhb_regio=regio_111) deelcomp.save() indiv_r1 = IndivWedstrijdklasse.objects.filter(boogtype=boog_r)[1] indiv_r2 = IndivWedstrijdklasse.objects.filter(boogtype=boog_r)[2] indiv_ib = IndivWedstrijdklasse.objects.filter(boogtype=boog_ib)[0] indiv_bb = IndivWedstrijdklasse.objects.filter(boogtype=boog_bb)[0] klasse_r1 = CompetitieKlasse( competitie=comp, indiv=indiv_r1, min_ag=2.0) klasse_r1.save() CompetitieKlasse( competitie=comp, indiv=indiv_r2, min_ag=1.0).save() CompetitieKlasse( competitie=comp, indiv=indiv_bb, min_ag=0.0).save() klasse_ib = CompetitieKlasse( competitie=comp, indiv=indiv_ib, min_ag=0.0) klasse_ib.save() # maak een test vereniging ver = NhbVereniging() ver.naam = "Grote Club met een naam langer dan 30 tekens" ver.ver_nr = "1000" ver.regio = regio_111 ver.save() # maak een test lid aan sporter = Sporter() sporter.lid_nr = 123456 sporter.geslacht = "M" sporter.voornaam = "Ramon" sporter.achternaam = "de Tester" sporter.geboorte_datum = datetime.date(year=1972, month=3, day=4) sporter.sinds_datum = datetime.date(year=2010, month=11, day=12) sporter.bij_vereniging = ver sporter.account = None sporter.email = '' sporter.save() self.sporter = sporter sporterboog_r = SporterBoog( sporter=sporter, boogtype=boog_r, voor_wedstrijd=True) sporterboog_r.save() self.sporterboog_r = sporterboog_r sporterboog_ib = SporterBoog( sporter=sporter, boogtype=boog_ib, voor_wedstrijd=False) sporterboog_ib.save() self.sporterboog_ib = sporterboog_ib sporterboog_bb = SporterBoog( sporter=sporter, boogtype=boog_bb, voor_wedstrijd=False) sporterboog_bb.save() self.sporterboog_bb = sporterboog_bb deelnemer_r = RegioCompetitieSchutterBoog( deelcompetitie=deelcomp, sporterboog=sporterboog_r, bij_vereniging=ver, klasse=klasse_r1, aantal_scores=1) deelnemer_r.save() self.deelnemer_r = deelnemer_r deelnemer_ib = RegioCompetitieSchutterBoog( deelcompetitie=deelcomp, sporterboog=sporterboog_ib, bij_vereniging=ver, klasse=klasse_ib, aantal_scores=2) deelnemer_ib.save() self.deelnemer_ib = deelnemer_ib team = RegiocompetitieTeam( deelcompetitie=deelcomp, vereniging=ver, volg_nr=1, team_type=teamtype_r, team_naam='Test') team.save() self.team = team team.gekoppelde_schutters.add(deelnemer_ib)
class TestCompRegioInstellingen(E2EHelpers, TestCase): """ tests voor de CompRegio applicatie, Teams functie """ test_after = ('Competitie.test_fase', 'Competitie.test_beheerders', 'Competitie.test_competitie') url_regio_instellingen = '/bondscompetities/regio/instellingen/%s/regio-%s/' # comp_pk, regio-nr url_regio_globaal = '/bondscompetities/regio/instellingen/%s/globaal/' # comp_pk testdata = None @classmethod def setUpTestData(cls): cls.testdata = testdata.TestData() cls.testdata.maak_accounts() def _prep_beheerder_lid(self, voornaam): lid_nr = self._next_lid_nr self._next_lid_nr += 1 sporter = Sporter() sporter.lid_nr = lid_nr sporter.geslacht = "M" sporter.voornaam = voornaam sporter.achternaam = "Tester" sporter.email = voornaam.lower() + "@nhb.test" sporter.geboorte_datum = datetime.date(year=1972, month=3, day=4) sporter.sinds_datum = datetime.date(year=2010, month=11, day=12) sporter.bij_vereniging = self.nhbver_101 sporter.save() return self.e2e_create_account(lid_nr, sporter.email, sporter.voornaam, accepteer_vhpg=True) def setUp(self): """ eenmalige setup voor alle tests wordt als eerste aangeroepen """ self._next_lid_nr = 100001 self.rayon_1 = NhbRayon.objects.get(rayon_nr=1) self.rayon_2 = NhbRayon.objects.get(rayon_nr=2) self.regio_101 = NhbRegio.objects.get(regio_nr=101) self.regio_105 = NhbRegio.objects.get(regio_nr=105) self.regio_112 = NhbRegio.objects.get(regio_nr=112) # maak een test vereniging ver = NhbVereniging() ver.naam = "Zuidelijke Club" ver.ver_nr = 1111 ver.regio = self.regio_112 # secretaris kan nog niet ingevuld worden ver.save() self.nhbver_112 = ver # maak een test vereniging ver = NhbVereniging() ver.naam = "Grote Club" ver.ver_nr = 1000 ver.regio = self.regio_101 # secretaris kan nog niet ingevuld worden ver.save() self.nhbver_101 = ver loc = WedstrijdLocatie(banen_18m=1, banen_25m=1, adres='De Spanning 1, Houtdorp') loc.save() loc.verenigingen.add(ver) self.loc = loc # maak HWL functie aan voor deze vereniging self.functie_hwl = maak_functie("HWL Vereniging %s" % ver.ver_nr, "HWL") self.functie_hwl.nhb_ver = ver self.functie_hwl.save() self.functie_wl = maak_functie("WL Vereniging %s" % ver.ver_nr, "WL") self.functie_wl.nhb_ver = ver self.functie_wl.save() # maak test leden aan die we kunnen koppelen aan beheerders functies self.account_bko_18 = self._prep_beheerder_lid('BKO') self.account_rko1_18 = self._prep_beheerder_lid('RKO1') self.account_rko2_18 = self._prep_beheerder_lid('RKO2') self.account_rcl101_18 = self._prep_beheerder_lid('RCL101') self.account_rcl101_25 = self._prep_beheerder_lid('RCL101-25') self.account_rcl112_18 = self._prep_beheerder_lid('RCL112') self.account_schutter = self._prep_beheerder_lid('Schutter') self.lid_sporter = Sporter.objects.get( lid_nr=self.account_schutter.username) self.boog_r = BoogType.objects.get(afkorting='R') self.sporterboog = SporterBoog(sporter=self.lid_sporter, boogtype=self.boog_r, voor_wedstrijd=True) self.sporterboog.save() # creëer een competitie met deelcompetities competities_aanmaken(jaar=2019) self.comp_18 = Competitie.objects.get(afstand='18') self.comp_25 = Competitie.objects.get(afstand='25') # een parallel competitie is noodzakelijk om corner-cases te raken competities_aanmaken(jaar=2020) # klassengrenzen vaststellen om de competitie voorbij fase A te krijgen self.e2e_login_and_pass_otp(self.testdata.account_bb) self.e2e_wisselnaarrol_bb() self.url_klassengrenzen_vaststellen_18 = '/bondscompetities/%s/klassengrenzen/vaststellen/' % self.comp_18.pk resp = self.client.post(self.url_klassengrenzen_vaststellen_18) self.assert_is_redirect_not_plein(resp) # check for success klasse = CompetitieKlasse.objects.get(competitie=self.comp_18, team__volgorde=10, is_voor_teams_rk_bk=False) klasse.min_ag = 29.0 klasse.save() klasse = CompetitieKlasse.objects.get(competitie=self.comp_18, team__volgorde=11, is_voor_teams_rk_bk=False) klasse.min_ag = 25.0 klasse.save() self.client.logout() self.klasse_recurve_onbekend = (CompetitieKlasse.objects.filter( indiv__boogtype=self.boog_r, indiv__is_onbekend=True).all())[0] self.deelcomp_bond_18 = DeelCompetitie.objects.filter( laag=LAAG_BK, competitie=self.comp_18)[0] self.deelcomp_rayon1_18 = DeelCompetitie.objects.filter( laag=LAAG_RK, competitie=self.comp_18, nhb_rayon=self.rayon_1)[0] self.deelcomp_rayon2_18 = DeelCompetitie.objects.filter( laag=LAAG_RK, competitie=self.comp_18, nhb_rayon=self.rayon_2)[0] self.deelcomp_regio101_18 = DeelCompetitie.objects.filter( laag=LAAG_REGIO, competitie=self.comp_18, nhb_regio=self.regio_101)[0] self.deelcomp_regio101_25 = DeelCompetitie.objects.filter( laag=LAAG_REGIO, competitie=self.comp_25, nhb_regio=self.regio_101)[0] self.deelcomp_regio112_18 = DeelCompetitie.objects.filter( laag=LAAG_REGIO, competitie=self.comp_18, nhb_regio=self.regio_112)[0] self.cluster_101a_18 = NhbCluster.objects.get(regio=self.regio_101, letter='a', gebruik='18') self.cluster_101e_25 = NhbCluster.objects.get(regio=self.regio_101, letter='e', gebruik='25') self.functie_bko_18 = self.deelcomp_bond_18.functie self.functie_rko1_18 = self.deelcomp_rayon1_18.functie self.functie_rko2_18 = self.deelcomp_rayon2_18.functie self.functie_rcl101_18 = self.deelcomp_regio101_18.functie self.functie_rcl101_25 = self.deelcomp_regio101_25.functie self.functie_rcl112_18 = self.deelcomp_regio112_18.functie self.functie_bko_18.accounts.add(self.account_bko_18) self.functie_rko1_18.accounts.add(self.account_rko1_18) self.functie_rko2_18.accounts.add(self.account_rko2_18) self.functie_rcl101_18.accounts.add(self.account_rcl101_18) self.functie_rcl101_25.accounts.add(self.account_rcl101_25) self.functie_rcl112_18.accounts.add(self.account_rcl112_18) # maak nog een test vereniging, zonder HWL functie # stop deze in een cluster ver = NhbVereniging() ver.naam = "Kleine Club" ver.ver_nr = "1100" ver.regio = self.regio_101 ver.save() ver.clusters.add(self.cluster_101e_25) def test_regio_instellingen(self): self.e2e_login_and_pass_otp(self.account_rcl112_18) self.e2e_wissel_naar_functie(self.functie_rcl112_18) url = self.url_regio_instellingen % (self.comp_18.pk, 112) # fase A # tijdens competitie fase A mogen alle instellingen aangepast worden zet_competitie_fase(self.comp_18, 'A') # when the phase is set artificially, some dates are left behind # let's repair that here self.comp_18 = Competitie.objects.get(pk=self.comp_18.pk) self.comp_18.eerste_wedstrijd = self.comp_18.begin_aanmeldingen self.comp_18.eerste_wedstrijd += datetime.timedelta(days=1) self.comp_18.save() post_datum_ok = self.comp_18.begin_aanmeldingen.strftime('%Y-%m-%d') # print('begin_aanmeldingen: %s' % comp_datum1) post_datum_bad = self.comp_18.eerste_wedstrijd.strftime('%Y-%m-%d') # print('eerste_wedstrijd: %s' % comp_datum2) with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used( resp, ('compregio/rcl-instellingen.dtl', 'plein/site_layout.dtl')) # all params missing with self.assert_max_queries(20): resp = self.client.post(url) self.assert_is_redirect_not_plein(resp) # all params present with self.assert_max_queries(20): resp = self.client.post( url, { 'teams': 'ja', 'team_alloc': 'vast', 'team_punten': 'F1', 'einde_teams_aanmaken': post_datum_ok }) self.assert_is_redirect_not_plein(resp) # late date with self.assert_max_queries(20): resp = self.client.post(url, { 'teams': 'ja', 'einde_teams_aanmaken': post_datum_bad }) self.assert404(resp) # 404 = Not allowed # late date - not checked when teams=nee with self.assert_max_queries(20): resp = self.client.post(url, { 'teams': 'nee', 'einde_teams_aanmaken': post_datum_bad }) self.assert_is_redirect_not_plein(resp) # teamcompetitie staat nu op Nee # zet teamcompetitie weer op Ja with self.assert_max_queries(20): resp = self.client.post(url, {'teams': 'ja', 'team_alloc': 'vast'}) self.assert_is_redirect_not_plein(resp) # bad date with self.assert_max_queries(20): resp = self.client.post(url, { 'teams': 'ja', 'einde_teams_aanmaken': 'xxx' }) self.assert404(resp) # 404 = Not allowed # fase B en C # tot en met fase C mogen de team punten en datum aanmaken teams aangepast worden oude_punten = 'F1' for fase in ('B', 'C'): zet_competitie_fase(self.comp_18, fase) with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used( resp, ('compregio/rcl-instellingen.dtl', 'plein/site_layout.dtl')) deelcomp_pre = DeelCompetitie.objects.get( pk=self.deelcomp_regio112_18.pk) self.assertTrue(deelcomp_pre.regio_organiseert_teamcompetitie) self.assertTrue(deelcomp_pre.regio_heeft_vaste_teams) self.assertEqual(deelcomp_pre.regio_team_punten_model, oude_punten) if oude_punten == 'F1': nieuwe_punten = '2P' else: nieuwe_punten = 'SS' # all params present with self.assert_max_queries(20): resp = self.client.post( url, { 'teams': 'nee', 'team_alloc': 'vsg', 'team_punten': nieuwe_punten, 'einde_teams_aanmaken': post_datum_ok }) self.assert_is_redirect_not_plein(resp) deelcomp_post = DeelCompetitie.objects.get( pk=self.deelcomp_regio112_18.pk) self.assertTrue(deelcomp_post.regio_organiseert_teamcompetitie) self.assertTrue(deelcomp_post.regio_heeft_vaste_teams) self.assertEqual(deelcomp_post.regio_team_punten_model, nieuwe_punten) oude_punten = nieuwe_punten # fase D zet_competitie_fase(self.comp_18, 'D') with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used( resp, ('compregio/rcl-instellingen.dtl', 'plein/site_layout.dtl')) def test_regio_instellingen_bad(self): # bad cases self.e2e_login_and_pass_otp(self.account_rcl112_18) self.e2e_wissel_naar_functie(self.functie_rcl112_18) url = self.url_regio_instellingen % (self.comp_18.pk, 112) # na fase F zijn de instellingen niet meer in te zien zet_competitie_fase(self.comp_18, 'K') # fase G is niet te zetten resp = self.client.get(url) self.assert404(resp) # 404 = Not found resp = self.client.post(url) self.assert404(resp) # 404 = Not found # niet bestaande regio url = self.url_regio_instellingen % (self.comp_18.pk, 100) resp = self.client.get(url) self.assert404(resp) # 404 = Not found resp = self.client.post(url) self.assert404(resp) # 404 = Not found # niet de regio van de RCL url = self.url_regio_instellingen % (self.comp_18.pk, 110) resp = self.client.get(url) self.assert403(resp) resp = self.client.post(url) self.assert403(resp) # logout url = self.url_regio_instellingen % (self.comp_18.pk, 112) self.client.logout() resp = self.client.get(url) self.assert403(resp) def test_regio_globaal(self): self.e2e_login_and_pass_otp(self.testdata.account_bb) self.e2e_wisselnaarrol_bb() url = self.url_regio_globaal % self.comp_18.pk with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used(resp, ('compregio/rcl-instellingen-globaal.dtl', 'plein/site_layout.dtl'))
def _maak_leden_aan(self): sporter = Sporter() sporter.lid_nr = 100001 sporter.geslacht = "M" sporter.voornaam = "Ramon" sporter.achternaam = "de Tester" sporter.email = "*****@*****.**" sporter.geboorte_datum = datetime.date(year=1972, month=3, day=4) sporter.sinds_datum = datetime.date(year=2010, month=11, day=12) sporter.bij_vereniging = self.ver self.account_lid = self.e2e_create_account(sporter.lid_nr, sporter.email, sporter.voornaam) sporter.account = self.account_lid sporter.save() self.sporter_100001 = sporter sporterboog = SporterBoog(sporter=self.sporter_100001, boogtype=self.boog_r, voor_wedstrijd=True) # TODO: migrate sporterboog.save() self.sporterboog_100001 = sporterboog sporter = Sporter() sporter.lid_nr = 100002 sporter.geslacht = "M" sporter.voornaam = "Ramon" sporter.achternaam = "het Testertje" sporter.email = "*****@*****.**" sporter.geboorte_datum = datetime.date(year=2008, month=3, day=4) sporter.sinds_datum = datetime.date(year=2015, month=11, day=12) sporter.bij_vereniging = self.ver self.account_jeugdlid = self.e2e_create_account( sporter.lid_nr, sporter.email, sporter.voornaam) sporter.account = self.account_jeugdlid sporter.save() self.sporter_100002 = sporter sporterboog = SporterBoog(sporter=self.sporter_100002, boogtype=self.boog_r, voor_wedstrijd=True) # TODO: migrate sporterboog.save() self.sporterboog_100002 = sporterboog sporter = Sporter() sporter.lid_nr = 100003 sporter.geslacht = "M" sporter.voornaam = "Geen" sporter.achternaam = "Vereniging" sporter.email = "*****@*****.**" sporter.geboorte_datum = datetime.date(year=2008, month=3, day=4) sporter.sinds_datum = datetime.date(year=2015, month=11, day=12) # lid.bij_vereniging = sporter.account = self.e2e_create_account(sporter.lid_nr, sporter.email, sporter.voornaam) sporter.save() sporter = Sporter() sporter.lid_nr = 100004 sporter.geslacht = "V" sporter.voornaam = "Juf" sporter.achternaam = "de Schutter" sporter.email = "*****@*****.**" sporter.geboorte_datum = datetime.date(year=1988, month=12, day=4) sporter.sinds_datum = datetime.date(year=2015, month=7, day=15) sporter.bij_vereniging = self.ver sporter.account = self.e2e_create_account(sporter.lid_nr, sporter.email, sporter.voornaam) sporter.save() self.sporter_100004 = sporter sporterboog = SporterBoog(sporter=self.sporter_100004, boogtype=self.boog_r, voor_wedstrijd=True) # TODO: migrate sporterboog.save() self.sporterboog_100004 = sporterboog sporter = Sporter() sporter.lid_nr = 100005 sporter.geslacht = "V" sporter.voornaam = "Jans" sporter.achternaam = "de Schutter" sporter.email = "*****@*****.**" sporter.geboorte_datum = datetime.date(year=1977, month=12, day=4) sporter.sinds_datum = datetime.date(year=2015, month=7, day=15) sporter.bij_vereniging = self.ver sporter.account = self.e2e_create_account(sporter.lid_nr, sporter.email, sporter.voornaam) sporter.save() self.sporter_100005 = sporter sporterboog = SporterBoog(sporter=self.sporter_100005, boogtype=self.boog_r, voor_wedstrijd=True) # TODO: migrate sporterboog.save() self.sporterboog_100005 = sporterboog
class TestCompRayonPlanning(E2EHelpers, TestCase): """ tests voor de CompRayon applicatie, Planning functie """ test_after = ('Competitie.test_fase', 'Competitie.test_beheerders', 'Competitie.test_competitie') url_planning_rayon = '/bondscompetities/rk/planning/%s/' # deelcomp_pk url_wijzig_rk_wedstrijd = '/bondscompetities/rk/planning/wedstrijd/wijzig/%s/' # wedstrijd_pk url_verwijder_rk_wedstrijd = '/bondscompetities/rk/planning/wedstrijd/verwijder/%s/' # wedstrijd_pk url_lijst_rk = '/bondscompetities/rk/lijst-rayonkampioenschappen/%s/' # deelcomp_pk url_lijst_bestand = '/bondscompetities/rk/lijst-rayonkampioenschappen/%s/bestand/' # deelcomp_pk url_wijzig_status = '/bondscompetities/rk/lijst-rayonkampioenschappen/wijzig-status-rk-deelnemer/%s/' # deelnemer_pk url_wijzig_limiet = '/bondscompetities/rk/planning/%s/limieten/' # deelcomp_pk url_doorzetten_rk = '/bondscompetities/%s/doorzetten/rk/' # comp_pk testdata = None @classmethod def setUpTestData(cls): cls.testdata = testdata.TestData() cls.testdata.maak_accounts() def _dummy_sleep(self, duration): pass def _verwerk_mutaties(self, show=False): # vraag de achtergrond taak om de mutaties te verwerken f1 = io.StringIO() f2 = io.StringIO() with self.assert_max_queries(20): management.call_command('regiocomp_mutaties', '1', '--quick', stderr=f1, stdout=f2) if show: # pragma: no cover print(f1.getvalue()) print(f2.getvalue()) def _prep_beheerder_lid(self, voornaam): lid_nr = self._next_lid_nr self._next_lid_nr += 1 sporter = Sporter() sporter.lid_nr = lid_nr sporter.geslacht = "M" sporter.voornaam = voornaam sporter.achternaam = "Tester" sporter.email = voornaam.lower() + "@nhb.test" sporter.geboorte_datum = datetime.date(year=1972, month=3, day=4) sporter.sinds_datum = datetime.date(year=2010, month=11, day=12) sporter.bij_vereniging = self.nhbver_101 sporter.save() return self.e2e_create_account(lid_nr, sporter.email, sporter.voornaam, accepteer_vhpg=True) def setUp(self): """ eenmalige setup voor alle tests wordt als eerste aangeroepen """ self._next_lid_nr = 100001 self.rayon_1 = NhbRayon.objects.get(rayon_nr=1) self.rayon_2 = NhbRayon.objects.get(rayon_nr=2) self.regio_101 = NhbRegio.objects.get(regio_nr=101) self.regio_105 = NhbRegio.objects.get(regio_nr=105) self.regio_112 = NhbRegio.objects.get(regio_nr=112) # maak een test vereniging ver = NhbVereniging() ver.naam = "Zuidelijke Club" ver.ver_nr = "1111" ver.regio = self.regio_112 # secretaris kan nog niet ingevuld worden ver.save() self.nhbver_112 = ver # maak een test vereniging ver = NhbVereniging() ver.naam = "Grote Club" ver.ver_nr = "1000" ver.regio = self.regio_101 # secretaris kan nog niet ingevuld worden ver.save() self.nhbver_101 = ver loc = WedstrijdLocatie(banen_18m=1, banen_25m=1, adres='De Spanning 1, Houtdorp') loc.save() loc.verenigingen.add(ver) self.loc = loc # maak HWL functie aan voor deze vereniging self.functie_hwl = maak_functie("HWL Vereniging %s" % ver.ver_nr, "HWL") self.functie_hwl.nhb_ver = ver self.functie_hwl.save() # maak test leden aan die we kunnen koppelen aan beheerders functies self.account_bko_18 = self._prep_beheerder_lid('BKO') self.account_rko1_18 = self._prep_beheerder_lid('RKO1') self.account_rko2_18 = self._prep_beheerder_lid('RKO2') self.account_rcl101_18 = self._prep_beheerder_lid('RCL101') self.account_rcl101_25 = self._prep_beheerder_lid('RCL101-25') self.account_rcl112_18 = self._prep_beheerder_lid('RCL112') self.account_schutter = self._prep_beheerder_lid('Schutter') self.lid_sporter = Sporter.objects.get( lid_nr=self.account_schutter.username) self.boog_r = BoogType.objects.get(afkorting='R') self.sporterboog = SporterBoog(sporter=self.lid_sporter, boogtype=self.boog_r, voor_wedstrijd=True) self.sporterboog.save() # creëer een competitie met deelcompetities competities_aanmaken(jaar=2019) self.comp_18 = Competitie.objects.get(afstand='18') self.comp_25 = Competitie.objects.get(afstand='25') # klassengrenzen vaststellen om de competitie voorbij fase A te krijgen self.e2e_login_and_pass_otp(self.testdata.account_bb) self.e2e_wisselnaarrol_bb() self.url_klassengrenzen_vaststellen_18 = '/bondscompetities/%s/klassengrenzen/vaststellen/' % self.comp_18.pk resp = self.client.post(self.url_klassengrenzen_vaststellen_18) self.assert_is_redirect_not_plein(resp) # redirect = success self.comp_18 = Competitie.objects.get( afstand='18') # refresh met nieuwe status self.client.logout() self.deelcomp_bond_18 = DeelCompetitie.objects.filter( laag=LAAG_BK, competitie=self.comp_18)[0] self.deelcomp_rayon1_18 = DeelCompetitie.objects.filter( laag=LAAG_RK, competitie=self.comp_18, nhb_rayon=self.rayon_1)[0] self.deelcomp_rayon2_18 = DeelCompetitie.objects.filter( laag=LAAG_RK, competitie=self.comp_18, nhb_rayon=self.rayon_2)[0] self.deelcomp_regio101_18 = DeelCompetitie.objects.filter( laag=LAAG_REGIO, competitie=self.comp_18, nhb_regio=self.regio_101)[0] self.deelcomp_regio101_25 = DeelCompetitie.objects.filter( laag=LAAG_REGIO, competitie=self.comp_25, nhb_regio=self.regio_101)[0] self.deelcomp_regio112_18 = DeelCompetitie.objects.filter( laag=LAAG_REGIO, competitie=self.comp_18, nhb_regio=self.regio_112)[0] self.cluster_101a = NhbCluster.objects.get(regio=self.regio_101, letter='a', gebruik='18') self.functie_bko_18 = self.deelcomp_bond_18.functie self.functie_rko1_18 = self.deelcomp_rayon1_18.functie self.functie_rko2_18 = self.deelcomp_rayon2_18.functie self.functie_rcl101_18 = self.deelcomp_regio101_18.functie self.functie_rcl101_25 = self.deelcomp_regio101_25.functie self.functie_rcl112_18 = self.deelcomp_regio112_18.functie self.functie_bko_18.accounts.add(self.account_bko_18) self.functie_rko1_18.accounts.add(self.account_rko1_18) self.functie_rko2_18.accounts.add(self.account_rko2_18) self.functie_rcl101_18.accounts.add(self.account_rcl101_18) self.functie_rcl101_25.accounts.add(self.account_rcl101_25) self.functie_rcl112_18.accounts.add(self.account_rcl112_18) self.klasse_r = CompetitieKlasse.objects.filter( competitie=self.comp_18, indiv__is_onbekend=False, indiv__niet_voor_rk_bk=False, indiv__volgorde=100, # Recurve klasse 1 indiv__boogtype__afkorting='R')[0] self.klasse_c = CompetitieKlasse.objects.filter( competitie=self.comp_18, indiv__is_onbekend=False, indiv__niet_voor_rk_bk=False, indiv__volgorde=201, # Compound klasse 2 indiv__boogtype__afkorting='C')[0] self.klasse_ib = CompetitieKlasse.objects.filter( competitie=self.comp_18, indiv__is_onbekend=False, indiv__niet_voor_rk_bk=False, indiv__volgorde=400, # IB klasse 1 indiv__boogtype__afkorting='IB')[0] # maak nog een test vereniging, zonder HWL functie ver = NhbVereniging() ver.naam = "Kleine Club" ver.ver_nr = "1100" ver.regio = self.regio_101 # secretaris kan nog niet ingevuld worden ver.save() self.ver_1100 = ver def competitie_sluit_alle_regiocompetities(self, comp): # deze functie sluit alle regiocompetities af zodat de competitie in fase G komt comp.bepaal_fase() # print('comp: %s --> fase=%s' % (comp, comp.fase)) self.assertTrue('B' < comp.fase < 'G') for deelcomp in DeelCompetitie.objects.filter(competitie=comp, laag=LAAG_REGIO): if not deelcomp.is_afgesloten: # pragma: no branch deelcomp.is_afgesloten = True deelcomp.save() # for comp.bepaal_fase() self.assertEqual(comp.fase, 'G') def _deelnemers_aanmaken(self): KampioenschapSchutterBoog( deelcompetitie=self.deelcomp_rayon1_18, sporterboog=self.sporterboog, klasse=self.klasse_r, bij_vereniging=self.sporterboog.sporter.bij_vereniging).save() KampioenschapSchutterBoog( deelcompetitie=self.deelcomp_rayon1_18, sporterboog=self.sporterboog, klasse=self.klasse_r, bij_vereniging=self.sporterboog.sporter.bij_vereniging).save() KampioenschapSchutterBoog( deelcompetitie=self.deelcomp_rayon1_18, sporterboog=self.sporterboog, klasse=self.klasse_r, bij_vereniging=self.sporterboog.sporter.bij_vereniging).save() KampioenschapSchutterBoog( deelcompetitie=self.deelcomp_rayon1_18, sporterboog=self.sporterboog, klasse=self.klasse_c, bij_vereniging=self.sporterboog.sporter.bij_vereniging).save() KampioenschapSchutterBoog( deelcompetitie=self.deelcomp_rayon1_18, sporterboog=self.sporterboog, klasse=self.klasse_c, bij_vereniging=self.sporterboog.sporter.bij_vereniging).save() def test_buiten_eigen_rayon(self): # RKO probeert RK wedstrijd toe te voegen en wijzigen buiten eigen rayon self.e2e_login_and_pass_otp(self.account_rko1_18) self.e2e_wissel_naar_functie(self.functie_rko1_18) # maak een RK wedstrijd aan in een ander rayon url = self.url_planning_rayon % self.deelcomp_rayon2_18.pk with self.assert_max_queries(23): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK # controleer dat er geen 'ronde toevoegen' knop is urls = self.extract_all_urls(resp, skip_menu=True) self.assertNotIn(url, urls) # url wordt gebruikt voor POST # coverage: nog een keer ophalen, want dan is het plan er al with self.assert_max_queries(21): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK with self.assert_max_queries(20): resp = self.client.post(url) self.assert404(resp) # 404 = Not allowed # maak een RK wedstrijd aan in het eigen rayon url = self.url_planning_rayon % self.deelcomp_rayon1_18.pk with self.assert_max_queries(20): resp = self.client.post(url) self.assert_is_redirect_not_plein(resp) # check success wedstrijd_r1_pk = DeelCompetitie.objects.get( pk=self.deelcomp_rayon1_18.pk).plan.wedstrijden.all()[0].pk url = self.url_wijzig_rk_wedstrijd % wedstrijd_r1_pk with self.assert_max_queries(30): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.e2e_login_and_pass_otp(self.account_rko2_18) self.e2e_wissel_naar_functie(self.functie_rko2_18) with self.assert_max_queries(20): resp = self.client.get(url) self.assert403(resp) def test_planning_rayon(self): self.e2e_login_and_pass_otp(self.account_rko1_18) self.e2e_wissel_naar_functie(self.functie_rko1_18) self._deelnemers_aanmaken() # maak een regiowedstrijd aan, zodat deze geteld kan worden deelcomp = DeelCompetitie.objects.get(competitie=self.comp_18, laag=LAAG_REGIO, nhb_regio=self.regio_101) deelcomp.inschrijf_methode = INSCHRIJF_METHODE_1 deelcomp.save() # maak een RK wedstrijd aan in het eigen rayon url = self.url_planning_rayon % self.deelcomp_rayon1_18.pk with self.assert_max_queries(20): resp = self.client.post(url) self.assert_is_redirect_not_plein(resp) # check success # nog een wedstrijd with self.assert_max_queries(20): resp = self.client.post(url) self.assert_is_redirect_not_plein(resp) # check success # haal het overzicht op met deze nieuwe wedstrijden with self.assert_max_queries(24): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used( resp, ('comprayon/planning-rayon.dtl', 'plein/site_layout.dtl')) # haal de wedstrijd op wedstrijd_r1 = DeelCompetitie.objects.get( pk=self.deelcomp_rayon1_18.pk).plan.wedstrijden.all()[0] url_w = self.url_wijzig_rk_wedstrijd % wedstrijd_r1.pk with self.assert_max_queries(35): resp = self.client.get(url_w) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used( resp, ('comprayon/wijzig-wedstrijd-rk.dtl', 'plein/site_layout.dtl')) # nog een keer ophalen, want dan zijn wedstrijd.vereniging en wedstrijd.locatie al gezet with self.assert_max_queries(35): resp = self.client.get(url_w) self.assertEqual(resp.status_code, 200) # 200 = OK # wijzig de wedstrijd en zet een aantal wedstrijdklassen sel_indiv_1 = "wkl_indiv_%s" % self.klasse_r.indiv.pk sel_indiv_2 = "wkl_indiv_%s" % self.klasse_c.indiv.pk sel_indiv_3 = "wkl_indiv_%s" % self.klasse_ib.indiv.pk with self.assert_max_queries(20): resp = self.client.post( url_w, { 'weekdag': 1, 'aanvang': '12:34', 'nhbver_pk': self.nhbver_101.ver_nr, sel_indiv_1: "on", sel_indiv_2: "on", sel_indiv_3: "on", "wkl_indiv_": "on", # bad "wkl_indiv_bad": "on" }) # bad self.assert_is_redirect_not_plein(resp) # check for success # wissel naar BKO en haal de planning op self.e2e_login_and_pass_otp(self.account_bko_18) self.e2e_wissel_naar_functie(self.functie_bko_18) with self.assert_max_queries(26): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK def test_planning_rayon_verwijder(self): # maak een wedstrijd aan en verwijder deze weer self.e2e_login_and_pass_otp(self.account_rko1_18) self.e2e_wissel_naar_functie(self.functie_rko1_18) # doet een 'get' op de planning zodat er een plan aangemaakt wordt url = self.url_planning_rayon % self.deelcomp_rayon1_18.pk with self.assert_max_queries(23): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.deelcomp_rayon1_18 = DeelCompetitie.objects.get( pk=self.deelcomp_rayon1_18.pk) # maak een RK wedstrijd aan in het eigen rayon self.assertEqual(self.deelcomp_rayon1_18.plan.wedstrijden.count(), 0) url = self.url_planning_rayon % self.deelcomp_rayon1_18.pk with self.assert_max_queries(20): resp = self.client.post(url) self.assert_is_redirect_not_plein(resp) # check success self.assertEqual(self.deelcomp_rayon1_18.plan.wedstrijden.count(), 1) # bevries de uitslag wedstrijd = self.deelcomp_rayon1_18.plan.wedstrijden.all()[0] uitslag = CompetitieWedstrijdUitslag(max_score=300, afstand_meter=18, is_bevroren=True) uitslag.save() wedstrijd.uitslag = uitslag wedstrijd.save() # wedstrijd met bevroren uitslag kan niet verwijderd worden url = self.url_verwijder_rk_wedstrijd % wedstrijd.pk with self.assert_max_queries(20): resp = self.client.post(url) self.assert404(resp) # 404 = Not found/allowed # verwijder de bevriezing uitslag.is_bevroren = False uitslag.save() # verwijder de wedstrijd weer url = self.url_verwijder_rk_wedstrijd % wedstrijd.pk with self.assert_max_queries(20): resp = self.client.post(url) self.assert_is_redirect_not_plein(resp) # check success self.assertEqual(self.deelcomp_rayon1_18.plan.wedstrijden.count(), 0) def test_planning_rayon_verwijder_bad(self): # verkeerde rol / niet ingelogd url = self.url_verwijder_rk_wedstrijd % 999999 with self.assert_max_queries(20): resp = self.client.post(url) self.assert403(resp) # inloggen self.e2e_login_and_pass_otp(self.account_rko1_18) self.e2e_wissel_naar_functie(self.functie_rko1_18) # maak een RK wedstrijd aan url = self.url_planning_rayon % self.deelcomp_rayon1_18.pk with self.assert_max_queries(20): resp = self.client.post(url) self.assert_is_redirect_not_plein(resp) # check success self.deelcomp_rayon1_18 = DeelCompetitie.objects.get( pk=self.deelcomp_rayon1_18.pk) wedstrijd = self.deelcomp_rayon1_18.plan.wedstrijden.all()[0] # verwijder bad pk url = self.url_verwijder_rk_wedstrijd % 999999 with self.assert_max_queries(20): resp = self.client.post(url) self.assert404(resp) # 404 = Not found/allowed # wedstrijd van niet-RK self.deelcomp_rayon1_18.laag = LAAG_REGIO self.deelcomp_rayon1_18.save() url = self.url_verwijder_rk_wedstrijd % wedstrijd.pk with self.assert_max_queries(20): resp = self.client.post(url) self.assert404(resp) # 404 = Not found/allowed self.deelcomp_rayon1_18.laag = LAAG_RK self.deelcomp_rayon1_18.save() # verkeerde rol self.e2e_login_and_pass_otp(self.account_rko2_18) self.e2e_wissel_naar_functie(self.functie_rko2_18) url = self.url_verwijder_rk_wedstrijd % wedstrijd.pk with self.assert_max_queries(20): resp = self.client.post(url) self.assert403(resp) # verwijder zonder uitslag self.e2e_login_and_pass_otp(self.account_rko1_18) self.e2e_wissel_naar_functie(self.functie_rko1_18) url = self.url_verwijder_rk_wedstrijd % wedstrijd.pk with self.assert_max_queries(20): resp = self.client.post(url) self.assertEqual(resp.status_code, 302) def test_planning_rayon_geen_ver(self): self.e2e_login_and_pass_otp(self.account_rko2_18) self.e2e_wissel_naar_functie(self.functie_rko2_18) # maak een RK wedstrijd aan in het eigen rayon url = self.url_planning_rayon % self.deelcomp_rayon2_18.pk with self.assert_max_queries(20): resp = self.client.post(url) self.assert_is_redirect_not_plein(resp) # check for success # haal de wedstrijd op # hierbij lukt het niet om de wedstrijd.vereniging in te vullen wedstrijd_r2_pk = DeelCompetitie.objects.get( pk=self.deelcomp_rayon2_18.pk).plan.wedstrijden.all()[0].pk url = self.url_wijzig_rk_wedstrijd % wedstrijd_r2_pk with self.assert_max_queries(28): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used( resp, ('comprayon/wijzig-wedstrijd-rk.dtl', 'plein/site_layout.dtl')) # nu met een vereniging zonder accommodatie ver = self.nhbver_112 # heeft geen locatie ver.regio = self.regio_105 # verhuis naar rayon 2 ver.save() with self.assert_max_queries(29): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK # wijzig de wedstrijd - hierbij wordt de wedstrijd.locatie op None gezet with self.assert_max_queries(20): resp = self.client.post(url, { 'weekdag': 1, 'aanvang': '12:34', 'nhbver_pk': ver.ver_nr }) self.assert_is_redirect_not_plein(resp) # check for success def test_planning_rayon_bad(self): # anon url = self.url_planning_rayon % self.deelcomp_rayon2_18.pk with self.assert_max_queries(20): resp = self.client.get(url) self.assert403(resp) # probeer als BKO (RCL kom niet door de user-passes-test-mixin) self.e2e_login_and_pass_otp(self.account_bko_18) self.e2e_wissel_naar_functie(self.functie_bko_18) url = self.url_planning_rayon % self.deelcomp_rayon2_18.pk with self.assert_max_queries(20): resp = self.client.post(url) self.assert403(resp) # slechte deelcompetitie url = self.url_planning_rayon % 999999 with self.assert_max_queries(20): resp = self.client.get(url) self.assert404(resp) # probeer een wedstrijd te wijzigen als BKO url = self.url_wijzig_rk_wedstrijd % 999999 with self.assert_max_queries(20): resp = self.client.get(url) self.assert403(resp) # nogmaals, als RKO self.e2e_login_and_pass_otp(self.account_rko1_18) self.e2e_wissel_naar_functie(self.functie_rko1_18) url = self.url_wijzig_rk_wedstrijd % 999999 with self.assert_max_queries(20): resp = self.client.get(url) self.assert404(resp) # 404 = Not allowed url = self.url_wijzig_rk_wedstrijd % "BAD" with self.assert_max_queries(20): resp = self.client.get(url) self.assert404(resp) # 404 = Not allowed url = self.url_wijzig_rk_wedstrijd % "##" with self.assert_max_queries(20): resp = self.client.get(url) self.assert404(resp) # 404 = Not allowed url = self.url_wijzig_rk_wedstrijd % "1(2)" with self.assert_max_queries(20): resp = self.client.get(url) self.assert404(resp) # 404 = Not allowed with self.assert_max_queries(20): resp = self.client.post(url) self.assert404(resp) # 404 = Not allowed # maak een RK wedstrijd aan in het eigen rayon url = self.url_planning_rayon % self.deelcomp_rayon1_18.pk with self.assert_max_queries(20): resp = self.client.post(url) self.assert_is_redirect_not_plein(resp) # check for success wedstrijd_r1_pk = DeelCompetitie.objects.get( pk=self.deelcomp_rayon1_18.pk).plan.wedstrijden.all()[0].pk url = self.url_wijzig_rk_wedstrijd % wedstrijd_r1_pk # wijzig de wedstrijd with self.assert_max_queries(20): resp = self.client.post(url) self.assert404(resp) # 404 = Not allowed # slechte weekdag with self.assert_max_queries(20): resp = self.client.post( url, { 'weekdag': "XX", 'aanvang': '12:34', 'nhbver_pk': self.nhbver_112.ver_nr }) self.assert404(resp) # 404 = Not allowed # slechte weekdag with self.assert_max_queries(20): resp = self.client.post( url, { 'weekdag': 99, 'aanvang': '12:34', 'nhbver_pk': self.nhbver_112.ver_nr }) self.assert404(resp) # 404 = Not allowed # slechte weekdag with self.assert_max_queries(20): resp = self.client.post( url, { 'weekdag': "-1", 'aanvang': '12:34', 'nhbver_pk': self.nhbver_112.ver_nr }) self.assert404(resp) # 404 = Not allowed # weekdag buiten RK range (is 1 week lang) with self.assert_max_queries(20): resp = self.client.post( url, { 'weekdag': 30, 'aanvang': '12:34', 'nhbver_pk': self.nhbver_112.ver_nr }) self.assert404(resp) # 404 = Not allowed # slecht tijdstip with self.assert_max_queries(20): resp = self.client.post( url, { 'weekdag': 1, 'aanvang': '(*:#)', 'nhbver_pk': self.nhbver_112.ver_nr }) self.assert404(resp) # 404 = Not allowed # slecht tijdstip with self.assert_max_queries(20): resp = self.client.post( url, { 'weekdag': 1, 'aanvang': '12:60', 'nhbver_pk': self.nhbver_112.ver_nr }) self.assert404(resp) # 404 = Not allowed # bad vereniging nummer with self.assert_max_queries(20): resp = self.client.post(url, { 'weekdag': 1, 'aanvang': '12:34', 'nhbver_pk': 999999 }) self.assert404(resp) # 404 = Not allowed # niet toegestane vereniging with self.assert_max_queries(20): resp = self.client.post( url, { 'weekdag': 1, 'aanvang': '12:34', 'nhbver_pk': self.nhbver_112.ver_nr }) self.assert404(resp) # 404 = Not allowed # probeer wedstrijd van ander rayon te wijzigen self.e2e_login_and_pass_otp(self.account_rko2_18) self.e2e_wissel_naar_functie(self.functie_rko2_18) with self.assert_max_queries(20): resp = self.client.post( url, { 'weekdag': 1, 'aanvang': '12:34', 'nhbver_pk': self.nhbver_101.ver_nr }) self.assert403(resp) def test_lijst_rk(self): # RKO self.e2e_login_and_pass_otp(self.account_rko1_18) self.e2e_wissel_naar_functie(self.functie_rko1_18) url = self.url_lijst_rk % self.deelcomp_rayon1_18.pk with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used( resp, ('comprayon/rko-rk-selectie.dtl', 'plein/site_layout.dtl')) # nu doorzetten naar RK fase self.competitie_sluit_alle_regiocompetities(self.comp_18) self.e2e_login_and_pass_otp(self.account_bko_18) self.e2e_wissel_naar_functie(self.functie_bko_18) resp = self.client.post(self.url_doorzetten_rk % self.comp_18.pk) self.assert_is_redirect_not_plein(resp) # check for success # laat de mutaties verwerken management.call_command('regiocomp_mutaties', '1', '--quick', stderr=io.StringIO(), stdout=io.StringIO()) # zet een limiet limiet = DeelcompetitieKlasseLimiet( deelcompetitie=self.deelcomp_rayon1_18, klasse=self.klasse_r, limiet=20) limiet.save() self.assertTrue(str(limiet) != "") # coverage only # nu nog een keer, met een RK deelnemerslijst self.e2e_login_and_pass_otp(self.account_rko1_18) self.e2e_wissel_naar_functie(self.functie_rko1_18) deelnemer = KampioenschapSchutterBoog( deelcompetitie=self.deelcomp_rayon1_18, sporterboog=self.sporterboog, bij_vereniging=self.sporterboog.sporter.bij_vereniging, klasse=self.klasse_r) deelnemer.save() self.assertTrue(str(deelnemer) != "") # coverage only deelnemer = KampioenschapSchutterBoog( deelcompetitie=self.deelcomp_rayon1_18, sporterboog=self.sporterboog, bij_vereniging=self.sporterboog.sporter.bij_vereniging, klasse=self.klasse_c) deelnemer.save() with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used( resp, ('comprayon/rko-rk-selectie.dtl', 'plein/site_layout.dtl')) deelnemer.deelname = DEELNAME_JA deelnemer.save() with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used( resp, ('comprayon/rko-rk-selectie.dtl', 'plein/site_layout.dtl')) deelnemer.rank = 100 deelnemer.save() with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used( resp, ('comprayon/rko-rk-selectie.dtl', 'plein/site_layout.dtl')) deelnemer.bij_vereniging = None deelnemer.rank = 1 deelnemer.deelname = DEELNAME_NEE deelnemer.save() # twee deelnemers in dezelfde klasse deelnemer.pk = None deelnemer.save() with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used( resp, ('comprayon/rko-rk-selectie.dtl', 'plein/site_layout.dtl')) url = self.url_lijst_bestand % self.deelcomp_rayon1_18.pk with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assertContains(resp, "100007") self.assertContains(resp, "Schutter Test") self.assertContains(resp, "[1000] Grote Club") self.assertContains(resp, "(deelname onzeker)") self.assertContains(resp, "Recurve klasse 1") def test_bad_lijst_rk(self): # anon url = self.url_lijst_rk % self.deelcomp_rayon1_18.pk with self.assert_max_queries(20): resp = self.client.get(url) self.assert403(resp) # RKO self.e2e_login_and_pass_otp(self.account_rko1_18) self.e2e_wissel_naar_functie(self.functie_rko1_18) # regio deelcomp with self.assert_max_queries(20): resp = self.client.get(self.url_lijst_rk % self.deelcomp_regio101_18.pk) self.assert404(resp) # 404 = Not allowed # verkeerde rayon deelcomp with self.assert_max_queries(20): resp = self.client.get(self.url_lijst_rk % self.deelcomp_rayon2_18.pk) self.assert403(resp) # geen deelnemers lijst with self.assert_max_queries(20): resp = self.client.get(self.url_lijst_bestand % self.deelcomp_rayon1_18.pk) self.assert404(resp) # 404 = Not allowed # verkeerde rayon deelcomp - download self.deelcomp_rayon2_18.heeft_deelnemerslijst = True self.deelcomp_rayon2_18.save() with self.assert_max_queries(20): resp = self.client.get(self.url_lijst_bestand % self.deelcomp_rayon2_18.pk) self.assert403(resp) # bad deelcomp pk with self.assert_max_queries(20): resp = self.client.get(self.url_lijst_bestand % 999999) self.assert404(resp) # 404 = Not allowed def test_bad_wijzig_status(self): self.client.logout() url = self.url_wijzig_status % 999999 with self.assert_max_queries(20): resp = self.client.get(url) self.assert403(resp) # RKO self.e2e_login_and_pass_otp(self.account_rko1_18) self.e2e_wissel_naar_functie(self.functie_rko1_18) with self.assert_max_queries(20): resp = self.client.get(url) self.assert404(resp) # 404 = Not allowed with self.assert_max_queries(20): resp = self.client.post(url) self.assert404(resp) # 404 = Not allowed # verkeerde RKO self.e2e_login_and_pass_otp(self.account_rko2_18) self.e2e_wissel_naar_functie(self.functie_rko2_18) zet_competitie_fase(self.comp_18, 'J') deelnemer = KampioenschapSchutterBoog( deelcompetitie=self.deelcomp_rayon1_18, sporterboog=self.sporterboog, bij_vereniging=self.sporterboog.sporter.bij_vereniging, klasse=self.klasse_r) deelnemer.save() url = self.url_wijzig_status % deelnemer.pk with self.assert_max_queries(20): resp = self.client.get(url) self.assert403(resp) with self.assert_max_queries(20): resp = self.client.post(url) self.assert403(resp) def test_wijzig_status_rko(self): # RKO self.e2e_login_and_pass_otp(self.account_rko1_18) self.e2e_wissel_naar_functie(self.functie_rko1_18) zet_competitie_fase(self.comp_18, 'J') deelnemer = KampioenschapSchutterBoog( deelcompetitie=self.deelcomp_rayon1_18, sporterboog=self.sporterboog, bij_vereniging=self.sporterboog.sporter.bij_vereniging, klasse=self.klasse_r) deelnemer.save() url = self.url_wijzig_status % deelnemer.pk with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used(resp, ('comprayon/wijzig-status-rk-deelnemer.dtl', 'plein/site_layout.dtl')) # geen vereniging deelnemer.bij_vereniging = None deelnemer.save() with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assertEqual(CompetitieMutatie.objects.count(), 0) with self.assert_max_queries(20): resp = self.client.post(url, { 'bevestig': '0', 'afmelden': '0', 'snel': 1 }) self.assertEqual(CompetitieMutatie.objects.count(), 0) with self.assert_max_queries(20): resp = self.client.post(url, { 'bevestig': '0', 'afmelden': '1', 'snel': 1 }) self.assertEqual(CompetitieMutatie.objects.count(), 1) # bevestigen mag niet, want geen lid bij vereniging with self.assert_max_queries(20): resp = self.client.post(url, { 'bevestig': '1', 'afmelden': '0', 'snel': 1 }) self.assertEqual(CompetitieMutatie.objects.count(), 1) # verbouw 'time' en voer een test uit zonder 'snel' time.sleep = self._dummy_sleep with self.assert_max_queries(20): resp = self.client.post(url, {'bevestig': '0', 'afmelden': '1'}) time.sleep = sleep_oud self.assertEqual(CompetitieMutatie.objects.count(), 2) def test_wijzig_status_hwl(self): # HWL self.e2e_login_and_pass_otp(self.account_bko_18) self.e2e_wissel_naar_functie(self.functie_hwl) zet_competitie_fase(self.comp_18, 'J') deelnemer = KampioenschapSchutterBoog( deelcompetitie=self.deelcomp_rayon1_18, sporterboog=self.sporterboog, bij_vereniging=self.sporterboog.sporter.bij_vereniging, klasse=self.klasse_r) deelnemer.save() # probeer als HWL van een andere vereniging de status van deze sporter aan te passen url = self.url_wijzig_status % deelnemer.pk with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) with self.assert_max_queries(20): resp = self.client.post(url, {}) self.assertEqual(resp.status_code, 302) # 302 = redirect sporter = self.sporterboog.sporter sporter.bij_vereniging = self.ver_1100 sporter.save() deelnemer = KampioenschapSchutterBoog( deelcompetitie=self.deelcomp_rayon1_18, sporterboog=self.sporterboog, bij_vereniging=self.ver_1100, klasse=self.klasse_r) deelnemer.save() # probeer als HWL van een andere vereniging de status van deze sporter aan te passen url = self.url_wijzig_status % deelnemer.pk with self.assert_max_queries(20): resp = self.client.get(url) self.assert403(resp) with self.assert_max_queries(20): resp = self.client.post(url, {}) self.assert403(resp) def test_bad_wijzig_limiet(self): self.client.logout() url = self.url_wijzig_limiet % 999999 with self.assert_max_queries(20): resp = self.client.get(url) self.assert403(resp) # RKO self.e2e_login_and_pass_otp(self.account_rko1_18) self.e2e_wissel_naar_functie(self.functie_rko1_18) with self.assert_max_queries(20): resp = self.client.get(url) self.assert404(resp) # 404 = Not allowed with self.assert_max_queries(20): resp = self.client.post(url) self.assert404(resp) # 404 = Not allowed url = self.url_wijzig_limiet % self.deelcomp_rayon1_18.pk sel = 'sel_%s' % self.klasse_c.pk with self.assert_max_queries(20): resp = self.client.post(url, {sel: 'xx'}) self.assertEqual(resp.status_code, 302) # doorloopt alles with self.assert_max_queries(20): resp = self.client.post(url, {sel: '19'}) self.assert404(resp) # 404 = Not allowed # verkeerde RKO self.e2e_login_and_pass_otp(self.account_rko2_18) self.e2e_wissel_naar_functie(self.functie_rko2_18) url = self.url_wijzig_limiet % self.deelcomp_rayon1_18.pk with self.assert_max_queries(20): resp = self.client.get(url) self.assert403(resp) with self.assert_max_queries(20): resp = self.client.post(url) self.assert403(resp) def test_wijzig_limiet(self): # RKO self.e2e_login_and_pass_otp(self.account_rko1_18) self.e2e_wissel_naar_functie(self.functie_rko1_18) # zonder limiet aanwezig url = self.url_wijzig_limiet % self.deelcomp_rayon1_18.pk with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used( resp, ('comprayon/wijzig-limieten-rk.dtl', 'plein/site_layout.dtl')) sel = 'sel_%s' % self.klasse_r.pk # limiet op default zetten self.assertEqual(DeelcompetitieKlasseLimiet.objects.count(), 0) with self.assert_max_queries(20): resp = self.client.post(url, {sel: 24, 'snel': 1}) self.assert_is_redirect_not_plein(resp) # check for success self.assertEqual(DeelcompetitieKlasseLimiet.objects.count(), 0) # limiet zetten self.assertEqual(DeelcompetitieKlasseLimiet.objects.count(), 0) with self.assert_max_queries(20): resp = self.client.post(url, {sel: 20, 'snel': 1}) self.assert_is_redirect_not_plein(resp) # check for success self._verwerk_mutaties() self.assertEqual(DeelcompetitieKlasseLimiet.objects.count(), 1) # limiet opnieuw zetten, geen wijziging with self.assert_max_queries(20): resp = self.client.post(url, {sel: 20, 'snel': 1}) self.assert_is_redirect_not_plein(resp) # check for success self._verwerk_mutaties() self.assertEqual(DeelcompetitieKlasseLimiet.objects.count(), 1) # limiet aanpassen with self.assert_max_queries(20): resp = self.client.post(url, {sel: 16, 'snel': 1}) self.assert_is_redirect_not_plein(resp) # check for success self._verwerk_mutaties() self.assertEqual(DeelcompetitieKlasseLimiet.objects.count(), 1) # met limiet aanwezig url = self.url_wijzig_limiet % self.deelcomp_rayon1_18.pk with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) # limiet verwijderen, zonder 'snel' time.sleep = self._dummy_sleep with self.assert_max_queries(20): resp = self.client.post(url, {sel: 24}) self.assert_is_redirect_not_plein(resp) # check for success self._verwerk_mutaties() self.assertEqual(DeelcompetitieKlasseLimiet.objects.count(), 0) time.sleep = sleep_oud # nu met een deelnemer, zodat de mutatie opgestart wordt deelnemer = KampioenschapSchutterBoog( deelcompetitie=self.deelcomp_rayon1_18, sporterboog=self.sporterboog, bij_vereniging=self.sporterboog.sporter.bij_vereniging, klasse=self.klasse_r) deelnemer.save() aantal = CompetitieMutatie.objects.count() with self.assert_max_queries(20): resp = self.client.post(url, {sel: 4, 'snel': 1}) self.assert_is_redirect_not_plein(resp) # check for success self._verwerk_mutaties() self.assertEqual(CompetitieMutatie.objects.count(), aantal + 1)
class TestCompRegioPoules(E2EHelpers, TestCase): """ tests voor de CompRegio applicatie, Poules functie """ test_after = ('Competitie.test_fase', 'Competitie.test_beheerders', 'Competitie.test_competitie') url_regio_poules = '/bondscompetities/regio/poules/%s/' # deelcomp_pk url_wijzig_poule = '/bondscompetities/regio/poules/wijzig/%s/' # poule_pk testdata = None @classmethod def setUpTestData(cls): cls.testdata = testdata.TestData() cls.testdata.maak_accounts() def _prep_beheerder_lid(self, voornaam): lid_nr = self._next_lid_nr self._next_lid_nr += 1 sporter = Sporter() sporter.lid_nr = lid_nr sporter.geslacht = "M" sporter.voornaam = voornaam sporter.achternaam = "Tester" sporter.email = voornaam.lower() + "@nhb.test" sporter.geboorte_datum = datetime.date(year=1972, month=3, day=4) sporter.sinds_datum = datetime.date(year=2010, month=11, day=12) sporter.bij_vereniging = self.nhbver_101 sporter.save() return self.e2e_create_account(lid_nr, sporter.email, sporter.voornaam, accepteer_vhpg=True) def setUp(self): """ eenmalige setup voor alle tests wordt als eerste aangeroepen """ self._next_lid_nr = 100001 self.rayon_1 = NhbRayon.objects.get(rayon_nr=1) self.rayon_2 = NhbRayon.objects.get(rayon_nr=2) self.regio_101 = NhbRegio.objects.get(regio_nr=101) self.regio_105 = NhbRegio.objects.get(regio_nr=105) self.regio_112 = NhbRegio.objects.get(regio_nr=112) # maak een test vereniging ver = NhbVereniging() ver.naam = "Zuidelijke Club" ver.ver_nr = 1111 ver.regio = self.regio_112 # secretaris kan nog niet ingevuld worden ver.save() self.nhbver_112 = ver # maak een test vereniging ver = NhbVereniging() ver.naam = "Grote Club" ver.ver_nr = 1000 ver.regio = self.regio_101 # secretaris kan nog niet ingevuld worden ver.save() self.nhbver_101 = ver loc = WedstrijdLocatie(banen_18m=1, banen_25m=1, adres='De Spanning 1, Houtdorp') loc.save() loc.verenigingen.add(ver) self.loc = loc # maak HWL functie aan voor deze vereniging self.functie_hwl = maak_functie("HWL Vereniging %s" % ver.ver_nr, "HWL") self.functie_hwl.nhb_ver = ver self.functie_hwl.save() self.functie_wl = maak_functie("WL Vereniging %s" % ver.ver_nr, "WL") self.functie_wl.nhb_ver = ver self.functie_wl.save() # maak test leden aan die we kunnen koppelen aan beheerders functies self.account_bko_18 = self._prep_beheerder_lid('BKO') self.account_rko1_18 = self._prep_beheerder_lid('RKO1') self.account_rko2_18 = self._prep_beheerder_lid('RKO2') self.account_rcl101_18 = self._prep_beheerder_lid('RCL101') self.account_rcl101_25 = self._prep_beheerder_lid('RCL101-25') self.account_rcl112_18 = self._prep_beheerder_lid('RCL112') self.account_schutter = self._prep_beheerder_lid('Schutter') self.lid_sporter = Sporter.objects.get(lid_nr=self.account_schutter.username) self.boog_r = BoogType.objects.get(afkorting='R') self.sporterboog = SporterBoog(sporter=self.lid_sporter, boogtype=self.boog_r, voor_wedstrijd=True) self.sporterboog.save() # creëer een competitie met deelcompetities competities_aanmaken(jaar=2019) self.comp_18 = Competitie.objects.get(afstand='18') self.comp_25 = Competitie.objects.get(afstand='25') # een parallel competitie is noodzakelijk om corner-cases te raken competities_aanmaken(jaar=2020) # klassengrenzen vaststellen om de competitie voorbij fase A te krijgen self.e2e_login_and_pass_otp(self.testdata.account_bb) self.e2e_wisselnaarrol_bb() self.url_klassengrenzen_vaststellen_18 = '/bondscompetities/%s/klassengrenzen/vaststellen/' % self.comp_18.pk resp = self.client.post(self.url_klassengrenzen_vaststellen_18) self.assert_is_redirect_not_plein(resp) # check for success klasse = CompetitieKlasse.objects.get(competitie=self.comp_18, team__volgorde=10, is_voor_teams_rk_bk=False) klasse.min_ag = 29.0 klasse.save() klasse = CompetitieKlasse.objects.get(competitie=self.comp_18, team__volgorde=11, is_voor_teams_rk_bk=False) klasse.min_ag = 25.0 klasse.save() self.client.logout() self.klasse_recurve_onbekend = (CompetitieKlasse .objects .filter(indiv__boogtype=self.boog_r, indiv__is_onbekend=True) .all())[0] self.deelcomp_bond_18 = DeelCompetitie.objects.filter(laag=LAAG_BK, competitie=self.comp_18)[0] self.deelcomp_rayon1_18 = DeelCompetitie.objects.filter(laag=LAAG_RK, competitie=self.comp_18, nhb_rayon=self.rayon_1)[0] self.deelcomp_rayon2_18 = DeelCompetitie.objects.filter(laag=LAAG_RK, competitie=self.comp_18, nhb_rayon=self.rayon_2)[0] self.deelcomp_regio101_18 = DeelCompetitie.objects.filter(laag=LAAG_REGIO, competitie=self.comp_18, nhb_regio=self.regio_101)[0] self.deelcomp_regio101_25 = DeelCompetitie.objects.filter(laag=LAAG_REGIO, competitie=self.comp_25, nhb_regio=self.regio_101)[0] self.deelcomp_regio112_18 = DeelCompetitie.objects.filter(laag=LAAG_REGIO, competitie=self.comp_18, nhb_regio=self.regio_112)[0] self.cluster_101a_18 = NhbCluster.objects.get(regio=self.regio_101, letter='a', gebruik='18') self.cluster_101e_25 = NhbCluster.objects.get(regio=self.regio_101, letter='e', gebruik='25') self.functie_bko_18 = self.deelcomp_bond_18.functie self.functie_rko1_18 = self.deelcomp_rayon1_18.functie self.functie_rko2_18 = self.deelcomp_rayon2_18.functie self.functie_rcl101_18 = self.deelcomp_regio101_18.functie self.functie_rcl101_25 = self.deelcomp_regio101_25.functie self.functie_rcl112_18 = self.deelcomp_regio112_18.functie self.functie_bko_18.accounts.add(self.account_bko_18) self.functie_rko1_18.accounts.add(self.account_rko1_18) self.functie_rko2_18.accounts.add(self.account_rko2_18) self.functie_rcl101_18.accounts.add(self.account_rcl101_18) self.functie_rcl101_25.accounts.add(self.account_rcl101_25) self.functie_rcl112_18.accounts.add(self.account_rcl112_18) # maak nog een test vereniging, zonder HWL functie # stop deze in een cluster ver = NhbVereniging() ver.naam = "Kleine Club" ver.ver_nr = "1100" ver.regio = self.regio_101 ver.save() ver.clusters.add(self.cluster_101e_25) def test_poules_basic(self): self.e2e_login_and_pass_otp(self.account_rcl112_18) self.e2e_wissel_naar_functie(self.functie_rcl112_18) deelcomp = DeelCompetitie.objects.get(competitie=self.comp_18, functie=self.functie_rcl112_18) url = self.url_regio_poules % deelcomp.pk with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used(resp, ('compregio/rcl-teams-poules.dtl', 'plein/site_layout.dtl')) # tot en met fase D mag alles nog comp = deelcomp.competitie zet_competitie_fase(comp, 'D') # maak een poule aan self.assertEqual(0, RegiocompetitieTeamPoule.objects.count()) with self.assert_max_queries(20): resp = self.client.post(url) self.assert_is_redirect(resp, url) self.assertEqual(1, RegiocompetitieTeamPoule.objects.count()) poule = RegiocompetitieTeamPoule.objects.all()[0] # coverage self.assertTrue(str(poule) != "") # bad deelcomp bad_url = self.url_regio_poules % 999999 resp = self.client.get(bad_url) self.assert404(resp) resp = self.client.post(bad_url) self.assert404(resp) # verkeerde beheerder bad_url = self.url_regio_poules % self.deelcomp_regio101_18.pk resp = self.client.get(bad_url) self.assert403(resp) resp = self.client.post(bad_url) self.assert403(resp) # wijzig de poule url = self.url_wijzig_poule % poule.pk with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used(resp, ('compregio/wijzig-poule.dtl', 'plein/site_layout.dtl')) with self.assert_max_queries(20): resp = self.client.post(url, {'beschrijving': ' hoi test!'}) self.assert_is_redirect_not_plein(resp) poule = RegiocompetitieTeamPoule.objects.get(pk=poule.pk) self.assertEqual(poule.beschrijving, 'hoi test!') # wijziging is geen wijziging resp = self.client.post(url, {'beschrijving': ' hoi test!'}) self.assert_is_redirect_not_plein(resp) # bad poule bad_url = self.url_wijzig_poule % 999999 resp = self.client.get(bad_url) self.assert404(resp) resp = self.client.post(bad_url) self.assert404(resp) # verkeerde beheerder poule.deelcompetitie = self.deelcomp_regio101_25 poule.save(update_fields=['deelcompetitie']) bad_url = self.url_wijzig_poule % poule.pk resp = self.client.get(bad_url) self.assert403(resp) resp = self.client.post(bad_url) self.assert403(resp) poule.deelcompetitie = self.deelcomp_regio112_18 poule.save(update_fields=['deelcompetitie']) # overzicht met een poule erin url = self.url_regio_poules % deelcomp.pk with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) # na fase D mag je nog kijken maar niet aanpassen comp = deelcomp.competitie zet_competitie_fase(comp, 'E') url = self.url_regio_poules % deelcomp.pk with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used(resp, ('compregio/rcl-teams-poules.dtl', 'plein/site_layout.dtl')) # maak een poule aan self.assertEqual(1, RegiocompetitieTeamPoule.objects.count()) with self.assert_max_queries(20): resp = self.client.post(url) self.assert404(resp) self.assertEqual(1, RegiocompetitieTeamPoule.objects.count()) # fase E: wijzig de poule url = self.url_wijzig_poule % poule.pk with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used(resp, ('compregio/wijzig-poule.dtl', 'plein/site_layout.dtl')) with self.assert_max_queries(20): resp = self.client.post(url, {'beschrijving': 'nieuwe test'}) self.assert_is_redirect_not_plein(resp) # TODO: controleer dat de teams gekoppeld aan de poule niet meer te wijzigen zijn # zet fase F, dan mag niets meer gewijzigd worden zet_competitie_fase(comp, 'F') with self.assert_max_queries(20): resp = self.client.get(url) self.assert404(resp) with self.assert_max_queries(20): resp = self.client.post(url, {'beschrijving': 'nieuwe test'}) self.assert404(resp) # terug naar fase D comp = deelcomp.competitie zet_competitie_fase(comp, 'D') # verwijder een poule self.assertEqual(1, RegiocompetitieTeamPoule.objects.count()) url = self.url_wijzig_poule % poule.pk with self.assert_max_queries(20): resp = self.client.post(url, {'verwijder_poule': 'aj'}) self.assert_is_redirect_not_plein(resp) self.assertEqual(0, RegiocompetitieTeamPoule.objects.count()) def test_poules_teams(self): self.e2e_login_and_pass_otp(self.account_rcl112_18) self.e2e_wissel_naar_functie(self.functie_rcl112_18) # maak een poule aan deelcomp = DeelCompetitie.objects.get(competitie=self.comp_18, functie=self.functie_rcl112_18) # tot en met fase D mag alles nog comp = deelcomp.competitie zet_competitie_fase(comp, 'B') url = self.url_regio_poules % deelcomp.pk with self.assert_max_queries(20): resp = self.client.post(url) self.assert_is_redirect(resp, url) self.assertEqual(1, RegiocompetitieTeamPoule.objects.count()) poule = RegiocompetitieTeamPoule.objects.all()[0] # maak 9 teams aan type_r = TeamType.objects.get(afkorting='R') klasse_r_ere = CompetitieKlasse.objects.filter(team__team_type=type_r).order_by('team__volgorde')[0] for lp in range(9): # team zonder sporters maar wel in een klasse is genoeg voor een poule RegiocompetitieTeam( deelcompetitie=deelcomp, vereniging=self.nhbver_112, volg_nr=lp + 1, team_type=type_r, team_naam='Recurve Testers %s' % (lp + 1), klasse=klasse_r_ere).save() # for team_pks = list(RegiocompetitieTeam.objects.values_list('pk', flat=True)) # maak een compound team aan type_c = TeamType.objects.get(afkorting='C') klasse_c_ere = CompetitieKlasse.objects.filter(team__team_type=type_c).order_by('team__volgorde')[0] team_c = RegiocompetitieTeam( deelcompetitie=deelcomp, vereniging=self.nhbver_112, volg_nr=1, team_type=type_c, team_naam='Compound Testers 9', klasse=klasse_c_ere) team_c.save() # koppel 5 teams aan de poule url = self.url_wijzig_poule % poule.pk params = dict() for pk in team_pks[:5]: params['team_%s' % pk] = 1 with self.assert_max_queries(20): resp = self.client.post(url, params) self.assert_is_redirect_not_plein(resp) poule = RegiocompetitieTeamPoule.objects.prefetch_related('teams').get(pk=poule.pk) self.assertEqual(5, poule.teams.count()) with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used(resp, ('compregio/wijzig-poule.dtl', 'plein/site_layout.dtl')) # compound team bij recurve-meerderheid wordt niet geaccepteerd (silently ignored) params['team_%s' % team_c.pk] = 1 with self.assert_max_queries(20): resp = self.client.post(url, params) self.assert_is_redirect_not_plein(resp) poule = RegiocompetitieTeamPoule.objects.prefetch_related('teams').get(pk=poule.pk) self.assertEqual(5, poule.teams.count()) # koppel 9 teams aan de poule self.assertEqual(9, len(team_pks)) params = dict() for pk in team_pks: params['team_%s' % pk] = 1 with self.assert_max_queries(20): resp = self.client.post(url, params) self.assert_is_redirect_not_plein(resp) poule = RegiocompetitieTeamPoule.objects.prefetch_related('teams').get(pk=poule.pk) self.assertEqual(8, poule.teams.count())