示例#1
0
    def setUp(self):
        """ eenmalige setup voor alle tests
            wordt als eerste aangeroepen
        """
        # maak een RK wedstrijd aan
        self.wedstrijd = CompetitieWedstrijd(
            beschrijving='test wedstrijd RK',
            datum_wanneer='2020-01-01',
            tijd_begin_aanmelden='09:00',
            tijd_begin_wedstrijd='10:00',
            tijd_einde_wedstrijd='16:00',
            vereniging=self.ver)  # koppelt wedstrijd aan de vereniging
        # TODO: locatie koppelen
        self.wedstrijd.save()

        self.deelcomp18_rk_wedstrijden_plan = self.testdata.deelcomp18_rk[
            self.rayon_nr].plan
        self.deelcomp18_rk_wedstrijden_plan.wedstrijden.add(self.wedstrijd.pk)

        self.deelcomp25_rk_wedstrijden_plan = self.testdata.deelcomp25_rk[
            self.rayon_nr].plan

        bad_path = '/tmp/CompRayon/files/'
        os.makedirs(bad_path, exist_ok=True)

        self.xlsm_fpath_indiv = bad_path + 'template-excel-rk-indiv.xlsm'
        self.xlsm_fpath_teams = bad_path + 'template-excel-rk-teams.xlsm'

        for fpath in (self.xlsm_fpath_indiv, self.xlsm_fpath_teams):
            try:
                os.remove(fpath)
            except FileNotFoundError:
                pass
    def _maak_uitslag(self, sporterboog):
        # maak 2x wedstrijd + uitslag + score voor deze schutterboog, met geschiedenis
        uur_00 = datetime.time(hour=0)
        uur_18 = datetime.time(hour=18)
        uur_19 = datetime.time(hour=19)
        uur_22 = datetime.time(hour=22)

        uitslag18 = CompetitieWedstrijdUitslag(max_score=300, afstand_meter=18)
        uitslag18.save()

        uitslag25 = CompetitieWedstrijdUitslag(max_score=250, afstand_meter=25)
        uitslag25.save()

        CompetitieWedstrijd(beschrijving='Test wedstrijdje 18m',
                            datum_wanneer=datetime.date(year=2020,
                                                        month=10,
                                                        day=10),
                            tijd_begin_aanmelden=uur_18,
                            tijd_begin_wedstrijd=uur_19,
                            tijd_einde_wedstrijd=uur_22,
                            uitslag=uitslag18,
                            vereniging=self.nhbver1).save()

        CompetitieWedstrijd(beschrijving='Test wedstrijdje 25m',
                            datum_wanneer=datetime.date(year=2020,
                                                        month=10,
                                                        day=11),
                            tijd_begin_aanmelden=uur_00,
                            tijd_begin_wedstrijd=uur_00,
                            tijd_einde_wedstrijd=uur_00,
                            uitslag=uitslag25).save()

        score = Score(sporterboog=sporterboog, afstand_meter=18, waarde=260)
        score.save()
        ScoreHist(score=score,
                  oude_waarde=0,
                  nieuwe_waarde=290,
                  door_account=self.account_hwl).save()
        ScoreHist(score=score,
                  oude_waarde=290,
                  nieuwe_waarde=260,
                  door_account=self.account_hwl).save()
        uitslag18.scores.add(score)

        score = Score(sporterboog=sporterboog, afstand_meter=25, waarde=234)
        score.save()
        ScoreHist(score=score,
                  oude_waarde=SCORE_WAARDE_VERWIJDERD,
                  nieuwe_waarde=234,
                  door_account=self.account_hwl).save()
        ScoreHist(score=score,
                  oude_waarde=0,
                  nieuwe_waarde=SCORE_WAARDE_VERWIJDERD,
                  door_account=self.account_hwl).save()
        ScoreHist(score=score,
                  oude_waarde=0,
                  nieuwe_waarde=1,
                  door_account=self.account_hwl).save()
        uitslag25.scores.add(score)
示例#3
0
    def _maak_wedstrijden(self):
        self.wedstrijden = list()

        # maak een ronde + plan
        ronde = maak_deelcompetitie_ronde(self.deelcomp_regio_18)
        self.ronde = ronde

        de_tijd = datetime.time(hour=20)

        # maak binnen het plan drie wedstrijden voor deze vereniging
        for volgnr in range(3):
            wedstrijd = CompetitieWedstrijd(vereniging=self.nhbver1,
                                            datum_wanneer=datetime.date(
                                                year=2020,
                                                month=1,
                                                day=5 + volgnr * 3),
                                            tijd_begin_aanmelden=de_tijd,
                                            tijd_begin_wedstrijd=de_tijd,
                                            tijd_einde_wedstrijd=de_tijd)

            if volgnr <= 1:
                uitslag = CompetitieWedstrijdUitslag(max_score=300,
                                                     afstand_meter=12)
                uitslag.save()
                wedstrijd.uitslag = uitslag
                wedstrijd.beschrijving = "Test - Dit is een testje %s" % volgnr

                if volgnr == 1:
                    score = Score(sporterboog=self.sporterboog_100001,
                                  waarde=123,
                                  afstand_meter=12)
                    score.save()
                    uitslag.scores.add(score)

            wedstrijd.save()
            ronde.plan.wedstrijden.add(wedstrijd)

            wedstrijd.indiv_klassen.set(IndivWedstrijdklasse.objects.all())

            self.wedstrijden.append(wedstrijd)
        # for

        # maak voor de vereniging een wedstrijd die niets met de competitie te doen heeft
        wedstrijd = CompetitieWedstrijd(vereniging=self.nhbver1,
                                        datum_wanneer=datetime.date(year=2020,
                                                                    month=2,
                                                                    day=1),
                                        tijd_begin_aanmelden=de_tijd,
                                        tijd_begin_wedstrijd=de_tijd,
                                        tijd_einde_wedstrijd=de_tijd)
        wedstrijd.save()
示例#4
0
    def post(self, request, *args, **kwargs):
        """ Deze functie wordt aangeroepen als de knop 'Regel toevoegen' gebruikt wordt
            in de RK planning, om een nieuwe wedstrijd toe te voegen.
        """
        # alleen de RKO mag de planning uitbreiden
        if self.rol_nu != Rollen.ROL_RKO:
            raise PermissionDenied()

        try:
            rk_deelcomp_pk = int(
                kwargs['rk_deelcomp_pk'][:6])  # afkappen voor de veiligheid
            deelcomp_rk = (
                DeelCompetitie.objects.select_related(
                    'competitie', 'nhb_regio').get(
                        pk=rk_deelcomp_pk,
                        laag=LAAG_RK,  # moet voor RK zijn
                        nhb_rayon=self.functie_nu.nhb_rayon)
            )  # moet juiste rayon zijn
        except (ValueError, DeelCompetitie.DoesNotExist):
            raise Http404('Competitie niet gevonden')

        # maak het plan aan, als deze nog niet aanwezig was
        if not deelcomp_rk.plan:
            deelcomp_rk.plan = CompetitieWedstrijdenPlan()
            deelcomp_rk.plan.save()
            deelcomp_rk.save()

        wedstrijd = CompetitieWedstrijd()
        wedstrijd.datum_wanneer = deelcomp_rk.competitie.rk_eerste_wedstrijd
        wedstrijd.tijd_begin_aanmelden = datetime.time(hour=10,
                                                       minute=0,
                                                       second=0)
        wedstrijd.tijd_begin_wedstrijd = wedstrijd.tijd_begin_aanmelden
        wedstrijd.tijd_einde_wedstrijd = wedstrijd.tijd_begin_aanmelden
        wedstrijd.save()

        deelcomp_rk.plan.wedstrijden.add(wedstrijd)

        return HttpResponseRedirect(
            reverse('CompRayon:rayon-wijzig-wedstrijd',
                    kwargs={'wedstrijd_pk': wedstrijd.pk}))
示例#5
0
    def test_rcl_bad_opslaan(self):
        # post zonder inlog
        self.client.logout()
        with self.assert_max_queries(20):
            resp = self.client.post(self.url_uitslag_opslaan)
        self.assert403(resp)

        self.e2e_login_and_pass_otp(self.testdata.comp18_account_rcl[101])
        self.e2e_wissel_naar_functie(self.testdata.comp18_functie_rcl[101])

        # get (bestaat niet)
        with self.assert_max_queries(20):
            resp = self.client.get(self.url_uitslag_opslaan)
        self.assertEqual(resp.status_code, 405)  # 405 = method not allowed

        # post zonder data
        with self.assert_max_queries(20):
            resp = self.client.post(self.url_uitslag_opslaan)
        self.assert404(resp)  # 404 = not found / not allowed

        # post zonder wedstrijd_pk
        json_data = {'hallo': 'daar'}
        with self.assert_max_queries(20):
            resp = self.client.post(self.url_uitslag_opslaan,
                                    json.dumps(json_data),
                                    content_type='application/json')
        self.assert404(resp)
        self.assert404(resp)  # 404 = not found / not allowed

        # post met niet bestaande wedstrijd_pk
        json_data = {'wedstrijd_pk': 999999}
        with self.assert_max_queries(20):
            resp = self.client.post(self.url_uitslag_opslaan,
                                    json.dumps(json_data),
                                    content_type='application/json')
        self.assert404(resp)  # 404 = not found / not allowed

        # post met wedstrijd_pk die nog geen uitslag heeft
        json_data = {'wedstrijd_pk': self.wedstrijd18_pk}
        with self.assert_max_queries(20):
            resp = self.client.post(self.url_uitslag_opslaan,
                                    json.dumps(json_data),
                                    content_type='application/json')
        self.assert404(resp)  # 404 = not found / not allowed

        # post met wedstrijd_pk waar deze RCL geen toegang toe heeft
        with self.assert_max_queries(20):
            self.client.get(self.url_uitslag_invoeren % self.wedstrijd25_pk)
        json_data = {'wedstrijd_pk': self.wedstrijd25_pk}
        with self.assert_max_queries(20):
            resp = self.client.post(self.url_uitslag_opslaan,
                                    json.dumps(json_data),
                                    content_type='application/json')
        self.assert403(resp)

        # wedstrijd die niet bij de competitie hoort
        with self.assert_max_queries(20):
            resp = self.client.get(self.url_uitslag_invoeren %
                                   self.wedstrijd18_pk)
        self.assertEqual(resp.status_code, 200)  # 200 = OK
        wedstrijd = CompetitieWedstrijd.objects.get(pk=self.wedstrijd18_pk)
        wedstrijd2 = CompetitieWedstrijd(
            beschrijving="niet in een plan",
            datum_wanneer=wedstrijd.datum_wanneer,
            tijd_begin_aanmelden=wedstrijd.tijd_begin_aanmelden,
            tijd_begin_wedstrijd=wedstrijd.tijd_begin_wedstrijd,
            tijd_einde_wedstrijd=wedstrijd.tijd_einde_wedstrijd,
            uitslag=wedstrijd.uitslag)
        wedstrijd2.save()
        json_data = {'wedstrijd_pk': wedstrijd2.pk}
        with self.assert_max_queries(20):
            resp = self.client.post(self.url_uitslag_opslaan,
                                    json.dumps(json_data),
                                    content_type='application/json')
        self.assert404(resp)  # 404 = not found / not allowed
示例#6
0
class TestCompRayonFormulieren(E2EHelpers, TestCase):
    """ tests voor de CompRayon applicatie, Formulieren functie """

    test_after = ('Competitie.test_fase', 'CompRayon.test_teams_rko',
                  'CompRayon.test_teams_rko')

    url_forms = '/bondscompetities/rk/download-formulier/%s/'  #  wedstrijd_pk
    url_forms_download_indiv = '/bondscompetities/rk/download-formulier-indiv/%s/%s/'  # wedstrijd_pk, klasse_pk
    url_forms_download_teams = '/bondscompetities/rk/download-formulier-teams/%s/%s/'  # wedstrijd_pk, klasse_pk

    testdata = None
    regio_nr = 113
    rayon_nr = 4
    ver_nr = 0

    @classmethod
    def setUpTestData(cls):
        print('CompRayon.test_formulieren: populating testdata start')
        s1 = timezone.now()

        cls.testdata = testdata.TestData()
        cls.testdata.maak_accounts()
        cls.testdata.maak_clubs_en_sporters()
        cls.testdata.maak_bondscompetities()

        cls.ver_nr = cls.testdata.regio_ver_nrs[cls.regio_nr]
        cls.ver = cls.testdata.vereniging[cls.ver_nr]

        cls.testdata.maak_inschrijvingen_regiocompetitie(18, cls.ver_nr)
        cls.testdata.maak_rk_deelnemers(18, cls.ver_nr, cls.regio_nr)
        cls.testdata.maak_inschrijvingen_rk_teamcompetitie(18, cls.ver_nr)

        # TODO: competitie doorzetten naar fase K zodat de team.klasse ingevuld is

        s2 = timezone.now()
        d = s2 - s1
        print(
            'CompRayon.test_formulieren: populating testdata took %s seconds' %
            d.seconds)

    def setUp(self):
        """ eenmalige setup voor alle tests
            wordt als eerste aangeroepen
        """
        # maak een RK wedstrijd aan
        self.wedstrijd = CompetitieWedstrijd(
            beschrijving='test wedstrijd RK',
            datum_wanneer='2020-01-01',
            tijd_begin_aanmelden='09:00',
            tijd_begin_wedstrijd='10:00',
            tijd_einde_wedstrijd='16:00',
            vereniging=self.ver)  # koppelt wedstrijd aan de vereniging
        # TODO: locatie koppelen
        self.wedstrijd.save()

        self.deelcomp18_rk_wedstrijden_plan = self.testdata.deelcomp18_rk[
            self.rayon_nr].plan
        self.deelcomp18_rk_wedstrijden_plan.wedstrijden.add(self.wedstrijd.pk)

        self.deelcomp25_rk_wedstrijden_plan = self.testdata.deelcomp25_rk[
            self.rayon_nr].plan

        bad_path = '/tmp/CompRayon/files/'
        os.makedirs(bad_path, exist_ok=True)

        self.xlsm_fpath_indiv = bad_path + 'template-excel-rk-indiv.xlsm'
        self.xlsm_fpath_teams = bad_path + 'template-excel-rk-teams.xlsm'

        for fpath in (self.xlsm_fpath_indiv, self.xlsm_fpath_teams):
            try:
                os.remove(fpath)
            except FileNotFoundError:
                pass
        # for

    @staticmethod
    def _make_bad_xlsm_file(fpath):
        with zipfile.ZipFile(fpath, 'w') as xlsm:
            xlsm.writestr('hello.txt', 'Hello World')

    def test_get_forms(self):
        url = self.url_forms % self.wedstrijd.pk

        # ophalen zonder inlog
        self.client.logout()
        with self.assert_max_queries(20):
            resp = self.client.get(url)
        self.assert403(resp)

        self.e2e_login_and_pass_otp(self.testdata.account_hwl[self.ver_nr])
        self.e2e_wissel_naar_functie(self.testdata.functie_hwl[self.ver_nr])

        # geen klassen
        with self.assert_max_queries(20):
            resp = self.client.get(url)
        self.assertEqual(resp.status_code, 200)  # 200 = OK
        self.assert_template_used(resp,
                                  ('comprayon/hwl-download-rk-formulier.dtl',
                                   'plein/site_layout.dtl'))
        self.assert_html_ok(resp)

        # alleen indiv klassen
        self.wedstrijd.indiv_klassen.set([
            self.testdata.comp18_klassen_indiv['R'][0].indiv,
            self.testdata.comp18_klassen_indiv['R'][-1].indiv
        ])
        with self.assert_max_queries(20):
            resp = self.client.get(url)
        self.assertEqual(resp.status_code, 200)  # 200 = OK
        self.assert_template_used(resp,
                                  ('comprayon/hwl-download-rk-formulier.dtl',
                                   'plein/site_layout.dtl'))
        self.assert_html_ok(resp)

        # indiv + teams klassen
        self.wedstrijd.team_klassen.set([
            self.testdata.comp18_klassen_team['R'][0].team,
            self.testdata.comp18_klassen_team['R'][-1].team
        ])
        with self.assert_max_queries(20):
            resp = self.client.get(url)
        self.assertEqual(resp.status_code, 200)  # 200 = OK
        self.assert_template_used(resp,
                                  ('comprayon/hwl-download-rk-formulier.dtl',
                                   'plein/site_layout.dtl'))
        self.assert_html_ok(resp)

        # alleen teams klassen
        self.wedstrijd.indiv_klassen.set([])
        with self.assert_max_queries(20):
            resp = self.client.get(url)
        self.assertEqual(resp.status_code, 200)  # 200 = OK
        self.assert_template_used(resp,
                                  ('comprayon/hwl-download-rk-formulier.dtl',
                                   'plein/site_layout.dtl'))
        self.assert_html_ok(resp)

        # wedstrijd niet in een plan
        self.deelcomp18_rk_wedstrijden_plan.wedstrijden.remove(
            self.wedstrijd.pk)
        with self.assert_max_queries(20):
            resp = self.client.get(url)
        self.assert404(resp, 'Geen wedstrijden plan')

        # 25m1p plan
        self.deelcomp25_rk_wedstrijden_plan.wedstrijden.add(self.wedstrijd.pk)
        with self.assert_max_queries(20):
            resp = self.client.get(url)
        self.assertEqual(resp.status_code, 200)  # 200 = OK
        self.deelcomp25_rk_wedstrijden_plan.wedstrijden.remove(
            self.wedstrijd.pk)

        # wedstrijd van een niet-RK deelcompetitie
        plan = self.testdata.deelcomp18_bk.plan
        plan.wedstrijden.add(self.wedstrijd.pk)
        with self.assert_max_queries(20):
            resp = self.client.get(url)
        self.assert404(resp, 'Verkeerde competitie')

        # niet bestaande wedstrijd
        with self.assert_max_queries(20):
            resp = self.client.get(self.url_forms % 'xxx')
        self.assert404(resp, 'Wedstrijd niet gevonden')

    def test_download_indiv(self):
        klasse = self.testdata.comp18_klassen_indiv['R'][0]
        url = self.url_forms_download_indiv % (self.wedstrijd.pk, klasse.pk)

        # ophalen zonder inlog
        self.client.logout()
        with self.assert_max_queries(20):
            resp = self.client.get(url)
        self.assert403(resp)

        self.e2e_login_and_pass_otp(self.testdata.account_hwl[self.ver_nr])
        self.e2e_wissel_naar_functie(self.testdata.functie_hwl[self.ver_nr])

        with self.assert_max_queries(20):
            resp = self.client.get(url)
        self.assert200_file(resp)

        # niet bestaand RK programma
        with self.settings(INSTALL_PATH='/tmp'):
            resp = self.client.get(url)
        self.assert404(resp, 'Kan RK programma niet vinden')

        # kapot RK programma
        self._make_bad_xlsm_file(self.xlsm_fpath_indiv)
        with self.settings(INSTALL_PATH='/tmp'):
            resp = self.client.get(url)
        self.assert404(resp, 'Kan RK programma niet openen')

        # niet bestaande wedstrijd
        with self.assert_max_queries(20):
            resp = self.client.get(self.url_forms_download_indiv %
                                   (999999, 'xxx'))
        self.assert404(resp, 'Wedstrijd niet gevonden')

        # niet bestaande klasse
        with self.assert_max_queries(20):
            resp = self.client.get(self.url_forms_download_indiv %
                                   (self.wedstrijd.pk, 'xxx'))
        self.assert404(resp, 'Klasse niet gevonden')

        # wedstrijd niet in een plan
        self.deelcomp18_rk_wedstrijden_plan.wedstrijden.remove(
            self.wedstrijd.pk)
        with self.assert_max_queries(20):
            resp = self.client.get(url)
        self.assert404(resp, 'Geen wedstrijden plan')

        # wedstrijd van een niet-RK deelcompetitie
        plan = self.testdata.deelcomp18_bk.plan
        plan.wedstrijden.add(self.wedstrijd.pk)
        with self.assert_max_queries(20):
            resp = self.client.get(url)
        self.assert404(resp, 'Verkeerde competitie')

    def test_download_teams(self):
        klasse = self.testdata.comp18_klassen_team['R'][0]
        url = self.url_forms_download_teams % (self.wedstrijd.pk, klasse.pk)

        # ophalen zonder inlog
        self.client.logout()
        with self.assert_max_queries(20):
            resp = self.client.get(url)
        self.assert403(resp)

        self.e2e_login_and_pass_otp(self.testdata.account_hwl[self.ver_nr])
        self.e2e_wissel_naar_functie(self.testdata.functie_hwl[self.ver_nr])

        with self.assert_max_queries(20):
            resp = self.client.get(url)
        self.assert200_file(resp)

        # niet bestaand RK programma
        with self.settings(INSTALL_PATH='/tmp'):
            resp = self.client.get(url)
        self.assert404(resp, 'Kan RK programma niet vinden')

        # kapot RK programma
        self._make_bad_xlsm_file(self.xlsm_fpath_teams)
        with self.settings(INSTALL_PATH='/tmp'):
            resp = self.client.get(url)
        self.assert404(resp, 'Kan RK programma niet openen')

        # niet bestaande wedstrijd
        with self.assert_max_queries(20):
            resp = self.client.get(self.url_forms_download_teams %
                                   (999999, 'xxx'))
        self.assert404(resp, 'Wedstrijd niet gevonden')

        # niet bestaande klasse
        with self.assert_max_queries(20):
            resp = self.client.get(self.url_forms_download_teams %
                                   (self.wedstrijd.pk, 'xxx'))
        self.assert404(resp, 'Klasse niet gevonden')

        # wedstrijd niet in een plan
        self.deelcomp18_rk_wedstrijden_plan.wedstrijden.remove(
            self.wedstrijd.pk)
        with self.assert_max_queries(20):
            resp = self.client.get(url)
        self.assert404(resp, 'Geen wedstrijden plan')

        # wedstrijd van een niet-RK deelcompetitie
        plan = self.testdata.deelcomp18_bk.plan
        plan.wedstrijden.add(self.wedstrijd.pk)
        with self.assert_max_queries(20):
            resp = self.client.get(url)
        self.assert404(resp, 'Verkeerde competitie')