예제 #1
0
    def test_autorizzazioni_automatiche_non_scadute(self):

        presidente = crea_persona()
        persona, sede, app = crea_persona_sede_appartenenza(
            presidente=presidente)

        ora = timezone.now()

        area, attivita = crea_area_attivita(sede)

        domani_inizio = ora + timedelta(days=24)
        domani_fine = ora + timedelta(days=180)

        t1 = crea_turno(attivita, inizio=domani_inizio, fine=domani_fine)
        partecipazione = crea_partecipazione(persona, t1)

        attivita.centrale_operativa = Attivita.CO_AUTO
        attivita.save()
        self.assertEqual(0, Autorizzazione.objects.count())
        partecipazione.richiedi()
        self.assertEqual(0, len(mail.outbox))
        self.assertEqual(1, Autorizzazione.objects.count())
        autorizzazione = Autorizzazione.objects.first()
        Autorizzazione.gestisci_automatiche()
        self.assertEqual(0, len(mail.outbox))
        self.assertFalse(partecipazione.automatica)
        Autorizzazione.gestisci_automatiche()
        self.assertEqual(0, len(mail.outbox))
        self.assertFalse(partecipazione.automatica)
예제 #2
0
파일: tests.py 프로젝트: dan-it/jorvik
    def test_autorizzazioni_automatiche_non_scadute(self):

        presidente = crea_persona()
        persona, sede, app = crea_persona_sede_appartenenza(presidente=presidente)

        ora = timezone.now()

        area, attivita = crea_area_attivita(sede)


        domani_inizio = ora + timedelta(days=24)
        domani_fine = ora + timedelta(days=180)

        t1 = crea_turno(attivita, inizio=domani_inizio, fine=domani_fine)
        partecipazione = crea_partecipazione(persona, t1)

        attivita.centrale_operativa = Attivita.CO_AUTO
        attivita.save()
        self.assertEqual(0, Autorizzazione.objects.count())
        partecipazione.richiedi()
        self.assertEqual(0, len(mail.outbox))
        self.assertEqual(1, Autorizzazione.objects.count())
        autorizzazione = Autorizzazione.objects.first()
        Autorizzazione.gestisci_automatiche()
        self.assertEqual(0, len(mail.outbox))
        self.assertFalse(partecipazione.automatica)
        Autorizzazione.gestisci_automatiche()
        self.assertEqual(0, len(mail.outbox))
        self.assertFalse(partecipazione.automatica)
예제 #3
0
    def test_campo_centrale_operativa_disabilitata(self):

        presidente = crea_persona()
        referente = crea_persona()
        volontario, sede, appartenenza = crea_persona_sede_appartenenza()

        delega = Delega(
            oggetto=sede,
            persona=presidente,
            tipo=PRESIDENTE,
            inizio="2005-11-15",
        )
        delega.save()

        delega_2 = Delega(
            oggetto=sede,
            persona=referente,
            tipo=DELEGATO_CO,
            inizio="2005-11-15",
        )
        delega_2.save()

        area, attivita = crea_area_attivita(sede=sede)
        inizio = timezone.now() + timedelta(hours=12)
        fine = inizio + timedelta(hours=2)

        turno = crea_turno(attivita, inizio=inizio, fine=fine)

        attivita.aggiungi_delegato(REFERENTE, volontario)
        attivita.aggiungi_delegato(REFERENTE, referente)

        # Crea le sessioni
        sessione_referente = self.sessione_utente(persona=referente)
        sessione_volontario = self.sessione_utente(persona=volontario)
        sessione_presidente = self.sessione_utente(persona=presidente)

        # Volontario: Apri la pagina dell'attivita'
        sessione_volontario.visit("%s%smodifica/" %
                                  (self.live_server_url, attivita.url))
        self.assertIn(
            'disabled',
            sessione_volontario.find_by_id('id_centrale_operativa')
            [0].outer_html)

        sessione_presidente.visit("%s%smodifica/" %
                                  (self.live_server_url, attivita.url))
        self.assertNotIn(
            'disabled',
            sessione_presidente.find_by_id('id_centrale_operativa')
            [0].outer_html)

        sessione_referente.visit("%s%smodifica/" %
                                 (self.live_server_url, attivita.url))
        self.assertNotIn(
            'disabled',
            sessione_referente.find_by_id('id_centrale_operativa')
            [0].outer_html)
예제 #4
0
    def test_controllo_anni_attivita(self):
        from anagrafica.costanti import LIMITE_ETA, LIMITE_ANNI_ATTIVITA

        ora = now()
        data_limite = ora.today()
        data_sotto = data_limite.replace(year=data_limite.year -
                                         (LIMITE_ETA - 1))
        data_sopra = data_limite.replace(year=data_limite.year -
                                         (LIMITE_ETA + 1))
        data_limite = data_limite.replace(year=data_limite.year - LIMITE_ETA)

        sede = crea_sede()
        persona_sotto_limite = crea_persona()
        persona_sotto_limite.data_nascita = data_sotto
        persona_sotto_limite.save()
        crea_appartenenza(persona_sotto_limite, sede)

        persona_sopra_limite = crea_persona()
        persona_sopra_limite.data_nascita = data_sopra
        persona_sopra_limite.save()
        crea_appartenenza(persona_sopra_limite, sede)

        persona_al_limite = crea_persona()
        persona_al_limite.data_nascita = data_limite
        persona_al_limite.save()
        crea_appartenenza(persona_al_limite, sede)

        area, attivita = crea_area_attivita(sede)

        for anni in range(0, LIMITE_ANNI_ATTIVITA + 3):
            inizio = ora.replace(year=ora.year - (anni - 1))
            fine = ora.replace(year=ora.year -
                               (anni - 1)) + datetime.timedelta(hours=1)
            t1 = crea_turno(attivita, inizio=inizio, fine=fine)
            if anni < LIMITE_ANNI_ATTIVITA:
                for persona in (persona_sotto_limite, persona_sopra_limite,
                                persona_al_limite):
                    crea_partecipazione(persona, t1)
            elif anni == LIMITE_ANNI_ATTIVITA:
                for persona in (persona_sopra_limite, persona_al_limite):
                    crea_partecipazione(persona, t1)
            else:
                crea_partecipazione(persona_sopra_limite, t1)

        lista = _calcola_anni_attivita(Persona.objects.all())
        self.assertEqual(set(lista), {persona_sotto_limite})

        lista = _calcola_anni_attivita(Persona.objects.all(), meno=False)
        self.assertEqual(set(lista), {persona_al_limite, persona_sopra_limite})
예제 #5
0
파일: tests.py 프로젝트: dan-it/jorvik
    def test_campo_centrale_operativa_disabilitata(self):
 
        presidente = crea_persona()
        referente = crea_persona()
        volontario, sede, appartenenza = crea_persona_sede_appartenenza()

        delega = Delega(
            oggetto=sede,
            persona=presidente,
            tipo=PRESIDENTE,
            inizio="2005-11-15",
        )
        delega.save()

        delega_2 = Delega(
            oggetto=sede,
            persona=referente,
            tipo=DELEGATO_CO,
            inizio="2005-11-15",
        )
        delega_2.save()

        area, attivita = crea_area_attivita(sede=sede)
        inizio = timezone.now() + timedelta(hours=12)
        fine = inizio + timedelta(hours=2)

        turno = crea_turno(attivita, inizio=inizio, fine=fine)

        attivita.aggiungi_delegato(REFERENTE, volontario)
        attivita.aggiungi_delegato(REFERENTE, referente)


        # Crea le sessioni
        sessione_referente = self.sessione_utente(persona=referente)
        sessione_volontario = self.sessione_utente(persona=volontario)
        sessione_presidente = self.sessione_utente(persona=presidente)

        # Volontario: Apri la pagina dell'attivita'
        sessione_volontario.visit("%s%smodifica/" % (self.live_server_url, attivita.url))
        self.assertIn('disabled', sessione_volontario.find_by_id('id_centrale_operativa')[0].outer_html)

        sessione_presidente.visit("%s%smodifica/" % (self.live_server_url, attivita.url))
        self.assertNotIn('disabled', sessione_presidente.find_by_id('id_centrale_operativa')[0].outer_html)

        sessione_referente.visit("%s%smodifica/" % (self.live_server_url, attivita.url))
        self.assertNotIn('disabled', sessione_referente.find_by_id('id_centrale_operativa')[0].outer_html)
예제 #6
0
    def test_autorizzazioni_automatiche_scadute(self):
        presidente = crea_persona()
        persona, sede, app = crea_persona_sede_appartenenza(
            presidente=presidente)
        persona.email_contatto = email_fittizzia()
        persona.save()

        ora = timezone.now()

        area, attivita = crea_area_attivita(sede)

        domani_inizio = ora + timedelta(days=24)
        domani_fine = ora + timedelta(days=180)

        t1 = crea_turno(attivita, inizio=domani_inizio, fine=domani_fine)
        partecipazione = crea_partecipazione(persona, t1)
        attivita.centrale_operativa = Attivita.CO_AUTO
        attivita.save()
        self.assertEqual(0, Autorizzazione.objects.count())
        partecipazione.richiedi()
        self.assertNotIn(partecipazione, Partecipazione.con_esito_ok())
        self.assertEqual(0, len(mail.outbox))
        self.assertEqual(1, Autorizzazione.objects.count())
        autorizzazione = Autorizzazione.objects.first()
        self.assertNotEqual(autorizzazione.scadenza, None)
        autorizzazione.scadenza = timezone.now() - timedelta(days=10)
        autorizzazione.save()
        self.assertFalse(autorizzazione.concessa)
        Autorizzazione.gestisci_automatiche()
        self.assertEqual(1, len(mail.outbox))
        messaggio = mail.outbox[0]
        self.assertTrue(
            messaggio.subject.find(
                'Richiesta di partecipazione attività RESPINTA') > -1)
        self.assertFalse(
            messaggio.subject.find(
                'Richiesta di partecipazione attività APPROVATA') > -1)
        self.assertTrue(
            messaggio.body.find(
                'una tua richiesta &egrave; rimasta in attesa per 30 giorni e come da policy'
            ) == -1)
        self.assertTrue(autorizzazione.oggetto.automatica)
        Autorizzazione.gestisci_automatiche()
        self.assertEqual(1, len(mail.outbox))
        self.assertEqual(autorizzazione.concessa, None)
        self.assertIn(partecipazione, Partecipazione.con_esito_no())
예제 #7
0
    def test_controllo_anni_attivita(self):
        from anagrafica.costanti import LIMITE_ETA, LIMITE_ANNI_ATTIVITA

        ora = now()
        data_limite = ora.today()
        data_sotto = data_limite.replace(year=data_limite.year - (LIMITE_ETA - 1))
        data_sopra = data_limite.replace(year=data_limite.year - (LIMITE_ETA + 1))
        data_limite = data_limite.replace(year=data_limite.year - LIMITE_ETA)

        sede = crea_sede()
        persona_sotto_limite = crea_persona()
        persona_sotto_limite.data_nascita = data_sotto
        persona_sotto_limite.save()
        crea_appartenenza(persona_sotto_limite, sede)

        persona_sopra_limite = crea_persona()
        persona_sopra_limite.data_nascita = data_sopra
        persona_sopra_limite.save()
        crea_appartenenza(persona_sopra_limite, sede)

        persona_al_limite = crea_persona()
        persona_al_limite.data_nascita = data_limite
        persona_al_limite.save()
        crea_appartenenza(persona_al_limite, sede)

        area, attivita = crea_area_attivita(sede)

        for anni in range(0, LIMITE_ANNI_ATTIVITA + 3):
            inizio = ora.replace(year=ora.year - (anni - 1))
            fine = ora.replace(year=ora.year - (anni - 1)) + datetime.timedelta(hours=1)
            t1 = crea_turno(attivita, inizio=inizio, fine=fine)
            if anni < LIMITE_ANNI_ATTIVITA:
                for persona in (persona_sotto_limite, persona_sopra_limite, persona_al_limite):
                    crea_partecipazione(persona, t1)
            elif anni == LIMITE_ANNI_ATTIVITA:
                for persona in (persona_sopra_limite, persona_al_limite):
                    crea_partecipazione(persona, t1)
            else:
                crea_partecipazione(persona_sopra_limite, t1)

        lista = _calcola_anni_attivita(Persona.objects.all())
        self.assertEqual(set(lista), {persona_sotto_limite})

        lista = _calcola_anni_attivita(Persona.objects.all(), meno=False)
        self.assertEqual(set(lista), {persona_al_limite, persona_sopra_limite})
예제 #8
0
파일: tests.py 프로젝트: dan-it/jorvik
    def test_autorizzazioni_automatiche_scadute(self):
        presidente = crea_persona()
        persona, sede, app = crea_persona_sede_appartenenza(presidente=presidente)
        persona.email_contatto = email_fittizzia()
        persona.save()

        ora = timezone.now()

        area, attivita = crea_area_attivita(sede)

        domani_inizio = ora + timedelta(days=24)
        domani_fine = ora + timedelta(days=180)

        t1 = crea_turno(attivita, inizio=domani_inizio, fine=domani_fine)
        partecipazione = crea_partecipazione(persona, t1)
        attivita.centrale_operativa = Attivita.CO_AUTO
        attivita.save()
        self.assertEqual(0, Autorizzazione.objects.count())
        partecipazione.richiedi()
        self.assertNotIn(partecipazione, Partecipazione.con_esito_ok())
        self.assertEqual(0, len(mail.outbox))
        self.assertEqual(1, Autorizzazione.objects.count())
        autorizzazione = Autorizzazione.objects.first()
        self.assertNotEqual(autorizzazione.scadenza, None)
        autorizzazione.scadenza = timezone.now() - timedelta(days=10)
        autorizzazione.save()
        self.assertFalse(autorizzazione.concessa)
        Autorizzazione.gestisci_automatiche()
        self.assertEqual(1, len(mail.outbox))
        messaggio = mail.outbox[0]
        self.assertTrue(messaggio.subject.find('Richiesta di partecipazione attività RESPINTA') > -1)
        self.assertFalse(messaggio.subject.find('Richiesta di partecipazione attività APPROVATA') > -1)
        self.assertTrue(messaggio.body.find('una tua richiesta &egrave; rimasta in attesa per 30 giorni e come da policy') == -1)
        self.assertTrue(autorizzazione.oggetto.automatica)
        Autorizzazione.gestisci_automatiche()
        self.assertEqual(1, len(mail.outbox))
        self.assertEqual(autorizzazione.concessa, None)
        self.assertIn(partecipazione, Partecipazione.con_esito_no())
예제 #9
0
파일: tests.py 프로젝트: dan-it/jorvik
    def test_richiesta_partecipazione(self):

        referente = crea_persona()
        volontario, sede, appartenenza = crea_persona_sede_appartenenza()
        area, attivita = crea_area_attivita(sede=sede)
        inizio = timezone.now() + timedelta(hours=12)
        fine = inizio + timedelta(hours=2)

        turno = crea_turno(attivita, inizio=inizio, fine=fine)

        attivita.aggiungi_delegato(REFERENTE, referente)

        # Crea le sessioni
        sessione_referente = self.sessione_utente(persona=referente)
        sessione_volontario = self.sessione_utente(persona=volontario)

        # Volontario: Apri la pagina dell'attivita'
        sessione_volontario.visit("%s%s" % (self.live_server_url, attivita.url))

        # Volontario: Apri pagina turni
        sessione_volontario.click_link_by_partial_text("Turni")

        # Volontario: Chiedi di partecipare
        sessione_volontario.click_link_by_partial_text("Partecipa")

        self.assertTrue(sessione_volontario.is_text_present("Richiesta inoltrata"),
                        msg="La richiesta e stata inoltrata")

        # Volontario: Apri la pagina dell'attivita', pagina turni
        sessione_volontario.visit("%s%s" % (self.live_server_url, attivita.url))
        sessione_volontario.click_link_by_partial_text("Turni")

        self.assertTrue(sessione_volontario.is_text_present("Hai chiesto di partecipare"),
                        msg="Utente ha feedback sull'aver chiesto di partecipare")

        # Volontario: Vai allo storico
        sessione_volontario.click_link_by_partial_text("Miei turni")

        self.assertTrue(sessione_volontario.is_text_present("In attesa"),
                        msg="Storico mostra stato in attesa della richiesta")

        # Referente: Trova la richiesta
        sessione_referente.click_link_by_partial_text("Richieste")

        self.assertTrue(sessione_referente.is_text_present(volontario.nome_completo),
                        msg="La richiesta mostra il nome del volontario")

        self.assertTrue(sessione_referente.is_text_present(turno.nome),
                        msg="La richiesta mostra il nome del turno")

        # Referente: Trova la richiesta
        sessione_referente.click_link_by_partial_text("Conferma")

        # Volontario: Vai allo storico
        sessione_volontario.click_link_by_partial_text("Miei turni")

        self.assertTrue(sessione_volontario.is_text_present("Approvata"),
                        msg="La richiesta risulta ora approvata")

        # Volontario: Vai al turno
        sessione_volontario.click_link_by_partial_text(turno.nome)

        self.assertTrue(sessione_volontario.is_text_present("Partecipazione confermata"),
                        msg="La partecipazione risulta nel turno")
예제 #10
0
    def test_richiesta_partecipazione(self):

        referente = crea_persona()
        volontario, sede, appartenenza = crea_persona_sede_appartenenza()
        area, attivita = crea_area_attivita(sede=sede)
        inizio = timezone.now() + timedelta(hours=12)
        fine = inizio + timedelta(hours=2)

        turno = crea_turno(attivita, inizio=inizio, fine=fine)

        attivita.aggiungi_delegato(REFERENTE, referente)

        # Crea le sessioni
        sessione_referente = self.sessione_utente(persona=referente)
        sessione_volontario = self.sessione_utente(persona=volontario)

        # Volontario: Apri la pagina dell'attivita'
        sessione_volontario.visit("%s%s" %
                                  (self.live_server_url, attivita.url))

        # Volontario: Apri pagina turni
        sessione_volontario.click_link_by_partial_text("Turni")

        # Volontario: Chiedi di partecipare
        sessione_volontario.click_link_by_partial_text("Partecipa")

        self.assertTrue(
            sessione_volontario.is_text_present("Richiesta inoltrata"),
            msg="La richiesta e stata inoltrata")

        # Volontario: Apri la pagina dell'attivita', pagina turni
        sessione_volontario.visit("%s%s" %
                                  (self.live_server_url, attivita.url))
        sessione_volontario.click_link_by_partial_text("Turni")

        self.assertTrue(
            sessione_volontario.is_text_present("Hai chiesto di partecipare"),
            msg="Utente ha feedback sull'aver chiesto di partecipare")

        # Volontario: Vai allo storico
        sessione_volontario.click_link_by_partial_text("Miei turni")

        self.assertTrue(sessione_volontario.is_text_present("In attesa"),
                        msg="Storico mostra stato in attesa della richiesta")

        # Referente: Trova la richiesta
        sessione_referente.click_link_by_partial_text("Richieste")

        self.assertTrue(sessione_referente.is_text_present(
            volontario.nome_completo),
                        msg="La richiesta mostra il nome del volontario")

        self.assertTrue(sessione_referente.is_text_present(turno.nome),
                        msg="La richiesta mostra il nome del turno")

        # Referente: Trova la richiesta
        sessione_referente.click_link_by_partial_text("Conferma")

        # Volontario: Vai allo storico
        sessione_volontario.click_link_by_partial_text("Miei turni")

        self.assertTrue(sessione_volontario.is_text_present("Approvata"),
                        msg="La richiesta risulta ora approvata")

        # Volontario: Vai al turno
        sessione_volontario.click_link_by_partial_text(turno.nome)

        self.assertTrue(
            sessione_volontario.is_text_present("Partecipazione confermata"),
            msg="La partecipazione risulta nel turno")
예제 #11
0
    def test_poteri_temporanei(self):

        presidente = crea_persona()
        persona, sede, app = crea_persona_sede_appartenenza(presidente=presidente)

        ora = timezone.now()

        area, attivita = crea_area_attivita(sede)

        self.assertFalse(
            persona.oggetti_permesso(GESTIONE_CENTRALE_OPERATIVA_SEDE).exists(),
            "La persona non ha di persé i permessi di gestione della CO"
        )

        self.assertTrue(
            presidente.oggetti_permesso(GESTIONE_CENTRALE_OPERATIVA_SEDE).first() == sede,
            "Il presidente ha i permessi di gestione della CO",
        )

        domani_inizio = ora + timedelta(hours=24)
        domani_fine = ora + timedelta(hours=25)

        t1 = crea_turno(attivita, inizio=domani_inizio, fine=domani_fine)
        partecipazione = crea_partecipazione(persona, t1)

        self.assertFalse(
            persona.oggetti_permesso(GESTIONE_CENTRALE_OPERATIVA_SEDE).exists(),
            "La persona non ha ancora i permessi di gestione della CO"
        )

        attivita.centrale_operativa = Attivita.CO_AUTO
        attivita.save()

        self.assertFalse(
            persona.oggetti_permesso(GESTIONE_CENTRALE_OPERATIVA_SEDE).exists(),
            "La persona non ha ancora i permessi di gestione della CO"
        )

        t1.inizio = ora
        t1.fine = ora + timedelta(hours=1)
        t1.save()

        self.assertTrue(
            persona.oggetti_permesso(GESTIONE_CENTRALE_OPERATIVA_SEDE).first() == sede,
            "La persona può ora gestire la CO per la Sede"
        )

        self.assertTrue(
            persona.oggetti_permesso(GESTIONE_CENTRALE_OPERATIVA_SEDE).count() == 1,
            "La persona può ora gestire la CO per la Sede solamente (non sotto unità)"
        )

        # Provo che il margine funzioni
        margine = Attivita.MINUTI_CENTRALE_OPERATIVA - 1

        t1.inizio = ora + timedelta(minutes=margine)
        t1.fine = ora + timedelta(minutes=2*margine)
        t1.save()

        self.assertTrue(
            persona.oggetti_permesso(GESTIONE_CENTRALE_OPERATIVA_SEDE).exists(),
            "La persona può gestire la CO con un margine di %d minuti in anticipo" % margine,
        )

        t1.inizio = ora - timedelta(hours=24)
        t1.fine = ora - timedelta(minutes=margine)
        t1.save()

        self.assertTrue(
            persona.oggetti_permesso(GESTIONE_CENTRALE_OPERATIVA_SEDE).exists(),
            "La persona può gestire la CO con un margine di %d minuti dopo la fine" % margine,
        )

        t1.inizio = ora - timedelta(hours=24)
        t1.fine = ora - timedelta(minutes=margine+2)
        t1.save()

        self.assertFalse(
            persona.oggetti_permesso(GESTIONE_CENTRALE_OPERATIVA_SEDE).exists(),
            "La persona non puo gestire la CO se è troppo tardi",
        )

        # Se la partecipazione viene richiesta...
        partecipazione.richiedi()

        self.assertFalse(
            persona.oggetti_permesso(GESTIONE_CENTRALE_OPERATIVA_SEDE).exists(),
            "La persona non può gestire la CO perché la richiesta non è stata processata"
        )
예제 #12
0
    def test_centrale_operativa_permessi_attivita(self):

        delegato = crea_persona()
        volontario, sede, appartenenza = crea_persona_sede_appartenenza()
        sede.aggiungi_delegato(DELEGATO_CO, delegato)

        area, attivita = crea_area_attivita(sede, centrale_operativa=None)
        turno = crea_turno(attivita)
        crea_partecipazione(volontario, turno)

        sessione_delegato = self.sessione_utente(persona=delegato)
        sessione_volontario = self.sessione_utente(persona=volontario)

        self.assertFalse(
            sessione_volontario.is_text_present("CO"),
            "La centrale operativa non e' disponibile al volontario"
        )

        self.assertTrue(
            sessione_delegato.is_text_present("CO"),
            "La centrale operativa e' disponibile al delegato"
        )

        # In modalita' automatica, il volontario e' abilitato immediatamente
        attivita.centrale_operativa = Attivita.CO_AUTO
        attivita.save()

        sessione_volontario.visit("%s/utente/" % self.live_server_url)

        self.assertTrue(
            sessione_volontario.is_text_present("CO"),
            "La centrale operativa e' ora disponibile al volontario"
        )

        sessione_volontario.click_link_by_partial_text("CO")
        sessione_volontario.click_link_by_partial_text("Turni")
        sessione_volontario.click_link_by_partial_text("Monta")

        self.assertTrue(
            sessione_volontario.is_text_present(attivita.nome),
            "Il volontario vede propria attivita in CO"
        )

        # In modalita' manuale...
        attivita.centrale_operativa = Attivita.CO_MANUALE
        attivita.save()

        sessione_volontario.click_link_by_partial_text("Smonta")

        self.assertTrue(
            sessione_volontario.is_text_present("Accesso Negato"),
            "Il volontario non può più montare o smontare"
        )

        sessione_delegato.click_link_by_partial_text("CO")
        sessione_delegato.click_link_by_partial_text("Poteri")

        self.assertTrue(
            sessione_delegato.is_text_present(volontario.nome),
            "Il delegato vede la persona in elenco"
        )

        sessione_delegato.click_link_by_partial_text("Assegna")

        self.assertTrue(
            sessione_delegato.is_text_present("Ritira"),
            "Il delegato ha correttamente abilitato i poteri"
        )

        sessione_volontario.click_link_by_partial_text("Torna")
        sessione_volontario.click_link_by_partial_text("CO")
        sessione_volontario.click_link_by_partial_text("Turni")
        sessione_volontario.click_link_by_partial_text("Smonta")

        self.assertTrue(
            sessione_volontario.is_text_present(volontario.nome),
            "Il volontario ha il suo nome in elenco"
        )
예제 #13
0
    def test_poteri_temporanei(self):

        presidente = crea_persona()
        persona, sede, app = crea_persona_sede_appartenenza(
            presidente=presidente)

        ora = timezone.now()

        area, attivita = crea_area_attivita(sede)

        self.assertFalse(
            persona.oggetti_permesso(
                GESTIONE_CENTRALE_OPERATIVA_SEDE).exists(),
            "La persona non ha di persé i permessi di gestione della CO")

        self.assertTrue(
            presidente.oggetti_permesso(
                GESTIONE_CENTRALE_OPERATIVA_SEDE).first() == sede,
            "Il presidente ha i permessi di gestione della CO",
        )

        domani_inizio = ora + timedelta(hours=24)
        domani_fine = ora + timedelta(hours=25)

        t1 = crea_turno(attivita, inizio=domani_inizio, fine=domani_fine)
        partecipazione = crea_partecipazione(persona, t1)

        self.assertFalse(
            persona.oggetti_permesso(
                GESTIONE_CENTRALE_OPERATIVA_SEDE).exists(),
            "La persona non ha ancora i permessi di gestione della CO")

        attivita.centrale_operativa = Attivita.CO_AUTO
        attivita.save()

        self.assertFalse(
            persona.oggetti_permesso(
                GESTIONE_CENTRALE_OPERATIVA_SEDE).exists(),
            "La persona non ha ancora i permessi di gestione della CO")

        t1.inizio = ora
        t1.fine = ora + timedelta(hours=1)
        t1.save()

        self.assertTrue(
            persona.oggetti_permesso(GESTIONE_CENTRALE_OPERATIVA_SEDE).first()
            == sede, "La persona può ora gestire la CO per la Sede")

        self.assertTrue(
            persona.oggetti_permesso(
                GESTIONE_CENTRALE_OPERATIVA_SEDE).count() == 1,
            "La persona può ora gestire la CO per la Sede solamente (non sotto unità)"
        )

        # Provo che il margine funzioni
        margine = Attivita.MINUTI_CENTRALE_OPERATIVA - 1

        t1.inizio = ora + timedelta(minutes=margine)
        t1.fine = ora + timedelta(minutes=2 * margine)
        t1.save()

        self.assertTrue(
            persona.oggetti_permesso(
                GESTIONE_CENTRALE_OPERATIVA_SEDE).exists(),
            "La persona può gestire la CO con un margine di %d minuti in anticipo"
            % margine,
        )

        t1.inizio = ora - timedelta(hours=24)
        t1.fine = ora - timedelta(minutes=margine)
        t1.save()

        self.assertTrue(
            persona.oggetti_permesso(
                GESTIONE_CENTRALE_OPERATIVA_SEDE).exists(),
            "La persona può gestire la CO con un margine di %d minuti dopo la fine"
            % margine,
        )

        t1.inizio = ora - timedelta(hours=24)
        t1.fine = ora - timedelta(minutes=margine + 2)
        t1.save()

        self.assertFalse(
            persona.oggetti_permesso(
                GESTIONE_CENTRALE_OPERATIVA_SEDE).exists(),
            "La persona non puo gestire la CO se è troppo tardi",
        )

        # Se la partecipazione viene richiesta...
        partecipazione.richiedi()

        self.assertFalse(
            persona.oggetti_permesso(
                GESTIONE_CENTRALE_OPERATIVA_SEDE).exists(),
            "La persona non può gestire la CO perché la richiesta non è stata processata"
        )
예제 #14
0
    def test_centrale_operativa_permessi_attivita(self):

        delegato = crea_persona()
        volontario, sede, appartenenza = crea_persona_sede_appartenenza()
        sede.aggiungi_delegato(DELEGATO_CO, delegato)

        area, attivita = crea_area_attivita(sede, centrale_operativa=None)
        turno = crea_turno(attivita)
        crea_partecipazione(volontario, turno)

        sessione_delegato = self.sessione_utente(persona=delegato)
        sessione_volontario = self.sessione_utente(persona=volontario)

        self.assertFalse(
            sessione_volontario.is_text_present("CO"),
            "La centrale operativa non e' disponibile al volontario")

        self.assertTrue(sessione_delegato.is_text_present("CO"),
                        "La centrale operativa e' disponibile al delegato")

        # In modalita' automatica, il volontario e' abilitato immediatamente
        attivita.centrale_operativa = Attivita.CO_AUTO
        attivita.save()

        sessione_volontario.visit("%s/utente/" % self.live_server_url)

        self.assertTrue(
            sessione_volontario.is_text_present("CO"),
            "La centrale operativa e' ora disponibile al volontario")

        sessione_volontario.click_link_by_partial_text("CO")
        sessione_volontario.click_link_by_partial_text("Turni")
        sessione_volontario.click_link_by_partial_text("Monta")

        self.assertTrue(sessione_volontario.is_text_present(attivita.nome),
                        "Il volontario vede propria attivita in CO")

        # In modalita' manuale...
        attivita.centrale_operativa = Attivita.CO_MANUALE
        attivita.save()

        sessione_volontario.click_link_by_partial_text("Smonta")

        self.assertTrue(sessione_volontario.is_text_present("Accesso Negato"),
                        "Il volontario non può più montare o smontare")

        sessione_delegato.click_link_by_partial_text("CO")
        sessione_delegato.click_link_by_partial_text("Poteri")

        self.assertTrue(sessione_delegato.is_text_present(volontario.nome),
                        "Il delegato vede la persona in elenco")

        sessione_delegato.click_link_by_partial_text("Assegna")

        self.assertTrue(sessione_delegato.is_text_present("Ritira"),
                        "Il delegato ha correttamente abilitato i poteri")

        sessione_volontario.click_link_by_partial_text("Torna")
        sessione_volontario.click_link_by_partial_text("CO")
        sessione_volontario.click_link_by_partial_text("Turni")
        sessione_volontario.click_link_by_partial_text("Smonta")

        self.assertTrue(sessione_volontario.is_text_present(volontario.nome),
                        "Il volontario ha il suo nome in elenco")