def test_is_valid(self, mock_now): now = tz_now() mock_now.return_value = now token = RequestToken() admin = RequestTokenAdmin(RequestToken, None) token.not_before_time = now + datetime.timedelta(minutes=1) self.assertTrue(token.not_before_time > now) self.assertFalse(admin.is_valid(token)) token.not_before_time = None token.expiration_time = now - datetime.timedelta(minutes=1) self.assertTrue(token.expiration_time < now) self.assertFalse(admin.is_valid(token)) token.expiration_time = None token.max_uses = 1 token.used_to_date = 1 self.assertFalse(admin.is_valid(token)) # finally make it valid token.max_uses = 10 self.assertTrue(admin.is_valid(token))
def test_claims(self): token = RequestToken() # raises error with no id set - put into context manager as it's # an attr, not a callable self.assertEqual(len(token.claims), 3) self.assertEqual(token.max, 1) self.assertEqual(token.sub, '') self.assertIsNone(token.jti) self.assertIsNone(token.aud) self.assertIsNone(token.exp) self.assertIsNone(token.nbf) self.assertIsNone(token.iat) # now let's set some properties token.user = self.user self.assertEqual(token.aud, self.user.id) self.assertEqual(len(token.claims), 4) token.login_mode = RequestToken.LOGIN_MODE_REQUEST self.assertEqual(token.claims['mod'], RequestToken.LOGIN_MODE_REQUEST[:1].lower()) self.assertEqual(len(token.claims), 4) now = tz_now() now_sec = to_seconds(now) token.expiration_time = now self.assertEqual(token.exp, now_sec) self.assertEqual(len(token.claims), 5) token.not_before_time = now self.assertEqual(token.nbf, now_sec) self.assertEqual(len(token.claims), 6) # saving updates the id and issued_at timestamp with mock.patch('request_token.models.tz_now', lambda: now): token.save() self.assertEqual(token.iat, now_sec) self.assertEqual(token.jti, token.id) self.assertEqual(len(token.claims), 8)