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 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 _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 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()
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 _maak_leden(self): """ Maak voor elke vereniging een aantal leden aan: een mix van alle wedstrijdklassen en boogtypen. Aspirant <13, Aspirant 13-14, Cadet 15-17, Junior 18-20, Senior 21-49, Master 50-59, Veteraan 60+ """ huidige_jaar = timezone.now().year lid_sinds_datum = datetime.date(year=huidige_jaar - 1, month=11, day=12) soorten = [ # wedstrijdleeftijd, geslacht, voornaam, boogtype, account (10, 'M', 'Asp10', 'R', False), (10, 'V', 'Asp10', 'R', False), (11, 'M', 'Asp11', 'R', False), (12, 'V', 'Asp12', 'R', False), (13, 'M', 'Asp13', 'R', False), (14, 'M', 'Cad14', 'R', False), (14, 'M', 'Cad14b', 'C', False), (14, 'M', 'Cad15', 'c', False), # kleine letter: geen voorkeur voor de competitie (15, 'V', 'Cad15', 'R', False), (15, 'M', 'Cad15b', 'BB', False), (15, 'V', 'Cad15b', 'C', False), (16, 'M', 'Cad16', 'R', False), (16, 'M', 'Cad16b', 'C', False), (16, 'M', 'Cad16c', 'BB', False), (17, 'V', 'Cad17', 'R', True), # account (17, 'V', 'Cad17b', 'C', False), (17, 'V', 'Cad17c', 'BB', False), (18, 'M', 'Jun18', 'R', False), (18, 'M', 'Jun18b', 'C', False), (18, 'M', 'Jun18c', 'BB', False), (18, 'V', 'Jun18', 'BB', False), (19, 'V', 'Jun19', 'R', False), (19, 'V', 'Jun19b', 'C', True), # account (20, 'M', 'Jun20', 'R', False), (20, 'M', 'Jun20b', 'LB', False), (21, 'V', 'Sen21', 'R', False), (21, 'V', 'Sen21b', 'C', False), (22, 'M', 'Sen22', 'R', False), (22, 'M', 'Sen22b', 'C', False), (22, 'M', 'Sen23', 'r', False), # kleine letter: geen voorkeur voor de competitie (31, 'V', 'Sen31', 'R', False), (32, 'M', 'Sen32', 'C', False), (32, 'M', 'Sen32b', 'BB', True), # account (33, 'V', 'Sen33', 'R', False), (33, 'V', 'Sen33b', 'BB', False), (34, 'M', 'Sen34', 'LB', True), # Sen34 = HWL (35, 'V', 'Sen35', 'R', False), (36, 'M', 'Sen36', 'C', False), (36, 'M', 'Sen36b', 'BB', False), (37, 'V', 'Sen37', 'R', False), (38, 'M', 'Sen38', 'LB', False), (39, 'V', 'Sen39', 'R', True), # Sen39 = BKO/RKO/RCL (40, 'M', 'Sen40', 'C', False), (41, 'V', 'Sen41', 'R', False), (42, 'M', 'Sen42', 'R', False), (42, 'M', 'Sen42b', 'C', False), (49, 'V', 'Sen49', 'R', False), (49, 'V', 'Sen49b', 'BB', False), (50, 'M', 'Mas50', 'R', True), # Mas50 = SEC (51, 'V', 'Mas51', 'R', True), # account (51, 'V', 'Mas51b', 'C', False), (51, 'V', 'Mas52', 'r', False), # kleine letter: geen voorkeur voor de competitie (59, 'M', 'Mas59', 'R', False), (59, 'M', 'Mas59b', 'LB', False), (60, 'V', 'Vet60', 'R', False), (60, 'V', 'Vet60b', 'C', False), (60, 'V', 'Vet60c', 'LB', True), # account (61, 'M', 'Vet61', 'C', False), (61, 'M', 'Vet61b', 'C', False), (80, 'V', 'Vet80', 'R', False), ] geslacht_voornaam2boogtype = dict() for _, geslacht, voornaam, boogtype, _ in soorten: try: _ = geslacht_voornaam2boogtype[geslacht + voornaam] except KeyError: geslacht_voornaam2boogtype[geslacht + voornaam] = boogtype else: raise IndexError( 'TestData: combinatie geslacht %s + voornaam %s komt meerdere keren voor' % (geslacht, voornaam)) # pragma: no cover # for # maak voor elke vereniging een paar accounts aan lid_nr = 300000 bulk = list() for ver in self.vereniging.values(): self.regio_ver_nrs[ver.regio.regio_nr] = ver.ver_nr for _, _, voornaam, _, maak_account in soorten: lid_nr += 1 if maak_account: account = Account(username=str(lid_nr), otp_code=self.OTP_CODE, otp_is_actief=True) account.set_password(self.WACHTWOORD) bulk.append(account) if len(bulk) > 100: # pragma: no branch Account.objects.bulk_create(bulk) # maak e-mails aan bulk2 = list() for account in bulk: # let op: e-mailadres moet overeenkomen met het Sporter.email email = AccountEmail( account=account, email_is_bevestigd=True, bevestigde_email='*****@*****.**' % account.username) bulk2.append(email) # for AccountEmail.objects.bulk_create(bulk2) del bulk2 bulk = list() # for # for if len(bulk) > 0: # pragma: no branch Account.objects.bulk_create(bulk) # maak e-mails aan bulk2 = list() for account in bulk: email = AccountEmail(account=account, email_is_bevestigd=True, bevestigde_email='*****@*****.**' % account.username) bulk2.append(email) # for AccountEmail.objects.bulk_create(bulk2) del bulk2 del bulk # cache de aangemaakte accounts lid_nr2account = dict() for account in Account.objects.all(): lid_nr2account[account.username] = account # for lid_nr = 300000 bulk = list() for ver in self.vereniging.values(): self.ver_sporters[ver.ver_nr] = list() self.ver_sporters_met_account[ver.ver_nr] = list() for wleeftijd, geslacht, voornaam, _, _ in soorten: lid_nr += 1 achternaam = "Lid%s van Club%s" % (ver.ver_nr, lid_nr) geboortedatum = datetime.date(year=huidige_jaar - wleeftijd, month=3, day=24) try: account = lid_nr2account[str(lid_nr)] except KeyError: account = None sporter = Sporter(lid_nr=lid_nr, voornaam=voornaam, achternaam=achternaam, unaccented_naam=voornaam + ' ' + achternaam, email='*****@*****.**' % lid_nr, geboorte_datum=geboortedatum, geslacht=geslacht, para_classificatie='', is_actief_lid=True, sinds_datum=lid_sinds_datum, bij_vereniging=ver, account=account, lid_tot_einde_jaar=huidige_jaar) bulk.append(sporter) if len(bulk) > 250: # pragma: no branch Sporter.objects.bulk_create(bulk) bulk = list() # for # for if len(bulk) > 0: # pragma: no branch Sporter.objects.bulk_create(bulk) del bulk del lid_nr2account # maak voor elke Sporter nu de SporterBoog records aan boogtypen = self.afkorting2boogtype.values() bulk_voorkeuren = list() bulk_sporter = list() for sporter in (Sporter.objects.select_related( 'account', 'bij_vereniging').all()): ver_nr = sporter.bij_vereniging.ver_nr self.ver_sporters[ver_nr].append(sporter) if sporter.account: self.ver_sporters_met_account[ver_nr].append(sporter) gewenst_boogtype = geslacht_voornaam2boogtype[sporter.geslacht + sporter.voornaam] # voorkeuren voorkeuren = SporterVoorkeuren(sporter=sporter) if gewenst_boogtype.islower(): voorkeuren.voorkeur_meedoen_competitie = False gewenst_boogtype = gewenst_boogtype.upper() # alle junioren willen een eigen blazoen if gewenst_boogtype == 'R' and sporter.voornaam.startswith('Jun'): voorkeuren.voorkeur_eigen_blazoen = True bulk_voorkeuren.append(voorkeuren) if len(bulk_voorkeuren) > 100: SporterVoorkeuren.objects.bulk_create(bulk_voorkeuren) bulk_voorkeuren = list() # sporterboog for boogtype in boogtypen: sporterboog = SporterBoog( sporter=sporter, # heeft_interesse=True # voor_wedstrijd=False boogtype=boogtype) if boogtype.afkorting == gewenst_boogtype: sporterboog.voor_wedstrijd = True bulk_sporter.append(sporterboog) if len(bulk_sporter) > 250: SporterBoog.objects.bulk_create(bulk_sporter) bulk_sporter = list() # for # for if len(bulk_voorkeuren): # pragma: no branch SporterVoorkeuren.objects.bulk_create(bulk_voorkeuren) del bulk_voorkeuren if len(bulk_sporter): # pragma: no branch SporterBoog.objects.bulk_create(bulk_sporter) del bulk_sporter
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()
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()
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
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)
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()
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())
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