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" )
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())
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)
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)
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)
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)
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()))
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" )
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')
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())
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
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)
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())
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+®istration=\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")
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())
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)
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+®istration=\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")
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')
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)
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 = []
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')
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 = []
# 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
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 = []
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()))
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,
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+®istration=\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")
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)