Ejemplo n.º 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)
Ejemplo n.º 2
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)
Ejemplo n.º 3
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 è 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())
Ejemplo n.º 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})
Ejemplo n.º 5
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())
Ejemplo n.º 6
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})
Ejemplo n.º 7
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"
        )
Ejemplo n.º 8
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"
        )
Ejemplo n.º 9
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"
        )
Ejemplo n.º 10
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")