def setUp(self): self.staff = structure_factories.UserFactory(is_staff=True) self.customer_owner = structure_factories.UserFactory() self.project_admin = structure_factories.UserFactory() self.project_manager = structure_factories.UserFactory() self.user = structure_factories.UserFactory() self.customer = structure_factories.CustomerFactory() self.second_customer = structure_factories.CustomerFactory() self.customer.add_user(self.customer_owner, structure_models.CustomerRole.OWNER) self.customer_role = structure_models.CustomerRole.OWNER self.customer_invitation = factories.CustomerInvitationFactory( customer=self.customer, customer_role=self.customer_role) self.project = structure_factories.ProjectFactory( customer=self.customer) self.project.add_user(self.project_admin, structure_models.ProjectRole.ADMINISTRATOR) self.project.add_user(self.project_manager, structure_models.ProjectRole.MANAGER) self.project_role = structure_models.ProjectRole.ADMINISTRATOR self.project_invitation = factories.ProjectInvitationFactory( project=self.project, project_role=self.project_role)
def test_user_can_rewrite_his_email_on_invitation_accept(self): invitation = factories.CustomerInvitationFactory(created_by=self.customer_owner, email='*****@*****.**') self.client.force_authenticate(user=self.user) self.client.post( factories.CustomerInvitationFactory.get_url(invitation, action='accept'), {'replace_email': True}) self.assertEqual(self.user.email, invitation.email)
def test_user_with_invalid_civil_number_cannot_accept_invitation(self): customer_invitation = factories.CustomerInvitationFactory( customer=self.customer, customer_role=self.customer_role, civil_number='123456789') self.client.force_authenticate(user=self.user) response = self.client.post(factories.CustomerInvitationFactory.get_url(customer_invitation, action='accept')) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertEqual(response.data, ['User has an invalid civil number.'])
def test_if_user_has_civil_number_non_matching_invitation_is_concealed( self): customer_invitation = factories.CustomerInvitationFactory( customer=self.customer, customer_role=self.customer_role, civil_number='123456789', ) response = self.get_details(self.user, customer_invitation) self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
def test_user_which_already_has_role_within_customer_cannot_accept_invitation(self): customer_invitation = factories.CustomerInvitationFactory( customer=self.customer, customer_role=self.customer_role) self.client.force_authenticate(user=self.user) self.customer.add_user(self.user, customer_invitation.customer_role) response = self.client.post(factories.CustomerInvitationFactory.get_url(customer_invitation, action='accept')) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertEqual(response.data, ['User already has role within this customer.'])
def test_user_which_created_invitation_is_stored_in_permission(self): invitation = factories.CustomerInvitationFactory( created_by=self.customer_owner) self.client.force_authenticate(user=self.user) self.client.post( factories.CustomerInvitationFactory.get_url(invitation, action='accept')) permission = structure_models.CustomerPermission.objects.get( user=self.user, customer=invitation.customer) self.assertEqual(permission.created_by, self.customer_owner)
def test_if_user_has_civil_number_only_matching_invitation_is_shown(self): customer_invitation = factories.CustomerInvitationFactory( customer=self.customer, customer_role=self.customer_role, civil_number='123456789', ) self.user.civil_number = '123456789' self.user.save() response = self.get_details(self.user, customer_invitation) self.assertEqual(response.status_code, status.HTTP_200_OK)
def test_user_can_accept_invitation_if_emails_match_and_validation_of_emails_is_on(self): invitation = factories.CustomerInvitationFactory(created_by=self.customer_owner, email=self.user.email) self.client.force_authenticate(user=self.user) url = factories.CustomerInvitationFactory.get_url(invitation, action='accept') response = self.client.post(url, {'replace_email': True}) self.assertEqual(response.status_code, status.HTTP_200_OK) self.user.refresh_from_db() self.assertEqual(self.user.email, invitation.email)
def test_user_can_not_rewrite_his_email_on_acceptance_if_validation_of_emails_is_on(self): invitation = factories.CustomerInvitationFactory(created_by=self.customer_owner, email='*****@*****.**') self.client.force_authenticate(user=self.user) url = factories.CustomerInvitationFactory.get_url(invitation, action='accept') response = self.client.post(url, {'replace_email': True}) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.user.refresh_from_db() self.assertNotEqual(self.user.email, invitation.email)
def test_user_can_resend_expired_invitation(self): customer_expired_invitation = factories.CustomerInvitationFactory( state=models.Invitation.State.EXPIRED) self.client.force_authenticate(user=self.staff) response = self.client.post(factories.CustomerInvitationFactory .get_url(customer_expired_invitation, action='send')) self.assertEqual(response.status_code, status.HTTP_200_OK) customer_expired_invitation.refresh_from_db() self.assertEqual(customer_expired_invitation.state, models.Invitation.State.PENDING) self.assertEqual(customer_expired_invitation.created, timezone.now())
def test_user_can_not_reuse_existing_email(self): # Arrange invitation = factories.CustomerInvitationFactory(created_by=self.customer_owner) structure_factories.UserFactory(email=invitation.email) # Act self.client.force_authenticate(user=self.user) url = factories.CustomerInvitationFactory.get_url(invitation, action='accept') response = self.client.post(url, {'replace_email': True}) # Assert self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.user.refresh_from_db() self.assertNotEqual(self.user.email, invitation.email)
def test_if_email_validation_is_disabled_non_matching_invitation_is_shown( self, ): invitation = factories.CustomerInvitationFactory( created_by=self.customer_owner) response = self.get_details(self.user, invitation) self.assertEqual(response.status_code, status.HTTP_200_OK)
def test_if_email_validation_is_enabled_non_matching_invitation_is_concealed( self, ): invitation = factories.CustomerInvitationFactory( created_by=self.customer_owner) response = self.get_details(self.user, invitation) self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)