async def token(form_data: OAuth2PasswordRequestForm = Depends()): username, password = attrgetter("username", "password")(form_data) credentials = Credentials(email=username, password=password) user = await user_service.get_by_credentials(repo, credentials) if not user: raise HTTPException( status_code=401, detail="invalid authentication credentials", ) at, exp_at = auth.encode_token( data={"sub": f"userid:{user.id}", "grant_type": "access"}, expires_delta=timedelta(minutes=access_expire), ) return Token(access_token=at, expire=exp_at)
def test_must_be_secret_str(self, credentials_valid_data): credentials_valid_data.update({"password": ["some string"]}) with pytest.raises(ValidationError) as excinfo: Credentials(**credentials_valid_data) self.assert_validation_error("type_error.str", excinfo)
def test_is_required(self, credentials_valid_data): credentials_valid_data.pop("email") with pytest.raises(ValidationError) as excinfo: Credentials(**credentials_valid_data) self.assert_validation_error("value_error.missing", excinfo)
def test_immutability(self, credentials_valid_data): entity = Credentials(**credentials_valid_data) for key in entity.dict().keys(): with pytest.raises(TypeError): setattr(entity, key, "some value")
def test_invalidation(self, credentials_invalid_data): with pytest.raises(ValidationError): assert Credentials(**credentials_invalid_data)
def test_validation(self, credentials_valid_data): assert Credentials(**credentials_valid_data)
def test_max_length_lte_128(self, credentials_valid_data): credentials_valid_data.update({"password": "******" * 129}) with pytest.raises(ValidationError) as excinfo: Credentials(**credentials_valid_data) self.assert_validation_error("value_error.any_str.max_length", excinfo)