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 _maak_competitie_aan(self): # maak de competitie aan competities_aanmaken() self.comp = comp_18 = Competitie.objects.get(afstand='18') comp_25 = Competitie.objects.get(afstand='25') score_indiv_ag_opslaan(self.sporterboog_100005, 18, 9.500, None, "Test") # klassengrenzen vaststellen competitie_klassengrenzen_vaststellen(comp_18) competitie_klassengrenzen_vaststellen(comp_25) self.deelcomp_r101 = DeelCompetitie.objects.filter( laag=LAAG_REGIO, competitie=self.comp, nhb_regio=self.regio_101)[0] # login als BB self.e2e_login_and_pass_otp(self.account_bb) # wissel naar RCL functie self.e2e_wissel_naar_functie(self.deelcomp_r101.functie) # maak een regioplanning aan met 2 wedstrijden self.client.post(self.url_planning_regio % self.deelcomp_r101.pk) ronde = DeelcompetitieRonde.objects.all()[0] # maak 7 wedstrijden aan self.client.post(self.url_planning_regio_ronde % ronde.pk, {}) self.client.post(self.url_planning_regio_ronde % ronde.pk, {}) self.client.post(self.url_planning_regio_ronde % ronde.pk, {}) self.client.post(self.url_planning_regio_ronde % ronde.pk, {}) self.client.post(self.url_planning_regio_ronde % ronde.pk, {}) self.client.post(self.url_planning_regio_ronde % ronde.pk, {}) self.client.post(self.url_planning_regio_ronde % ronde.pk, {}) self.assertEqual(7, CompetitieWedstrijd.objects.count()) wedstrijd_pks = CompetitieWedstrijd.objects.all().values_list( 'pk', flat=True) # laat de wedstrijd.uitslag aanmaken en pas de wedstrijd nog wat aan self.uitslagen = list() uur = 1 for pk in wedstrijd_pks[:]: # copy to ensure stable with self.assert_max_queries(20): resp = self.client.get(self.url_uitslag_invoeren % pk) wedstrijd = CompetitieWedstrijd.objects.get(pk=pk) self.assertIsNotNone(wedstrijd.uitslag) wedstrijd.vereniging = self.ver wedstrijd.tijd_begin_wedstrijd = "%02d:00" % uur uur = (uur + 1) % 24 wedstrijd.save() self.uitslagen.append(wedstrijd.uitslag) # for # maak nog een wedstrijd aan - die blijft zonder uitslag self.client.post(self.url_planning_regio_ronde % ronde.pk, {})
def _zet_ag(self, lid_nr, afstand): if lid_nr == 100003: afkorting = 'BB' elif lid_nr == 100013: afkorting = 'IB' else: afkorting = 'R' sporterboog = SporterBoog.objects.get(sporter__lid_nr=lid_nr, boogtype__afkorting=afkorting) score_indiv_ag_opslaan(sporterboog, afstand, 7.42, self.account_hwl, 'Test AG %s' % afstand)
def _zet_ag(self, lid_nr, afstand, waarde=7.42): if lid_nr == 100003: sporterboog = SporterBoog.objects.get(sporter__lid_nr=lid_nr, boogtype__afkorting='BB') score_indiv_ag_opslaan(sporterboog, afstand, waarde, self.account_hwl, 'Test AG %s' % afstand) sporterboog = SporterBoog.objects.get(sporter__lid_nr=lid_nr, boogtype__afkorting='R') score_indiv_ag_opslaan(sporterboog, afstand, waarde, self.account_hwl, 'Test AG %s' % afstand)
def test_inschrijfmethode1(self): # log in as BB en maak de competitie aan self.e2e_login_and_pass_otp(self.testdata.account_admin) self.e2e_wisselnaarrol_bb() self._competitie_aanmaken() # zet de deelcompetitie op inschrijfmethode 1 deelcomp = DeelCompetitie.objects.get(competitie__afstand='18', nhb_regio=self.nhbver.regio) deelcomp.inschrijf_methode = INSCHRIJF_METHODE_1 deelcomp.save() # log in as schutter en prep voor inschrijving self.e2e_login(self.account_normaal) self._prep_voorkeuren() sporterboog = SporterBoog.objects.get(boogtype__afkorting='R') res = score_indiv_ag_opslaan(sporterboog, 18, 8.18, None, 'Test') self.assertTrue(res) # schrijf de schutter in voor de 18m Recurve url = self.url_aanmelden % (deelcomp.pk, sporterboog.pk) with self.assert_max_queries(20): resp = self.client.post(url) self.assert_is_redirect(resp, self.url_profiel) with self.assert_max_queries(20): resp = self.client.get(self.url_profiel) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used(resp, ('sporter/profiel.dtl', 'plein/site_layout.dtl'))
def test_afmelden_geen_voorkeur_meer(self): # log in as BB en maak de competitie aan self.e2e_login_and_pass_otp(self.testdata.account_admin) self.e2e_wisselnaarrol_bb() self._competitie_aanmaken() # log in as schutter self.client.logout() self.e2e_login(self.account_normaal) self._prep_voorkeuren(100001) # aanmelden voor de 18m Recurve, met AG self.assertEqual(RegioCompetitieSchutterBoog.objects.count(), 0) sporterboog_18 = SporterBoog.objects.get(boogtype__afkorting='R') deelcomp = DeelCompetitie.objects.get(competitie__afstand='18', nhb_regio=self.nhbver.regio) res = score_indiv_ag_opslaan(sporterboog_18, 18, 8.18, None, 'Test') self.assertTrue(res) with self.assert_max_queries(20): resp = self.client.post(self.url_aanmelden % (deelcomp.pk, sporterboog_18.pk)) self.assert_is_redirect(resp, self.url_profiel) inschrijving_18 = RegioCompetitieSchutterBoog.objects.all()[0] # voorkeur boogtype uitzetten sporterboog_18.voor_wedstrijd = False sporterboog_18.save() # afmelden van de 18m self.assertEqual(RegioCompetitieSchutterBoog.objects.count(), 1) with self.assert_max_queries(20): resp = self.client.post(self.url_afmelden % inschrijving_18.pk) self.assert_is_redirect(resp, self.url_profiel) self.assertEqual(RegioCompetitieSchutterBoog.objects.count(), 0)
def test_inschrijven_methode3_alle_dagdelen(self): regio_105 = NhbRegio.objects.get(pk=105) self.nhbver.regio = regio_105 self.nhbver.save() # log in as BB en maak de competitie aan self.e2e_login_and_pass_otp(self.testdata.account_admin) self.e2e_wisselnaarrol_bb() self._competitie_aanmaken() deelcomp = DeelCompetitie.objects.get(competitie__afstand='18', nhb_regio=regio_105) deelcomp.inschrijf_methode = INSCHRIJF_METHODE_3 deelcomp.toegestane_dagdelen = '' # alles toegestaan deelcomp.save() # log in as schutter self.client.logout() self.e2e_login(self.account_normaal) self._prep_voorkeuren(100001) # schrijf in voor de 18m Recurve, met AG sporterboog = SporterBoog.objects.get(boogtype__afkorting='R') deelcomp = DeelCompetitie.objects.get(competitie__afstand='18', nhb_regio=self.nhbver.regio) # haal de bevestig pagina op met het formulier url = self.url_bevestig_aanmelden % (deelcomp.pk, sporterboog.pk) with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) self.assert_html_ok(resp) self.assert_template_used(resp, ('compinschrijven/sporter-bevestig-aanmelden.dtl', 'plein/site_layout.dtl')) self.assertContains(resp, 'eigen blazoen') self.assertContains(resp, 'Zaterdag') self.assertContains(resp, 'Zondag') self.assertContains(resp, 's Avonds') self.assertContains(resp, 'Weekend') # geef dagdeel door self.assertEqual(RegioCompetitieSchutterBoog.objects.count(), 0) res = score_indiv_ag_opslaan(sporterboog, 18, 8.18, None, 'Test') self.assertTrue(res) url = self.url_aanmelden % (deelcomp.pk, sporterboog.pk) with self.assert_max_queries(20): resp = self.client.post(url, {'dagdeel': 'AV'}) self.assert_is_redirect(resp, self.url_profiel) self.assertEqual(RegioCompetitieSchutterBoog.objects.count(), 1) inschrijving = RegioCompetitieSchutterBoog.objects.all()[0] self.assertFalse(inschrijving.inschrijf_voorkeur_team) self.assertEqual(inschrijving.inschrijf_notitie, '') self.assertEqual(inschrijving.inschrijf_voorkeur_dagdeel, 'AV') self.assertEqual(str(inschrijving.ag_voor_indiv), "8.180") self.assertEqual(str(inschrijving.ag_voor_team), "8.180") self.assertFalse(inschrijving.ag_voor_team_mag_aangepast_worden)
def test_inschrijven_team(self): # log in as BB en maak de competitie aan self.e2e_login_and_pass_otp(self.testdata.account_admin) self.e2e_wisselnaarrol_bb() self._competitie_aanmaken() # log in as schutter self.client.logout() self.e2e_login(self.account_normaal) self._prep_voorkeuren(100001) # schrijf in voor de 18m Recurve, met AG # geef ook team schieten en opmerking door self.assertEqual(RegioCompetitieSchutterBoog.objects.count(), 0) sporterboog = SporterBoog.objects.get(boogtype__afkorting='R') deelcomp = DeelCompetitie.objects.get(competitie__afstand='18', nhb_regio=self.nhbver.regio) res = score_indiv_ag_opslaan(sporterboog, 18, 8.18, None, 'Test') self.assertTrue(res) url = self.url_aanmelden % (deelcomp.pk, sporterboog.pk) with self.assert_max_queries(20): resp = self.client.post(url, {'wil_in_team': 'yes', 'opmerking': 'Hallo daar!'}) self.assert_is_redirect(resp, self.url_profiel) self.assertEqual(RegioCompetitieSchutterBoog.objects.count(), 1) inschrijving = RegioCompetitieSchutterBoog.objects.all()[0] self.assertEqual(str(inschrijving.ag_voor_indiv), "8.180") self.assertEqual(str(inschrijving.ag_voor_team), "8.180") self.assertFalse(inschrijving.ag_voor_team_mag_aangepast_worden) self.assertEqual(inschrijving.deelcompetitie, deelcomp) self.assertEqual(inschrijving.sporterboog, sporterboog) self.assertEqual(inschrijving.bij_vereniging, sporterboog.sporter.bij_vereniging) self.assertTrue(inschrijving.inschrijf_voorkeur_team) self.assertEqual(inschrijving.inschrijf_notitie, 'Hallo daar!') self.assertEqual(inschrijving.inschrijf_voorkeur_dagdeel, 'GN') # schrijf in voor de 25m BB, zonder AG, als aspirant self.sporter1.geboorte_datum = datetime.date(year=timezone.now().year - 12, month=1, day=1) self.sporter1.save() self.assertEqual(RegioCompetitieSchutterBoog.objects.count(), 1) sporterboog = SporterBoog.objects.get(boogtype__afkorting='BB') deelcomp = DeelCompetitie.objects.get(competitie__afstand='25', nhb_regio=self.nhbver.regio) with self.assert_max_queries(20): resp = self.client.post(self.url_aanmelden % (deelcomp.pk, sporterboog.pk), {'wil_in_team': 'ja', 'opmerking': 'ben ik oud genoeg?'}) self.assert_is_redirect(resp, self.url_profiel) self.assertEqual(RegioCompetitieSchutterBoog.objects.count(), 2) inschrijving = RegioCompetitieSchutterBoog.objects.filter(sporterboog=sporterboog).all()[0] self.assertEqual(inschrijving.inschrijf_notitie, 'ben ik oud genoeg?') self.assertFalse(inschrijving.inschrijf_voorkeur_team)
def test_geen_klasse(self): # log in as BB en maak de competitie aan self.e2e_login_and_pass_otp(self.testdata.account_admin) self.e2e_wisselnaarrol_bb() self._competitie_aanmaken() # log in as schutter self.client.logout() self.e2e_login(self.account_normaal) self._prep_voorkeuren(100001) # voorkeuren en AG zetten self.assertEqual(RegioCompetitieSchutterBoog.objects.count(), 0) sporterboog = SporterBoog.objects.get(boogtype__afkorting='R') deelcomp = DeelCompetitie.objects.get(competitie__afstand='18', nhb_regio=self.nhbver.regio) res = score_indiv_ag_opslaan(sporterboog, 18, 8.18, None, 'Test') self.assertTrue(res) # extreem: aanmelden zonder passende klasse # zet het min_ag te hoog for klasse in CompetitieKlasse.objects.filter(competitie=deelcomp.competitie, indiv__boogtype__afkorting='R', min_ag__lt=8.0): klasse.min_ag = 8.2 # > 8.18 van zet_ag klasse.save(update_fields=['min_ag']) # for # verwijder alle klassen 'onbekend' for klasse in CompetitieKlasse.objects.filter(indiv__is_onbekend=True): indiv = klasse.indiv indiv.is_onbekend = False indiv.save(update_fields=['is_onbekend']) # for # haal de bevestig pagina op met het formulier url = self.url_bevestig_aanmelden % (deelcomp.pk, sporterboog.pk) with self.assert_max_queries(20): resp = self.client.get(url) self.assert404(resp, 'Geen passende wedstrijdklasse') # probeer de post url = self.url_aanmelden % (deelcomp.pk, sporterboog.pk) with self.assert_max_queries(20): resp = self.client.post(url) self.assert404(resp, 'Geen passende wedstrijdklasse')
def test_team_udvl(self): # controleer dat het filter voor uiterste datum van lidmaatschap werkt # log in as BB en maak de competitie aan self.e2e_login_and_pass_otp(self.testdata.account_admin) self.e2e_wisselnaarrol_bb() self._competitie_aanmaken() comp = Competitie.objects.get(afstand='18') # sporter1.sinds_datum = datetime.date(year=2010, month=11, day=12) comp.uiterste_datum_lid = datetime.date(year=2010, month=11, day=11) comp.save() # log in as schutter self.client.logout() self.e2e_login(self.account_normaal) self._prep_voorkeuren(100001) # schrijf in voor de 18m Recurve, met AG # geef ook team schieten en opmerking door self.assertEqual(RegioCompetitieSchutterBoog.objects.count(), 0) sporterboog = SporterBoog.objects.get(boogtype__afkorting='R') deelcomp = DeelCompetitie.objects.get(competitie__afstand='18', nhb_regio=self.nhbver.regio) res = score_indiv_ag_opslaan(sporterboog, 18, 8.18, None, 'Test') self.assertTrue(res) url = self.url_aanmelden % (deelcomp.pk, sporterboog.pk) with self.assert_max_queries(20): resp = self.client.post(url, {'wil_in_team': 'yes'}) self.assert_is_redirect(resp, self.url_profiel) self.assertEqual(RegioCompetitieSchutterBoog.objects.count(), 1) inschrijving = RegioCompetitieSchutterBoog.objects.all()[0] self.assertEqual(inschrijving.deelcompetitie, deelcomp) self.assertEqual(inschrijving.sporterboog, sporterboog) self.assertEqual(inschrijving.bij_vereniging, sporterboog.sporter.bij_vereniging) self.assertFalse(inschrijving.inschrijf_voorkeur_team) # belangrijkste testresultaat
def test_geen_voorkeur_competities(self): # toon geen regiocompetities als de schutter geen interesse heeft # log in as BB en maak de competitie aan self.e2e_login_and_pass_otp(self.testdata.account_admin) self.e2e_wisselnaarrol_bb() self._competitie_aanmaken() self.client.logout() # zonder login --> terug naar het plein with self.assert_max_queries(20): resp = self.client.get(self.url_profiel) self.assert403(resp) # log in as schutter self.e2e_login(self.account_normaal) self._prep_voorkeuren() # competitie wordt niet getoond in vroege fases zet_competitie_fase(self.comp_18, 'A2') with self.assert_max_queries(21): resp = self.client.get(self.url_profiel) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) zet_competitie_fase(self.comp_18, 'B') # met standaard voorkeuren worden de regiocompetities getoond voorkeuren, _ = SporterVoorkeuren.objects.get_or_create(sporter=self.sporter1) self.assertTrue(voorkeuren.voorkeur_meedoen_competitie) with self.assert_max_queries(21): resp = self.client.get(self.url_profiel) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used(resp, ('sporter/profiel.dtl', 'plein/site_layout.dtl')) self.assertContains(resp, 'De volgende competities worden georganiseerd') # uitgezet worden de regiocompetities niet getoond voorkeuren.voorkeur_meedoen_competitie = False voorkeuren.save() with self.assert_max_queries(21): resp = self.client.get(self.url_profiel) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used(resp, ('sporter/profiel.dtl', 'plein/site_layout.dtl')) self.assertNotContains(resp, 'De volgende competities worden georganiseerd') # schrijf de schutter in voor de 18m Recurve sporterboog = SporterBoog.objects.get(boogtype__afkorting='R') deelcomp = DeelCompetitie.objects.get(competitie__afstand='18', nhb_regio=self.nhbver.regio) res = score_indiv_ag_opslaan(sporterboog, 18, 8.18, None, 'Test') self.assertTrue(res) url = self.url_aanmelden % (deelcomp.pk, sporterboog.pk) with self.assert_max_queries(20): resp = self.client.post(url, {'opmerking': 'test van de 18m'}) self.assert_is_redirect(resp, self.url_profiel) # voorkeur net uitgezet, maar nog wel ingeschreven with self.assert_max_queries(21): resp = self.client.get(self.url_profiel) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used(resp, ('sporter/profiel.dtl', 'plein/site_layout.dtl'))
def test_compleet(self): url_kies = '/bondscompetities/' # log in as schutter self.e2e_login(self.account_normaal) self._prep_voorkeuren() with self.assert_max_queries(20): resp = self.client.get(self.url_profiel) self.assertNotContains(resp, 'De volgende competities worden georganiseerd') # competitie aanmaken comp_18, comp_25 = maak_competities_en_zet_fase_b() # log in as schutter self.e2e_login(self.account_normaal) self._prep_voorkeuren() # controleer dat inschrijven mogelijk is with self.assert_max_queries(20): resp = self.client.get(self.url_profiel) self.assertContains(resp, 'De volgende competities worden georganiseerd') self.assertContains(resp, 'De inschrijving is open tot ') self.assertContains(resp, 'De volgende competities passen bij de bogen waar jij mee schiet:') urls = self.extract_all_urls(resp, skip_menu=True) # print('urls:', urls) urls = [url for url in urls if '/bondscompetities/deelnemen/aanmelden/' in url] self.assertEqual(len(urls), 2) # schrijf de schutter in voor de 18m Recurve sporterboog = SporterBoog.objects.get(boogtype__afkorting='R') deelcomp = DeelCompetitie.objects.get(competitie__afstand='18', nhb_regio=self.nhbver.regio) res = score_indiv_ag_opslaan(sporterboog, 18, 8.18, None, 'Test') self.assertTrue(res) url = self.url_aanmelden % (deelcomp.pk, sporterboog.pk) with self.assert_max_queries(20): resp = self.client.post(url, {'opmerking': 'test van de 18m'}) self.assert_is_redirect(resp, self.url_profiel) deelcomp = DeelCompetitie.objects.get(competitie__afstand='25', nhb_regio=self.nhbver.regio) # zet de 25m door naar fase C zet_competitie_fase(comp_25, 'C') # controleer dat inschrijven nog mogelijk is voor 25m en uitschrijven voor 18m with self.assert_max_queries(20): resp = self.client.get(self.url_profiel) self.assertContains(resp, 'De volgende competities worden georganiseerd') self.assertContains(resp, 'De inschrijving is open tot ') # 18m self.assertContains(resp, 'Aanmelden kan nog tot 1 februari 20') # 25m urls = self.extract_all_urls(resp, skip_menu=True) urls2 = [url for url in urls if '/bondscompetities/deelnemen/aanmelden/' in url] self.assertEqual(len(urls2), 1) urls2 = [url for url in urls if '/bondscompetities/deelnemen/afmelden/' in url] self.assertEqual(len(urls2), 1) # afmelden moet nog kunnen als de wedstrijdboog weer uitgezet is sporterboog_bb = SporterBoog.objects.get(boogtype__afkorting='R') sporterboog_bb.voor_wedstrijd = False sporterboog_bb.save() with self.assert_max_queries(23): resp = self.client.get(self.url_profiel) urls = self.extract_all_urls(resp, skip_menu=True) # print('urls:', urls) urls2 = [url for url in urls if '/bondscompetities/deelnemen/aanmelden/' in url] self.assertEqual(len(urls2), 0) urls2 = [url for url in urls if '/bondscompetities/deelnemen/afmelden/' in url] self.assertEqual(len(urls2), 1) sporterboog_bb.voor_wedstrijd = True sporterboog_bb.save() # zet de barebow boog 'aan' en schrijf in voor 25m BB sporterboog_bb = SporterBoog.objects.get(boogtype__afkorting='BB') sporterboog_bb.voor_wedstrijd = True sporterboog_bb.save() url = self.url_aanmelden % (deelcomp.pk, sporterboog_bb.pk) with self.assert_max_queries(20): resp = self.client.post(url, {'wil_in_team': 'on'}) self.assert_is_redirect(resp, self.url_profiel) sporterboog_bb.voor_wedstrijd = False sporterboog_bb.save() # zet de 18m ook door naar fase F zet_competitie_fase(comp_18, 'F') # haal de profiel pagina op with self.assert_max_queries(25): resp = self.client.get(self.url_profiel) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assert_template_used(resp, ('sporter/profiel.dtl', 'plein/site_layout.dtl')) self.assertContains(resp, 'De inschrijving is gesloten') # 18m self.assertContains(resp, 'Aanmelden kan nog tot 1 februari 20') # 25m # zet aanvangsgemiddelden voor 18m en 25m Score.objects.all().delete() # nieuw vastgestelde AG is van vandaag obj = SporterBoog.objects.get(boogtype__afkorting='R') score_indiv_ag_opslaan(obj, 18, 9.018, None, 'Test opmerking A') score_indiv_ag_opslaan(obj, 25, 2.5, None, 'Test opmerking B') with self.assert_max_queries(25): resp = self.client.get(self.url_profiel) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.assertContains(resp, "2,500") self.assertContains(resp, "9,018") self.assertContains(resp, "Test opmerking A") self.assertContains(resp, "Test opmerking B") # variant met Score zonder ScoreHist ScoreHist.objects.all().delete() with self.assert_max_queries(25): resp = self.client.get(self.url_profiel) self.assertEqual(resp.status_code, 200) # 200 = OK self.assert_html_ok(resp) self.e2e_assert_other_http_commands_not_supported(self.url_profiel) # zet de 18m door naar RK fase # zet de 25m door naar BK fase zet_competitie_fase(comp_18, 'K') zet_competitie_fase(comp_25, 'P') with self.assert_max_queries(23): resp = self.client.get(self.url_profiel) self.assertContains(resp, 'Rayonkampioenschappen') # 18m self.assertContains(resp, 'Bondskampioenschappen') # 25m
def test_inschrijven_methode1(self): regio_101 = NhbRegio.objects.get(pk=101) self.nhbver.regio = regio_101 self.nhbver.save() # log in as BB en maak de competitie aan self.e2e_login_and_pass_otp(self.testdata.account_admin) self.e2e_wisselnaarrol_bb() self._competitie_aanmaken() deelcomp = DeelCompetitie.objects.get(competitie__afstand='18', nhb_regio=regio_101) deelcomp.inschrijf_methode = INSCHRIJF_METHODE_1 deelcomp.save() # maak een aantal wedstrijden aan, als RCL van Regio 101 functie_rcl101 = Functie.objects.get(rol='RCL', comp_type='18', nhb_regio=regio_101) self.e2e_wissel_naar_functie(functie_rcl101) url = self.url_planning_regio % deelcomp.pk # TODO: commentaar hieronder zegt GET doet iets aanmaken. Moet niet! # haal de (lege) planning op. Dit maakt ook meteen de enige ronde aan with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK # haal de planning op (maakt opnieuw een ronde aan) with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) # 200 = OK ronde_pk = DeelcompetitieRonde.objects.filter(deelcompetitie=deelcomp)[0].pk # haal de ronde planning op url_ronde = self.url_planning_regio_ronde_methode1 % ronde_pk with self.assert_max_queries(20): resp = self.client.get(url_ronde) self.assertEqual(resp.status_code, 200) # 200 = OK # maak een wedstrijd aan self.assertEqual(CompetitieWedstrijd.objects.count(), 0) with self.assert_max_queries(20): resp = self.client.post(url_ronde) self.assert_is_redirect_not_plein(resp) wedstrijd_pk = CompetitieWedstrijd.objects.all()[0].pk # wijzig de instellingen van deze wedstrijd url_wed = self.url_wijzig_wedstrijd % wedstrijd_pk with self.assert_max_queries(20): resp = self.client.post(url_wed, {'nhbver_pk': self.nhbver.pk, 'wanneer': '2020-12-11', 'aanvang': '12:34'}) self.assert_is_redirect(resp, url_ronde) # maak nog een paar wedstrijden aan (voor later gebruik) for lp in range(7): with self.assert_max_queries(20): resp = self.client.post(url_ronde) self.assert_is_redirect_not_plein(resp) # for # log in as schutter self.client.logout() self.e2e_login(self.account_normaal) self._prep_voorkeuren(100001) # schrijf in voor de 18m Recurve, met AG sporterboog = SporterBoog.objects.get(boogtype__afkorting='R') # haal de bevestig pagina op met het formulier url = self.url_bevestig_aanmelden % (deelcomp.pk, sporterboog.pk) with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) self.assert_html_ok(resp) self.assert_template_used(resp, ('compinschrijven/sporter-bevestig-aanmelden.dtl', 'plein/site_layout.dtl')) self.assertContains(resp, 'eigen blazoen') self.assertContains(resp, 'Kies wanneer je wilt schieten') self.assertContains(resp, '11 december 2020 om 12:34') # special: zet het vastgestelde AG op 0.000 score_indiv_ag_opslaan(sporterboog, 18, 0.0, None, 'Test') # doe de inschrijving url = self.url_aanmelden % (deelcomp.pk, sporterboog.pk) with self.assert_max_queries(20): resp = self.client.post(url, {'wedstrijd_%s' % wedstrijd_pk: 'on', 'wedstrijd_99999': 'on'}) # is ignored self.assert_is_redirect(resp, self.url_profiel) aanmelding = RegioCompetitieSchutterBoog.objects.get(sporterboog=sporterboog) self.assertEqual(aanmelding.ag_voor_indiv, 0.0) self.assertEqual(aanmelding.ag_voor_team, 0.0) self.assertTrue(aanmelding.ag_voor_team_mag_aangepast_worden) # doe nog een inschrijving self.e2e_login(self.account_twee) self._prep_voorkeuren(100002) sporterboog2 = SporterBoog.objects.get(sporter__lid_nr=100002, boogtype__afkorting='R') # doe de inschrijving url = self.url_aanmelden % (deelcomp.pk, sporterboog2.pk) with self.assert_max_queries(20): resp = self.client.post(url, {'wedstrijd_%s' % wedstrijd_pk: 'on'}) self.assert_is_redirect(resp, self.url_profiel) aanmelding2 = RegioCompetitieSchutterBoog.objects.get(sporterboog=sporterboog2) # terug naar de eerste sporter self.e2e_login(self.account_normaal) # probeer de schietmomenten van een andere schutter aan te passen url = self.url_zeven_wedstrijden % aanmelding2.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) # pas de schietmomenten aan url = self.url_zeven_wedstrijden % aanmelding.pk with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) self.assert_html_ok(resp) self.assert_template_used(resp, ('compregio/keuze-zeven-wedstrijden-methode1.dtl', 'plein/site_layout.dtl')) # wedstrijd behouden with self.assert_max_queries(20): resp = self.client.post(url, {'wedstrijd_%s' % wedstrijd_pk: 'on'}) self.assert_is_redirect(resp, self.url_profiel) # wedstrijd verwijderen with self.assert_max_queries(20): resp = self.client.post(url) self.assert_is_redirect(resp, self.url_profiel) # wedstrijd toevoegen with self.assert_max_queries(20): resp = self.client.post(url, {'wedstrijd_%s' % wedstrijd_pk: 'on'}) self.assert_is_redirect(resp, self.url_profiel) # te veel wedstrijden toevoegen args = dict() for obj in CompetitieWedstrijd.objects.all(): args['wedstrijd_%s' % obj.pk] = 'on' # for with self.assert_max_queries(20): resp = self.client.post(url, args) self.assert_is_redirect(resp, self.url_profiel) # bad deelnemer_pk with self.assert_max_queries(20): resp = self.client.post(self.url_zeven_wedstrijden % 999999) self.assert404(resp) # special: probeer inschrijving met competitie in verkeerde fase zet_competitie_fase(deelcomp.competitie, 'K') url = self.url_aanmelden % (deelcomp.pk, sporterboog.pk) with self.assert_max_queries(20): resp = self.client.post(url, {'wedstrijd_%s' % wedstrijd_pk: 'on'}) self.assert404(resp)
def test_inschrijven_methode3_twee_dagdelen(self): regio_105 = NhbRegio.objects.get(pk=105) self.nhbver.regio = regio_105 self.nhbver.save() # log in as BB en maak de competitie aan self.e2e_login_and_pass_otp(self.testdata.account_admin) self.e2e_wisselnaarrol_bb() self._competitie_aanmaken() deelcomp = DeelCompetitie.objects.get(competitie__afstand='18', nhb_regio=regio_105) deelcomp.inschrijf_methode = INSCHRIJF_METHODE_3 deelcomp.toegestane_dagdelen = 'ZAT,ZOm' deelcomp.save() # log in as sporter self.client.logout() self.e2e_login(self.account_normaal) self._prep_voorkeuren(100001) # schrijf in voor de 18m Recurve, met AG sporterboog = SporterBoog.objects.get(boogtype__afkorting='R') deelcomp = DeelCompetitie.objects.get(competitie__afstand='18', nhb_regio=self.nhbver.regio) # haal de bevestig pagina op met het formulier url = self.url_bevestig_aanmelden % (deelcomp.pk, sporterboog.pk) with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) self.assert_html_ok(resp) self.assert_template_used(resp, ('compinschrijven/sporter-bevestig-aanmelden.dtl', 'plein/site_layout.dtl')) self.assertContains(resp, 'eigen blazoen') self.assertContains(resp, 'Zaterdag') self.assertContains(resp, 'Zondagmiddag') self.assertNotContains(resp, 's Avonds') self.assertNotContains(resp, 'Weekend') self.assertEqual(RegioCompetitieSchutterBoog.objects.count(), 0) res = score_indiv_ag_opslaan(sporterboog, 18, 8.18, None, 'Test') self.assertTrue(res) # schrijf in met een niet toegestaan dagdeel url = self.url_aanmelden % (deelcomp.pk, sporterboog.pk) with self.assert_max_queries(20): resp = self.client.post(url, {'dagdeel': 'AV'}) self.assert404(resp) # 404 = Not allowed self.assertEqual(RegioCompetitieSchutterBoog.objects.count(), 0) # schrijf in met dagdeel, team schieten en opmerking door url = self.url_aanmelden % (deelcomp.pk, sporterboog.pk) with self.assert_max_queries(20): resp = self.client.post(url, {'wil_in_team': 'on', 'dagdeel': 'ZAT', 'opmerking': 'Hallo nogmaals!\n' * 50}) self.assert_is_redirect(resp, self.url_profiel) self.assertEqual(RegioCompetitieSchutterBoog.objects.count(), 1) inschrijving = RegioCompetitieSchutterBoog.objects.all()[0] self.assertTrue(inschrijving.inschrijf_voorkeur_team) self.assertTrue(len(inschrijving.inschrijf_notitie) > 480) self.assertEqual(inschrijving.inschrijf_voorkeur_dagdeel, 'ZAT') # bad dagdeel sporterboog = SporterBoog.objects.get(boogtype__afkorting='BB') deelcomp = DeelCompetitie.objects.get(competitie__afstand='18', nhb_regio=self.nhbver.regio) url = self.url_aanmelden % (deelcomp.pk, sporterboog.pk) with self.assert_max_queries(20): resp = self.client.post(url, {'dagdeel': 'XX'}) self.assert404(resp) # 404 = Not allowed self.assertEqual(RegioCompetitieSchutterBoog.objects.count(), 1)
def test_afmelden(self): # afmelden als anon with self.assert_max_queries(20): resp = self.client.post(self.url_afmelden % 0) self.assert404(resp) # 404 = Not found # log in as BB en maak de competitie aan self.e2e_login_and_pass_otp(self.testdata.account_admin) self.e2e_wisselnaarrol_bb() self._competitie_aanmaken() # afmelden als BB (niet NHB lid) with self.assert_max_queries(20): resp = self.client.post(self.url_afmelden % 0) self.assert404(resp) # 404 = Not found # afmelden als inactief lid self.client.logout() self.e2e_login(self.account_geenlid) with self.assert_max_queries(20): resp = self.client.post(self.url_afmelden % 0) self.assert404(resp) # 404 = Not found # log in as schutter self.client.logout() self.e2e_login(self.account_normaal) self._prep_voorkeuren(100001) # aanmelden voor de 18m Recurve, met AG self.assertEqual(RegioCompetitieSchutterBoog.objects.count(), 0) sporterboog_18 = SporterBoog.objects.get(boogtype__afkorting='R') deelcomp = DeelCompetitie.objects.get(competitie__afstand='18', nhb_regio=self.nhbver.regio) res = score_indiv_ag_opslaan(sporterboog_18, 18, 8.18, None, 'Test') self.assertTrue(res) with self.assert_max_queries(20): resp = self.client.post(self.url_aanmelden % (deelcomp.pk, sporterboog_18.pk)) self.assert_is_redirect(resp, self.url_profiel) inschrijving_18 = RegioCompetitieSchutterBoog.objects.all()[0] # aanmelden voor de 25m BB, zonder AG sporterboog_25 = SporterBoog.objects.get(boogtype__afkorting='BB') deelcomp = DeelCompetitie.objects.get(competitie__afstand='25', nhb_regio=self.nhbver.regio) with self.assert_max_queries(20): resp = self.client.post(self.url_aanmelden % (deelcomp.pk, sporterboog_25.pk)) self.assert_is_redirect(resp, self.url_profiel) # afmelden van de 18m self.assertEqual(RegioCompetitieSchutterBoog.objects.count(), 2) with self.assert_max_queries(20): resp = self.client.post(self.url_afmelden % inschrijving_18.pk) self.assert_is_redirect(resp, self.url_profiel) self.assertEqual(RegioCompetitieSchutterBoog.objects.count(), 1) # illegaal inschrijving nummer with self.assert_max_queries(20): resp = self.client.post(self.url_afmelden % 999999) self.assert404(resp) # 404 = Not found # niet bestaand inschrijving nummer with self.assert_max_queries(20): resp = self.client.post(self.url_afmelden % 'hoi') self.assert404(resp) # 404 = Not found # sporterboog hoort niet bij gebruiker inschrijving_25 = RegioCompetitieSchutterBoog.objects.all()[0] self.client.logout() self.e2e_login(self.account_twee) with self.assert_max_queries(20): resp = self.client.post(self.url_afmelden % inschrijving_25.pk) self.assert403(resp)
def test_inschrijven(self): # log in as BB en maak de competitie aan self.e2e_login_and_pass_otp(self.testdata.account_admin) self.e2e_wisselnaarrol_bb() self._competitie_aanmaken() # log in as schutter self.client.logout() self.e2e_login(self.account_normaal) self._prep_voorkeuren(100001) # schrijf in voor de 18m Recurve, met AG self.assertEqual(RegioCompetitieSchutterBoog.objects.count(), 0) sporterboog = SporterBoog.objects.get(boogtype__afkorting='R') deelcomp = DeelCompetitie.objects.get(competitie__afstand='18', nhb_regio=self.nhbver.regio) res = score_indiv_ag_opslaan(sporterboog, 18, 8.18, None, 'Test') self.assertTrue(res) # haal de bevestig pagina op met het formulier url = self.url_bevestig_aanmelden % (deelcomp.pk, sporterboog.pk) with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) self.assert_html_ok(resp) self.assert_template_used(resp, ('compinschrijven/sporter-bevestig-aanmelden.dtl', 'plein/site_layout.dtl')) self.assertContains(resp, 'eigen blazoen') with self.assert_max_queries(20): resp = self.client.post(self.url_aanmelden % (deelcomp.pk, sporterboog.pk)) self.assert_is_redirect(resp, self.url_profiel) self.assertEqual(RegioCompetitieSchutterBoog.objects.count(), 1) inschrijving = RegioCompetitieSchutterBoog.objects.all()[0] self.assertEqual(str(inschrijving.ag_voor_indiv), "8.180") self.assertEqual(str(inschrijving.ag_voor_team), "8.180") self.assertFalse(inschrijving.ag_voor_team_mag_aangepast_worden) self.assertEqual(inschrijving.deelcompetitie, deelcomp) self.assertEqual(inschrijving.sporterboog, sporterboog) self.assertEqual(inschrijving.bij_vereniging, sporterboog.sporter.bij_vereniging) self.assertFalse(inschrijving.inschrijf_voorkeur_team) self.assertEqual(inschrijving.inschrijf_notitie, '') self.assertEqual(inschrijving.inschrijf_voorkeur_dagdeel, 'GN') self.assertTrue(str(RegioCompetitieSchutterBoog) != '') # coverage only self.assertEqual(inschrijving.klasse.competitie.afstand, '18') # juiste competitie? self.assertEqual(inschrijving.klasse.indiv.boogtype.afkorting, 'R') # klasse compatibel met boogtype? # geen bevestig formulier indien al ingeschreven url = self.url_bevestig_aanmelden % (deelcomp.pk, sporterboog.pk) with self.assert_max_queries(20): resp = self.client.get(url) self.assert404(resp) # 404 = Not found self.assertEqual(RegioCompetitieSchutterBoog.objects.count(), 1) # 18m IB voor extra coverage sporterboog = SporterBoog.objects.get(boogtype__afkorting='IB') url = self.url_bevestig_aanmelden % (deelcomp.pk, sporterboog.pk) with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) self.assert_html_ok(resp) self.assert_template_used(resp, ('compinschrijven/sporter-bevestig-aanmelden.dtl', 'plein/site_layout.dtl')) self.assertNotContains(resp, 'eigen blazoen') # uitzondering: AG score zonder hist res = score_indiv_ag_opslaan(sporterboog, 18, 7.18, None, 'Test 2') self.assertTrue(res) scores = Score.objects.filter(sporterboog=sporterboog, type=SCORE_TYPE_INDIV_AG, afstand_meter=deelcomp.competitie.afstand) ScoreHist.objects.filter(score=scores[0]).delete() with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) self.assert_html_ok(resp) self.assert_template_used(resp, ('compinschrijven/sporter-bevestig-aanmelden.dtl', 'plein/site_layout.dtl')) # schakel over naar de 25m1pijl, barebow sporterboog = SporterBoog.objects.get(boogtype__afkorting='BB') deelcomp = DeelCompetitie.objects.get(competitie__afstand='25', nhb_regio=self.nhbver.regio) # haal de bevestig pagina op met het formulier url = self.url_bevestig_aanmelden % (deelcomp.pk, sporterboog.pk) with self.assert_max_queries(20): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) self.assert_html_ok(resp) self.assert_template_used(resp, ('compinschrijven/sporter-bevestig-aanmelden.dtl', 'plein/site_layout.dtl')) self.assertNotContains(resp, 'eigen blazoen') # schrijf in voor de 25m BB, zonder AG self.assertEqual(RegioCompetitieSchutterBoog.objects.count(), 1) with self.assert_max_queries(20): resp = self.client.post(self.url_aanmelden % (deelcomp.pk, sporterboog.pk)) self.assert_is_redirect(resp, self.url_profiel) self.assertEqual(RegioCompetitieSchutterBoog.objects.count(), 2) inschrijving_25 = RegioCompetitieSchutterBoog.objects.exclude(pk=inschrijving.pk)[0] self.assertEqual(inschrijving_25.klasse.competitie.afstand, '25') # juiste competitie? self.assertEqual(inschrijving_25.klasse.indiv.boogtype.afkorting, 'BB') # klasse compatibel met boogtype? # probeer dubbel in te schrijven with self.assert_max_queries(20): resp = self.client.post(self.url_aanmelden % (deelcomp.pk, sporterboog.pk)) self.assert404(resp) # 404 = Not found self.assertEqual(RegioCompetitieSchutterBoog.objects.count(), 2) # competitie in verkeerde fase comp = deelcomp.competitie # Competitie.objects.get(pk=deelcomp.competitie.pk) zet_competitie_fase(comp, 'K') with self.assert_max_queries(20): resp = self.client.get(self.url_bevestig_aanmelden % (deelcomp.pk, sporterboog.pk)) self.assert404(resp) # 404 = Not found