def test_get_required_empty_claims(self): """ Test getting the claims that are required and empty. Expected Result: Only the names of claims that are not optional, but have no value are returned. """ easyjwt = EasyJWT(self.key) # Assert there is an optional, empty claim. This claim is not included in the output. self.assertIsNone(easyjwt.not_before_date) self.assertTrue(easyjwt._is_optional_claim('nbf')) # Set an optional claim. This claim is not included in the output. easyjwt.expiration_date = self.expiration_date self.assertTrue(easyjwt._is_optional_claim('exp')) # Create a non-optional claim and set a value. This claim is not included in the output. easyjwt.required = True self.assertTrue(easyjwt._is_claim('required')) # Create a non-optional, empty claim. This claim is included in the output. required_empty_claim = 'required_empty' easyjwt.required_empty = None self.assertTrue(easyjwt._is_claim(required_empty_claim)) self.assertSetEqual({required_empty_claim}, easyjwt._get_required_empty_claims())
def test_is_claim_whitelist(self): """ Test if the instance variables in the whitelist are claims. Expected Result: `True` for all variables in the whitelist. """ for instance_var in EasyJWT._private_claims: self.assertTrue(EasyJWT._is_claim(instance_var), f'{instance_var} unexpectedly is not a claim')
def test_is_claim_public_instance_vars(self): """ Test if public instance variables that are not in the blacklist are claims. Expected Result: `True` """ instance_var = 'part_of_the_claim_set' self.assertNotIn(instance_var, EasyJWT._private_claims) self.assertTrue(EasyJWT._is_claim(instance_var))
def test_is_claim_private_instance_vars(self): """ Test if private instance variables that are not in the whitelist are claims. Expected Result: `False` """ instance_var = '_not_part_of_the_claim_set' self.assertNotIn(instance_var, EasyJWT._private_claims) self.assertFalse(EasyJWT._is_claim(instance_var))
def test_is_claim_blacklist(self): """ Test if the instance variables in the blacklist are claims. Expected Result: `False` for all variables in the blacklist. """ for instance_var in EasyJWT._public_non_claims: self.assertFalse(EasyJWT._is_claim(instance_var), f'{instance_var} unexpectedly is a claim')
def test_registered_claim_subject(self): """ Test the registered claim ``sub``. Expected Result: The field is an optional claim and correctly mapped to the claim name and vice versa. """ instance_var_name = 'subject' claim_name = 'sub' self.assertTrue(EasyJWT._is_claim(instance_var_name)) self.assertTrue(EasyJWT._is_optional_claim(claim_name)) self.assertEqual(instance_var_name, EasyJWT._map_claim_name_to_instance_var(claim_name)) self.assertEqual( claim_name, EasyJWT._map_instance_var_to_claim_name(instance_var_name))
def test_create_failure_missing_required_claims(self): """ Test creating a token if required claims are empty. Expected Result: An `MissingRequiredClaimsError` error is raised. """ # Unset the claim for the EasyJWT class which is always required. easyjwt = EasyJWT(self.key) easyjwt._easyjwt_class = None self.assertTrue(easyjwt._is_claim('_easyjwt_class')) with self.assertRaises(MissingRequiredClaimsError) as exception_cm: token = easyjwt.create() self.assertIsNone(token) self.assertEqual('Required empty claims: {_easyjwt_class}', str(exception_cm.exception))
def test_verify_failure_invalid_claim_set(self): """ Test verifying a token with unsupported claims. Expected Result: An `InvalidClaimSetError` error is raised. """ easyjwt_creation = EasyJWT(self.key) # Add some claim to the object that is not part of the class. fake_claim = 'part_of_the_claim_set' easyjwt_creation.part_of_the_claim_set = True self.assertTrue(easyjwt_creation._is_claim(fake_claim)) token = easyjwt_creation.create() with self.assertRaises(InvalidClaimSetError) as exception_cm: easyjwt_verification = EasyJWT.verify(token, self.key) self.assertIsNone(easyjwt_verification) self.assertIn(fake_claim, str(exception_cm.exception))