55import org .junit .jupiter .api .Test ;
66import org .junit .jupiter .api .extension .ExtendWith ;
77import org .junit .jupiter .params .ParameterizedTest ;
8- import org .junit .jupiter .params .provider .CsvSource ;
98import org .junit .jupiter .params .provider .NullAndEmptySource ;
10- import org .junit .jupiter .params .provider .NullSource ;
119import org .junit .jupiter .params .provider .ValueSource ;
1210import org .mockito .Mock ;
1311import org .mockito .junit .jupiter .MockitoExtension ;
1412import uk .gov .di .ipv .cri .common .library .domain .personidentity .PersonIdentityDetailed ;
1513import uk .gov .di .ipv .cri .common .library .service .ConfigurationService ;
16- import uk .org .webcompere .systemstubs .environment .EnvironmentVariables ;
17- import uk .org .webcompere .systemstubs .jupiter .SystemStub ;
1814import uk .org .webcompere .systemstubs .jupiter .SystemStubsExtension ;
1915
2016import java .text .ParseException ;
2622import java .util .Map ;
2723import java .util .UUID ;
2824
29- import static com .nimbusds .jwt .JWTClaimNames .EXPIRATION_TIME ;
3025import static com .nimbusds .jwt .JWTClaimNames .NOT_BEFORE ;
3126import static org .junit .jupiter .api .Assertions .assertArrayEquals ;
3227import static org .junit .jupiter .api .Assertions .assertEquals ;
3732import static org .junit .jupiter .api .Assertions .assertTrue ;
3833import static org .mockito .Mockito .mock ;
3934import static org .mockito .Mockito .when ;
40- import static uk .gov .di .ipv .cri .common .library .util .VerifiableCredentialClaimsSetBuilder .ENV_VAR_FEATURE_FLAG_VC_CONTAINS_UNIQUE_ID ;
41- import static uk .gov .di .ipv .cri .common .library .util .VerifiableCredentialClaimsSetBuilder .ENV_VAR_FEATURE_FLAG_VC_EXPIRY_REMOVED ;
4235
4336@ ExtendWith (MockitoExtension .class )
4437@ ExtendWith (SystemStubsExtension .class )
@@ -49,21 +42,13 @@ class VerifiableCredentialClaimsSetBuilderTest {
4942 private static final PersonIdentityDetailed TEST_PERSON_IDENTITY =
5043 mock (PersonIdentityDetailed .class );
5144
52- // Needs to be created here
53- @ SystemStub private EnvironmentVariables environmentVariables = new EnvironmentVariables ();
54-
5545 @ Mock private ConfigurationService mockConfigurationService ;
5646 private Clock clock ;
5747 private VerifiableCredentialClaimsSetBuilder builder ;
5848
5949 @ BeforeEach
6050 void setup () {
6151 clock = Clock .fixed (Instant .parse ("2016-11-03T10:15:30Z" ), ZoneId .of ("UTC" ));
62-
63- // Defaults
64- environmentVariables .set (ENV_VAR_FEATURE_FLAG_VC_EXPIRY_REMOVED , null );
65- environmentVariables .set (ENV_VAR_FEATURE_FLAG_VC_CONTAINS_UNIQUE_ID , null );
66-
6752 builder = new VerifiableCredentialClaimsSetBuilder (mockConfigurationService , clock );
6853 }
6954
@@ -92,9 +77,6 @@ void shouldBuildVerifiableCredentialWhenVcExpiryRemovedReleaseFlagIsNotSpecified
9277 assertEquals (TEST_SUBJECT , builtClaimSet .getSubject ());
9378 assertEquals (TEST_ISSUER , builtClaimSet .getIssuer ());
9479 assertEquals (this .clock .instant ().getEpochSecond (), builtClaimSet .getLongClaim (NOT_BEFORE ));
95- assertTrue (
96- builtClaimSet .getLongClaim (EXPIRATION_TIME )
97- > this .clock .instant ().getEpochSecond ());
9880 assertEquals (
9981 TEST_PERSON_IDENTITY ,
10082 builtClaimSet .getJSONObjectClaim ("vc" ).get ("credentialSubject" ));
@@ -106,13 +88,8 @@ void shouldBuildVerifiableCredentialWhenVcExpiryRemovedReleaseFlagIsNotSpecified
10688 }
10789
10890 @ ParameterizedTest
109- @ NullSource
11091 @ ValueSource (strings = {"" , " " , "false" , "anything" })
111- void shouldBuildVerifiableCredential (String expiryRemovedReleasedFlagValue )
112- throws ParseException {
113-
114- environmentVariables .set (
115- ENV_VAR_FEATURE_FLAG_VC_EXPIRY_REMOVED , expiryRemovedReleasedFlagValue );
92+ void shouldBuildVerifiableCredential () throws ParseException {
11693 builder = new VerifiableCredentialClaimsSetBuilder (mockConfigurationService , clock );
11794
11895 String [] testContexts = new String [] {"context1" , "context2" };
@@ -137,9 +114,6 @@ void shouldBuildVerifiableCredential(String expiryRemovedReleasedFlagValue)
137114 assertEquals (TEST_SUBJECT , builtClaimSet .getSubject ());
138115 assertEquals (TEST_ISSUER , builtClaimSet .getIssuer ());
139116 assertEquals (this .clock .instant ().getEpochSecond (), builtClaimSet .getLongClaim (NOT_BEFORE ));
140- assertTrue (
141- builtClaimSet .getLongClaim (EXPIRATION_TIME )
142- > this .clock .instant ().getEpochSecond ());
143117 assertEquals (
144118 TEST_PERSON_IDENTITY ,
145119 builtClaimSet .getJSONObjectClaim ("vc" ).get ("credentialSubject" ));
@@ -154,7 +128,6 @@ void shouldBuildVerifiableCredential(String expiryRemovedReleasedFlagValue)
154128 void shouldBuildVerifiableCredentialWithoutAnExpiryTime () throws ParseException {
155129 String [] testContexts = new String [] {"context1" , "context2" };
156130
157- environmentVariables .set (ENV_VAR_FEATURE_FLAG_VC_EXPIRY_REMOVED , true );
158131 builder = new VerifiableCredentialClaimsSetBuilder (mockConfigurationService , clock );
159132
160133 Map <String , String > evidence =
@@ -185,58 +158,10 @@ void shouldBuildVerifiableCredentialWithoutAnExpiryTime() throws ParseException
185158 (String []) builtClaimSet .getJSONObjectClaim ("vc" ).get ("type" ));
186159 assertEquals (testContexts , builtClaimSet .getJSONObjectClaim ("vc" ).get ("@context" ));
187160 assertEquals (evidence , builtClaimSet .getJSONObjectClaim ("vc" ).get ("evidence" ));
188-
189- assertNull (builtClaimSet .getLongClaim (EXPIRATION_TIME ));
190- }
191-
192- @ Test
193- void shouldOverrideJtiWhenContainUniqueIdIsFalse () {
194- environmentVariables .set (ENV_VAR_FEATURE_FLAG_VC_CONTAINS_UNIQUE_ID , "override" );
195- when (mockConfigurationService .getVerifiableCredentialIssuer ()).thenReturn (TEST_ISSUER );
196-
197- var claimsSetBuilder =
198- new VerifiableCredentialClaimsSetBuilder (mockConfigurationService , clock )
199- .subject (TEST_SUBJECT )
200- .timeToLive (1L , ChronoUnit .MONTHS )
201- .verifiableCredentialType (TEST_VC_TYPE )
202- .verifiableCredentialSubject (TEST_PERSON_IDENTITY );
203-
204- var originalBuilder = claimsSetBuilder .build ();
205-
206- claimsSetBuilder .overrideJti ("dummyJti" );
207- claimsSetBuilder .build ();
208-
209- assertNotEquals (originalBuilder .getJWTID (), claimsSetBuilder .build ().getJWTID ());
210- assertEquals (null , originalBuilder .getJWTID ());
211-
212- assertEquals ("dummyJti" , claimsSetBuilder .build ().getJWTID ());
213- }
214-
215- @ Test
216- void cannotOverrideJtiWhenContainUniqueIdIsFalse () {
217- environmentVariables .set (ENV_VAR_FEATURE_FLAG_VC_CONTAINS_UNIQUE_ID , false );
218- when (mockConfigurationService .getVerifiableCredentialIssuer ()).thenReturn (TEST_ISSUER );
219-
220- var claimsSetBuilder =
221- new VerifiableCredentialClaimsSetBuilder (mockConfigurationService , clock )
222- .subject (TEST_SUBJECT )
223- .timeToLive (1L , ChronoUnit .MONTHS )
224- .verifiableCredentialType (TEST_VC_TYPE )
225- .verifiableCredentialSubject (TEST_PERSON_IDENTITY );
226-
227- var originalBuilder = claimsSetBuilder .build ();
228-
229- claimsSetBuilder .overrideJti ("dummyJti" );
230- claimsSetBuilder .build ();
231-
232- assertNull (claimsSetBuilder .build ().getJWTID ());
233- assertEquals (null , originalBuilder .getJWTID ());
234- assertEquals (null , claimsSetBuilder .build ().getJWTID ());
235161 }
236162
237163 @ Test
238- void cannotOverrideJtiWhenContainUniqueIdIsTrue () {
239- environmentVariables .set (ENV_VAR_FEATURE_FLAG_VC_CONTAINS_UNIQUE_ID , true );
164+ void cannotOverrideJtiWhenContainUniqueIdIsDefaultedToTrue () {
240165 when (mockConfigurationService .getVerifiableCredentialIssuer ()).thenReturn (TEST_ISSUER );
241166
242167 var claimsSetBuilder =
@@ -258,13 +183,10 @@ void cannotOverrideJtiWhenContainUniqueIdIsTrue() {
258183 }
259184
260185 @ ParameterizedTest
261- @ NullSource
262186 @ ValueSource (strings = {"" , " " , "false" , "anything" })
263- void shouldBuildVerifiableCredentialWhenVcContainsUniqueIdReleaseFlagIsNotSpecified (
264- String expiryRemovedReleasedFlagValue ) throws ParseException {
187+ void shouldBuildVerifiableCredentialWhenVcContainsUniqueIdReleaseFlagIsNotSpecified ()
188+ throws ParseException {
265189
266- environmentVariables .set (
267- ENV_VAR_FEATURE_FLAG_VC_EXPIRY_REMOVED , expiryRemovedReleasedFlagValue );
268190 builder = new VerifiableCredentialClaimsSetBuilder (mockConfigurationService , clock );
269191
270192 String [] testContexts = new String [] {"context1" , "context2" };
@@ -286,9 +208,6 @@ void shouldBuildVerifiableCredentialWhenVcContainsUniqueIdReleaseFlagIsNotSpecif
286208 assertEquals (TEST_SUBJECT , builtClaimSet .getSubject ());
287209 assertEquals (TEST_ISSUER , builtClaimSet .getIssuer ());
288210 assertEquals (this .clock .instant ().getEpochSecond (), builtClaimSet .getLongClaim (NOT_BEFORE ));
289- assertTrue (
290- builtClaimSet .getLongClaim (EXPIRATION_TIME )
291- > this .clock .instant ().getEpochSecond ());
292211 assertEquals (
293212 TEST_PERSON_IDENTITY ,
294213 builtClaimSet .getJSONObjectClaim ("vc" ).get ("credentialSubject" ));
@@ -300,14 +219,9 @@ void shouldBuildVerifiableCredentialWhenVcContainsUniqueIdReleaseFlagIsNotSpecif
300219 }
301220
302221 @ ParameterizedTest
303- @ NullSource
304222 @ ValueSource (strings = {"" , " " , "false" , "anything" })
305- void shouldBuildVerifiableCredentialWhenVcContainsUniqueIdReleaseFlagIsSpecified (
306- String expiryRemovedReleasedFlagValue ) throws ParseException {
223+ void shouldBuildVerifiableCredentialWithoutFeatureFlags () throws ParseException {
307224
308- environmentVariables .set (
309- ENV_VAR_FEATURE_FLAG_VC_EXPIRY_REMOVED , expiryRemovedReleasedFlagValue );
310- environmentVariables .set (ENV_VAR_FEATURE_FLAG_VC_CONTAINS_UNIQUE_ID , true );
311225 builder = new VerifiableCredentialClaimsSetBuilder (mockConfigurationService , clock );
312226
313227 String [] testContexts = new String [] {"context1" , "context2" };
@@ -328,9 +242,6 @@ void shouldBuildVerifiableCredentialWhenVcContainsUniqueIdReleaseFlagIsSpecified
328242 assertEquals (TEST_SUBJECT , builtClaimSet .getSubject ());
329243 assertEquals (TEST_ISSUER , builtClaimSet .getIssuer ());
330244 assertEquals (this .clock .instant ().getEpochSecond (), builtClaimSet .getLongClaim (NOT_BEFORE ));
331- assertTrue (
332- builtClaimSet .getLongClaim (EXPIRATION_TIME )
333- > this .clock .instant ().getEpochSecond ());
334245 assertEquals (
335246 TEST_PERSON_IDENTITY ,
336247 builtClaimSet .getJSONObjectClaim ("vc" ).get ("credentialSubject" ));
@@ -372,9 +283,6 @@ void shouldBuildVerifiableCredentialWithoutContextAndEvidence() throws ParseExce
372283 assertEquals (TEST_SUBJECT , builtClaimSet .getSubject ());
373284 assertEquals (TEST_ISSUER , builtClaimSet .getIssuer ());
374285 assertEquals (this .clock .instant ().getEpochSecond (), builtClaimSet .getLongClaim (NOT_BEFORE ));
375- assertTrue (
376- builtClaimSet .getLongClaim (EXPIRATION_TIME )
377- > this .clock .instant ().getEpochSecond ());
378286 assertEquals (
379287 TEST_PERSON_IDENTITY ,
380288 builtClaimSet .getJSONObjectClaim ("vc" ).get ("credentialSubject" ));
@@ -386,33 +294,6 @@ void shouldBuildVerifiableCredentialWithoutContextAndEvidence() throws ParseExce
386294 assertNull (builtClaimSet .getJSONObjectClaim ("vc" ).get ("evidence" ));
387295 }
388296
389- @ ParameterizedTest
390- @ CsvSource ({
391- "66,SECONDS,2016-11-03T10:16:36Z" ,
392- "30,MINUTES,2016-11-03T10:45:30Z" ,
393- "4,HOURS,2016-11-03T14:15:30Z" ,
394- "2,DAYS,2016-11-05T10:15:30Z" ,
395- "1,MONTHS,2016-12-03T10:15:30Z" ,
396- "2,YEARS,2018-11-03T10:15:30Z"
397- })
398- void shouldBuildVerifiableCredentialWithAppropriateExpirationTime (
399- long ttl , ChronoUnit ttlUnit , String expectedExpirationTime ) throws ParseException {
400-
401- when (mockConfigurationService .getVerifiableCredentialIssuer ()).thenReturn (TEST_ISSUER );
402-
403- JWTClaimsSet builtClaimSet =
404- this .builder
405- .subject (TEST_SUBJECT )
406- .timeToLive (ttl , ttlUnit )
407- .verifiableCredentialType (TEST_VC_TYPE )
408- .verifiableCredentialSubject (TEST_PERSON_IDENTITY )
409- .build ();
410-
411- assertEquals (
412- builtClaimSet .getLongClaim (EXPIRATION_TIME ),
413- Instant .parse (expectedExpirationTime ).getEpochSecond ());
414- }
415-
416297 @ Test
417298 void shouldThrowErrorWhenVerifiableCredentialTypeNotSet () {
418299 IllegalStateException thrownException =
@@ -533,18 +414,4 @@ void shouldThrowErrorWhenNullVerifiableCredentialEvidenceSupplied() {
533414 () -> this .builder .verifiableCredentialEvidence (null ));
534415 assertEquals ("evidence must not be null" , thrownException .getMessage ());
535416 }
536-
537- @ Test
538- void shouldThrowErrorWhenInvalidTimeToLiveUnitSupplied () {
539- when (mockConfigurationService .getVerifiableCredentialIssuer ()).thenReturn (TEST_ISSUER );
540- this .builder
541- .subject (TEST_SUBJECT )
542- .timeToLive (5L , ChronoUnit .MILLIS )
543- .verifiableCredentialType (TEST_VC_TYPE )
544- .verifiableCredentialSubject (TEST_PERSON_IDENTITY );
545- IllegalStateException thrownException =
546- assertThrows (IllegalStateException .class , () -> this .builder .build ());
547- assertEquals (
548- "Unexpected time-to-live unit encountered: Millis" , thrownException .getMessage ());
549- }
550417}
0 commit comments