예제 #1
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"
        )
예제 #2
0
 def setUp(self):
     persona, sede, appartenenza = crea_persona_sede_appartenenza()
     self.persona = persona
     self.persona.email_contatto = email_fittizzia()
     self.persona.save()
     self.utenza = crea_utenza(persona=self.persona,
                               email=email_fittizzia())
예제 #3
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)
예제 #4
0
파일: tests.py 프로젝트: nephila/jorvik
    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)
예제 #5
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)
예제 #6
0
파일: tests.py 프로젝트: nephila/jorvik
    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)
예제 #7
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)
예제 #8
0
파일: tests.py 프로젝트: nephila/jorvik
    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)
예제 #9
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()))
예제 #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()))
예제 #11
0
파일: tests.py 프로젝트: ico88/jorvik
    def test_us_cambio_credenziali(self):

        VECCHIA_EMAIL = email_fittizzia()
        NUOVA_EMAIL = email_fittizzia()

        presidente = crea_persona()
        persona, sede, appartenenza = crea_persona_sede_appartenenza(presidente=presidente)
        utenza = crea_utenza(persona=persona, email=VECCHIA_EMAIL)

        sessione_presidente = self.sessione_utente(persona=presidente)
        sessione_presidente.visit("%s%s" % (self.live_server_url, persona.url_profilo_credenziali))
        sessione_presidente.fill('email', NUOVA_EMAIL)
        sessione_presidente.check('ok_1')
        sessione_presidente.check('ok_3')
        sessione_presidente.check('ok_4')
        sessione_presidente.find_by_xpath("//button[@type='submit']").first.click()

        # Ottieni e-mail inviata
        msg = Messaggio.objects.filter(oggetto__icontains="credenziali",
                                       oggetti_destinatario__persona=persona)

        self.assertTrue(
            msg.exists(),
            msg="Email di avviso con nuove credenziali inviata"
        )

        msg_body = msg.first().corpo

        self.assertTrue(
            VECCHIA_EMAIL in msg_body,
            msg="Il messaggio contiene la vecchia e-mail"
        )

        self.assertTrue(
            NUOVA_EMAIL in msg_body,
            msg="Il messaggio contiene la nuova e-mail"
        )

        utenza = persona.utenza
        utenza.refresh_from_db()

        self.assertTrue(
            utenza.email == NUOVA_EMAIL,
            msg="E-mail di accesso cambiata correttamente"
        )

        sessione_persona = self.sessione_utente(utente=utenza)
        self.assertTrue(
            True,
            msg="Login effettuato con nuove credenziali"
        )
예제 #12
0
파일: tests.py 프로젝트: nephila/jorvik
    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')
예제 #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')
예제 #14
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 è rimasta in attesa per 30 giorni e come da policy') == -1)
        self.assertEqual(autorizzazione.concessa, None)
        self.assertTrue(InvitoCorsoBase.con_esito_no().exists())
예제 #15
0
파일: tests.py 프로젝트: nephila/jorvik
    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 è rimasta in attesa per 30 giorni e come da policy') == -1)
        self.assertEqual(autorizzazione.concessa, None)
        self.assertTrue(InvitoCorsoBase.con_esito_no().exists())
예제 #16
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
예제 #17
0
파일: tests.py 프로젝트: ico88/jorvik
    def test_us_attivazione_credenziali(self):

        EMAIL_UTENZA = email_fittizzia()

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

        sessione_presidente = self.sessione_utente(persona=presidente)

        sessione_presidente.visit("%s%s" % (self.live_server_url, persona.url_profilo_credenziali))
        sessione_presidente.fill('email', EMAIL_UTENZA)
        sessione_presidente.find_by_xpath("//button[@type='submit']").first.click()

        self.assertTrue(
            Utenza.objects.filter(persona=persona).exists(),
            msg="L'utenza e' stata creata correttamente"
        )

        self.assertTrue(
            Utenza.objects.get(persona=persona).email == EMAIL_UTENZA,
            msg="L'email e' stata correttamente creata"
        )

        # Ottieni e-mail inviata
        msg = Messaggio.objects.filter(oggetto__icontains="credenziali",
                                       oggetti_destinatario__persona=persona)

        self.assertTrue(
            msg.exists(),
            msg="Email delle credenziali spedita"
        )

        corpo_msg = msg.first().corpo

        self.assertTrue(
            EMAIL_UTENZA in corpo_msg,
            msg="L'email contiene il nuovo indirizzo e-mail"
        )

        doc = html.document_fromstring(corpo_msg)
        nuova_pwd = doc.xpath("//*[@id='nuova-password']")[0].text.strip()

        utenza = persona.utenza
        utenza.password_testing = nuova_pwd  # Password per accesso

        # Prova accesso con nuova utenza.
        sessione_persona = self.sessione_utente(utente=utenza)
예제 #18
0
    def test_autorizzazioni_automatiche_scadute(self):
        presidente = crea_persona()
        persona, sede, app = crea_persona_sede_appartenenza(
            presidente=presidente)
        persona.email_contatto = email_fittizzia()
        persona.save()

        ora = timezone.now()

        area, attivita = crea_area_attivita(sede)

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

        t1 = crea_turno(attivita, inizio=domani_inizio, fine=domani_fine)
        partecipazione = crea_partecipazione(persona, t1)
        attivita.centrale_operativa = Attivita.CO_AUTO
        attivita.save()
        self.assertEqual(0, Autorizzazione.objects.count())
        partecipazione.richiedi()
        self.assertNotIn(partecipazione, Partecipazione.con_esito_ok())
        self.assertEqual(0, len(mail.outbox))
        self.assertEqual(1, Autorizzazione.objects.count())
        autorizzazione = Autorizzazione.objects.first()
        self.assertNotEqual(autorizzazione.scadenza, None)
        autorizzazione.scadenza = timezone.now() - timedelta(days=10)
        autorizzazione.save()
        self.assertFalse(autorizzazione.concessa)
        Autorizzazione.gestisci_automatiche()
        self.assertEqual(1, len(mail.outbox))
        messaggio = mail.outbox[0]
        self.assertTrue(
            messaggio.subject.find(
                'Richiesta di partecipazione attività RESPINTA') > -1)
        self.assertFalse(
            messaggio.subject.find(
                'Richiesta di partecipazione attività APPROVATA') > -1)
        self.assertTrue(
            messaggio.body.find(
                'una tua richiesta è rimasta in attesa per 30 giorni e come da policy'
            ) == -1)
        self.assertTrue(autorizzazione.oggetto.automatica)
        Autorizzazione.gestisci_automatiche()
        self.assertEqual(1, len(mail.outbox))
        self.assertEqual(autorizzazione.concessa, None)
        self.assertIn(partecipazione, Partecipazione.con_esito_no())
예제 #19
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")
예제 #20
0
파일: tests.py 프로젝트: nephila/jorvik
    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")
예제 #21
0
파일: tests.py 프로젝트: dan-it/jorvik
    def test_autorizzazioni_automatiche_scadute(self):
        presidente = crea_persona()
        persona, sede, app = crea_persona_sede_appartenenza(presidente=presidente)
        persona.email_contatto = email_fittizzia()
        persona.save()

        ora = timezone.now()

        area, attivita = crea_area_attivita(sede)

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

        t1 = crea_turno(attivita, inizio=domani_inizio, fine=domani_fine)
        partecipazione = crea_partecipazione(persona, t1)
        attivita.centrale_operativa = Attivita.CO_AUTO
        attivita.save()
        self.assertEqual(0, Autorizzazione.objects.count())
        partecipazione.richiedi()
        self.assertNotIn(partecipazione, Partecipazione.con_esito_ok())
        self.assertEqual(0, len(mail.outbox))
        self.assertEqual(1, Autorizzazione.objects.count())
        autorizzazione = Autorizzazione.objects.first()
        self.assertNotEqual(autorizzazione.scadenza, None)
        autorizzazione.scadenza = timezone.now() - timedelta(days=10)
        autorizzazione.save()
        self.assertFalse(autorizzazione.concessa)
        Autorizzazione.gestisci_automatiche()
        self.assertEqual(1, len(mail.outbox))
        messaggio = mail.outbox[0]
        self.assertTrue(messaggio.subject.find('Richiesta di partecipazione attività RESPINTA') > -1)
        self.assertFalse(messaggio.subject.find('Richiesta di partecipazione attività APPROVATA') > -1)
        self.assertTrue(messaggio.body.find('una tua richiesta è 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())
예제 #22
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)
예제 #23
0
파일: tests.py 프로젝트: nephila/jorvik
    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")

        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")
예제 #24
0
파일: tests.py 프로젝트: nephila/jorvik
    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)
예제 #25
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')
예제 #26
0
파일: tests.py 프로젝트: nephila/jorvik
    def test_aggiungi_sostenitore_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)

        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()

        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()

        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',
        )

        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(aspirante2.codice_fiscale[:3]))
        self.assertContains(response, aspirante2.nome_completo)

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

        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)

        # Iscrizione aspirante
        iscritto = {
            'persone': [aspirante2.pk]
        }
        self.client.post('/aspirante/corso-base/{}/iscritti/aggiungi/'.format(corso.pk), data=iscritto)
        self.assertEqual(corso.inviti.count(), 2)
        # Correttezza email di invito
        self.assertEqual(len(mail.outbox), 2)
        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)

        # Iscrizione sostenitore
        iscritto = {
            'persone': [sostenitore.pk]
        }
        response = self.client.post('/aspirante/corso-base/{}/iscritti/aggiungi/'.format(corso.pk), data=iscritto)
        self.assertEqual(corso.partecipazioni.count(), 1)
        self.assertContains(response, 'Sì')
        self.assertContains(response, sostenitore.nome_completo)
        # Correttezza email di iscrizione
        self.assertEqual(len(mail.outbox), 3)
        email = mail.outbox[2]
        self.assertTrue(email.subject.find("Iscrizione a Corso Base") > -1)
        self.assertEqual(len(email.to), 1)
        self.assertIn(sostenitore.email_contatto, email.to)

        # Un aspirante approva
        self.assertEqual(corso.partecipazioni.count(), 1)
        self.assertEqual(aspirante1.autorizzazioni_in_attesa().count(), 1)
        aspirante1.autorizzazioni_in_attesa()[0].concedi()
        self.assertEqual(len(mail.outbox), 5)
        email_aspirante = False
        email_presidente = False
        for email in mail.outbox[3:]:
            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')
        self.assertTrue(email_aspirante)
        self.assertTrue(email_presidente)
        self.assertFalse(aspirante1.autorizzazioni_in_attesa().exists())
        self.assertEqual(corso.inviti.count(), 1)
        self.assertEqual(corso.partecipazioni.count(), 2)

        # Un aspirante declina
        self.assertEqual(aspirante2.autorizzazioni_in_attesa().count(), 1)
        aspirante2.autorizzazioni_in_attesa()[0].nega()
        self.assertEqual(len(mail.outbox), 6)
        email = mail.outbox[5]
        self.assertIn(presidente.email_contatto, email.to)
        self.assertTrue(email.subject.find('Richiesta di iscrizione a Corso Base RESPINTA') > -1)
        self.assertFalse(aspirante2.autorizzazioni_in_attesa().exists())
        self.assertFalse(corso.inviti.exists())
        self.assertEqual(corso.partecipazioni.count(), 2)
예제 #27
0
    def test_cancellazione_partecipante(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.save()
        Appartenenza.objects.create(persona=sostenitore, sede=sede, membro=Appartenenza.SOSTENITORE, inizio=poco_fa())

        altro = crea_persona()

        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()

        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()

        aspirante3 = crea_persona()
        aspirante3.email_contatto = email_fittizzia()
        aspirante3.codice_fiscale = codice_fiscale()
        aspirante3.save()
        a = Aspirante(persona=aspirante3)
        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 = InvitoCorsoBase.objects.create(persona=aspirante1, corso=corso, invitante=presidente)
        partecipazione1.richiedi()
        partecipazione2 = InvitoCorsoBase.objects.create(persona=aspirante2, corso=corso, invitante=presidente)
        partecipazione2.richiedi()
        partecipazione3 = PartecipazioneCorsoBase.objects.create(persona=aspirante3, corso=corso)
        partecipazione3.richiedi()
        partecipazione4 = PartecipazioneCorsoBase.objects.create(persona=sostenitore, corso=corso)
        partecipazione4.richiedi()

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

        mail.outbox = []

        self.assertEqual(corso.partecipazioni_confermate_o_in_attesa().count(), 3)
        self.assertEqual(corso.inviti_confermati_o_in_attesa().count(), 1)
        self.assertEqual(corso.numero_partecipazioni_in_attesa_e_inviti(), 2)

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

        # Test del controllo di cancellazione nei 4 stati del corso
        corso.stato = CorsoBase.TERMINATO
        corso.save()
        response = self.client.get(reverse('aspirante:formazione_iscritti_cancella', args=(corso.pk, sostenitore.pk)))
        self.assertContains(response, "stadio della vita del corso base")

        corso.stato = CorsoBase.ANNULLATO
        corso.save()
        response = self.client.get(reverse('aspirante:formazione_iscritti_cancella', args=(corso.pk, sostenitore.pk)))
        self.assertContains(response, "stadio della vita del corso base")

        corso.stato = CorsoBase.PREPARAZIONE
        corso.save()
        response = self.client.get(reverse('aspirante:formazione_iscritti_cancella', args=(corso.pk, sostenitore.pk)))
        self.assertContains(response, "Conferma cancellazione")

        corso.stato = CorsoBase.ATTIVO
        corso.save()
        response = self.client.get(reverse('aspirante:formazione_iscritti_cancella', args=(corso.pk, sostenitore.pk)))
        self.assertContains(response, "Conferma cancellazione")

        # GET chiede conferma
        response = self.client.get(reverse('aspirante:formazione_iscritti_cancella', args=(corso.pk, sostenitore.pk)))
        self.assertContains(response, "Conferma cancellazione")
        self.assertContains(response, force_text(sostenitore))
        # POST cancella
        response = self.client.post(reverse('aspirante:formazione_iscritti_cancella', args=(corso.pk, sostenitore.pk)))
        self.assertContains(response, "Iscritto cancellato")

        self.assertEqual(corso.partecipazioni_confermate_o_in_attesa().count(), 2)
        self.assertEqual(corso.inviti_confermati_o_in_attesa().count(), 1)
        self.assertEqual(corso.numero_partecipazioni_in_attesa_e_inviti(), 2)
        self.assertEqual(len(mail.outbox), 2)
        self.assertEqual(mail.outbox[0].subject, "Disiscrizione dal Corso Base: %s" % corso)
        self.assertTrue(force_text(corso.sede) in mail.outbox[0].body)
        self.assertTrue(presidente.nome_completo in mail.outbox[0].body)
        self.assertFalse(sostenitore.nome_completo in mail.outbox[0].body)
        self.assertTrue(sostenitore.nome in mail.outbox[0].body)
        self.assertTrue(sostenitore.email_contatto in mail.outbox[0].to)
        self.assertTrue(presidente.email_contatto in mail.outbox[1].to)
        self.assertFalse(presidente.nome_completo in mail.outbox[1].body)
        self.assertTrue(presidente.nome in mail.outbox[1].body)
        self.assertTrue(sostenitore.nome_completo in mail.outbox[1].body)
        mail.outbox = []

        # Cancellare utente non esistente ritorna errore
        response = self.client.post(reverse('aspirante:formazione_iscritti_cancella', args=(corso.pk, altro.pk + 10000)))
        self.assertContains(response, "La persona cercata non è iscritta")

        # Cancellare utente non associato al corso non ritorna errore -per evitare information leak- ma non cambia
        # i dati
        response = self.client.post(reverse('aspirante:formazione_iscritti_cancella', args=(corso.pk, altro.pk)))
        self.assertContains(response, "Iscritto cancellato")

        self.assertEqual(corso.partecipazioni_confermate_o_in_attesa().count(), 2)
        self.assertEqual(corso.inviti_confermati_o_in_attesa().count(), 1)
        self.assertEqual(corso.numero_partecipazioni_in_attesa_e_inviti(), 2)
        self.assertEqual(len(mail.outbox), 0)

        # Cancellare invitato confermato
        response = self.client.post(reverse('aspirante:formazione_iscritti_cancella', args=(corso.pk, aspirante1.pk)))
        self.assertContains(response, "Iscritto cancellato")

        self.assertEqual(corso.partecipazioni_confermate_o_in_attesa().count(), 1)
        self.assertEqual(corso.inviti_confermati_o_in_attesa().count(), 1)
        self.assertEqual(corso.numero_partecipazioni_in_attesa_e_inviti(), 2)
        self.assertEqual(len(mail.outbox), 2)
        self.assertEqual(mail.outbox[0].subject, "Disiscrizione dal Corso Base: %s" % corso)
        self.assertTrue(force_text(corso.sede) in mail.outbox[0].body)
        self.assertTrue(presidente.nome_completo in mail.outbox[0].body)
        self.assertFalse(aspirante1.nome_completo in mail.outbox[0].body)
        self.assertTrue(aspirante1.nome in mail.outbox[0].body)
        self.assertTrue(aspirante1.email_contatto in mail.outbox[0].to)
        self.assertTrue(presidente.email_contatto in mail.outbox[1].to)
        self.assertFalse(presidente.nome_completo in mail.outbox[1].body)
        self.assertTrue(presidente.nome in mail.outbox[1].body)
        self.assertTrue(aspirante1.nome_completo in mail.outbox[1].body)
        mail.outbox = []

        # Cancellare invitato in attesa
        response = self.client.post(reverse('aspirante:formazione_iscritti_cancella', args=(corso.pk, aspirante2.pk)))
        self.assertContains(response, "Iscritto cancellato")

        self.assertEqual(corso.partecipazioni_confermate_o_in_attesa().count(), 1)
        self.assertEqual(corso.inviti_confermati_o_in_attesa().count(), 0)
        self.assertEqual(corso.numero_partecipazioni_in_attesa_e_inviti(), 1)
        self.assertEqual(len(mail.outbox), 2)
        self.assertEqual(mail.outbox[0].subject, "Annullamento invito al Corso Base: %s" % corso)
        self.assertTrue(force_text(corso.sede) in mail.outbox[0].body)
        self.assertTrue(aspirante2.email_contatto in mail.outbox[0].to)
        self.assertTrue(presidente.email_contatto in mail.outbox[1].to)
        mail.outbox = []

        # Cancellare partecipante in attesa
        response = self.client.post(reverse(
            'aspirante:formazione_iscritti_cancella', args=(corso.pk,
                                                        aspirante3.pk)))
        self.assertContains(response, "Iscritto cancellato")

        self.assertEqual(corso.partecipazioni_confermate_o_in_attesa().count(), 0)
        self.assertEqual(corso.inviti_confermati_o_in_attesa().count(), 0)
        self.assertEqual(corso.numero_partecipazioni_in_attesa_e_inviti(), 0)
        self.assertEqual(len(mail.outbox), 2)
        self.assertEqual(mail.outbox[0].subject, "Disiscrizione dal Corso Base: %s" % corso)
        self.assertTrue(force_text(corso.sede) in mail.outbox[0].body)
        self.assertTrue(aspirante3.email_contatto in mail.outbox[0].to)
        self.assertTrue(presidente.email_contatto in mail.outbox[1].to)
        mail.outbox = []
예제 #28
0
    def test_aggiungi_sostenitore_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)

        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()

        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()

        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',
        )

        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(aspirante2.codice_fiscale[:3]))
        self.assertContains(response, aspirante2.nome_completo)

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

        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)

        # Iscrizione aspirante
        iscritto = {
            'persone': [aspirante2.pk]
        }
        self.client.post('/aspirante/corso-base/{}/iscritti/aggiungi/'.format(corso.pk), data=iscritto)
        self.assertEqual(corso.inviti.count(), 2)
        # Correttezza email di invito
        self.assertEqual(len(mail.outbox), 2)
        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)

        # Iscrizione sostenitore
        iscritto = {
            'persone': [sostenitore.pk]
        }
        response = self.client.post('/aspirante/corso-base/{}/iscritti/aggiungi/'.format(corso.pk), data=iscritto)
        self.assertEqual(corso.partecipazioni.count(), 1)
        self.assertContains(response, 'Sì')
        self.assertContains(response, sostenitore.nome_completo)
        # Correttezza email di iscrizione
        self.assertEqual(len(mail.outbox), 3)
        email = mail.outbox[2]
        self.assertTrue(email.subject.find("Iscrizione a Corso Base") > -1)
        self.assertEqual(len(email.to), 1)
        self.assertIn(sostenitore.email_contatto, email.to)

        # Un aspirante approva
        self.assertEqual(corso.partecipazioni.count(), 1)
        self.assertEqual(aspirante1.autorizzazioni_in_attesa().count(), 1)
        aspirante1.autorizzazioni_in_attesa()[0].concedi()
        self.assertEqual(len(mail.outbox), 5)
        email_aspirante = False
        email_presidente = False
        for email in mail.outbox[3:]:
            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')
        self.assertTrue(email_aspirante)
        self.assertTrue(email_presidente)
        self.assertFalse(aspirante1.autorizzazioni_in_attesa().exists())
        self.assertEqual(corso.inviti.count(), 1)
        self.assertEqual(corso.partecipazioni.count(), 2)

        # Un aspirante declina
        self.assertEqual(aspirante2.autorizzazioni_in_attesa().count(), 1)
        aspirante2.autorizzazioni_in_attesa()[0].nega()
        self.assertEqual(len(mail.outbox), 6)
        email = mail.outbox[5]
        self.assertIn(presidente.email_contatto, email.to)
        self.assertTrue(email.subject.find('Richiesta di iscrizione a Corso Base RESPINTA') > -1)
        self.assertFalse(aspirante2.autorizzazioni_in_attesa().exists())
        self.assertFalse(corso.inviti.exists())
        self.assertEqual(corso.partecipazioni.count(), 2)
예제 #29
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')
예제 #30
0
파일: tests.py 프로젝트: nephila/jorvik
    def test_cancellazione_partecipante(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.save()
        Appartenenza.objects.create(persona=sostenitore, sede=sede, membro=Appartenenza.SOSTENITORE, inizio=poco_fa())

        altro = crea_persona()

        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()

        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()

        aspirante3 = crea_persona()
        aspirante3.email_contatto = email_fittizzia()
        aspirante3.codice_fiscale = codice_fiscale()
        aspirante3.save()
        a = Aspirante(persona=aspirante3)
        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 = InvitoCorsoBase.objects.create(persona=aspirante1, corso=corso, invitante=presidente)
        partecipazione1.richiedi()
        partecipazione2 = InvitoCorsoBase.objects.create(persona=aspirante2, corso=corso, invitante=presidente)
        partecipazione2.richiedi()
        partecipazione3 = PartecipazioneCorsoBase.objects.create(persona=aspirante3, corso=corso)
        partecipazione3.richiedi()
        partecipazione4 = PartecipazioneCorsoBase.objects.create(persona=sostenitore, corso=corso)
        partecipazione4.richiedi()

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

        mail.outbox = []

        self.assertEqual(corso.partecipazioni_confermate_o_in_attesa().count(), 3)
        self.assertEqual(corso.inviti_confermati_o_in_attesa().count(), 1)
        self.assertEqual(corso.numero_partecipazioni_in_attesa_e_inviti(), 2)

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

        # Test del controllo di cancellazione nei 4 stati del corso
        corso.stato = CorsoBase.TERMINATO
        corso.save()
        response = self.client.get(reverse('formazione-iscritti-cancella', args=(corso.pk, sostenitore.pk)))
        self.assertContains(response, "stadio della vita del corso base")

        corso.stato = CorsoBase.ANNULLATO
        corso.save()
        response = self.client.get(reverse('formazione-iscritti-cancella', args=(corso.pk, sostenitore.pk)))
        self.assertContains(response, "stadio della vita del corso base")

        corso.stato = CorsoBase.PREPARAZIONE
        corso.save()
        response = self.client.get(reverse('formazione-iscritti-cancella', args=(corso.pk, sostenitore.pk)))
        self.assertContains(response, "Conferma cancellazione")

        corso.stato = CorsoBase.ATTIVO
        corso.save()
        response = self.client.get(reverse('formazione-iscritti-cancella', args=(corso.pk, sostenitore.pk)))
        self.assertContains(response, "Conferma cancellazione")

        # GET chiede conferma
        response = self.client.get(reverse('formazione-iscritti-cancella', args=(corso.pk, sostenitore.pk)))
        self.assertContains(response, "Conferma cancellazione")
        self.assertContains(response, force_text(sostenitore))
        # POST cancella
        response = self.client.post(reverse('formazione-iscritti-cancella', args=(corso.pk, sostenitore.pk)))
        self.assertContains(response, "Iscritto cancellato")

        self.assertEqual(corso.partecipazioni_confermate_o_in_attesa().count(), 2)
        self.assertEqual(corso.inviti_confermati_o_in_attesa().count(), 1)
        self.assertEqual(corso.numero_partecipazioni_in_attesa_e_inviti(), 2)
        self.assertEqual(len(mail.outbox), 2)
        self.assertEqual(mail.outbox[0].subject, "Disiscrizione dal Corso Base: %s" % corso)
        self.assertTrue(force_text(corso.sede) in mail.outbox[0].body)
        self.assertTrue(presidente.nome_completo in mail.outbox[0].body)
        self.assertFalse(sostenitore.nome_completo in mail.outbox[0].body)
        self.assertTrue(sostenitore.nome in mail.outbox[0].body)
        self.assertTrue(sostenitore.email_contatto in mail.outbox[0].to)
        self.assertTrue(presidente.email_contatto in mail.outbox[1].to)
        self.assertFalse(presidente.nome_completo in mail.outbox[1].body)
        self.assertTrue(presidente.nome in mail.outbox[1].body)
        self.assertTrue(sostenitore.nome_completo in mail.outbox[1].body)
        mail.outbox = []

        # Cancellare utente non esistente ritorna errore
        response = self.client.post(reverse('formazione-iscritti-cancella', args=(corso.pk, altro.pk + 10000)))
        self.assertContains(response, "La persona cercata non è iscritta")

        # Cancellare utente non associato al corso non ritorna errore -per evitare information leak- ma non cambia
        # i dati
        response = self.client.post(reverse('formazione-iscritti-cancella', args=(corso.pk, altro.pk)))
        self.assertContains(response, "Iscritto cancellato")

        self.assertEqual(corso.partecipazioni_confermate_o_in_attesa().count(), 2)
        self.assertEqual(corso.inviti_confermati_o_in_attesa().count(), 1)
        self.assertEqual(corso.numero_partecipazioni_in_attesa_e_inviti(), 2)
        self.assertEqual(len(mail.outbox), 0)

        # Cancellare invitato confermato
        response = self.client.post(reverse('formazione-iscritti-cancella', args=(corso.pk, aspirante1.pk)))
        self.assertContains(response, "Iscritto cancellato")

        self.assertEqual(corso.partecipazioni_confermate_o_in_attesa().count(), 1)
        self.assertEqual(corso.inviti_confermati_o_in_attesa().count(), 1)
        self.assertEqual(corso.numero_partecipazioni_in_attesa_e_inviti(), 2)
        self.assertEqual(len(mail.outbox), 2)
        self.assertEqual(mail.outbox[0].subject, "Disiscrizione dal Corso Base: %s" % corso)
        self.assertTrue(force_text(corso.sede) in mail.outbox[0].body)
        self.assertTrue(presidente.nome_completo in mail.outbox[0].body)
        self.assertFalse(aspirante1.nome_completo in mail.outbox[0].body)
        self.assertTrue(aspirante1.nome in mail.outbox[0].body)
        self.assertTrue(aspirante1.email_contatto in mail.outbox[0].to)
        self.assertTrue(presidente.email_contatto in mail.outbox[1].to)
        self.assertFalse(presidente.nome_completo in mail.outbox[1].body)
        self.assertTrue(presidente.nome in mail.outbox[1].body)
        self.assertTrue(aspirante1.nome_completo in mail.outbox[1].body)
        mail.outbox = []

        # Cancellare invitato in attesa
        response = self.client.post(reverse('formazione-iscritti-cancella', args=(corso.pk, aspirante2.pk)))
        self.assertContains(response, "Iscritto cancellato")

        self.assertEqual(corso.partecipazioni_confermate_o_in_attesa().count(), 1)
        self.assertEqual(corso.inviti_confermati_o_in_attesa().count(), 0)
        self.assertEqual(corso.numero_partecipazioni_in_attesa_e_inviti(), 1)
        self.assertEqual(len(mail.outbox), 2)
        self.assertEqual(mail.outbox[0].subject, "Annullamento invito al Corso Base: %s" % corso)
        self.assertTrue(force_text(corso.sede) in mail.outbox[0].body)
        self.assertTrue(aspirante2.email_contatto in mail.outbox[0].to)
        self.assertTrue(presidente.email_contatto in mail.outbox[1].to)
        mail.outbox = []

        # Cancellare partecipante in attesa
        response = self.client.post(reverse('formazione-iscritti-cancella', args=(corso.pk, aspirante3.pk)))
        self.assertContains(response, "Iscritto cancellato")

        self.assertEqual(corso.partecipazioni_confermate_o_in_attesa().count(), 0)
        self.assertEqual(corso.inviti_confermati_o_in_attesa().count(), 0)
        self.assertEqual(corso.numero_partecipazioni_in_attesa_e_inviti(), 0)
        self.assertEqual(len(mail.outbox), 2)
        self.assertEqual(mail.outbox[0].subject, "Disiscrizione dal Corso Base: %s" % corso)
        self.assertTrue(force_text(corso.sede) in mail.outbox[0].body)
        self.assertTrue(aspirante3.email_contatto in mail.outbox[0].to)
        self.assertTrue(presidente.email_contatto in mail.outbox[1].to)
        mail.outbox = []
예제 #31
0
                        # Assegno una utenza
                        if not Utenza.objects.filter(email="*****@*****.**").exists():
                            utenza = Utenza(persona=persona, email="*****@*****.**",
                                            password='******')
                            utenza.save()
                elif indice == 1:
                    d = Delega.objects.create(persona=persona, tipo=UFFICIO_SOCI, oggetto=sede, inizio=poco_fa())
                elif indice == 2:
                    d = Delega.objects.create(persona=persona, tipo=DELEGATO_OBIETTIVO_1, oggetto=sede, inizio=poco_fa())
                elif indice == 3:
                    d = Delega.objects.create(persona=persona, tipo=DELEGATO_OBIETTIVO_2, oggetto=sede, inizio=poco_fa())

    print(" - Creo utenze di accesso...")
    for persona in Persona.objects.all().exclude(pk=presidente.pk):
        utenza = Utenza.objects.create_user(
            persona=persona, email=email_fittizzia(),
            password=email_fittizzia()
        )

    print("= Fatto.")

if args.province:
    print("Aggiorno le province")

    province = Locazione.objects.filter(stato="IT").exclude(provincia='').values_list('provincia', flat=True).distinct()

    for provincia in province:
        prima = Locazione.objects.filter(provincia=provincia).first()
        prima.cerca_e_aggiorna()
        pv = prima.provincia_breve
예제 #32
0
    def test_richiesta_supporto(self):
        presidente = crea_persona()
        persona_normale, sede, app = crea_persona_sede_appartenenza(presidente=presidente)
        persona_us = crea_persona()
        persona_us_territoriale = crea_persona()
        crea_appartenenza(persona_us, sede)
        crea_appartenenza(persona_us_territoriale, sede)
        crea_utenza(presidente, email=email_fittizzia())
        crea_utenza(persona_normale, email=email_fittizzia())
        crea_utenza(persona_us, email=email_fittizzia())
        crea_utenza(persona_us_territoriale, email=email_fittizzia())

        Delega.objects.create(
            inizio="1980-12-10",
            persona=persona_us,
            tipo=UFFICIO_SOCI,
            oggetto=sede
        )
        Delega.objects.create(
            inizio="1980-12-10",
            persona=persona_us_territoriale,
            tipo=UFFICIO_SOCI_UNITA,
            oggetto=sede
        )

        # Utente normale senza persone
        sessione_normale = self.sessione_utente(persona=persona_normale)
        sessione_normale.visit("%s/supporto/" % self.live_server_url)
        sessione_normale.is_text_not_present('Seleziona le persone per cui si richiede assistenza.')
        sessione_normale.find_option_by_value(ModuloRichiestaSupporto.SANGUE).first.click()
        sessione_normale.fill('oggetto', 'Oggetto')
        sessione_normale.fill('descrizione', 'Descrizione')
        sessione_normale.find_by_css('.btn.btn-block.btn-primary').first.click()
        self.assertTrue(len(mail.outbox), 1)
        email = mail.outbox[0]
        self.assertEqual(email.subject, '(%s) Oggetto' % ModuloRichiestaSupporto.SANGUE)
        self.assertTrue('Descrizione' in email.body)
        mail.outbox = []

        # Utente US con persone
        sessione = self.sessione_utente(persona=persona_us)
        sessione.visit("%s/supporto/" % self.live_server_url)
        sessione.is_text_present('Seleziona le persone per cui si richiede assistenza.')

        # Utente US con persone
        sessione = self.sessione_utente(persona=persona_us_territoriale)
        sessione.visit("%s/supporto/" % self.live_server_url)
        sessione.is_text_present('Seleziona le persone per cui si richiede assistenza.')

        # Presidente con persone
        sessione = self.sessione_utente(persona=presidente)
        sessione.visit("%s/supporto/" % self.live_server_url)
        sessione.is_text_present('Seleziona le persone per cui si richiede assistenza.')

        # Invio form persona normale
        self.client.login(username=presidente.utenza.email, password='******')
        dati = {
            'oggetto': 'Oggetto',
            'descrizione': 'Descrizione',
            'tipo': ModuloRichiestaSupporto.TERZO_LIVELLO,
        }
        self.client.post('/supporto/', data=dati)
        self.assertTrue(len(mail.outbox), 1)
        email = mail.outbox[0]
        self.assertEqual(email.subject, '(%s) Oggetto' % ModuloRichiestaSupporto.TERZO_LIVELLO)
        self.assertTrue('Descrizione' in email.body)
        mail.outbox = []

        # Invio form con selezione persone
        dati = {
            'persona': persona_normale.pk,
            'oggetto': 'Oggetto',
            'descrizione': 'Descrizione',
            'tipo': ModuloRichiestaSupporto.TERZO_LIVELLO,
        }
        self.client.post('/supporto/', data=dati)
        self.assertTrue(len(mail.outbox), 1)
        email = mail.outbox[0]
        self.assertEqual(email.subject, '(%s) Oggetto' % ModuloRichiestaSupporto.TERZO_LIVELLO)
        self.assertTrue('Descrizione' in email.body)
        self.assertTrue(force_text(persona_normale) in email.body)
        mail.outbox = []
예제 #33
0
 def setUp(self):
     persona, sede, appartenenza = crea_persona_sede_appartenenza()
     self.persona = persona
     self.persona.email_contatto = email_fittizzia()
     self.persona.save()
     self.utenza = crea_utenza(persona=self.persona, email=email_fittizzia())
예제 #34
0
 def setUpTestData(cls):
     for i in range(cls.num_persone):
         persona, sede, appartenenza = crea_persona_sede_appartenenza()
         persona.email_contatto = email_fittizzia()
         persona.save()
         cls.persone.append(crea_utenza(persona, email=email_fittizzia()))
예제 #35
0
                     days=math.floor((data - data_precedente).days / 2))
                 altra = random.sample(sedi, 1)[0]
                 a = Appartenenza.objects.create(
                     persona=p,
                     sede=altra,
                     inizio=data_precedente,
                     fine=data_fine,
                     membro=membro,
                     terminazione=Appartenenza.ESPULSIONE)
 for i in range(0, 15):  # Creo 15 aspiranti
     p = crea_persona()
     p.comune_nascita = random.sample(COMUNI.keys(), 1)[0]
     p.codice_fiscale = codice_fiscale_persona(p)
     p.save()
     p.ottieni_o_genera_aspirante()
     email = email_fittizzia()
     utenza = Utenza.objects.create_user(persona=p,
                                         email=email,
                                         password=email)
 if sede.estensione in (LOCALE, REGIONALE, PROVINCIALE):
     print(" - Assegno deleghe...")
     persone = [
         a.persona for a in Appartenenza.objects.filter(
             sede=sede, membro=Appartenenza.VOLONTARIO).order_by('?')
         [:4]
     ]
     for indice, persona in enumerate(persone):
         if indice == 0:
             d = Delega.objects.create(persona=persona,
                                       tipo=PRESIDENTE,
                                       oggetto=sede,
예제 #36
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")
예제 #37
0
             if i % 5 == 2:
                 # Espulso e riammesso
                 data_precedente = data - timedelta(days=random.randint(10, 500))
                 data_fine = data - timedelta(days=math.floor((data - data_precedente).days/2))
                 altra = random.sample(sedi, 1)[0]
                 a = Appartenenza.objects.create(
                     persona=p, sede=altra, inizio=data_precedente, fine=data_fine, membro=membro,
                     terminazione=Appartenenza.ESPULSIONE
                 )
 for i in range(0, 15):  # Creo 15 aspiranti
     p = crea_persona()
     p.comune_nascita = random.sample(COMUNI.keys(), 1)[0]
     p.codice_fiscale = codice_fiscale_persona(p)
     p.save()
     p.ottieni_o_genera_aspirante()
     email = email_fittizzia()
     utenza = Utenza.objects.create_user(
         persona=p, email=email,
         password=email
     )
 if sede.estensione in (LOCALE, REGIONALE, PROVINCIALE):
     print(" - Assegno deleghe...")
     persone = [a.persona for a in Appartenenza.objects.filter(sede=sede, membro=Appartenenza.VOLONTARIO).order_by('?')[:4]]
     for indice, persona in enumerate(persone):
         if indice == 0:
             d = Delega.objects.create(persona=persona, tipo=PRESIDENTE, oggetto=sede, inizio=poco_fa())
             if sede == c:
                 # Grazie per tutto il pesce
                 persona.nome = "Douglas"
                 persona.cognome = "Adams"
                 persona.codice_fiscale = codice_fiscale_persona(persona)