Skip to content

Commit ee62e0e

Browse files
committed
Added: api-bearer-auth-use-shib-user-on-id-match unit test case
1 parent db2d36d commit ee62e0e

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

src/test/java/edu/harvard/iq/dataverse/authorization/AuthenticationServiceBeanTest.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import edu.harvard.iq.dataverse.authorization.providers.oauth2.OAuth2Exception;
99
import edu.harvard.iq.dataverse.authorization.providers.oauth2.OAuth2UserRecord;
1010
import edu.harvard.iq.dataverse.authorization.providers.oauth2.oidc.OIDCAuthProvider;
11+
import edu.harvard.iq.dataverse.authorization.providers.shib.ShibAuthenticationProvider;
1112
import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser;
1213
import edu.harvard.iq.dataverse.authorization.users.User;
1314
import edu.harvard.iq.dataverse.settings.JvmSettings;
@@ -176,13 +177,47 @@ void testLookupUserByOIDCBearerToken_oneProvider_validToken_userIsPresentAsBuilt
176177
assertEquals("testUsername", userIdCaptor.getAllValues().get(0));
177178
}
178179

180+
@Test
181+
@JvmSetting(key = JvmSettings.FEATURE_FLAG, value = "true", varArgs = "api-bearer-auth-use-shib-user-on-id-match")
182+
void testLookupUserByOIDCBearerToken_oneProvider_validToken_userIsPresentAsShibboleth_useShibUserOnIdMatchFeatureFlagEnabled() throws ParseException, IOException, AuthorizationException, OAuth2Exception {
183+
// Given a single OIDC provider that returns a valid user identifier
184+
setUpOIDCProviderWhichValidatesToken(true);
185+
186+
// Spy on the SUT to verify method calls
187+
AuthenticationServiceBean spySut = Mockito.spy(sut);
188+
189+
// Setting up an authenticated user is found
190+
AuthenticatedUser authenticatedUser = setupAuthenticatedUserByAuthPrvIDQueryWithResult(new AuthenticatedUser());
191+
192+
// When invoking lookupUserByOIDCBearerToken
193+
User actualUser = spySut.lookupUserByOIDCBearerToken(TEST_BEARER_TOKEN);
194+
195+
// Then the actual user should match the expected authenticated user
196+
assertEquals(authenticatedUser, actualUser);
197+
198+
// Capture calls to lookupUser
199+
ArgumentCaptor<String> providerIdCaptor = ArgumentCaptor.forClass(String.class);
200+
ArgumentCaptor<String> userIdCaptor = ArgumentCaptor.forClass(String.class);
201+
202+
// Ensure lookupUser is called once
203+
Mockito.verify(spySut, Mockito.times(1)).lookupUser(providerIdCaptor.capture(), userIdCaptor.capture());
204+
205+
// Assert that lookupUser is called with expected parameters
206+
assertEquals(ShibAuthenticationProvider.PROVIDER_ID, providerIdCaptor.getAllValues().get(0));
207+
assertEquals("testIdp|testPersistentId", userIdCaptor.getAllValues().get(0));
208+
}
209+
179210
private void setupAuthenticatedUserQueryWithNoResult() {
180211
TypedQuery<AuthenticatedUserLookup> queryStub = Mockito.mock(TypedQuery.class);
181212
Mockito.when(queryStub.getSingleResult()).thenThrow(new NoResultException());
182213
Mockito.when(sut.em.createNamedQuery("AuthenticatedUserLookup.findByAuthPrvID_PersUserId", AuthenticatedUserLookup.class)).thenReturn(queryStub);
183214
}
184215

185216
private void setUpOIDCProviderWhichValidatesToken() throws ParseException, IOException, OAuth2Exception {
217+
setUpOIDCProviderWhichValidatesToken(false);
218+
}
219+
220+
private void setUpOIDCProviderWhichValidatesToken(boolean includeShibAttributes) throws ParseException, IOException, OAuth2Exception {
186221
OIDCAuthProvider oidcAuthProviderStub = stubOIDCAuthProvider("OIDC");
187222

188223
BearerAccessToken token = BearerAccessToken.parse(TEST_BEARER_TOKEN);
@@ -193,6 +228,13 @@ private void setUpOIDCProviderWhichValidatesToken() throws ParseException, IOExc
193228

194229
// Stub OAuth2UserRecord and its associated UserRecordIdentifier
195230
OAuth2UserRecord oAuth2UserRecordStub = Mockito.mock(OAuth2UserRecord.class);
231+
232+
if (includeShibAttributes) {
233+
Mockito.when(oAuth2UserRecordStub.hasShibAttributes()).thenReturn(true);
234+
Mockito.when(oAuth2UserRecordStub.getShibIdp()).thenReturn("testIdp");
235+
Mockito.when(oAuth2UserRecordStub.getShibUniquePersistentIdentifier()).thenReturn("testPersistentId");
236+
}
237+
196238
UserRecordIdentifier userRecordIdentifierStub = Mockito.mock(UserRecordIdentifier.class);
197239
Mockito.when(userRecordIdentifierStub.getUserIdInRepo()).thenReturn("testUserId");
198240
Mockito.when(userRecordIdentifierStub.getUserRepoId()).thenReturn("testRepoId");
@@ -203,6 +245,7 @@ private void setUpOIDCProviderWhichValidatesToken() throws ParseException, IOExc
203245
Mockito.when(oidcAuthProviderStub.getUserRecord(userInfoStub)).thenReturn(oAuth2UserRecordStub);
204246
}
205247

248+
206249
private OIDCAuthProvider stubOIDCAuthProvider(String providerID) {
207250
OIDCAuthProvider oidcAuthProviderStub = Mockito.mock(OIDCAuthProvider.class);
208251
Mockito.when(oidcAuthProviderStub.getId()).thenReturn(providerID);

0 commit comments

Comments
 (0)