Example #1
0
    def test_recupero_password_persona_non_utente(self, mocked):

        presidente = crea_persona()
        persona, sede, app = crea_persona_sede_appartenenza(presidente=presidente)
        sessione = self.sessione_anonimo()

        # test con codice fiscale non associato ad utenza per persona associata a sede
        sessione.visit("%s%s" % (self.live_server_url, reverse('recupera_password')))

        sessione.fill('codice_fiscale', persona.codice_fiscale)
        sessione.fill('email', '*****@*****.**')
        sessione.find_by_css('.btn.btn-block.btn-primary').first.click()

        self.assertTrue(sessione.is_text_present('Nessuna utenza'))
        self.assertTrue(sessione.is_text_present('Chiedi al tuo Ufficio Soci'))
        self.assertTrue(sessione.is_text_present('{} (Presidente)'.format(presidente.nome_completo)))

        # test con codice fiscale non associato ad utenza per persona non associata a sede
        persona_senza_sede = crea_persona()
        sessione.visit("%s%s" % (self.live_server_url, reverse('recupera_password')))

        sessione.fill('codice_fiscale', persona_senza_sede.codice_fiscale)
        sessione.fill('email', '*****@*****.**')
        sessione.find_by_css('.btn.btn-block.btn-primary').first.click()

        sessione.screenshot()

        self.assertTrue(sessione.is_text_present('Nessuna utenza'))
        self.assertTrue(sessione.is_text_present('Supporto di Gaia'))
Example #2
0
    def test_reclama_ordinario(self):

        # Crea oggetti e nomina i delegati US regionali e Locali
        us_regionale = crea_persona()
        us_locale = crea_persona()

        ordinario, regionale, appartenenza = crea_persona_sede_appartenenza(presidente=us_regionale)
        appartenenza.membro = Appartenenza.ORDINARIO
        appartenenza.save()
        regionale.estensione = REGIONALE
        regionale.save()

        locale = crea_sede(presidente=us_locale, genitore=regionale)

        sessione_regionale = self.sessione_utente(persona=us_regionale)
        sessione_locale = self.sessione_utente(persona=us_locale)

        # Prima di tutto, assicurati che il socio ordinario risulti correttamente
        # nell'elenco del regionale.

        sessione_regionale.click_link_by_partial_text("Soci")
        sessione_regionale.click_link_by_partial_text("Ordinari")

        self.assertTrue(self.presente_in_elenco(sessione_regionale, persona=ordinario),
                        msg="Il socio ordinario è in elenco al regionale")

        # Poi, vai alla procedura di reclamo per il locale e completa.
        sessione_locale.click_link_by_partial_text("Soci")
        sessione_locale.click_link_by_partial_text("Reclama Persona")
        sessione_locale.fill('codice_fiscale', ordinario.codice_fiscale)
        sessione_locale.find_by_xpath("//button[@type='submit']").first.click()

        # Completa dati di inizio appartenenza - data nel passato!
        sessione_locale.fill('app-inizio', "1/1/1910")
        sessione_locale.select('app-membro', Appartenenza.SOSTENITORE)
        sessione_locale.select('quota-registra_quota', ModuloReclamaQuota.NO)
        sessione_locale.find_by_xpath("//button[@type='submit']").first.click()

        self.assertTrue(sessione_locale.is_text_present("1. Appartenenza al Comitato"),
                        msg="Non e possibile reclamare ordinario nel passato")

        # Compila con la data di oggi.
        sessione_locale.fill('app-inizio', timezone.now().strftime("%d/%m/%Y"))
        sessione_locale.find_by_xpath("//button[@type='submit']").first.click()

        # Controlla elenco dei sostenitori.
        sessione_locale.visit("%s/utente/" % self.live_server_url)
        sessione_locale.click_link_by_partial_text("Soci")
        sessione_locale.click_link_by_partial_text("Sostenitori")
        self.assertTrue(
            self.presente_in_elenco(sessione_locale, persona=ordinario),
            msg="L'ex ordinario è stato reclamato con successo")

        # Controlla la rimozione corretta dagli ordinari.
        sessione_regionale.click_link_by_partial_text("Ordinari")
        self.assertFalse(
            self.presente_in_elenco(sessione_regionale, persona=ordinario),
            msg="L'ex ordinario non è più in elenco al regionale"
        )
Example #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)
Example #4
0
    def test_invito_aspirante(self):
        presidente = crea_persona()
        presidente.email_contatto = email_fittizzia()
        presidente.save()
        crea_utenza(presidente, presidente.email_contatto)
        direttore, sede, appartenenza = crea_persona_sede_appartenenza(presidente=presidente)

        aspirante1 = crea_persona()
        aspirante1.email_contatto = email_fittizzia()
        aspirante1.codice_fiscale = codice_fiscale()
        aspirante1.save()
        a = Aspirante(persona=aspirante1)
        a.locazione = sede.locazione
        a.save()

        oggi = poco_fa()
        corso = CorsoBase.objects.create(
            stato=CorsoBase.ATTIVO,
            sede=sede,
            data_inizio=oggi + timedelta(days=7),
            data_esame=oggi + timedelta(days=14),
            progressivo=1,
            anno=oggi.year,
            descrizione='Un corso',
        )
        self.assertFalse(aspirante1.autorizzazioni_in_attesa().exists())

        p = InvitoCorsoBase(persona=aspirante1, corso=corso, invitante=presidente)
        p.save()
        p.richiedi()
        self.assertEqual(len(mail.outbox), 1)
        email = mail.outbox[0]
        self.assertTrue(email.subject.find("Richiesta di iscrizione a Corso Base da {}".format(presidente.nome_completo)) > -1)
        self.assertEqual(len(email.to), 1)
        self.assertIn(aspirante1.email_contatto, email.to)

        self.assertEqual(aspirante1.autorizzazioni_in_attesa().count(), 1)
        aspirante1.autorizzazioni_in_attesa()[0].concedi()
        self.assertEqual(len(mail.outbox), 3)
        email_aspirante = False
        email_presidente = False
        for email in mail.outbox[1:]:
            if aspirante1.email_contatto in email.to:
                email_aspirante = True
                self.assertTrue(email.subject.find('Iscrizione a Corso Base') > -1)
            elif presidente.email_contatto in email.to:
                email_presidente = True
                self.assertTrue(email.subject.find('Richiesta di iscrizione a Corso Base APPROVATA') > -1)
            else:
                raise AssertionError('Email a destinatario sconosciuto {}'.format(email.to))
        self.assertTrue(email_aspirante)
        self.assertTrue(email_presidente)

        self.assertFalse(aspirante1.autorizzazioni_in_attesa().exists())
        self.assertFalse(corso.inviti.exists())
        self.assertEqual(corso.partecipazioni.count(), 1)
Example #5
0
    def test_invito_aspirante(self):
        presidente = crea_persona()
        presidente.email_contatto = email_fittizzia()
        presidente.save()
        crea_utenza(presidente, presidente.email_contatto)
        direttore, sede, appartenenza = crea_persona_sede_appartenenza(presidente=presidente)

        aspirante1 = crea_persona()
        aspirante1.email_contatto = email_fittizzia()
        aspirante1.codice_fiscale = codice_fiscale()
        aspirante1.save()
        a = Aspirante(persona=aspirante1)
        a.locazione = sede.locazione
        a.save()

        oggi = poco_fa()
        corso = CorsoBase.objects.create(
            stato=CorsoBase.ATTIVO,
            sede=sede,
            data_inizio=oggi + timedelta(days=7),
            data_esame=oggi + timedelta(days=14),
            progressivo=1,
            anno=oggi.year,
            descrizione='Un corso',
        )
        self.assertFalse(aspirante1.autorizzazioni_in_attesa().exists())

        p = InvitoCorsoBase(persona=aspirante1, corso=corso, invitante=presidente)
        p.save()
        p.richiedi()
        self.assertEqual(len(mail.outbox), 1)
        email = mail.outbox[0]
        self.assertTrue(email.subject.find("Richiesta di iscrizione a Corso Base da {}".format(presidente.nome_completo)) > -1)
        self.assertEqual(len(email.to), 1)
        self.assertIn(aspirante1.email_contatto, email.to)

        self.assertEqual(aspirante1.autorizzazioni_in_attesa().count(), 1)
        aspirante1.autorizzazioni_in_attesa()[0].concedi()
        self.assertEqual(len(mail.outbox), 3)
        email_aspirante = False
        email_presidente = False
        for email in mail.outbox[1:]:
            if aspirante1.email_contatto in email.to:
                email_aspirante = True
                self.assertTrue(email.subject.find('Iscrizione a Corso Base') > -1)
            elif presidente.email_contatto in email.to:
                email_presidente = True
                self.assertTrue(email.subject.find('Richiesta di iscrizione a Corso Base APPROVATA') > -1)
            else:
                raise AssertionError('Email a destinatario sconosciuto {}'.format(email.to))
        self.assertTrue(email_aspirante)
        self.assertTrue(email_presidente)

        self.assertFalse(aspirante1.autorizzazioni_in_attesa().exists())
        self.assertFalse(corso.inviti.exists())
        self.assertEqual(corso.partecipazioni.count(), 1)
Example #6
0
    def test_aspirante_confermato(self):
        presidente = crea_persona()
        presidente.email_contatto = email_fittizzia()
        presidente.save()
        crea_utenza(presidente, presidente.email_contatto)
        sede = crea_sede(presidente)

        aspirante1 = crea_persona()
        aspirante1.email_contatto = email_fittizzia()
        aspirante1.codice_fiscale = codice_fiscale()
        aspirante1.save()
        a = Aspirante(persona=aspirante1)
        a.locazione = sede.locazione
        a.save()

        oggi = poco_fa()
        corso = CorsoBase.objects.create(
            stato=CorsoBase.ATTIVO,
            sede=sede,
            data_inizio=oggi + timedelta(days=7),
            data_esame=oggi + timedelta(days=14),
            progressivo=1,
            anno=oggi.year,
            descrizione='Un corso',
        )
        partecipazione1 = PartecipazioneCorsoBase.objects.create(persona=aspirante1, corso=corso)
        partecipazione1.richiedi()

        for autorizzazione in partecipazione1.autorizzazioni:
            autorizzazione.concedi(firmatario=presidente, modulo=None)
        partecipazione1.refresh_from_db()

        dati = {
            'ammissione': PartecipazioneCorsoBase.AMMESSO,
            'motivo_non_ammissione': None,
            'esito_parte_1': PartecipazioneCorsoBase.POSITIVO,
            'argomento_parte_1': 'blah',
            'esito_parte_2': PartecipazioneCorsoBase.POSITIVO,
            'argomento_parte_2': 'bla',
            'extra_1': False,
            'extra_2': False,
            'destinazione': sede.pk,
        }
        modulo = FormVerbaleCorso(
            data=dati, generazione_verbale=True, instance=partecipazione1,
        )
        modulo.fields['destinazione'].queryset = corso.possibili_destinazioni()
        modulo.fields['destinazione'].initial = corso.sede
        self.assertTrue(modulo.is_valid())
        modulo.save()
        corso.termina(presidente)
        self.assertFalse(Aspirante.objects.all().exists())
        aspirante1 = Persona.objects.get(pk=aspirante1.pk)
        with self.assertRaises(ObjectDoesNotExist):
            self.assertFalse(aspirante1.aspirante)
Example #7
0
    def test_aspirante_confermato(self):
        presidente = crea_persona()
        presidente.email_contatto = email_fittizzia()
        presidente.save()
        crea_utenza(presidente, presidente.email_contatto)
        sede = crea_sede(presidente)

        aspirante1 = crea_persona()
        aspirante1.email_contatto = email_fittizzia()
        aspirante1.codice_fiscale = codice_fiscale()
        aspirante1.save()
        a = Aspirante(persona=aspirante1)
        a.locazione = sede.locazione
        a.save()

        oggi = poco_fa()
        corso = CorsoBase.objects.create(
            stato=CorsoBase.ATTIVO,
            sede=sede,
            data_inizio=oggi + timedelta(days=7),
            data_esame=oggi + timedelta(days=14),
            progressivo=1,
            anno=oggi.year,
            descrizione='Un corso',
        )
        partecipazione1 = PartecipazioneCorsoBase.objects.create(persona=aspirante1, corso=corso)
        partecipazione1.richiedi()

        for autorizzazione in partecipazione1.autorizzazioni:
            autorizzazione.concedi(firmatario=presidente, modulo=None)
        partecipazione1.refresh_from_db()

        dati = {
            'ammissione': PartecipazioneCorsoBase.AMMESSO,
            'motivo_non_ammissione': None,
            'esito_parte_1': PartecipazioneCorsoBase.POSITIVO,
            'argomento_parte_1': 'blah',
            'esito_parte_2': PartecipazioneCorsoBase.POSITIVO,
            'argomento_parte_2': 'bla',
            'extra_1': False,
            'extra_2': False,
            'destinazione': sede.pk,
        }
        modulo = ModuloVerbaleAspiranteCorsoBase(
            data=dati, generazione_verbale=True, instance=partecipazione1,
        )
        modulo.fields['destinazione'].queryset = corso.possibili_destinazioni()
        modulo.fields['destinazione'].initial = corso.sede
        self.assertTrue(modulo.is_valid())
        modulo.save()
        corso.termina(presidente)
        self.assertFalse(Aspirante.objects.all().exists())
        aspirante1 = Persona.objects.get(pk=aspirante1.pk)
        with self.assertRaises(ObjectDoesNotExist):
            self.assertFalse(aspirante1.aspirante)
Example #8
0
    def test_autocomplete_sostentitore_aspirante(self):
        direttore, sede, appartenenza = crea_persona_sede_appartenenza()
        aspirante1 = crea_persona()
        aspirante1.email_contatto = email_fittizzia()
        aspirante1.codice_fiscale = codice_fiscale()
        a = Aspirante(persona=aspirante1)
        a.locazione = sede.locazione
        a.save()
        aspirante1.save()

        response = self.client.get('/autocomplete/IscrivibiliCorsiAutocompletamento/?q={}'.format(aspirante1.codice_fiscale[:3]))
        self.assertContains(response, aspirante1.nome_completo)

        response = self.client.get('/autocomplete/IscrivibiliCorsiAutocompletamento/?q={}'.format(aspirante1.nome_completo))
        self.assertNotContains(response, aspirante1.nome_completo)

        # Creiamo aspirante
        aspirante2 = crea_persona()
        aspirante2.email_contatto = email_fittizzia()
        aspirante2.codice_fiscale = codice_fiscale()
        a = Aspirante(persona=aspirante2)
        a.locazione = sede.locazione
        a.save()
        aspirante2.save()

        # Se è solo aspirante viene selezionato
        response = self.client.get('/autocomplete/IscrivibiliCorsiAutocompletamento/?q={}'.format(aspirante1.codice_fiscale[:3]))
        self.assertContains(response, aspirante1.nome_completo)

        Appartenenza.objects.create(
            persona=aspirante2,
            sede=sede,
            membro=Appartenenza.VOLONTARIO,
            inizio="1980-12-10",
        )

        # Con un appartenenza come volontario non è più selezionabile
        response = self.client.get('/autocomplete/IscrivibiliCorsiAutocompletamento/?q={}'.format(aspirante2.codice_fiscale[:3]))
        self.assertNotContains(response, aspirante2.nome_completo)

        # Dimettiamolo
        aspirante2.espelli()
        response = self.client.get('/autocomplete/IscrivibiliCorsiAutocompletamento/?q={}'.format(aspirante2.codice_fiscale[:3]))
        self.assertContains(response, aspirante2.nome_completo)

        # Reintegriamolo
        Appartenenza.objects.create(
            persona=aspirante2,
            sede=sede,
            membro=Appartenenza.VOLONTARIO,
            inizio=poco_fa(),
        )
        response = self.client.get('/autocomplete/IscrivibiliCorsiAutocompletamento/?q={}'.format(aspirante2.codice_fiscale[:3]))
        self.assertNotContains(response, aspirante2.nome_completo)
Example #9
0
    def test_autocomplete_sostentitore_aspirante(self):
        direttore, sede, appartenenza = crea_persona_sede_appartenenza()
        aspirante1 = crea_persona()
        aspirante1.email_contatto = email_fittizzia()
        aspirante1.codice_fiscale = codice_fiscale()
        a = Aspirante(persona=aspirante1)
        a.locazione = sede.locazione
        a.save()
        aspirante1.save()

        response = self.client.get('/autocomplete/IscrivibiliCorsiAutocompletamento/?q={}'.format(aspirante1.codice_fiscale[:3]))
        self.assertContains(response, aspirante1.nome_completo)

        response = self.client.get('/autocomplete/IscrivibiliCorsiAutocompletamento/?q={}'.format(aspirante1.nome_completo))
        self.assertNotContains(response, aspirante1.nome_completo)

        # Creiamo aspirante
        aspirante2 = crea_persona()
        aspirante2.email_contatto = email_fittizzia()
        aspirante2.codice_fiscale = codice_fiscale()
        a = Aspirante(persona=aspirante2)
        a.locazione = sede.locazione
        a.save()
        aspirante2.save()

        # Se è solo aspirante viene selezionato
        response = self.client.get('/autocomplete/IscrivibiliCorsiAutocompletamento/?q={}'.format(aspirante1.codice_fiscale[:3]))
        self.assertContains(response, aspirante1.nome_completo)

        Appartenenza.objects.create(
            persona=aspirante2,
            sede=sede,
            membro=Appartenenza.VOLONTARIO,
            inizio="1980-12-10",
        )

        # Con un appartenenza come volontario non è più selezionabile
        response = self.client.get('/autocomplete/IscrivibiliCorsiAutocompletamento/?q={}'.format(aspirante2.codice_fiscale[:3]))
        self.assertNotContains(response, aspirante2.nome_completo)

        # Dimettiamolo
        aspirante2.espelli()
        response = self.client.get('/autocomplete/IscrivibiliCorsiAutocompletamento/?q={}'.format(aspirante2.codice_fiscale[:3]))
        self.assertContains(response, aspirante2.nome_completo)

        # Reintegriamolo
        Appartenenza.objects.create(
            persona=aspirante2,
            sede=sede,
            membro=Appartenenza.VOLONTARIO,
            inizio=poco_fa(),
        )
        response = self.client.get('/autocomplete/IscrivibiliCorsiAutocompletamento/?q={}'.format(aspirante2.codice_fiscale[:3]))
        self.assertNotContains(response, aspirante2.nome_completo)
Example #10
0
 def setUpTestData(cls):
     cls.factory = RequestFactory()
     cls.presidente = crea_persona()
     cls.presidente.email_contatto = email_fittizzia()
     crea_utenza(cls.presidente, email=cls.presidente.email_contatto)
     cls.sede = crea_sede(cls.presidente)
     for i in range(cls.num_persone):
         persona = crea_persona()
         crea_appartenenza(persona, cls.sede)
         persona.email_contatto = email_fittizzia()
         persona.save()
         cls.persone.append(crea_utenza(persona, email=email_fittizzia()))
Example #11
0
 def setUpTestData(cls):
     cls.factory = RequestFactory()
     cls.presidente = crea_persona()
     cls.presidente.email_contatto = email_fittizzia()
     crea_utenza(cls.presidente, email=cls.presidente.email_contatto)
     cls.sede = crea_sede(cls.presidente)
     for i in range(cls.num_persone):
         persona = crea_persona()
         crea_appartenenza(persona, cls.sede)
         persona.email_contatto = email_fittizzia()
         persona.save()
         cls.persone.append(crea_utenza(persona, email=email_fittizzia()))
Example #12
0
    def test_recupero_password_corretto(self, mocked):
        presidente = crea_persona()
        persona, sede, app = crea_persona_sede_appartenenza(presidente=presidente)
        persona_in_sede = crea_persona()
        utenza_persona_in_sede = crea_utenza(persona_in_sede)
        appartenenza_persona_in_sede = crea_appartenenza(persona, sede)
        sessione = self.sessione_anonimo()

        sessione.visit("%s%s" % (self.live_server_url, reverse('recupera_password')))
        sessione.fill('codice_fiscale', persona_in_sede.codice_fiscale)
        sessione.fill('email', utenza_persona_in_sede.email)
        sessione.find_by_css('.btn.btn-block.btn-primary').first.click()
        self.assertTrue(sessione.is_text_present('Ti abbiamo inviato le istruzioni per cambiare la tua password tramite e-mail'))
Example #13
0
    def test_aggiungi_aspirante_multiplo(self):
        presidente = crea_persona()
        presidente.email_contatto = email_fittizzia()
        presidente.save()
        crea_utenza(presidente, presidente.email_contatto)
        direttore, sede, appartenenza = crea_persona_sede_appartenenza(presidente=presidente)

        aspirante1 = crea_persona()
        aspirante1.email_contatto = email_fittizzia()
        aspirante1.codice_fiscale = codice_fiscale()
        aspirante1.save()
        a = Aspirante(persona=aspirante1)
        a.locazione = sede.locazione
        a.save()

        oggi = poco_fa()
        corso = CorsoBase.objects.create(
            stato=CorsoBase.ATTIVO,
            sede=sede,
            data_inizio=oggi + timedelta(days=7),
            data_esame=oggi + timedelta(days=14),
            progressivo=1,
            anno=oggi.year,
            descrizione='Un corso',
        )

        self.client.login(username=presidente.email_contatto, password='******')

        # Iscrizione aspirante
        iscritto = {
            'persone': [aspirante1.pk]
        }
        response = self.client.post('/aspirante/corso-base/{}/iscritti/aggiungi/'.format(corso.pk), data=iscritto)
        self.assertEqual(corso.partecipazioni.count(), 0)
        self.assertEqual(corso.inviti.count(), 1)
        self.assertContains(response, aspirante1.nome_completo)
        self.assertContains(response, 'In attesa')
        # Correttezza email di invito
        self.assertEqual(len(mail.outbox), 1)
        email = mail.outbox[0]
        self.assertTrue(
            email.subject.find("Richiesta di iscrizione a Corso Base da {}".format(presidente.nome_completo)) > -1)
        self.assertEqual(len(email.to), 1)
        self.assertIn(aspirante1.email_contatto, email.to)

        iscritto = {
            'persone': [aspirante1.pk]
        }
        response = self.client.post('/aspirante/corso-base/{}/iscritti/aggiungi/'.format(corso.pk), data=iscritto)
        self.assertContains(response, 'Già invitato')
Example #14
0
    def test_aggiungi_aspirante_multiplo(self):
        presidente = crea_persona()
        presidente.email_contatto = email_fittizzia()
        presidente.save()
        crea_utenza(presidente, presidente.email_contatto)
        direttore, sede, appartenenza = crea_persona_sede_appartenenza(presidente=presidente)

        aspirante1 = crea_persona()
        aspirante1.email_contatto = email_fittizzia()
        aspirante1.codice_fiscale = codice_fiscale()
        aspirante1.save()
        a = Aspirante(persona=aspirante1)
        a.locazione = sede.locazione
        a.save()

        oggi = poco_fa()
        corso = CorsoBase.objects.create(
            stato=CorsoBase.ATTIVO,
            sede=sede,
            data_inizio=oggi + timedelta(days=7),
            data_esame=oggi + timedelta(days=14),
            progressivo=1,
            anno=oggi.year,
            descrizione='Un corso',
        )

        self.client.login(username=presidente.email_contatto, password='******')

        # Iscrizione aspirante
        iscritto = {
            'persone': [aspirante1.pk]
        }
        response = self.client.post('/aspirante/corso-base/{}/iscritti/aggiungi/'.format(corso.pk), data=iscritto)
        self.assertEqual(corso.partecipazioni.count(), 0)
        self.assertEqual(corso.inviti.count(), 1)
        self.assertContains(response, aspirante1.nome_completo)
        self.assertContains(response, 'In attesa')
        # Correttezza email di invito
        self.assertEqual(len(mail.outbox), 1)
        email = mail.outbox[0]
        self.assertTrue(
            email.subject.find("Richiesta di iscrizione a Corso Base da {}".format(presidente.nome_completo)) > -1)
        self.assertEqual(len(email.to), 1)
        self.assertIn(aspirante1.email_contatto, email.to)

        iscritto = {
            'persone': [aspirante1.pk]
        }
        response = self.client.post('/aspirante/corso-base/{}/iscritti/aggiungi/'.format(corso.pk), data=iscritto)
        self.assertContains(response, 'Già invitato')
Example #15
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})
Example #16
0
    def test_recupero_password_email_errata(self, mocked):
        presidente = crea_persona()
        persona, sede, app = crea_persona_sede_appartenenza(presidente=presidente)
        persona_in_sede = crea_persona()
        utenza_persona_in_sede = crea_utenza(persona_in_sede)
        appartenenza_persona_in_sede = crea_appartenenza(persona, sede)
        sessione = self.sessione_anonimo()

        sessione.visit("%s%s" % (self.live_server_url, reverse('recupera_password')))

        sessione.fill('codice_fiscale', persona_in_sede.codice_fiscale)
        sessione.fill('email', '*****@*****.**')
        sessione.find_by_css('.btn.btn-block.btn-primary').first.click()
        self.assertTrue(sessione.is_text_present('ma NON con questo indirizzo e-mail ([email protected])'))
        self.assertTrue(sessione.is_text_present('Supporto di Gaia'))
Example #17
0
    def test_registrazione_quota_socio_senza_fine_chiuso(self):

        # Crea oggetti e nomina il delegato US
        delegato = crea_persona()
        utente = crea_utenza(delegato, email="*****@*****.**", password="******")
        volontario, sede, appartenenza = crea_persona_sede_appartenenza()
        sede.aggiungi_delegato(UFFICIO_SOCI, delegato)

        oggi = poco_fa()
        inizio_anno = oggi.replace(month=1, day=1)

        Tesseramento.objects.create(
            stato=Tesseramento.CHIUSO, inizio=inizio_anno,
            anno=inizio_anno.year, quota_attivo=8, quota_ordinario=8,
            quota_benemerito=8, quota_aspirante=8, quota_sostenitore=8
        )

        sede.telefono = '+3902020202'
        sede.email = '*****@*****.**'
        sede.codice_fiscale = '01234567891'
        sede.partita_iva = '01234567891'
        sede.locazione = crea_locazione()
        sede.save()

        data = {
            'volontario': volontario.pk,
            'importo': 8,
            'data_versamento': (oggi - datetime.timedelta(days=60)).strftime('%d/%m/%Y')
        }
        self.client.login(email="*****@*****.**", password="******")
        response = self.client.post('{}{}'.format(self.live_server_url, reverse('us_quote_nuova')), data=data)
        # tesseramento chiuso, quota non registrata
        self.assertEqual(response.status_code, 200)
        self.assertContains(response, 'tesseramento {} è chiuso'.format(oggi.year))
Example #18
0
    def test_apertura_elenchi(self):

        # Crea oggetti e nomina il delegato US
        delegato = crea_persona()
        volontario, sede, appartenenza = crea_persona_sede_appartenenza()
        sede.aggiungi_delegato(UFFICIO_SOCI, delegato)

        # Inizia la sessione
        sessione = self.sessione_utente(persona=delegato)

        elenchi = ['volontari', 'giovani', 'estesi', 'ivcm', 'riserva',
                   'soci', 'sostenitori', 'dipendenti', 'dimessi',
                   'trasferiti', 'elettorato']

        # Vai al pannello soci
        sessione.click_link_by_partial_text("Soci")

        for elenco in elenchi:  # Per ogni elenco

            sessione.visit("%s/us/elenchi/%s/" % (self.live_server_url, elenco))

            # Genera con impostazioni di default (clicca due volte su "Genera")
            sessione.find_by_xpath("//button[@type='submit']").first.click()

            with sessione.get_iframe(0) as iframe:  # Dentro la finestra

                if iframe.is_text_present("Genera elenco"):
                    iframe.find_by_xpath("//button[@type='submit']").first.click()

                self.assertTrue(
                    iframe.is_text_present("Invia messaggio", wait_time=5),
                    msg="Elenco %s apribile da web" % elenco,
                )
Example #19
0
    def test_presidente_recursetree(self):
        """
        Questo test controlla che la pagina /presidente
        funzioni correttamente nel caso particolare di due sottoalberi
        completamente separati, che causa problemi e non puo essere usata
        con {% recursetree %}.
        """

        presidente = crea_persona()

        # Struttura:
        # x
        # - y       presidenza
        # - - a
        # - - - b   (unita)
        # - c       presidenza
        # - - d     (unita)
        x = crea_sede()
        y = crea_sede(genitore=x)
        a = crea_sede(genitore=y, presidente=presidente)
        b = crea_sede(genitore=a, estensione=TERRITORIALE)
        c = crea_sede(genitore=x, presidente=presidente)
        d = crea_sede(genitore=c, estensione=TERRITORIALE)

        sessione = self.sessione_utente(persona=presidente)
        sessione.click_link_by_partial_text("Sedi")

        self.assertTrue(
            sessione.is_text_present(c.nome),
            msg="Pagina caricata correttamente"
        )
Example #20
0
    def test_documenti(self):

        p = crea_persona()
        p.save()

        d = Documento(
            persona=p,
            tipo=Documento.PATENTE_CIVILE,
            file=None,
        )
        d.save()

        self.assertTrue(
            p.documenti.all(),
            msg="Il membro ha almeno un documento"
        )

        self.assertTrue(
            p.documenti.filter(tipo=Documento.PATENTE_CIVILE),
            msg="Il membro ha di fatto una patente civile"
        )

        self.assertFalse(
            p.documenti.filter(tipo=Documento.CARTA_IDENTITA),
            msg="Il membro non ha davvero alcuna carta di identita"
        )
Example #21
0
    def test_modifica_email(self):
        EMAIL_UTENZA = email_fittizzia()
        EMAIL_NUOVA = email_fittizzia()

        persona = crea_persona()
        utenza = crea_utenza(persona, EMAIL_UTENZA)

        sessione = self.sessione_utente(persona=persona)
        sessione.click_link_by_partial_text("Contatti")

        sessione.is_text_present(EMAIL_UTENZA)
        sessione.fill('email', EMAIL_NUOVA)
        sessione.find_by_xpath("//button[@type='submit']").first.click()

        sessione.is_text_present('Conferma nuovo indirizzo email')
        sessione.is_text_present(EMAIL_NUOVA)

        email = mail.outbox[0]
        code_re = re.compile("/utente/contatti/\?code_m=([^']+)")
        code_text = code_re.findall(email.alternatives[0][0])[0]
        sessione.visit("%s%s?code_m=%s" % (self.live_server_url, persona.url_contatti, code_text))

        sessione.is_text_present('Nuovo indirizzo email confermato!')

        utenza.refresh_from_db()

        self.assertTrue(
            utenza.email == EMAIL_NUOVA,
            msg="E-mail di accesso cambiata correttamente"
        )
Example #22
0
 def test_dettaglio_articoli_privati(self):
     articolo = Articolo.objects.create(
         titolo='Titolo 1981',
         corpo='Testo random',
         estratto='qualcosa',
         data_inizio_pubblicazione='1981-12-10',
         stato=Articolo.PUBBLICATO
     )
     presidente = crea_persona()
     presidente.save()
     presidente, sede, _ = crea_persona_sede_appartenenza(presidente)
     delega_presidente_in_corso = Delega(
         persona=presidente,
         tipo=PRESIDENTE,
         oggetto=sede,
         inizio=datetime.datetime.now() - datetime.timedelta(days=5),
         fine=datetime.datetime.now() + datetime.timedelta(days=5)
     )
     delega_presidente_in_corso.save()
     sessione_persona = self.sessione_utente(persona=presidente)
     sessione_persona.visit("%s%s" % (
         self.live_server_url, reverse('articoli:dettaglio', kwargs={
             'articolo_slug': articolo.slug
         })
     ))
     self.assertTrue(sessione_persona.is_text_present(articolo.titolo))
Example #23
0
 def test_dettaglio_articoli_protected(self):
     articolo = Articolo.objects.create(
         titolo='Titolo 1981',
         corpo='Testo random',
         estratto='qualcosa',
         data_inizio_pubblicazione='1981-12-10',
         stato=Articolo.PUBBLICATO)
     segmento_presidenti_no_filtri = ArticoloSegmento.objects.create(
         segmento='I',
         articolo=articolo,
     )
     normale = crea_persona()
     normale.save()
     normale, sede, _ = crea_persona_sede_appartenenza(normale)
     delega_us = Delega(
         persona=normale,
         tipo=UFFICIO_SOCI,
         oggetto=sede,
         inizio=datetime.datetime.now() - datetime.timedelta(days=5),
         fine=datetime.datetime.now() + datetime.timedelta(days=5))
     delega_us.save()
     sessione_persona = self.sessione_utente(persona=normale)
     sessione_persona.visit(
         "%s%s" % (self.live_server_url,
                   reverse('dettaglio_articolo',
                           kwargs={'articolo_slug': articolo.slug})))
     self.assertTrue(
         sessione_persona.is_text_present(
             'Accesso Negato, siamo spiacenti'))
Example #24
0
 def test_dettaglio_articoli_privati(self):
     articolo = Articolo.objects.create(
         titolo='Titolo 1981',
         corpo='Testo random',
         estratto='qualcosa',
         data_inizio_pubblicazione='1981-12-10',
         stato=Articolo.PUBBLICATO
     )
     presidente = crea_persona()
     presidente.save()
     presidente, sede, _ = crea_persona_sede_appartenenza(presidente)
     delega_presidente_in_corso = Delega(
         persona=presidente,
         tipo=PRESIDENTE,
         oggetto=sede,
         inizio=datetime.datetime.now() - datetime.timedelta(days=5),
         fine=datetime.datetime.now() + datetime.timedelta(days=5)
     )
     delega_presidente_in_corso.save()
     sessione_persona = self.sessione_utente(persona=presidente)
     sessione_persona.visit("%s%s" % (
         self.live_server_url, reverse('dettaglio_articolo', kwargs={
             'articolo_slug': articolo.slug
         })
     ))
     self.assertTrue(sessione_persona.is_text_present(articolo.titolo))
Example #25
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)
Example #26
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)
Example #27
0
 def test_dettaglio_articoli_protected(self):
     articolo = Articolo.objects.create(
         titolo='Titolo 1981',
         corpo='Testo random',
         estratto='qualcosa',
         data_inizio_pubblicazione='1981-12-10',
         stato=Articolo.PUBBLICATO
     )
     segmento_presidenti_no_filtri = ArticoloSegmento.objects.create(
         segmento='I',
         articolo=articolo,
     )
     normale = crea_persona()
     normale.save()
     normale, sede, _ = crea_persona_sede_appartenenza(normale)
     delega_us = Delega(
         persona=normale,
         tipo=UFFICIO_SOCI,
         oggetto=sede,
         inizio=datetime.datetime.now() - datetime.timedelta(days=5),
         fine=datetime.datetime.now() + datetime.timedelta(days=5)
     )
     delega_us.save()
     sessione_persona = self.sessione_utente(persona=normale)
     sessione_persona.visit("%s%s" % (
         self.live_server_url, reverse('dettaglio_articolo', kwargs={
             'articolo_slug': articolo.slug
         })
     ))
     self.assertTrue(sessione_persona.is_text_present('Accesso Negato, siamo spiacenti'))
Example #28
0
    def test_crea_area(self):

        presidente = crea_persona()
        persona, sede, appartenenza = crea_persona_sede_appartenenza(presidente=presidente)
        if not presidente.volontario:
            crea_appartenenza(presidente, sede)

        sessione_presidente = self.sessione_utente(persona=presidente)
        #sessione_persona = self.sessione_utente(persona=persona)

        # Crea area di intervento
        sessione_presidente.click_link_by_partial_href("/attivita/")
        sessione_presidente.click_link_by_partial_text("Aree di intervento")
        sessione_presidente.click_link_by_partial_text(sede.nome)
        sessione_presidente.fill('nome', "Area 42")
        sessione_presidente.fill('obiettivo', '6')
        sessione_presidente.find_by_xpath("//button[@type='submit']").first.click()

        # Nomina la persona come responsabile
        self.seleziona_delegato(sessione_presidente, persona)

        self.assertTrue(
            sessione_presidente.is_text_present("Area 42"),
            "La nuova area è stata creata con successo",
        )

        self.assertTrue(
            sessione_presidente.is_text_present(persona.nome_completo),
            "La nuova area ha il responsabile assegnato",
        )

        self.assertTrue(
            sessione_presidente.is_text_present("0 attività"),
            "La nuova area non ha alcuna attività",
        )
Example #29
0
    def test_corso_pubblico(self):
        """
        Un corso è visibile fino a FORMAZIONE_FINESTRA_CORSI_INIZIATI giorni dal suo inizio
        """
        presidente = crea_persona()
        direttore, sede, appartenenza = crea_persona_sede_appartenenza(presidente=presidente)

        oggi = poco_fa()

        corso = CorsoBase.objects.create(
            stato=CorsoBase.ATTIVO,
            sede=sede,
            data_inizio=oggi + timedelta(days=7),
            data_esame=oggi + timedelta(days=14),
            progressivo=1,
            anno=oggi.year,
            descrizione='Un corso',
        )
        self.assertTrue(CorsoBase.pubblici().exists())
        self.assertFalse(corso.iniziato)
        self.assertFalse(corso.troppo_tardi_per_iscriverti)
        self.assertTrue(corso.possibile_aggiungere_iscritti)
        corso.data_inizio = oggi - timedelta(days=(settings.FORMAZIONE_FINESTRA_CORSI_INIZIATI - 1))
        corso.save()
        self.assertTrue(corso.iniziato)
        self.assertFalse(corso.troppo_tardi_per_iscriverti)
        self.assertTrue(corso.possibile_aggiungere_iscritti)
        self.assertTrue(CorsoBase.pubblici().exists())

        corso.data_inizio = oggi - timedelta(days=settings.FORMAZIONE_FINESTRA_CORSI_INIZIATI)
        corso.save()
        self.assertTrue(corso.iniziato)
        self.assertTrue(corso.troppo_tardi_per_iscriverti)
        self.assertTrue(corso.possibile_aggiungere_iscritti)
        self.assertFalse(CorsoBase.pubblici().exists())
Example #30
0
    def test_corso_pubblico(self):
        """
        Un corso è visibile fino a FORMAZIONE_FINESTRA_CORSI_INIZIATI giorni dal suo inizio
        """
        presidente = crea_persona()
        direttore, sede, appartenenza = crea_persona_sede_appartenenza(presidente=presidente)

        oggi = poco_fa()

        corso = CorsoBase.objects.create(
            stato=CorsoBase.ATTIVO,
            sede=sede,
            data_inizio=oggi + timedelta(days=7),
            data_esame=oggi + timedelta(days=14),
            progressivo=1,
            anno=oggi.year,
            descrizione='Un corso',
        )
        self.assertTrue(CorsoBase.pubblici().exists())
        self.assertFalse(corso.iniziato)
        self.assertFalse(corso.troppo_tardi_per_iscriverti)
        self.assertTrue(corso.possibile_aggiungere_iscritti)
        corso.data_inizio = oggi - timedelta(days=(settings.FORMAZIONE_FINESTRA_CORSI_INIZIATI - 1))
        corso.save()
        self.assertTrue(corso.iniziato)
        self.assertFalse(corso.troppo_tardi_per_iscriverti)
        self.assertTrue(corso.possibile_aggiungere_iscritti)
        self.assertTrue(CorsoBase.pubblici().exists())

        corso.data_inizio = oggi - timedelta(days=settings.FORMAZIONE_FINESTRA_CORSI_INIZIATI)
        corso.save()
        self.assertTrue(corso.iniziato)
        self.assertTrue(corso.troppo_tardi_per_iscriverti)
        self.assertTrue(corso.possibile_aggiungere_iscritti)
        self.assertFalse(CorsoBase.pubblici().exists())
Example #31
0
    def test_ricerca_posizione(self):

        presidente = crea_persona()
        persona, sede, app = crea_persona_sede_appartenenza(presidente=presidente)
        area, attivita = crea_area_attivita(sede=sede)

        sessione_presidente = self.sessione_utente(persona=presidente)
        sessione_presidente.visit("%s%s" % (self.live_server_url,
                                            attivita.url_modifica))

        with sessione_presidente.get_iframe(0) as iframe:

            iframe.fill('indirizzo', 'via etnea 353')
            iframe.fill('comune', 'ct')
            iframe.fill('provincia', 'ctnia')
            iframe.find_by_xpath("//button[@type='submit']").first.click()

            self.assertTrue(
                iframe.is_text_present("Via Etnea, 353, 95125 Catania CT, Italia"),
                msg="Indirizzo trovato correttamente"
            )

            iframe.find_by_xpath("//button[@value='Via Etnea, 353, 95125 Catania CT, Italia']").first.click()

            self.assertTrue(
                iframe.is_text_present("Via Etnea, 353, 95125 Catania CT, Italia", wait_time=5),
                msg="Indirizzo salvato correttamente"
            )
Example #32
0
    def test_login(self):
        persona = crea_persona()
        sessione = self.sessione_utente(persona=persona)

        self.assertTrue(
            True,
            "Login effettuato con successo",
        )
Example #33
0
    def test_logout(self):
        persona = crea_persona()
        sessione = self.sessione_utente(persona=persona)

        sessione.visit("%s/logout/" % self.live_server_url)

        self.assertFalse(sessione.is_text_present(persona.nome),
                         "Logout effettuato con successo")
Example #34
0
    def test_login(self):
        persona = crea_persona()
        sessione = self.sessione_utente(persona=persona)

        self.assertTrue(
            True,
            "Login effettuato con successo",
        )
Example #35
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)
Example #36
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})
Example #37
0
    def test_segmento_anzianita(self):

        meno_di_tre_anni_fa = poco_fa() - timedelta(days=360*3)
        meno_di_due_anni_fa = poco_fa() - timedelta(days=360*2)
        meno_di_un_anno_fa = poco_fa() - timedelta(days=360)

        presidente = crea_persona()
        persona_1 = crea_persona()
        persona_2 = crea_persona()
        persona_3 = crea_persona()
        presidente, sede, _ = crea_persona_sede_appartenenza(presidente)

        Appartenenza.objects.create(
            persona=persona_1,
            sede=sede,
            membro=Appartenenza.VOLONTARIO,
            inizio=meno_di_tre_anni_fa,
            confermata=True
        )

        Appartenenza.objects.create(
            persona=persona_2,
            sede=sede,
            membro=Appartenenza.VOLONTARIO,
            inizio=meno_di_due_anni_fa,
            confermata=True
        )

        Appartenenza.objects.create(
            persona=persona_3,
            sede=sede,
            membro=Appartenenza.VOLONTARIO,
            inizio=meno_di_un_anno_fa,
            confermata=True
        )

        meno_di_un_anno = volontari_meno_un_anno(Persona.objects.all())
        self.assertEqual(meno_di_un_anno.count(), 1)
        self.assertEqual(meno_di_un_anno.get(), persona_3)

        meno_di_due_anni = volontari_piu_un_anno(Persona.objects.all())
        self.assertEqual(meno_di_due_anni.count(), 3)
        self.assertTrue(presidente in meno_di_due_anni)
        self.assertTrue(persona_1 in meno_di_due_anni)
        self.assertTrue(persona_2 in meno_di_due_anni)
Example #38
0
    def test_aggiornamento_ultima_azione(self):
        persona = crea_persona()
        utente = crea_utenza(persona)
        utente.is_staff = True
        utente.richiedi_2fa = True
        utente.save()

        data_base = datetime.datetime(2016, 1, 11, 12, 34, 56)
        data_1 = data_base + datetime.timedelta(seconds=60)
        data_2 = data_base + datetime.timedelta(seconds=120)
        data_3 = data_base + datetime.timedelta(seconds=180)
        data_4 = data_base + datetime.timedelta(seconds=240)

        mock_time = Mock()
        mock_time.return_value = data_base
        with patch('autenticazione.two_factor.middleware.now', return_value=mock_time()):
            self.assertIsNone(utente.ultima_azione)
            response = self.client.post(settings.LOGIN_URL, data={
                'auth-username': utente.email, 'auth-password': '******',
                'jorvik_login_view-current_step': 'auth'
            })
            self.assertEqual(response.status_code, 302)
            self.assertRedirects(response, reverse('two_factor:profile'))

            utente = self._ricarica_model(utente._meta.model, utente)
            self.assertEqual(utente.ultima_azione, data_base)

        mock_time.return_value = data_1
        with patch('autenticazione.two_factor.middleware.now', return_value=mock_time()):
            response = self.client.post(settings.LOGOUT_URL)
            self.assertContains(response, 'Sei uscito da Gaia')
            utente = self._ricarica_model(utente._meta.model, utente)
            self.assertEqual(utente.ultima_azione, data_1)

        mock_time.return_value = data_2
        with patch('autenticazione.two_factor.middleware.now', return_value=mock_time()):
            StaticDevice.objects.create(user=utente, name="Device")
            response = self.client.post(settings.LOGIN_URL, data={
                'auth-username': utente.email, 'auth-password': '******',
                'jorvik_login_view-current_step': 'auth'
            })
            self.assertEqual(response.status_code, 302)
            self.assertRedirects(response, '/utente/', fetch_redirect_response=False)
            utente = self._ricarica_model(utente._meta.model, utente)
            self.assertEqual(utente.ultima_azione, data_2)

        mock_time.return_value = data_3
        with patch('autenticazione.two_factor.middleware.now', return_value=mock_time()):
            response = self.client.get('/utente/')
            utente = self._ricarica_model(utente._meta.model, utente)
            self.assertEqual(utente.ultima_azione, data_3)

        mock_time.return_value = data_4
        with patch('autenticazione.two_factor.middleware.now', return_value=mock_time()):
            response = self.client.get(reverse('two_factor:profile'))
            utente = self._ricarica_model(utente._meta.model, utente)
            self.assertEqual(utente.ultima_azione, data_4)
Example #39
0
 def test_lista_articoli_vuota(self):
     persona = crea_persona()
     persona, sede, app = crea_persona_sede_appartenenza()
     sessione_persona = self.sessione_utente(persona=persona)
     sessione_persona.visit(
         "%s%s" % (self.live_server_url, reverse('lista_articoli')))
     self.assertTrue(
         sessione_persona.is_text_present(
             'Non è stato trovato alcun articolo'))
Example #40
0
    def test_invito_aspirante_automatico(self):
        presidente = crea_persona()
        presidente.email_contatto = email_fittizzia()
        presidente.save()
        crea_utenza(presidente, presidente.email_contatto)
        direttore, sede, appartenenza = crea_persona_sede_appartenenza(presidente=presidente)

        aspirante1 = crea_persona()
        aspirante1.email_contatto = email_fittizzia()
        aspirante1.codice_fiscale = codice_fiscale()
        aspirante1.save()
        a = Aspirante(persona=aspirante1)
        a.locazione = sede.locazione
        a.save()

        oggi = poco_fa()
        corso = CorsoBase.objects.create(
            stato=CorsoBase.ATTIVO,
            sede=sede,
            data_inizio=oggi + timedelta(days=7),
            data_esame=oggi + timedelta(days=14),
            progressivo=1,
            anno=oggi.year,
            descrizione='Un corso',
        )
        self.assertFalse(aspirante1.autorizzazioni_in_attesa().exists())

        partecipazione = InvitoCorsoBase(persona=aspirante1, corso=corso, invitante=presidente)
        partecipazione.save()
        partecipazione.richiedi()

        self.assertFalse(InvitoCorsoBase.con_esito_no().exists())
        autorizzazione = presidente.autorizzazioni_richieste.first()
        autorizzazione.scadenza = timezone.now() - timedelta(days=10)
        autorizzazione.save()
        self.assertFalse(autorizzazione.concessa)
        Autorizzazione.gestisci_automatiche()
        self.assertEqual(len(mail.outbox), 2)
        messaggio = mail.outbox[1]
        self.assertTrue(messaggio.subject.find('Richiesta di iscrizione a Corso Base RESPINTA') > -1)
        self.assertFalse(messaggio.subject.find('Richiesta di iscrizione a Corso Base APPROVATA') > -1)
        self.assertTrue(messaggio.body.find('una tua richiesta &egrave; rimasta in attesa per 30 giorni e come da policy') == -1)
        self.assertEqual(autorizzazione.concessa, None)
        self.assertTrue(InvitoCorsoBase.con_esito_no().exists())
Example #41
0
    def test_invito_aspirante_automatico(self):
        presidente = crea_persona()
        presidente.email_contatto = email_fittizzia()
        presidente.save()
        crea_utenza(presidente, presidente.email_contatto)
        direttore, sede, appartenenza = crea_persona_sede_appartenenza(presidente=presidente)

        aspirante1 = crea_persona()
        aspirante1.email_contatto = email_fittizzia()
        aspirante1.codice_fiscale = codice_fiscale()
        aspirante1.save()
        a = Aspirante(persona=aspirante1)
        a.locazione = sede.locazione
        a.save()

        oggi = poco_fa()
        corso = CorsoBase.objects.create(
            stato=CorsoBase.ATTIVO,
            sede=sede,
            data_inizio=oggi + timedelta(days=7),
            data_esame=oggi + timedelta(days=14),
            progressivo=1,
            anno=oggi.year,
            descrizione='Un corso',
        )
        self.assertFalse(aspirante1.autorizzazioni_in_attesa().exists())

        partecipazione = InvitoCorsoBase(persona=aspirante1, corso=corso, invitante=presidente)
        partecipazione.save()
        partecipazione.richiedi()

        self.assertFalse(InvitoCorsoBase.con_esito_no().exists())
        autorizzazione = presidente.autorizzazioni_richieste.first()
        autorizzazione.scadenza = timezone.now() - timedelta(days=10)
        autorizzazione.save()
        self.assertFalse(autorizzazione.concessa)
        Autorizzazione.gestisci_automatiche()
        self.assertEqual(len(mail.outbox), 2)
        messaggio = mail.outbox[1]
        self.assertTrue(messaggio.subject.find('Richiesta di iscrizione a Corso Base RESPINTA') > -1)
        self.assertFalse(messaggio.subject.find('Richiesta di iscrizione a Corso Base APPROVATA') > -1)
        self.assertTrue(messaggio.body.find('una tua richiesta &egrave; rimasta in attesa per 30 giorni e come da policy') == -1)
        self.assertEqual(autorizzazione.concessa, None)
        self.assertTrue(InvitoCorsoBase.con_esito_no().exists())
Example #42
0
    def test_registrazione_quota_socio_inizio_anno(self):

        # Crea oggetti e nomina il delegato US
        delegato = crea_persona()
        utente = crea_utenza(delegato, email="*****@*****.**", password="******")
        volontario, sede, appartenenza = crea_persona_sede_appartenenza()
        sede.aggiungi_delegato(UFFICIO_SOCI, delegato)

        oggi = poco_fa()
        inizio_anno = oggi.replace(month=1, day=1)
        fine_soci = inizio_anno.replace(month=3) - datetime.timedelta(days=1)
        post_fine_soci = fine_soci + datetime.timedelta(days=2)

        Tesseramento.objects.create(
            stato=Tesseramento.APERTO, inizio=inizio_anno, fine_soci=fine_soci,
            anno=inizio_anno.year, quota_attivo=8, quota_ordinario=8, quota_benemerito=8,
            quota_aspirante=8, quota_sostenitore=8
        )

        data = {
            'volontario': volontario.pk,
            'importo': 8,
            'data_versamento': post_fine_soci.strftime('%d/%m/%Y')
        }
        self.client.login(email="*****@*****.**", password="******")
        response = self.client.post('{}{}'.format(self.live_server_url, reverse('us_quote_nuova')), data=data)
        self.assertEqual(response.status_code, 200)
        self.assertContains(response, 'non può essere nel futuro')

        data = {
            'volontario': volontario.pk,
            'importo': 8,
            'data_versamento': oggi.strftime('%d/%m/%Y')
        }
        self.client.login(email="*****@*****.**", password="******")
        response = self.client.post('{}{}'.format(self.live_server_url, reverse('us_quote_nuova')), data=data)
        self.assertEqual(response.status_code, 200)
        self.assertContains(response, 'Necessario impostare indirizzo del Comitato')

        sede.telefono = '+3902020202'
        sede.email = '*****@*****.**'
        sede.codice_fiscale = '01234567891'
        sede.partita_iva = '01234567891'
        sede.locazione = crea_locazione()
        sede.save()

        data = {
            'volontario': volontario.pk,
            'importo': 8,
            'data_versamento': oggi.strftime('%d/%m/%Y')
        }
        self.client.login(email="*****@*****.**", password="******")
        response = self.client.post('{}{}'.format(self.live_server_url, reverse('us_quote_nuova')), data=data)
        # quota registrata con successo
        self.assertEqual(response.status_code, 302)
        self.assertTrue(response['location'].find('?appena_registrata='))
Example #43
0
    def test_lista_documenti(self):
        extra_headers = {}
        self.assertEqual(Documento.objects.count(), 0)
        folder_radice = Folder.objects.create(name='radice')
        folder_figlia = Folder.objects.create(name='sottocartella',
                                              parent=folder_radice)
        file_obj = django.core.files.File(open(self.doc_filename, 'rb'))
        url = reverse('admin:filer-ajax_upload',
                      kwargs={'folder_id': folder_figlia.pk})
        post_data = {
            'Filename': self.doc_name,
            'Filedata': file_obj,
            'jsessionid': self.client.session.session_key
        }
        self.client.post(url, post_data, **extra_headers)
        self.assertEqual(Documento.objects.count(), 1)
        uploaded_file = Documento.objects.all()[0]
        self.assertEqual(uploaded_file.original_filename, self.doc_name)

        url = reverse('admin:gestione_file_documento_add'
                      ) + '?parent_id={}'.format(folder_radice.pk)
        post_data = {
            'url_documento': 'http://www.example.com',
            'segmenti-TOTAL_FORMS': 0,
            'segmenti-INITIAL_FORMS': 0,
            'segmenti-MIN_NUM_FORMS': 0,
            'segmenti-MAX_NUM_FORMS': 0,
            'data_pubblicazione_0': '2016-01-01',
            'data_pubblicazione_1': '22:22:22',
        }
        response = self.client.post(url, post_data, **extra_headers)
        self.assertEqual(Documento.objects.count(), 2)
        uploaded_file = Documento.objects.all()[1]
        self.assertEqual(uploaded_file.folder, folder_radice)
        self.assertEqual(uploaded_file.original_filename, 'www.example.com')

        persona = crea_persona()
        persona, sede, app = crea_persona_sede_appartenenza()
        sessione_persona = self.sessione_utente(persona=persona)
        sessione_persona.visit(
            "%s%s" %
            (self.live_server_url, reverse('documenti:lista_documenti')))
        self.assertTrue(sessione_persona.is_text_present('Nome del documento'))
        self.assertTrue(sessione_persona.is_text_present('Pubblicato il'))
        self.assertTrue(sessione_persona.is_text_present('Peso'))
        self.assertTrue(sessione_persona.is_text_present('Accessi'))
        self.assertEqual(
            1, len(sessione_persona.find_by_tag('tbody').find_by_tag('tr')))
        sessione_persona.find_link_by_text('radice').first.click()
        self.assertTrue(sessione_persona.is_text_present('www.example.com'))
        sessione_persona.find_link_by_text('sottocartella').first.click()
        self.assertTrue(sessione_persona.is_text_present(self.doc_name))
        sessione_persona.fill('q', 'example')
        sessione_persona.find_by_xpath(
            '//button[@type="submit"]').first.click()
        self.assertTrue(sessione_persona.is_text_present('www.example.com'))
Example #44
0
    def test_logout(self):
        persona = crea_persona()
        sessione = self.sessione_utente(persona=persona)

        sessione.visit("%s/logout/" % self.live_server_url)

        self.assertFalse(
            sessione.is_text_present(persona.nome),
            "Logout effettuato con successo"
        )
Example #45
0
 def test_lista_documenti_vuota(self):
     persona = crea_persona()
     persona, sede, app = crea_persona_sede_appartenenza()
     sessione_persona = self.sessione_utente(persona=persona)
     sessione_persona.visit("%s%s" % (self.live_server_url, reverse('lista_documenti')))
     self.assertTrue(sessione_persona.is_text_present('Nome del documento'))
     self.assertTrue(sessione_persona.is_text_present('Pubblicato il'))
     self.assertTrue(sessione_persona.is_text_present('Peso'))
     self.assertTrue(sessione_persona.is_text_present('Accessi'))
     self.assertEqual(1, len(sessione_persona.find_by_tag('tbody').find_by_css('tr.warning')))
Example #46
0
 def test_recupero_password_link_valido(self):
     presidente = crea_persona()
     persona, sede, app = crea_persona_sede_appartenenza(presidente=presidente)
     persona_in_sede = crea_persona()
     utenza_persona_in_sede = crea_utenza(persona_in_sede)
     appartenenza_persona_in_sede = crea_appartenenza(persona, sede)
     uid = urlsafe_base64_encode(force_bytes(utenza_persona_in_sede.pk))
     reset_pw_link = default_token_generator.make_token(utenza_persona_in_sede)
     sessione = self.sessione_anonimo()
     sessione.visit("%s%s" % (self.live_server_url, reverse('recupera_password_conferma',  kwargs={ 'uidb64': uid, 'token': reset_pw_link})))
     sessione.fill('new_password1', 'new_password')
     sessione.fill('new_password2', 'new_password')
     sessione.find_by_css('.btn.btn-block.btn-primary').first.click()
     self.assertTrue(sessione.is_text_present('La tua nuova password è stata impostata'))
     sessione.visit("%s%s" % (self.live_server_url, '/login/'))
     sessione.fill('auth-username', utenza_persona_in_sede.email)
     sessione.fill('auth-password', 'new_password')
     sessione.find_by_css('.btn.btn-block.btn-primary').first.click()
     testo_personalizzato = 'Ciao, {0}'.format(persona_in_sede.nome)
     self.assertTrue(sessione.is_text_present(testo_personalizzato))
Example #47
0
def create_persona(with_utenza=True):
    persona = crea_persona()
    persona.email_contatto = email_fittizzia()
    persona.codice_fiscale = codice_fiscale()
    persona.save()

    if with_utenza:
        utenza = crea_utenza(persona, persona.email_contatto)
        return persona, utenza
    else:
        return persona
Example #48
0
    def test_pulizia_aspiranti(self):
        presidente = crea_persona()
        sede = crea_sede(presidente)

        corso = CorsoBase.objects.create(
            stato=CorsoBase.ATTIVO,
            sede=sede,
            data_inizio=poco_fa() + timedelta(days=7),
            data_esame=poco_fa() + timedelta(days=14),
            progressivo=1,
            anno=poco_fa().year,
            descrizione='Un corso',
        )

        for x in range(30):
            persona = crea_persona()
            Aspirante.objects.create(persona=persona, locazione = sede.locazione)
            PartecipazioneCorsoBase.objects.create(persona=persona, corso=corso, confermata=True)
            if x % 4 == 1:
                crea_appartenenza(persona, sede)
            elif x % 4 == 2:
                app = crea_appartenenza(persona, sede)
                app.fine = poco_fa()
                app.save()
            elif x % 4 == 3:
                app = crea_appartenenza(persona, sede)
                app.membro = Appartenenza.SOSTENITORE
                app.save()

        vol = Aspirante._anche_volontari()
        persone = Persona.objects.filter(pk__in=vol.values_list('persona', flat=True))
        self.assertEqual(len(vol), 8)
        Aspirante.pulisci_volontari()

        for persona in persone:
            self.assertFalse(hasattr(persona, 'aspirante'))
            self.assertTrue(persona.partecipazioni_corsi.esito_esame, PartecipazioneCorsoBase.IDONEO)
Example #49
0
    def test_controllo_eta(self):
        from anagrafica.costanti import LIMITE_ETA

        data_limite = datetime.date.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)

        persona_sotto_limite = crea_persona()
        persona_sotto_limite.data_nascita = data_sotto
        persona_sotto_limite.save()
        persona_sopra_limite = crea_persona()
        persona_sopra_limite.data_nascita = data_sopra
        persona_sopra_limite.save()
        persona_al_limite = crea_persona()
        persona_al_limite.data_nascita = data_limite
        persona_al_limite.save()
        lista = _calcola_eta(Persona.objects.all())
        self.assertEqual(set(lista), {persona_sotto_limite})

        lista = _calcola_eta(Persona.objects.all(), meno=False)
        self.assertEqual(set(lista), {persona_al_limite, persona_sopra_limite})
Example #50
0
 def test_lista_documenti_vuota(self):
     persona = crea_persona()
     persona, sede, app = crea_persona_sede_appartenenza()
     sessione_persona = self.sessione_utente(persona=persona)
     sessione_persona.visit(
         "%s%s" % (self.live_server_url, reverse('lista_documenti')))
     self.assertTrue(sessione_persona.is_text_present('Nome del documento'))
     self.assertTrue(sessione_persona.is_text_present('Pubblicato il'))
     self.assertTrue(sessione_persona.is_text_present('Peso'))
     self.assertTrue(sessione_persona.is_text_present('Accessi'))
     self.assertEqual(
         1,
         len(
             sessione_persona.find_by_tag('tbody').find_by_css(
                 'tr.warning')))
Example #51
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())
Example #52
0
    def test_registrazione_doppio_click_email(self):
        """
        Effettua la registrazione come aspirante, il presidente
        del Comitato organizza un corso, avvisa tutti, l'aspirante trova
        un corso e vi ci si iscrive.
        """

        presidente = crea_persona()
        direttore, sede, appartenenza = crea_persona_sede_appartenenza(presidente=presidente)

        sessione_iniziale = self.sessione_anonimo()

        sessione_iniziale.click_link_by_partial_text("Iscriviti al prossimo corso base")

        sessione_iniziale.fill('codice_fiscale', 'MRARSS42A01C351F')
        sessione_iniziale.find_by_xpath('//button[@type="submit"]').first.click()

        email = email_fittizzia()
        sessione_iniziale.fill('email', email)
        sessione_iniziale.fill('password', 'ciao12345')
        sessione_iniziale.fill('ripeti_password', 'ciao12345')
        sessione_iniziale.find_by_xpath('//button[@type="submit"]').first.click()

        self.assertTrue(sessione_iniziale.is_text_present('è necessario cliccare sul link'),
                        msg="Invio email attivazione")
        self.sessione_termina(sessione_iniziale)

        # Estrazione della chiave di conferma
        self.assertEqual(len(mail.outbox), 1)
        body = mail.outbox[0].alternatives[0][0]
        url_conferma = re.findall('/registrati/aspirante/anagrafica/\?code=\w+&registration=\w+', body)[0]
        sessione_aspirante = self.sessione_anonimo()
        sessione_secondo = self.sessione_anonimo()
        sessione_aspirante.visit("%s%s" % (self.live_server_url, url_conferma))
        self.assertTrue(sessione_aspirante.is_text_present('Parlaci un po\' di te'),
                        msg="Link accettato")

        sessione_secondo.visit("%s%s" % (self.live_server_url, url_conferma))
        self.assertEqual(len(mail.outbox), 1)
        self.assertTrue(sessione_secondo.is_text_present('Errore nel processo di registrazione.'),
                        msg="Errore link")
Example #53
0
    def test_crea_area(self):

        presidente = crea_persona()
        persona, sede, appartenenza = crea_persona_sede_appartenenza(
            presidente=presidente)
        if not presidente.volontario:
            crea_appartenenza(presidente, sede)

        sessione_presidente = self.sessione_utente(persona=presidente)
        #sessione_persona = self.sessione_utente(persona=persona)

        # Crea area di intervento
        sessione_presidente.click_link_by_partial_href("/attivita/")
        sessione_presidente.click_link_by_partial_text("Aree di intervento")
        sessione_presidente.click_link_by_partial_text(sede.nome)
        sessione_presidente.fill('nome', "Area 42")
        sessione_presidente.fill('obiettivo', '6')
        sessione_presidente.find_by_xpath(
            "//button[@type='submit']").first.click()

        # Nomina la persona come responsabile
        self.seleziona_delegato(sessione_presidente, persona)

        self.assertTrue(
            sessione_presidente.is_text_present("Area 42"),
            "La nuova area è stata creata con successo",
        )

        self.assertTrue(
            sessione_presidente.is_text_present(persona.nome_completo),
            "La nuova area ha il responsabile assegnato",
        )

        self.assertTrue(
            sessione_presidente.is_text_present("0 attività"),
            "La nuova area non ha alcuna attività",
        )
Example #54
0
    def test_richieste_processabili(self):
        presidente = crea_persona()
        presidente.email_contatto = email_fittizzia()
        presidente.save()
        crea_utenza(presidente, presidente.email_contatto)
        sede = crea_sede(presidente)
        crea_appartenenza(sede=sede, persona=presidente)
        sede2 = crea_sede(presidente)

        aspirante1 = crea_persona()
        aspirante1.email_contatto = email_fittizzia()
        aspirante1.codice_fiscale = codice_fiscale()
        aspirante1.save()
        a = Aspirante(persona=aspirante1)
        a.locazione = sede.locazione
        a.save()

        est = Estensione.objects.create(
            destinazione=sede2,
            persona=presidente,
            richiedente=presidente,
            motivo='test'
        )
        est.richiedi()

        oggi = poco_fa()
        corso1 = CorsoBase.objects.create(
            stato=CorsoBase.ATTIVO,
            sede=sede,
            data_inizio=oggi + timedelta(days=7),
            data_esame=oggi + timedelta(days=14),
            progressivo=1,
            anno=oggi.year,
            descrizione='Un corso',
        )
        partecipazione1 = PartecipazioneCorsoBase.objects.create(persona=aspirante1, corso=corso1)
        partecipazione1.richiedi()

        corso2 = CorsoBase.objects.create(
            stato=CorsoBase.ATTIVO,
            sede=sede,
            data_inizio=oggi - timedelta(days=7),
            data_esame=oggi + timedelta(days=14),
            progressivo=1,
            anno=oggi.year,
            descrizione='Un corso',
        )
        partecipazione2 = PartecipazioneCorsoBase.objects.create(persona=aspirante1, corso=corso2)
        partecipazione2.richiedi()

        corso3 = CorsoBase.objects.create(
            stato=CorsoBase.ATTIVO,
            sede=sede,
            data_inizio=oggi - timedelta(days=7),
            data_esame=oggi + timedelta(days=14),
            progressivo=1,
            anno=oggi.year,
            descrizione='Un corso',
        )
        partecipazione3 = PartecipazioneCorsoBase.objects.create(persona=aspirante1, corso=corso3)
        partecipazione3.richiedi()

        ctype = ContentType.objects.get_for_model(CorsoBase)
        Delega.objects.create(
            persona=presidente, tipo=DIRETTORE_CORSO, stato=Delega.ATTIVA, firmatario=presidente, inizio=poco_fa(),
            oggetto_id=corso1.pk, oggetto_tipo=ctype
        )
        Delega.objects.create(
            persona=presidente, tipo=DIRETTORE_CORSO, stato=Delega.ATTIVA, firmatario=presidente, inizio=poco_fa(),
            oggetto_id=corso2.pk, oggetto_tipo=ctype
        )
        Delega.objects.create(
            persona=presidente, tipo=DIRETTORE_CORSO, stato=Delega.ATTIVA, firmatario=presidente, inizio=poco_fa(),
            oggetto_id=corso3.pk, oggetto_tipo=ctype
        )

        url_presenti = []
        url_assenti = []
        richieste_non_processabili = partecipazione1.autorizzazioni.all()
        for richiesta in richieste_non_processabili:
            self.assertFalse(PartecipazioneCorsoBase.controlla_richiesta_processabile(richiesta))
            url_assenti.append(reverse('autorizzazioni:concedi', args=(richiesta.pk,)))
            url_assenti.append(reverse('autorizzazioni:nega', args=(richiesta.pk,)))

        non_processabili = PartecipazioneCorsoBase.richieste_non_processabili(Autorizzazione.objects.all())
        self.assertEqual(list(non_processabili), [richiesta.pk for richiesta in richieste_non_processabili])

        richieste_processabili = partecipazione2.autorizzazioni.all() | partecipazione3.autorizzazioni.all()
        for richiesta in richieste_processabili:
            self.assertTrue(PartecipazioneCorsoBase.controlla_richiesta_processabile(richiesta))
            url_presenti.append(reverse('autorizzazioni:concedi', args=(richiesta.pk,)))
            url_presenti.append(reverse('autorizzazioni:nega', args=(richiesta.pk,)))

        # Mettendo nel mezzo anche autorizzazioni diverse si verifica che il meccanismo non interferisca
        richieste_estensioni = est.autorizzazioni.all()
        for richiesta in richieste_estensioni:
            pass
            url_presenti.append(reverse('autorizzazioni:concedi', args=(richiesta.pk,)))
            url_presenti.append(reverse('autorizzazioni:nega', args=(richiesta.pk,)))

        self.client.login(email=presidente.email_contatto, password='******')
        response = self.client.get(reverse('autorizzazioni-aperte'))
        for url in url_presenti:
            self.assertContains(response, url)
        for url in url_assenti:
            self.assertNotContains(response, url)
        self.assertContains(response, 'Corso non ancora iniziato, impossibile processare la richiesta.')

        for url in url_assenti:
            response = self.client.get(url)
            self.assertContains(response, 'Richiesta non processabile')

        for richiesta in partecipazione2.autorizzazioni.all():
            response = self.client.get(reverse('autorizzazioni:concedi', args=(richiesta.pk,)))
            self.assertContains(response, 'Per dare consenso a questa richiesta')

        for richiesta in partecipazione3.autorizzazioni.all():
            response = self.client.get(reverse('autorizzazioni:nega', args=(richiesta.pk,)))
            self.assertContains(response, 'Per negare questa richiesta')

        for richiesta in est.autorizzazioni.all():
            response = self.client.get(reverse('autorizzazioni:nega', args=(richiesta.pk,)))
            self.assertContains(response, 'Per negare questa richiesta')
Example #55
0
    def test_gestione_inviti(self):

        presidente = crea_persona()
        presidente.email_contatto = email_fittizzia()
        presidente.save()
        crea_utenza(presidente, presidente.email_contatto)
        direttore, sede, appartenenza = crea_persona_sede_appartenenza(presidente=presidente)

        sostenitore = crea_persona()
        sostenitore.email_contatto = email_fittizzia()
        sostenitore.codice_fiscale = codice_fiscale()
        sostenitore.save()
        Appartenenza.objects.create(
            persona=sostenitore,
            sede=sede,
            membro=Appartenenza.SOSTENITORE,
            inizio="1980-12-10",
        )

        aspirante1 = crea_persona()
        aspirante1.email_contatto = email_fittizzia()
        aspirante1.codice_fiscale = codice_fiscale()
        aspirante1.save()
        a = Aspirante(persona=aspirante1)
        a.locazione = sede.locazione
        a.save()
        crea_utenza(aspirante1, aspirante1.email_contatto)

        aspirante2 = crea_persona()
        aspirante2.email_contatto = email_fittizzia()
        aspirante2.codice_fiscale = codice_fiscale()
        aspirante2.save()
        a = Aspirante(persona=aspirante2)
        a.locazione = sede.locazione
        a.save()
        crea_utenza(aspirante2, aspirante2.email_contatto)

        # Attività degli aspiranti
        sessione_aspirante1 = self.sessione_utente(persona=aspirante1)
        sessione_aspirante2 = self.sessione_utente(persona=aspirante2)
        sessione_aspirante1.click_link_by_partial_text("Richieste")
        self.assertTrue(sessione_aspirante1.is_text_present("Non ci sono richieste in attesa."), msg="Nessun invito")

        # setup dei dati
        oggi = poco_fa()
        corso = CorsoBase.objects.create(
            stato=CorsoBase.ATTIVO,
            sede=sede,
            data_inizio=oggi + timedelta(days=7),
            data_esame=oggi + timedelta(days=14),
            progressivo=1,
            anno=oggi.year,
            descrizione='Un corso',
        )
        self.client.login(username=presidente.email_contatto, password='******')
        iscritti = {
            'persone': [aspirante1.pk]
        }
        self.client.post('/aspirante/corso-base/{}/iscritti/aggiungi/'.format(corso.pk), data=iscritti)
        iscritti = {
            'persone': [aspirante2.pk]
        }
        self.client.post('/aspirante/corso-base/{}/iscritti/aggiungi/'.format(corso.pk), data=iscritti)
        self.assertEqual(corso.inviti.count(), 2)

        sessione_aspirante1.click_link_by_partial_text("Richieste")
        self.assertTrue(sessione_aspirante1.is_text_present(corso.nome), msg="Invito disponibile")
        sessione_aspirante1.click_link_by_partial_text("Conferma")
        self.assertTrue(sessione_aspirante1.is_text_present("Richiesta autorizzata."), msg="Richiesta autorizzata")

        self.assertEqual(corso.inviti.count(), 1)
        self.assertEqual(corso.partecipazioni.count(), 1)
        self.assertEqual(aspirante2.inviti_corsi.count(), 1)
        sessione_aspirante2.click_link_by_partial_text("Richieste")
        self.assertTrue(sessione_aspirante2.is_text_present(corso.nome), msg="Invito disponibile")
        sessione_aspirante2.click_link_by_partial_text("Nega")
        sessione_aspirante2.fill('motivo', 'Test')
        sessione_aspirante2.find_by_css(".btn-danger").first.click()
        self.assertTrue(sessione_aspirante2.is_text_present("Richiesta negata."), msg="Richiesta negata")
        self.assertEqual(corso.inviti.count(), 0)
        self.assertEqual(corso.partecipazioni.count(), 1)
        self.assertEqual(aspirante2.inviti_corsi.count(), 0)
Example #56
0
    def test_registrazione_aspirante(self):
        """
        Effettua la registrazione come aspirante, il presidente
        del Comitato organizza un corso, avvisa tutti, l'aspirante trova
        un corso e vi ci si iscrive.
        """

        presidente = crea_persona()
        direttore, sede, appartenenza = crea_persona_sede_appartenenza(presidente=presidente)

        sessione_iniziale = self.sessione_anonimo()

        sessione_iniziale.click_link_by_partial_text("Iscriviti al prossimo corso base")

        sessione_iniziale.fill('codice_fiscale', 'MRARSS42A01C351F')
        sessione_iniziale.find_by_xpath('//button[@type="submit"]').first.click()

        email = email_fittizzia()
        sessione_iniziale.fill('email', email)
        sessione_iniziale.fill('password', 'ciao12345')
        sessione_iniziale.fill('ripeti_password', 'ciao12345')
        sessione_iniziale.find_by_xpath('//button[@type="submit"]').first.click()

        self.assertTrue(sessione_iniziale.is_text_present('è necessario cliccare sul link'),
                        msg="Invio email attivazione")
        self.sessione_termina(sessione_iniziale)

        # Estrazione della chiave di conferma
        self.assertEqual(len(mail.outbox), 1)
        body = mail.outbox[0].alternatives[0][0]
        url_conferma = re.findall('/registrati/aspirante/anagrafica/\?code=\w+&registration=\w+', body)[0]
        sessione_aspirante = self.sessione_anonimo()
        sessione_aspirante.visit("%s%s" % (self.live_server_url, url_conferma))
        self.assertEqual(len(mail.outbox), 1)

        sessione_aspirante.fill('nome', 'Mario')
        sessione_aspirante.fill('cognome', 'Rossi Accènto')
        sessione_aspirante.fill('data_nascita', '1/1/1942')
        sessione_aspirante.fill('comune_nascita', 'Catania')
        sessione_aspirante.fill('provincia_nascita', 'CT')
        sessione_aspirante.fill('indirizzo_residenza', 'Via Etnea 353')
        sessione_aspirante.fill('comune_residenza', 'Catania')
        sessione_aspirante.fill('provincia_residenza', 'CT')
        sessione_aspirante.fill('cap_residenza', '95128')
        sessione_aspirante.find_by_xpath('//button[@type="submit"]').first.click()

        self.assertTrue(sessione_aspirante.is_text_present("acconsenti al trattamento "
                                                           "dei tuoi dati personali"),
                        msg="Presente clausola di accettazione trattamento dei dati personali")

        sessione_aspirante.find_by_xpath('//button[@type="submit"]').first.click()

        self.assertTrue(sessione_aspirante.is_text_present("Ciao, Mario"),
                        msg="Login effettuato automaticamente")

        self.assertTrue(sessione_aspirante.is_text_present(email),
                        msg="Indirizzo e-mail visibile e mostrato correttamente")

        sede.locazione = Locazione.objects.filter(comune="Catania").first()
        sede.save()

        sessione_presidente = self.sessione_utente(persona=presidente)
        sessione_presidente.click_link_by_partial_text("Formazione")
        sessione_presidente.click_link_by_partial_text("Domanda formativa")

        self.assertTrue(sessione_presidente.is_text_present("1 aspiranti"),
                        msg="Aspirante correttamente considerato in domanda formativa")

        sessione_presidente.click_link_by_partial_text("Elenco Corsi Base")
        sessione_presidente.click_link_by_partial_text("Pianifica nuovo")

        sessione_presidente.select('sede', sede.pk)
        sessione_presidente.find_by_xpath('//button[@type="submit"]').first.click()
        self.sessione_conferma(sessione_presidente, accetta=True)

        self.seleziona_delegato(sessione_presidente, direttore)

        self.assertTrue(sessione_presidente.is_text_present("Corso Base pianificato"),
                        msg="Conferma che il corso base e' stato creato")

        self.assertTrue(sessione_presidente.is_text_present(direttore.nome_completo),
                        msg="Il nome completo del direttore viene mostrato")

        self.sessione_termina(sessione_presidente)  # Non abbiamo piu' bisogno del presidente

        sessione_direttore = self.sessione_utente(persona=direttore)
        sessione_direttore.click_link_by_partial_text("Formazione")
        sessione_direttore.click_link_by_partial_text("Elenco Corsi Base")

        self.assertTrue(sessione_direttore.is_text_present("Corso Base"),
                        msg="Corso base in lista")

        self.assertTrue(sessione_direttore.is_text_present("In preparazione"),
                        msg="Il corso appare con lo stato corretto")

        sessione_direttore.click_link_by_partial_text("Corso Base")

        self.assertTrue(sessione_direttore.is_text_present("Non c'è tempo da perdere"),
                        msg="Visibile promemoria corso che sta per iniziare a breve")

        self.assertTrue(sessione_direttore.is_text_present("1 aspiranti"),
                        msg="Visibile numero di aspiranti nelle vicinanze")

        sessione_direttore.click_link_by_partial_text("Gestione corso")
        self.scrivi_tinymce(sessione_direttore, "descrizione", "Sarà un corso bellissimo")
        sessione_direttore.find_by_xpath('//button[@type="submit"]').first.click()

        sessione_direttore.click_link_by_partial_text("Attiva il corso e informa gli aspiranti")

        self.assertTrue(sessione_direttore.is_text_present("Anteprima messaggio"),
                        msg="Anteprima del messaggio visibile")

        self.assertTrue(sessione_direttore.is_text_present("Sarà un corso bellissimo"),
                        msg="La descrizione del corso e' nell'anteprima del messaggio")
        sessione_direttore.find_by_xpath('//button[@type="submit"]').first.click()

        self.sessione_conferma(sessione_direttore, accetta=True)

        self.assertTrue(sessione_direttore.is_text_present("Corso attivato con successo"),
                        msg="Messaggio di conferma attivazione corso")

        if os.environ.get('TRAVIS', 'false') == 'true':
            self.skipTest('Questo test fallisce su travis senza motivo apparente')
        sessione_aspirante.click_link_by_partial_text("Posta")
        self.assertTrue(sessione_aspirante.is_text_present("Nuovo Corso per Volontari CRI"),
                        msg="E-mail di attivazione corso ricevuta")
        sessione_aspirante.click_link_by_partial_text("Nuovo Corso per Volontari CRI")
        self.assertTrue(sessione_aspirante.is_text_present("Sarà un corso bellissimo"),
                        msg="La descrizione del corso è stata comunicata per e-mail")
        sessione_aspirante.visit("%s/utente/" % self.live_server_url)

        sessione_aspirante.click_link_by_partial_text("Aspirante")
        sessione_aspirante.click_link_by_partial_text("Elenco dei corsi nelle vicinanze")

        self.assertTrue(sessione_aspirante.is_text_present(direttore.nome_completo),
                        msg="Il nome completo del Direttore e' visibile in elenco")

        sessione_aspirante.click_link_by_partial_text("Corso Base")
        sessione_aspirante.click_link_by_partial_text("Voglio iscrivermi a questo corso")

        self.assertTrue(sessione_aspirante.is_text_present("Abbiamo inoltrato la tua richiesta"),
                        msg="Conferma data all'aspirante")

        sessione_direttore.visit("%s/utente/" % self.live_server_url)
        sessione_direttore.click_link_by_partial_text("Richieste")
        self.assertTrue(sessione_direttore.is_text_present("chiede di essere contattato"),
                        msg="Esplicitare che l'aspirante vuole essere contattato")

        self.assertTrue(sessione_direttore.is_text_present("Corso non ancora iniziato, impossibile processare la richiesta."),
                        msg="Corso non ancora iniziato, impossibile processare la richiesta.")

        for corso in sede.corsobase_set.all():
            corso.data_inizio = poco_fa()
            corso.save()

        sessione_direttore.click_link_by_partial_text("Richieste")
        sessione_direttore.click_link_by_partial_text("Conferma")
        sessione_direttore.check('conferma_1')
        sessione_direttore.check('conferma_2')
        sessione_direttore.find_by_xpath('//button[@type="submit"]').first.click()

        sessione_aspirante.visit("%s/utente/" % self.live_server_url)
        sessione_aspirante.click_link_by_partial_text("Aspirante")
        self.assertTrue(sessione_aspirante.is_text_present("Sei iscritt"),
                        msg="Conferma di iscrizione")

        sessione_aspirante.click_link_by_partial_text("Vai alla pagina del Corso Base")
        self.assertTrue(sessione_aspirante.is_text_present("Presentati alle lezioni del corso"),
                        msg="Invita l'aspirante a presentarsi alle lezioni del corso")
Example #57
0
 nuove = []
 for sede in sedi:  # Per ogni Sede
     locazione = Locazione.oggetto(
         indirizzo=random.sample(COMUNI.keys(), 1)[0])
     sede.locazione = locazione
     sede.save()
     if sede.estensione == REGIONALE:
         tipi = [
             Appartenenza.VOLONTARIO, Appartenenza.SOSTENITORE,
             Appartenenza.ORDINARIO
         ]
     else:
         tipi = [Appartenenza.VOLONTARIO, Appartenenza.SOSTENITORE]
     for membro in tipi:
         for i in range(0, 25):  # Creo 20 volontari
             p = crea_persona()
             p.comune_nascita = random.sample(COMUNI.keys(), 1)[0]
             p.genere = random.choice((p.MASCHIO, p.FEMMINA))
             p.indirizzo_residenza = 'Via prova 34'
             p.comune_residenza = random.sample(COMUNI.keys(), 1)[0]
             p.provincia_residenza = 'ZZ'
             p.cap_residenza = '00100'
             p.codice_fiscale = codice_fiscale_persona(p)
             p.save()
             nuove.append(p)
             data = poco_fa() - timedelta(days=random.randint(10, 5000))
             a = Appartenenza.objects.create(persona=p,
                                             sede=sede,
                                             inizio=data,
                                             membro=membro)
             if membro == Appartenenza.VOLONTARIO:
Example #58
0
    def test_crea_attivita(self):

        presidente = crea_persona()
        persona, sede, appartenenza = crea_persona_sede_appartenenza(
            presidente=presidente)
        if not presidente.volontario:
            crea_appartenenza(presidente, sede)

        area = Area(sede=sede, nome="Area 42", obiettivo=6)
        area.save()

        # Crea le sessioni
        sessione_presidente = self.sessione_utente(persona=presidente)
        sessione_persona = self.sessione_utente(persona=persona)

        # Presidente: Vai a organizza attivita
        sessione_presidente.click_link_by_partial_href("/attivita/")
        sessione_presidente.click_link_by_partial_text("Organizza attività")

        # Presidente: Riempi dettagli attivita
        sessione_presidente.fill('nome', "Fine del mondo")
        sessione_presidente.select('area', area.pk)
        sessione_presidente.select('scelta',
                                   ModuloOrganizzaAttivitaReferente.SONO_IO)

        # Presidente: Invia il modulo
        sessione_presidente.find_by_xpath(
            "//button[@type='submit']").first.click()

        # Presidente: Torna all'elenco attività, naviga fino a nuovo turno.
        sessione_presidente.click_link_by_partial_text("Gestione turni")
        sessione_presidente.click_link_by_partial_text("Crea nuovo turno")

        inizio = (timezone.now()).strftime("%d/%m/%Y %H:%m")
        fine = (timezone.now() +
                timedelta(hours=30)).strftime("%d/%m/%Y %H:%m")

        # Presidente: Riempi i dettagli del nuovo turno
        sessione_presidente.fill('nome', "Vedetta")
        sessione_presidente.fill('inizio', inizio)
        sessione_presidente.fill('fine', fine)
        sessione_presidente.fill('minimo', 1)
        sessione_presidente.fill('massimo', 5)
        sessione_presidente.fill('prenotazione', inizio)

        sessione_presidente.execute_script(
            'window.scrollTo(0, document.body.scrollHeight)')

        # Presidente: Invia il modulo
        sessione_presidente.find_by_css("button.btn-primary").first.click()

        # Volontario: Vai in attività
        sessione_persona.click_link_by_partial_text("Attività")

        self.assertFalse(sessione_persona.is_text_present("Vedetta"),
                         msg="L'attività non è visibile.")

        # Presidente: Modifica attività
        sessione_presidente.click_link_by_partial_text("Elenco attività")
        sessione_presidente.click_link_by_partial_text("modifica info")
        sessione_presidente.click_link_by_partial_text("Gestione attività")

        # Presidente: Imposta stato come VISIBILE
        sessione_presidente.select('stato', Attivita.VISIBILE)

        # Presidente: Invia il modulo
        sessione_presidente.find_by_xpath(
            "//button[@type='submit']").first.click()

        # Volontario: Vai in attività
        sessione_persona.click_link_by_partial_text("Attività")

        self.assertTrue(sessione_persona.is_text_present("Vedetta"),
                        msg="L'attività è ora visibile.")

        # Volontario: Clicca sul turno
        sessione_persona.click_link_by_partial_text("Vedetta")

        self.assertTrue(sessione_persona.is_text_present("Scoperto!"),
                        msg="Viene mostrata correttamente come scoperta.")
Example #59
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")