def test_retire_user(self): """ Retire user with record(s) in table """ user = UserFactory.create() user.profile.name = "Enrique" attempt = SoftwareSecurePhotoVerification(user=user) # Populate Record attempt.mark_ready() attempt.status = PhotoVerification.STATUS.submitted attempt.photo_id_image_url = "https://example.com/test/image/img.jpg" attempt.face_image_url = "https://example.com/test/face/img.jpg" attempt.photo_id_key = 'there_was_an_attempt' attempt.approve() # Validate data before retirement assert attempt.name == user.profile.name assert attempt.photo_id_image_url == 'https://example.com/test/image/img.jpg' assert attempt.face_image_url == 'https://example.com/test/face/img.jpg' assert attempt.photo_id_key == 'there_was_an_attempt' # Retire User attempt_again = SoftwareSecurePhotoVerification(user=user) assert attempt_again.retire_user(user_id=user.id) # Validate data after retirement assert attempt_again.name == '' assert attempt_again.face_image_url == '' assert attempt_again.photo_id_image_url == '' assert attempt_again.photo_id_key == ''
def test_retire_user(self): """ Retire user with record(s) in table """ user = UserFactory.create() user.profile.name = u"Enrique" attempt = SoftwareSecurePhotoVerification(user=user) # Populate Record attempt.mark_ready() attempt.status = "submitted" attempt.photo_id_image_url = "https://example.com/test/image/img.jpg" attempt.face_image_url = "https://example.com/test/face/img.jpg" attempt.photo_id_key = 'there_was_an_attempt' attempt.approve() # Validate data before retirement self.assertEqual(attempt.name, user.profile.name) self.assertEqual(attempt.photo_id_image_url, 'https://example.com/test/image/img.jpg') self.assertEqual(attempt.face_image_url, 'https://example.com/test/face/img.jpg') self.assertEqual(attempt.photo_id_key, 'there_was_an_attempt') # Retire User attempt_again = SoftwareSecurePhotoVerification(user=user) self.assertTrue(attempt_again.retire_user(user_id=user.id)) # Validate data after retirement self.assertEqual(attempt_again.name, '') self.assertEqual(attempt_again.face_image_url, '') self.assertEqual(attempt_again.photo_id_image_url, '') self.assertEqual(attempt_again.photo_id_key, '')
def test_state_transitions(self): """ Make sure we can't make unexpected status transitions. The status transitions we expect are:: → → → must_retry ↑ ↑ ↓ created → ready → submitted → approved ↓ ↑ ↓ ↓ → → denied """ user = UserFactory.create() attempt = SoftwareSecurePhotoVerification(user=user) assert_equals(attempt.status, "created") # These should all fail because we're in the wrong starting state. assert_raises(VerificationException, attempt.submit) assert_raises(VerificationException, attempt.approve) assert_raises(VerificationException, attempt.deny) # Now let's fill in some values so that we can pass the mark_ready() call attempt.mark_ready() assert_equals(attempt.status, "ready") # ready (can't approve or deny unless it's "submitted") assert_raises(VerificationException, attempt.approve) assert_raises(VerificationException, attempt.deny) DENY_ERROR_MSG = '[{"photoIdReasons": ["Not provided"]}]' # must_retry attempt.status = "must_retry" attempt.system_error("System error") attempt.approve() attempt.status = "must_retry" attempt.deny(DENY_ERROR_MSG) # submitted attempt.status = "submitted" attempt.deny(DENY_ERROR_MSG) attempt.status = "submitted" attempt.approve() # approved assert_raises(VerificationException, attempt.submit) attempt.approve() # no-op attempt.system_error( "System error") # no-op, something processed it without error attempt.deny(DENY_ERROR_MSG) # denied assert_raises(VerificationException, attempt.submit) attempt.deny(DENY_ERROR_MSG) # no-op attempt.system_error( "System error") # no-op, something processed it without error attempt.approve()
def test_state_transitions(self): """ Make sure we can't make unexpected status transitions. The status transitions we expect are:: → → → must_retry ↑ ↑ ↓ created → ready → submitted → approved ↓ ↑ ↓ ↓ → → denied """ user = UserFactory.create() attempt = SoftwareSecurePhotoVerification(user=user) self.assertEqual(attempt.status, "created") # These should all fail because we're in the wrong starting state. self.assertRaises(VerificationException, attempt.submit) self.assertRaises(VerificationException, attempt.approve) self.assertRaises(VerificationException, attempt.deny) # Now let's fill in some values so that we can pass the mark_ready() call attempt.mark_ready() self.assertEqual(attempt.status, "ready") # ready (can't approve or deny unless it's "submitted") self.assertRaises(VerificationException, attempt.approve) self.assertRaises(VerificationException, attempt.deny) DENY_ERROR_MSG = '[{"photoIdReasons": ["Not provided"]}]' # must_retry attempt.status = "must_retry" attempt.system_error("System error") attempt.approve() attempt.status = "must_retry" attempt.deny(DENY_ERROR_MSG) # submitted attempt.status = "submitted" attempt.deny(DENY_ERROR_MSG) attempt.status = "submitted" attempt.approve() # approved self.assertRaises(VerificationException, attempt.submit) attempt.approve() # no-op attempt.system_error("System error") # no-op, something processed it without error attempt.deny(DENY_ERROR_MSG) # denied self.assertRaises(VerificationException, attempt.submit) attempt.deny(DENY_ERROR_MSG) # no-op attempt.system_error("System error") # no-op, something processed it without error attempt.approve()
def test_retire_user(self): user = UserFactory.create() user.profile.name = u"Enrique" attempt = SoftwareSecurePhotoVerification(user=user) attempt.mark_ready() attempt.status = "submitted" attempt.photo_id_image_url = "https://example.com/test/image/img.jpg" attempt.face_image_url = "https://example.com/test/face/img.jpg" attempt.approve() # Before Delete assert_equals(attempt.name, user.profile.name) assert_equals(attempt.photo_id_image_url, 'https://example.com/test/image/img.jpg') assert_equals(attempt.face_image_url, 'https://example.com/test/face/img.jpg') # Attempt self.assertTrue( SoftwareSecurePhotoVerification.delete_by_user_value(user, "user")) # Reattempt self.assertFalse( SoftwareSecurePhotoVerification.delete_by_user_value(user, "user"))