def test_send_link_ok(self): user = self.create_test_user(username='******') request = self.factory.post('', { 'login': user.username, }) time_before = math.floor(time.time()) with self.assert_one_mail_sent() as sent_emails: response = send_reset_password_link(request) time_after = math.ceil(time.time()) self.assert_valid_response(response, status.HTTP_200_OK) sent_email = sent_emails[0] self.assertEqual( sent_email.from_email, REST_REGISTRATION_WITH_RESET_PASSWORD['VERIFICATION_FROM_EMAIL'], ) self.assertListEqual(sent_email.to, [user.email]) url = self.assert_one_url_line_in_text(sent_email.body) verification_data = self.assert_valid_verification_url( url, expected_path=RESET_PASSWORD_VERIFICATION_URL, expected_query_keys={'signature', 'user_id', 'timestamp'}, ) self.assertEqual(int(verification_data['user_id']), user.id) url_sig_timestamp = int(verification_data['timestamp']) self.assertGreaterEqual(url_sig_timestamp, time_before) self.assertLessEqual(url_sig_timestamp, time_after) signer = ResetPasswordSigner(verification_data) signer.verify()
def _assert_valid_verification_data(self, verification_data, user, timer): self.assertEqual(int(verification_data['user_id']), user.id) url_sig_timestamp = int(verification_data['timestamp']) self.assertGreaterEqual(url_sig_timestamp, timer.start_time) self.assertLessEqual(url_sig_timestamp, timer.end_time) signer = ResetPasswordSigner(verification_data) signer.verify()
def _assert_valid_reset_password_verification_data(verification_data, user, timer): assert int(verification_data['user_id']) == user.id url_sig_timestamp = int(verification_data['timestamp']) assert url_sig_timestamp >= timer.start_time assert url_sig_timestamp <= timer.end_time signer = ResetPasswordSigner(verification_data) signer.verify()
def test_send_link_with_username_as_verification_id_ok(self): user = self.create_test_user(username='******') request = self.create_post_request({ 'login': user.username, }) with self.assert_one_mail_sent() as sent_emails, self.timer() as timer: response = self.view_func(request) self.assert_valid_response(response, status.HTTP_200_OK) sent_email = sent_emails[0] verification_data = self._assert_valid_verification_email( sent_email, user) self.assertEqual(verification_data['user_id'], user.username) url_sig_timestamp = int(verification_data['timestamp']) self.assertGreaterEqual(url_sig_timestamp, timer.start_time) self.assertLessEqual(url_sig_timestamp, timer.end_time) signer = ResetPasswordSigner(verification_data) signer.verify()
def _assert_valid_send_link_email(self, sent_email, user, timer): self.assertEqual( sent_email.from_email, REST_REGISTRATION_WITH_RESET_PASSWORD['VERIFICATION_FROM_EMAIL'], ) self.assertListEqual(sent_email.to, [user.email]) url = self.assert_one_url_line_in_text(sent_email.body) verification_data = self.assert_valid_verification_url( url, expected_path=RESET_PASSWORD_VERIFICATION_URL, expected_fields={'signature', 'user_id', 'timestamp'}, ) self.assertEqual(int(verification_data['user_id']), user.id) url_sig_timestamp = int(verification_data['timestamp']) self.assertGreaterEqual(url_sig_timestamp, timer.start_time) self.assertLessEqual(url_sig_timestamp, timer.end_time) signer = ResetPasswordSigner(verification_data) signer.verify()