Beispiel #1
0
    def test_one_account_no_nir(self):
        """
        No account with this NIR is found.
        A search by email is proposed.
        An account is found for this email.
        This NIR account is empty.
        An update is expected.
        """
        job_seeker = JobSeekerFactory(nir="")
        # Create an approval to bypass the eligibility diagnosis step.
        PoleEmploiApprovalFactory(birthdate=job_seeker.birthdate, pole_emploi_id=job_seeker.pole_emploi_id)
        siae, user = self.create_test_data()
        self.client.login(username=user.email, password=DEFAULT_PASSWORD)

        url = reverse("apply:start", kwargs={"siae_pk": siae.pk})

        # Follow all redirections…
        response = self.client.get(url, follow=True)

        # …until a job seeker has to be determined.
        self.assertEqual(response.status_code, 200)
        last_url = response.redirect_chain[-1][0]
        self.assertEqual(last_url, reverse("apply:step_check_job_seeker_nir", kwargs={"siae_pk": siae.pk}))

        # Enter an a non-existing NIR.
        # ----------------------------------------------------------------------
        nir = "141068078200557"
        post_data = {"nir": nir, "confirm": 1}
        response = self.client.post(last_url, data=post_data)
        next_url = reverse("apply:step_job_seeker", kwargs={"siae_pk": siae.pk})
        self.assertRedirects(response, next_url)

        # Enter an existing email.
        # ----------------------------------------------------------------------
        post_data = {"email": job_seeker.email, "save": "1"}
        response = self.client.post(next_url, data=post_data)
        next_url = reverse("apply:step_check_job_seeker_info", kwargs={"siae_pk": siae.pk})
        self.assertRedirects(response, next_url, target_status_code=302)

        # Follow all redirections until the end.
        # ----------------------------------------------------------------------
        response = self.client.get(next_url, follow=True)
        self.assertTrue(response.status_code, 200)

        next_url = reverse("apply:step_application", kwargs={"siae_pk": siae.pk})
        post_data = {
            "selected_jobs": [siae.job_description_through.first().pk, siae.job_description_through.last().pk],
            "message": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
            "resume_link": "https://server.com/rockie-balboa.pdf",
        }
        response = self.client.post(next_url, data=post_data, follow=True)
        expected_url = reverse("apply:step_application_sent", kwargs={"siae_pk": siae.pk})
        last_url = response.redirect_chain[-1][0]
        self.assertEqual(expected_url, last_url)

        # Make sure the job seeker NIR is now filled in.
        # ----------------------------------------------------------------------
        job_seeker.refresh_from_db()
        self.assertEqual(job_seeker.nir, nir)
Beispiel #2
0
    def test_has_external_data(self, m):
        _status_ok(m)

        user1 = JobSeekerFactory()
        user2 = JobSeekerFactory()

        import_user_pe_data(user1, FOO_TOKEN)
        user1.refresh_from_db()

        self.assertTrue(user1.has_external_data)
        self.assertFalse(user2.has_external_data)
Beispiel #3
0
    def test_import_failed(self, m):
        _status_failed(m)

        user = JobSeekerFactory()
        import_user_pe_data(user, FOO_TOKEN)
        user.refresh_from_db()
        self.assertTrue(user.has_external_data)

        data = user.jobseekerexternaldata
        self.assertIsNone(data.is_pe_jobseeker)
        self.assertIsNone(data.has_minimal_social_allowance)
Beispiel #4
0
    def test_apply_as_job_seeker_temporary_nir(self):
        """
        Full path is tested above. See test_apply_as_job_seeker.
        """
        siae = SiaeWithMembershipAndJobsFactory(romes=("N1101", "N1105"))

        user = JobSeekerFactory(nir="")
        self.client.login(username=user.email, password=DEFAULT_PASSWORD)

        # Entry point.
        # ----------------------------------------------------------------------

        url = reverse("apply:start", kwargs={"siae_pk": siae.pk})
        response = self.client.get(url, follow=True)
        self.assertEqual(response.status_code, 200)
        next_url = reverse("apply:step_check_job_seeker_nir", kwargs={"siae_pk": siae.pk})

        # Follow all redirections until NIR.
        # ----------------------------------------------------------------------
        nir = "123456789KLOIU"
        post_data = {"nir": nir}

        response = self.client.post(next_url, data=post_data)
        self.assertEqual(response.status_code, 200)
        self.assertFalse(response.context["form"].is_valid())

        # Temporary number should be skipped.
        post_data = {"nir": nir, "skip": 1}
        response = self.client.post(next_url, data=post_data, follow=True)
        last_url = response.redirect_chain[-1][0]
        expected_url = reverse("apply:step_application", kwargs={"siae_pk": siae.pk})
        self.assertEqual(last_url, expected_url)
        self.assertEqual(response.status_code, 200)

        # Step application.
        # ----------------------------------------------------------------------

        response = self.client.get(last_url)
        self.assertEqual(response.status_code, 200)

        post_data = {
            "selected_jobs": [siae.job_description_through.first().pk],
            "message": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
            "resume_link": "https://server.com/rocky-balboa.pdf",
        }
        response = self.client.post(last_url, data=post_data, follow=True)
        self.assertEqual(response.status_code, 200)

        last_url = response.redirect_chain[-1][0]
        next_url = reverse("apply:step_application_sent", kwargs={"siae_pk": siae.pk})
        self.assertEqual(last_url, next_url)
        user.refresh_from_db()
        self.assertFalse(user.nir)
Beispiel #5
0
    def test_import_partial(self, m):
        _status_partial(m)

        user = JobSeekerFactory()
        import_user_pe_data(user, FOO_TOKEN)
        user.refresh_from_db()
        self.assertTrue(user.has_external_data)

        data = user.jobseekerexternaldata

        self.assertIsNone(data.has_minimal_social_allowance)
        self.assertTrue(data.is_pe_jobseeker)

        self.assertEqual(user.address_line_1, "4, Privet Drive")
        self.assertEqual(user.address_line_2, "The cupboard under the stairs")
        self.assertNotEqual(str(user.birthdate), "1970-01-01")
Beispiel #6
0
    def test_import_ok(self, m):
        _status_ok(m)

        user = JobSeekerFactory()

        # Check override of birthdate / of a field
        user.birthdate = None
        user.save()

        result = import_user_pe_data(user, FOO_TOKEN)
        user.refresh_from_db()
        self.assertTrue(user.has_external_data)

        data = user.jobseekerexternaldata

        self.assertFalse(data.has_minimal_social_allowance)
        self.assertTrue(data.is_pe_jobseeker)

        self.assertEqual(user.address_line_1, "4, Privet Drive")
        self.assertEqual(user.address_line_2, "The cupboard under the stairs")
        self.assertEqual(str(user.birthdate), "1970-01-01")

        report = result.report
        self.assertIn(f"User/{user.pk}/birthdate",
                      report.get("fields_updated"))
        self.assertEqual(7 + 1,
                         len(report.get("fields_updated")))  # fields + history
        self.assertEqual(12, len(report.get("fields_fetched")))

        # Just checking birthdate is not overriden
        user = JobSeekerFactory()
        birthdate = user.birthdate

        report = import_user_pe_data(user, FOO_TOKEN).report

        user.refresh_from_db()

        self.assertNotIn(f"User/{user.pk}/birthdate",
                         report.get("fields_updated"))
        self.assertEqual(birthdate, user.birthdate)
Beispiel #7
0
    def test_update_email(self):
        user = JobSeekerFactory()
        old_email = user.email
        new_email = "*****@*****.**"

        self.client.login(username=user.email, password=DEFAULT_PASSWORD)
        url = reverse("dashboard:edit_user_email")
        response = self.client.get(url)

        email_address = EmailAddress(email=old_email,
                                     verified=True,
                                     primary=True)
        email_address.user = user
        email_address.save()

        post_data = {"email": new_email, "email_confirmation": new_email}
        response = self.client.post(url, data=post_data)
        self.assertEqual(response.status_code, 302)

        # User is logged out
        user.refresh_from_db()
        self.assertEqual(response.request.get("user"), None)
        self.assertEqual(user.email, new_email)
        self.assertEqual(user.emailaddress_set.count(), 0)

        # User cannot log in with his old address
        post_data = {"login": old_email, "password": DEFAULT_PASSWORD}
        url = reverse("account_login")
        response = self.client.post(url, data=post_data)
        self.assertEqual(response.status_code, 200)
        self.assertFalse(response.context_data["form"].is_valid())

        # User cannot log in until confirmation
        post_data = {"login": new_email, "password": DEFAULT_PASSWORD}
        url = reverse("account_login")
        response = self.client.post(url, data=post_data)
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response.url,
                         reverse("account_email_verification_sent"))

        # User receives an email to confirm his new address.
        email = mail.outbox[0]
        self.assertIn("Confirmez votre adresse e-mail", email.subject)
        self.assertIn(
            "Afin de finaliser votre inscription, cliquez sur le lien suivant",
            email.body)
        self.assertEqual(email.to[0], new_email)

        # Confirm email + auto login.
        confirmation_token = EmailConfirmationHMAC(
            user.emailaddress_set.first()).key
        confirm_email_url = reverse("account_confirm_email",
                                    kwargs={"key": confirmation_token})
        response = self.client.post(confirm_email_url)
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response.url, reverse("account_login"))

        post_data = {"login": user.email, "password": DEFAULT_PASSWORD}
        url = reverse("account_login")
        response = self.client.post(url, data=post_data)
        self.assertTrue(response.context.get("user").is_authenticated)

        user.refresh_from_db()
        self.assertEqual(user.email, new_email)
        self.assertEqual(user.emailaddress_set.count(), 1)
        new_address = user.emailaddress_set.first()
        self.assertEqual(new_address.email, new_email)
        self.assertTrue(new_address.verified)