def test_submitted_draft_cannot_be_deleted(self): """ Use case: Applicant lodge an application. Officer send it back to him with amendments requested Applicant reopen it and save it as a draft At this stage the user should not be able to delete it because it has already been lodged """ # lodge application application = helpers.create_and_lodge_application(self.applicant) # application should not be discardable self.assertFalse(application.is_discardable) # and not deletable self.assertFalse(application.is_deletable) # officer request amendment url = reverse('wl_applications:amendment_request') self.client.login(self.officer.email) resp = self.client.post(url, data={ 'application': application.pk, 'officer': self.officer.pk, 'reason': 'missing_information' }) self.assertEquals(resp.status_code, 200) application.refresh_from_db() self.client.logout() self.client.login(self.applicant.email) url = reverse('wl_applications:edit_application', args=[application.pk]) self.client.get(url, follow=True) # save as draft data = { 'draft': 'draft', 'data': application.data } url = reverse('wl_applications:enter_details') resp = self.client.post(url, data, follow=True) self.assertEqual(resp.status_code, 200) application.refresh_from_db() self.assertEqual(application.customer_status, 'draft') # application should now be discardable self.assertTrue(application.is_discardable) # and not deletable self.assertFalse(application.is_deletable) # actual discard url = reverse('wl_applications:discard_application', args=[application.pk]) resp = self.client.post(url, follow=True) # application should not be deleted application = Application.objects.filter(pk=application.pk).first() self.assertIsNotNone(application) # but in a discarded state self.assertEqual(application.processing_status, 'discarded') self.assertEqual(application.customer_status, 'discarded') # there should be a message self.assertTrue(has_response_messages(resp)) self.assertFalse(has_response_error_messages(resp))
def test_pushed_back_application_discarded_not_deleted(self): # lodge application application = helpers.create_and_lodge_application(self.applicant) self.assertFalse(application.is_discardable) # officer request amendment url = reverse('wl_applications:amendment_request') self.client.login(self.officer.email) resp = self.client.post(url, data={ 'application': application.pk, 'officer': self.officer.pk, 'reason': 'missing_information' }) self.assertEquals(resp.status_code, 200) application.refresh_from_db() # application should now be discardable self.assertTrue(application.is_discardable) # but not deletable self.assertFalse(application.is_deletable) # discard self.client.logout() clear_mailbox() self.client.login(self.applicant.email) self.assertTrue(is_client_authenticated(self.client)) url = reverse('wl_applications:discard_application', args=[application.pk]) # the get should not discard but return a confirm page previous_processing_status = application.processing_status previous_customer_status = application.customer_status resp = self.client.get(url) self.assertEquals(resp.status_code, 200) # test that there's a cancel_url in the context of the response and an action_url that is set to the proper url self.assertTrue('cancel_url' in resp.context) self.assertEqual(resp.context['cancel_url'], reverse('wl_dashboard:home')) self.assertTrue('action_url' in resp.context) self.assertEquals(resp.context['action_url'], url) application.refresh_from_db() # status should be unchanged self.assertNotEqual(application.processing_status, 'discarded') self.assertNotEqual(application.customer_status, 'discarded') self.assertEqual(application.processing_status, previous_processing_status) self.assertEqual(application.customer_status, previous_customer_status) # actual discard resp = self.client.post(url, data=None, follow=True) self.assertEquals(resp.status_code, 200) application.refresh_from_db() self.assertEqual(application.processing_status, 'discarded') self.assertEqual(application.customer_status, 'discarded') # there should be a message self.assertTrue(has_response_messages(resp)) self.assertFalse(has_response_error_messages(resp))
def test_cannot_discard(self): """ Test that an application cannot be discarded if it hasn't been pushed back to the applicant. Formally its processing status must be in the list of Application.CUSTOMER_DISCARDABLE_STATE :return: """ # lodge application application = helpers.create_and_lodge_application(self.applicant) self.assertFalse(application.is_discardable) # try to discard with get or post previous_processing_status = application.processing_status previous_customer_status = application.customer_status url = reverse('wl_applications:discard_application', args=[application.pk]) self.client.login(self.applicant.email) self.assertTrue(is_client_authenticated(self.client)) resp = self.client.get(url, follow=True) application.refresh_from_db() # status should be unchanged self.assertNotEqual(application.processing_status, 'discarded') self.assertNotEqual(application.customer_status, 'discarded') self.assertEqual(application.processing_status, previous_processing_status) self.assertEqual(application.customer_status, previous_customer_status) # the response should have an error message self.assertTrue(has_response_error_messages(resp)) # same with post method resp = self.client.post(url, follow=True) application.refresh_from_db() # status should be unchanged self.assertNotEqual(application.processing_status, 'discarded') self.assertNotEqual(application.customer_status, 'discarded') self.assertEqual(application.processing_status, previous_processing_status) self.assertEqual(application.customer_status, previous_customer_status) # the response should have an error message self.assertTrue(has_response_error_messages(resp))