1414//! Get available project scopes.
1515
1616use axum:: { extract:: State , response:: IntoResponse } ;
17- use mockall_double:: double;
1817use serde_json:: Value ;
1918use std:: collections:: HashSet ;
2019
@@ -25,8 +24,6 @@ use crate::assignment::{
2524 types:: { AssignmentType , RoleAssignmentListParameters } ,
2625} ;
2726use crate :: keystone:: ServiceState ;
28- #[ double]
29- use crate :: policy:: Policy ;
3027use crate :: resource:: { ResourceApi , types:: ProjectListParameters } ;
3128
3229/// Get available project scopes.
@@ -44,14 +41,14 @@ use crate::resource::{ResourceApi, types::ProjectListParameters};
4441#[ tracing:: instrument(
4542 name = "api::v3::auth::project::list" ,
4643 level = "debug" ,
47- skip( state, user_auth, policy )
44+ skip( state, user_auth)
4845) ]
4946pub ( super ) async fn list (
5047 Auth ( user_auth) : Auth ,
51- policy : Policy ,
5248 State ( state) : State < ServiceState > ,
5349) -> Result < impl IntoResponse , KeystoneApiError > {
54- policy
50+ state
51+ . policy_enforcer
5552 . enforce ( "identity/auth/project/list" , & user_auth, Value :: Null , None )
5653 . await ?;
5754
@@ -105,78 +102,22 @@ mod tests {
105102 http:: { Request , StatusCode } ,
106103 } ;
107104 use http_body_util:: BodyExt ; // for `collect`
108- use sea_orm:: DatabaseConnection ;
109105 use std:: collections:: HashSet ;
110- use std:: sync:: Arc ;
111106 use tower:: ServiceExt ; // for `call`, `oneshot`, and `ready`
112107 use tower_http:: trace:: TraceLayer ;
113108
109+ use crate :: api:: tests:: get_mocked_state;
114110 use crate :: api:: v3:: project:: types:: ProjectShort ;
115111 use crate :: assignment:: { MockAssignmentProvider , types:: * } ;
116- use crate :: config:: Config ;
117- use crate :: keystone:: { Service , ServiceState } ;
118- use crate :: policy:: { MockPolicy , MockPolicyFactory , PolicyError , PolicyEvaluationResult } ;
119- use crate :: provider:: { Provider , ProviderBuilder } ;
112+ use crate :: provider:: Provider ;
120113 use crate :: resource:: {
121114 MockResourceProvider ,
122115 types:: { Project as ProviderProject , ProjectListParameters } ,
123116 } ;
124- use crate :: token:: { MockTokenProvider , Token , UnscopedPayload } ;
125117
126118 use super :: super :: openapi_router;
127119 use super :: * ;
128120
129- pub ( super ) fn get_mocked_state (
130- provider_builder : ProviderBuilder ,
131- policy_allowed : bool ,
132- ) -> ServiceState {
133- let mut token_mock = MockTokenProvider :: default ( ) ;
134- token_mock. expect_validate_token ( ) . returning ( |_, _, _, _| {
135- Ok ( Token :: Unscoped ( UnscopedPayload {
136- user_id : "bar" . into ( ) ,
137- ..Default :: default ( )
138- } ) )
139- } ) ;
140- token_mock
141- . expect_expand_token_information ( )
142- . returning ( |_, _| {
143- Ok ( Token :: Unscoped ( UnscopedPayload {
144- user_id : "bar" . into ( ) ,
145- ..Default :: default ( )
146- } ) )
147- } ) ;
148-
149- let provider = provider_builder. token ( token_mock) . build ( ) . unwrap ( ) ;
150-
151- let mut policy_factory_mock = MockPolicyFactory :: default ( ) ;
152- if policy_allowed {
153- policy_factory_mock. expect_instantiate ( ) . returning ( move || {
154- let mut policy_mock = MockPolicy :: default ( ) ;
155- policy_mock
156- . expect_enforce ( )
157- . returning ( |_, _, _, _| Ok ( PolicyEvaluationResult :: allowed ( ) ) ) ;
158- Ok ( policy_mock)
159- } ) ;
160- } else {
161- policy_factory_mock. expect_instantiate ( ) . returning ( || {
162- let mut policy_mock = MockPolicy :: default ( ) ;
163- policy_mock. expect_enforce ( ) . returning ( |_, _, _, _| {
164- Err ( PolicyError :: Forbidden ( PolicyEvaluationResult :: forbidden ( ) ) )
165- } ) ;
166- Ok ( policy_mock)
167- } ) ;
168- }
169- Arc :: new (
170- Service :: new (
171- Config :: default ( ) ,
172- DatabaseConnection :: Disconnected ,
173- provider,
174- policy_factory_mock,
175- )
176- . unwrap ( ) ,
177- )
178- }
179-
180121 #[ tokio:: test]
181122 async fn test_list ( ) {
182123 let mut assignment_mock = MockAssignmentProvider :: default ( ) ;
@@ -255,7 +196,7 @@ mod tests {
255196 let provider_builder = Provider :: mocked_builder ( )
256197 . assignment ( assignment_mock)
257198 . resource ( resource_mock) ;
258- let state = get_mocked_state ( provider_builder, true ) ;
199+ let state = get_mocked_state ( provider_builder, true , None , None ) ;
259200
260201 let mut api = openapi_router ( )
261202 . layer ( TraceLayer :: new_for_http ( ) )
0 commit comments