Skip to content

MOSIP-44611 - Move the eSignet API Automation develop code to release-1.8.x branch#1663

Merged
zesu22 merged 1 commit intomosip:release-1.8.xfrom
prathmeshj12:release-1.8.x
Mar 13, 2026
Merged

MOSIP-44611 - Move the eSignet API Automation develop code to release-1.8.x branch#1663
zesu22 merged 1 commit intomosip:release-1.8.xfrom
prathmeshj12:release-1.8.x

Conversation

@prathmeshj12
Copy link
Contributor

@prathmeshj12 prathmeshj12 commented Mar 12, 2026

Move the eSignet API Automation develop code to release-1.8.x branch

Summary by CodeRabbit

  • New Features

    • Added JWT/JWS support for user info endpoint responses
    • Introduced partial OIDC client update capabilities
    • Enhanced token validation with structured payload outputs
  • Improvements

    • Refined test case naming for improved clarity
    • Centralized test dependency management
    • Added support for additional deployment configuration parameters
    • Improved request lifecycle tracking capabilities

…-1.8.x branch

Signed-off-by: Prathmesh Jadhav <prathmesh.j@cyberpwn.com>
@coderabbitai
Copy link

coderabbitai bot commented Mar 12, 2026

Walkthrough

This PR refactors test infrastructure by replacing reflection-based test result manipulation with direct attribute setting, integrating JWT/JWS token handling in test validation, adding inter-dependency generation control via configuration flag, and extensively updating test case metadata with unique identifiers and dependency mappings across YAML configurations and test case interdependency files.

Changes

Cohort / File(s) Summary
Documentation & Configuration
api-test/README.md, api-test/src/main/resources/config/esignet.properties
Updated JAR version handling with wildcard patterns, added deployment configuration parameters for UIN/VID generation delays (600000 ms, max loop count 20).
Core Test Runner
api-test/src/main/java/io/mosip/testrig/apirig/esignet/testrunner/MosipTestRunner.java
Added generateDependency field and conditional logic to control inter-dependency generation; centralized dependency loading into a separate post-run flow gated by configuration flag.
Test Result Handling Refactoring
api-test/src/main/java/io/mosip/testrig/apirig/esignet/testscripts/AddIdentity.java, DeleteWithParam.java, EsignetBioAuth.java, GetWithQueryParam.java, PostWithBodyAndPathParams.java, PostWithBodyAndQueryParamsForAutoGenId.java, PostWithOnlyPathParam.java, PutWithPathParamsAndBody.java, SimplePatchForAutoGenId.java, SimplePost.java, SimplePostForAutoGenIdForUrlEncoded.java
Replaced reflection-based manipulation of TestNG internal TestResult fields with direct result.setAttribute("TestCaseName", testCaseName) calls; removed try-catch blocks and reflective access.
JWT/JWS Token Handling
api-test/src/main/java/io/mosip/testrig/apirig/esignet/testscripts/GetWithParam.java, SimplePostForAutoGenIdForUrlEncoded.java
Added JWT token extraction, decoding, and validation; introduced conditional branches for **IdTokenJWS** test cases; validates decoded payload against expected output.
Conditional ESignet Routing
api-test/src/main/java/io/mosip/testrig/apirig/esignet/testscripts/PatchWithPathParamsAndBody.java
Added conditional logic to route HTTP PATCH requests based on testCaseName; uses bearer-token path for ESignet tests via EsignetConfigManager.
NotificationListener Integration
api-test/src/main/java/io/mosip/testrig/apirig/esignet/testscripts/PostWithAutogenIdWithOtpGenerate.java, PostWithAutogenIdWithOtpGenerateForWla.java, PostWithBodyWithOtpGenerate.java
Added NotificationListener.markRequestStart() calls before OTP processing and markRequestRemove() in cleanup; replaced reflection with attribute-based result naming.
EsignetUtil Enhancements
api-test/src/main/java/io/mosip/testrig/apirig/esignet/utils/EsignetUtil.java
Added new OIDCJWK13/14 constants and RSAKey fields; introduced feature flags (triggerESignetKeyGen37/38); added extractTokensFromResponse() public method for token parsing; expanded test case whitelists and keyword handlers for new JWK placeholders.
Handlebars JWT Templates
api-test/src/main/resources/esignet/.../\*Result.hbs
Replaced empty/simple outputs with JWT header+payload structures (alg: RS256/PS256, aud placeholder); new files added for consent/DPoP/token validation flows.
Test Case YAML Configuration - Identifiers & Dependencies
api-test/src/main/resources/esignet/AuthorizationCode/AuthorizationCode.yml, Consent/AuthenticateUserConsent/AuthenticateUserConsent.yml, Consent/AuthorizationCodeConsent/AuthorizationCodeConsent.yml, Consent/GenerateTokenConsent/GenerateTokenConsent.yml, Consent/OAuthDetailsRequestConsent/OAuthDetailsRequestConsent.yml, OIDCClientV2/OIDCClientV2.yml, GetLinkStatus/GetLinkStatus.yml, LinkedAuthenticationOtp/LinkedAuthenticationOtp.yml, VCI/..., OTPAuthFactorFlow/.../\*
Added uniqueIdentifier and/or additionalDependencies fields to establish explicit test case references and dependency chains; renamed identifiers across E2E flows (appended E2E, E2EMock suffixes); links test prerequisites.
Test Case YAML - Output Format Modernization
api-test/src/main/resources/esignet/GetOidcUserInfo/GetOidcUserInfo.yml, Consent/GetOidcUserInfoConsent/GetOidcUserInfoConsent.yml, DPoP/DPoPGetUserInfo/DPoPGetUserInfo.yml, OTPAuthFactorFlow/VerifiedClaims/Userinfo/GetOidcUserInfo.yml, LinkedConsent/GetOidcUserInfoLinkedConsent/GetOidcUserInfoLinkedConsent.yml
Renamed test keys from **StatusCode** to **GetUserInfoJWS**, replaced plain "200" outputs with JSON aud objects referencing clientId.
Test Case YAML - Identifier Renaming
api-test/src/main/resources/esignet/CreateOIDCClient/CreateOIDCClient.yml, GenerateToken/GenerateToken.yml, OidcClient/OIDCClient.yml, EndToEndFlowWithV3/\*, EndToEndFlowWithV3MOCK/\*
Systematically renamed uniqueIdentifier values: adjusted naming conventions (removed "Smoke", added E2E/E2EMock suffixes, changed prefixes like MOSIPID), affecting test case references across multiple scenarios.
SunBirdRC Integration
api-test/src/main/resources/config/testCaseInterDependency_sunbirdrc.json
Expanded dependency arrays: added TC_ESignet_CreatePolicySunBirdR_01 to OAuthDetailsRequest negative cases; updated AuthorizationCode and GenerateToken dependencies with composite prerequisite chains.
Advanced Scenarios
api-test/src/main/resources/esignet/DifferentScopeLanguageClaimsSce/\*, PAR/\*, DPoP/\*, PartialUpdateOIDCClient.yml/.hbs
Added support for different scope/language/claims, PAR (Pushed Authorization Requests), DPoP flows; new PartialUpdateOIDCClient PATCH templates; updated test identifiers and dependencies across variant flows.
PMS Integration & Policy Management
api-test/src/main/resources/esignet/PmsIntegration/\*, SunBirdR/\*
Added additionalDependencies for certificate uploads, policy creation/deactivation; linked policy search to policy retrieval tests.
TestNG Suite Configuration
api-test/testNgXmlFiles/esignetSuite.xml
Added PartialUpdateOIDCClient test entry with PATCH-based clientId path parameter routing.

Sequence Diagram

sequenceDiagram
    participant Test as Test Runner
    participant Loader as Config Loader
    participant TCS as Test Case Scripts
    participant NL as NotificationListener
    participant EUtil as EsignetUtil
    participant Result as TestNG Result

    Test->>Loader: Read generateDependencyJson flag
    Loader-->>Test: Flag value
    
    alt generateDependency = "yes"
        Test->>TCS: Execute test cases
        TCS->>NL: markRequestStart()
        NL-->>TCS: Request watermarked
        TCS->>EUtil: Extract & decode JWT tokens
        EUtil-->>TCS: Token payload
        TCS->>TCS: Validate payload vs output
        TCS->>Result: setAttribute("TestCaseName", name)
        TCS->>NL: markRequestRemove()
        NL-->>TCS: Watermark cleared
    else generateDependency = "no"
        Test->>Test: Skip inter-dependency generation
    end
    
    Test->>Test: If generateDependency=yes
    Test->>AdminTestUtil: generateTestCaseInterDependencies()
    AdminTestUtil-->>Test: Dependencies created
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • PR #1655: Shares identical MosipTestRunner generateDependency refactoring, JWT token handling in test scripts, NotificationListener integration, and comprehensive YAML dependency/identifier updates across esignet test configurations.
  • PR #1661: Overlapping changes to test-case interdependency JSON mappings and extensive additionalDependencies additions across esignet YAML test entry configurations.

Suggested reviewers

  • mohanachandran-s
  • ase-101
  • zesu22

Poem

🐰 Whiskers twitch as tests now dance,
No more reflections in this glance,
JWTs decoded, tokens bright,
Dependencies woven—what a sight!
Identifiers marked, workflows clear,
A test suite evolved, so shiny here!

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 13

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (5)
api-test/src/main/resources/esignet/LinkedAuthenticationOtp/LinkedAuthenticationOtp.yml (1)

308-308: ⚠️ Potential issue | 🟡 Minor

Typo in outputTemplate value.

The outputTemplate is set to iesignetdp/error but should likely be esignet/error to match all other test cases in this file.

🐛 Proposed fix
-      outputTemplate: iesignetdp/error
+      outputTemplate: esignet/error
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@api-test/src/main/resources/esignet/LinkedAuthenticationOtp/LinkedAuthenticationOtp.yml`
at line 308, The outputTemplate value in LinkedAuthenticationOtp.yml is a typo:
it is set to "iesignetdp/error" but should match the other test cases; update
the outputTemplate key in LinkedAuthenticationOtp.yml (the outputTemplate
property for LinkedAuthenticationOtp) to "esignet/error" so it is consistent
across the file and tests.
api-test/src/main/resources/esignet/LinkedValidateBinding/LinkedValidateBinding.yml (2)

53-61: ⚠️ Potential issue | 🟠 Major

Future_Val_requestTime_Neg is no longer a future-date test.

Line 61 hardcodes 2024-01-16T00:17:54.649Z, which is already in the past as of March 12, 2026. This now overlaps with the past-date negative case instead of exercising the future-timestamp validation path.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@api-test/src/main/resources/esignet/LinkedValidateBinding/LinkedValidateBinding.yml`
around lines 53 - 61, The test case
ESignet_LinkedValidateBinding_Future_Val_requestTime_Neg is using a hardcoded
past timestamp in the requestTime field, so update the input for that test
(ESignet_LinkedValidateBinding_Future_Val_requestTime_Neg) to supply a true
future timestamp — either generate a dynamic future ISO8601 datetime at runtime
or replace the hardcoded value with a far-future constant (e.g., year 2099) so
the test exercises the future-timestamp validation path for the validate-binding
endpoint.

138-157: ⚠️ Potential issue | 🟠 Major

Remove duplicate YAML key—one test case will be silently dropped.

Lines 138 and 155 both define ESignet_LinkedValidateBinding_Invalid_TransactionId_Neg. In YAML, duplicate keys cause the first definition to be overwritten, losing the test case at line 138 along with its uniqueIdentifier: TC_ESignet_LinkedValidateBinding_09.

Rename one of the keys to preserve both test cases. For example, rename the second occurrence at line 155 to ESignet_LinkedValidateBinding_Invalid_TransactionId_Neg_2 or update its uniqueIdentifier to reflect a distinct test case.

Affected code snippet
   ESignet_LinkedValidateBinding_Invalid_TransactionId_Neg:
      endPoint: /v1/esignet/linked-authorization/validate-binding
      uniqueIdentifier: TC_ESignet_LinkedValidateBinding_09
      role: resident
      restMethod: post
      inputTemplate: esignet/LinkedValidateBinding/LinkedValidateBinding
      outputTemplate: esignet/LinkedValidateBinding/LinkedValidateBindingResult
      input: '{
      "requestTime": "$TIMESTAMP$",
    	"TransactionId": "$ef4!",
    	"individualId": ""
      
}'
      output: '{
         
}'

   ESignet_LinkedValidateBinding_Invalid_TransactionId_Neg:
      endPoint: /v1/esignet/linked-authorization/validate-binding
      uniqueIdentifier: TC_ESignet_LinkedValidateBinding_10
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@api-test/src/main/resources/esignet/LinkedValidateBinding/LinkedValidateBinding.yml`
around lines 138 - 157, The YAML contains a duplicated top-level test key
"ESignet_LinkedValidateBinding_Invalid_TransactionId_Neg" which causes one test
to be dropped; rename one of the duplicate keys (for example change the second
occurrence to "ESignet_LinkedValidateBinding_Invalid_TransactionId_Neg_2") and
ensure its uniqueIdentifier (TC_ESignet_LinkedValidateBinding_09 /
TC_ESignet_LinkedValidateBinding_10) remains accurate and distinct so both test
cases are preserved; update any references to that test name if needed.
api-test/src/main/java/io/mosip/testrig/apirig/esignet/testscripts/PostWithBodyAndQueryParamsForAutoGenId.java (1)

145-160: ⚠️ Potential issue | 🔴 Critical

Critical: response is never assigned, causing NullPointerException.

The response field is initialized to null (line 44) and never assigned in the test() method. The authUtil.updatePartnerCertificate() call on line 138 returns a String (stored in str), not a Response object.

This creates multiple crash paths:

  • Line 151: response.getStatusCode() throws NPE when test case name contains "_StatusCode" but does not match "updatePartnerCertificate_StatusCode_" exactly
  • Lines 157, 159: response.asString() and response.getStatusCode() throw NPE when test case name does not contain "_StatusCode" (the else branch)

Only test cases with "updatePartnerCertificate_StatusCode_" in the name will avoid the exception by using hardcoded "200" on line 149.

Either assign response from the API call result or adjust the validation logic to work with the str variable returned from updatePartnerCertificate().

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@api-test/src/main/java/io/mosip/testrig/apirig/esignet/testscripts/PostWithBodyAndQueryParamsForAutoGenId.java`
around lines 145 - 160, The code in test() leaves the Response variable
"response" null because authUtil.updatePartnerCertificate(...) returns a String
stored in "str" instead of a Response, causing NPEs in the branches that call
response.getStatusCode() or response.asString(); fix by replacing or augmenting
the call to authUtil.updatePartnerCertificate(...) so it returns/assigns a
Response (or call the appropriate method that returns a Response) and assign it
to "response" before using it, or alternatively adapt the validation logic (the
block that builds ouputValid and calls customStatusCodeResponse,
OutputValidationUtil.doJsonOutputValidation, getJsonFromTemplate) to use the
String "str" and a derived status code (e.g., parse status from the API wrapper
or set 200 for successful flows) instead of calling response methods; update
references in this method (test(), the ouputValid construction and
customStatusCodeResponse usage) to use the chosen approach consistently.
api-test/src/main/resources/esignet/Consent/OAuthDetailsRequestConsent/OAuthDetailsRequestConsent.yml (1)

137-170: ⚠️ Potential issue | 🟠 Major

Add explicit inline additionalDependencies to both User2 consent test cases to align with neighboring entries.

Both TC_ESignet_OAuthDetailsRequestConsent_06 and TC_ESignet_OAuthDetailsRequestConsent_07 reference a producer via $ID:CreateOIDCClient_Misp_Valid_Smoke_sid_clientId$ but lack the inline additionalDependencies declaration that all neighboring consent cases in this file explicitly define. This creates inconsistency and potential ambiguity since centralized dependency mappings reference different producers. Make dependencies explicit at the test case level to match the established pattern.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@api-test/src/main/resources/esignet/Consent/OAuthDetailsRequestConsent/OAuthDetailsRequestConsent.yml`
around lines 137 - 170, For both test cases
ESignet_OAuthDetailsRequest_Consent_User2_all_Valid_Smoke_sid (uniqueIdentifier
TC_ESignet_OAuthDetailsRequestConsent_06) and
ESignet_OAuthDetailsRequest_Consent_Vid_User2_all_Valid_Smoke_sid
(uniqueIdentifier TC_ESignet_OAuthDetailsRequestConsent_07) add an explicit
inline additionalDependencies block that declares the producer referenced by the
input token $ID:CreateOIDCClient_Misp_Valid_Smoke_sid_clientId$ (i.e., add
additionalDependencies mapping for CreateOIDCClient_Misp_Valid_Smoke_sid so the
test case explicitly depends on the OIDC client producer), matching the pattern
used by adjacent consent entries.
🧹 Nitpick comments (17)
api-test/src/main/resources/esignet/DifferentScopeLanguageClaimsSce/Userinfo/GetOidcUserInfoResult.hbs (1)

1-8: Inconsistent indentation in JSON template.

Line 3 uses a tab while other lines use spaces, and line 4's closing brace lacks indentation. Consider normalizing to 2-space indentation throughout for consistency with similar templates in this PR.

🔧 Suggested formatting fix
 {
   "header": {
-	"alg": "RS256"
-},
+    "alg": "RS256"
+  },
   "payload": {
     "aud": "{{aud}}"
   }
 }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@api-test/src/main/resources/esignet/DifferentScopeLanguageClaimsSce/Userinfo/GetOidcUserInfoResult.hbs`
around lines 1 - 8, The JSON Handlebars template uses a tab on the "alg" line
and misaligned closing braces; normalize indentation to 2 spaces throughout and
replace the tab with two spaces so keys like "header", "alg", "payload", and
"aud" are consistently indented and closing braces align with their opening
braces; update the template in GetOidcUserInfoResult.hbs to use 2-space
indentation for all lines.
api-test/src/main/resources/esignet/CreateOIDCClientV3/CreateOIDCClientV3PublicKeyNegSce.yml (3)

232-277: Test isolation issue: kty is invalid in alg_empty test.

This test is intended to verify that empty alg returns invalid_public_key error, but kty is set to "null" (Line 247), which is also an invalid value. When the test passes, it's unclear whether the error is caused by the empty alg or the invalid kty.

For proper test isolation, use a valid kty value so the error can be attributed specifically to the empty alg.

♻️ Proposed fix for test isolation
-      "kty": "null",
+      "kty": "RSA",
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@api-test/src/main/resources/esignet/CreateOIDCClientV3/CreateOIDCClientV3PublicKeyNegSce.yml`
around lines 232 - 277, The test case
ESignet_CreateOIDCClientV3_alg_empty_Public_Neg currently uses an invalid kty
("null") which confounds the failure cause; update the input for the
ESignet_CreateOIDCClientV3_alg_empty_Public_Neg test to use a valid key type
(e.g., "kty": "RSA") while keeping "alg": "" so the observed invalid_public_key
error can be attributed solely to the empty alg field.

278-323: Test isolation issue: kty is invalid in use_empty test.

Same issue as above - this test validates empty use but kty is set to "null" (Line 293), which is already invalid. The test cannot confirm if the error is due to empty use or invalid kty.

♻️ Proposed fix for test isolation
-      "kty": "null",
+      "kty": "RSA",
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@api-test/src/main/resources/esignet/CreateOIDCClientV3/CreateOIDCClientV3PublicKeyNegSce.yml`
around lines 278 - 323, The test ESignet_CreateOIDCClientV3_use_empty_Public_Neg
is trying to validate an empty "use" but currently sets kty to the invalid
string "null", which confounds the failure cause; update the input payload for
this test so kty is a valid key type (e.g., "RSA" or a valid JWK kty value)
instead of "null" and keep "use": "" unchanged to isolate the empty-use
validation; ensure the JSON field named kty in the test input is corrected in
the CreateOIDCClientV3PublicKeyNegSce template so the only invalid field is use.

186-231: Consider fixing alg value for better test isolation.

This test validates kty: "null" (string) as an invalid value, but alg is also set to "RS" (Line 205), which is an incomplete/invalid algorithm. While the test will still produce the expected error, having two invalid values reduces test precision.

♻️ Proposed fix
-      "alg": "RS",
+      "alg": "RS256",
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@api-test/src/main/resources/esignet/CreateOIDCClientV3/CreateOIDCClientV3PublicKeyNegSce.yml`
around lines 186 - 231, The test case
ESignet_CreateOIDCClientV3_kty_Null_Public_Key_type_Neg currently has two
invalid fields (kty set to "null" and alg set to "RS"); update the request
payload in the input for this case so alg is a valid algorithm (e.g., "RS256")
or remove the alg field entirely so the only invalid value is kty, ensuring the
failure isolates the invalid public key type; locate the input block in
CreateOIDCClientV3PublicKeyNegSce and change the "alg" value accordingly.
api-test/src/main/resources/config/testCaseInterDependency_sunbirdrc.json (1)

2-29: Consider keeping the common OAuth-details prerequisite pair in one place.

The same ["TC_ESignet_CreateOIDCClientV2SunBirdC_01", "TC_ESignet_CreatePolicySunBirdR_01"] tuple is now hand-copied across almost every TC_ESignet_OAuthDetailsRequestSunBirdC* entry. That is easy to drift during future release-branch backports. If these cases always share the same base prerequisites, keep that pair in a single source of truth instead of repeating it per entry.

Based on learnings, these dependencies can be managed either inline in YAML or through this centralized interdependency file.

Also applies to: 31-34, 36-39, 42-45, 50-53, 60-83, 85-98, 127-142, 151-154, 164-167, 176-179, 189-192, 208-219, 227-230

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@api-test/src/main/resources/config/testCaseInterDependency_sunbirdrc.json`
around lines 2 - 29, Several TC_ESignet_OAuthDetailsRequestSunBirdC* entries
repeatedly copy the same prerequisite pair
["TC_ESignet_CreateOIDCClientV2SunBirdC_01",
"TC_ESignet_CreatePolicySunBirdR_01"]; extract that pair into a single reusable
dependency key (e.g., "COMMON_OAUTH_PREREQS") in this interdependency JSON and
replace the repeated arrays in each TC_ESignet_OAuthDetailsRequestSunBirdC_*
entry with a reference to that key (or the equivalent referencing mechanism your
test runner supports), updating the loader/merge logic if necessary so
TC_ESignet_CreateOIDCClientV2SunBirdC_01 and TC_ESignet_CreatePolicySunBirdR_01
are pulled from the single source of truth.
api-test/src/main/java/io/mosip/testrig/apirig/esignet/testscripts/PostWithOnlyPathParam.java (1)

3-3: Consider removing unused imports.

The java.lang.reflect.Field import (line 3) and the TestNG internal imports BaseTestMethod and TestResult (lines 21-22) appear to be unused after switching to setAttribute(). Removing them would clean up the code.

♻️ Suggested cleanup
-import java.lang.reflect.Field;
-import org.testng.internal.BaseTestMethod;
-import org.testng.internal.TestResult;
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@api-test/src/main/java/io/mosip/testrig/apirig/esignet/testscripts/PostWithOnlyPathParam.java`
at line 3, Remove the now-unused imports to clean up PostWithOnlyPathParam:
delete the java.lang.reflect.Field import and the TestNG internal imports
BaseTestMethod and TestResult that remain after switching to setAttribute();
update the imports at the top of the PostWithOnlyPathParam class so only
actually referenced packages remain.
api-test/src/main/java/io/mosip/testrig/apirig/esignet/testscripts/GetWithQueryParam.java (1)

3-3: Consider removing unused imports.

The java.lang.reflect.Field import (line 3) and TestNG internal imports BaseTestMethod, TestResult (lines 21-22) appear unused after the reflection removal.

♻️ Suggested cleanup
-import java.lang.reflect.Field;
-import org.testng.internal.BaseTestMethod;
-import org.testng.internal.TestResult;
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@api-test/src/main/java/io/mosip/testrig/apirig/esignet/testscripts/GetWithQueryParam.java`
at line 3, Remove the now-unused imports introduced for reflection and TestNG
internals: delete the import for java.lang.reflect.Field and the TestNG imports
BaseTestMethod and TestResult (they were added for reflection handling but are
no longer referenced in the GetWithQueryParam class); run an import/compile
check after removal to ensure no remaining references to those symbols.
api-test/src/main/resources/esignet/OTPAuthFactorFlow/VerifiedClaims/Userinfo/GetOidcUserInfoResult.hbs (1)

1-8: Minor: Inconsistent indentation in JSON structure.

The JWT template structure is correct, but has the same inconsistent indentation as the other HBS template—line 3 uses a tab while other lines use spaces.

♻️ Suggested formatting fix
 {
   "header": {
-	"alg": "RS256"
-},
+    "alg": "RS256"
+  },
   "payload": {
     "aud": "{{aud}}"
   }
 }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@api-test/src/main/resources/esignet/OTPAuthFactorFlow/VerifiedClaims/Userinfo/GetOidcUserInfoResult.hbs`
around lines 1 - 8, The JSON in the Handlebars template
GetOidcUserInfoResult.hbs has inconsistent indentation where the "alg": "RS256"
line uses a tab; replace that tab with spaces to match the surrounding
indentation style (use the same number of spaces as other lines) so keys
"header", "alg", "payload", and "aud" align consistently across the template.
api-test/src/main/java/io/mosip/testrig/apirig/esignet/testscripts/PostWithBodyAndQueryParamsForAutoGenId.java (1)

3-3: Consider removing unused imports.

Similar to other refactored test scripts, the java.lang.reflect.Field import (line 3) and TestNG internal imports BaseTestMethod, TestResult (lines 20-21) appear unused after the reflection removal.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@api-test/src/main/java/io/mosip/testrig/apirig/esignet/testscripts/PostWithBodyAndQueryParamsForAutoGenId.java`
at line 3, Remove the now-unused reflection and TestNG internal imports from the
PostWithBodyAndQueryParamsForAutoGenId class: delete the import for
java.lang.reflect.Field and the TestNG internal imports BaseTestMethod and
TestResult so only required imports remain; search for these symbols in the
file's import block and remove them (ensure no remaining references to Field,
BaseTestMethod, or TestResult elsewhere in the class before committing).
api-test/src/main/resources/esignet/OTPAuthFactorFlow/ConsentNoCapture/GenTokenConsentNoCapture/GenTokenConsentNoCaptureResult.hbs (1)

1-8: Minor: Inconsistent indentation in JSON structure.

The template is functionally correct, but the indentation is inconsistent—line 3 uses a tab while lines 5-6 use spaces, and line 4's closing brace alignment differs from the structure.

♻️ Suggested formatting fix
 {
   "header": {
-	"alg": "PS256"
-},
+    "alg": "PS256"
+  },
   "payload": {
     "aud": "{{aud}}"
   }
 }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@api-test/src/main/resources/esignet/OTPAuthFactorFlow/ConsentNoCapture/GenTokenConsentNoCapture/GenTokenConsentNoCaptureResult.hbs`
around lines 1 - 8, The JSON template GenTokenConsentNoCaptureResult.hbs has
inconsistent indentation (a tab before "alg": "PS256" while other lines use
spaces and the closing brace alignment differs); fix by replacing the tab with
the project’s standard spaces and align the closing braces so "alg" sits under
"header" and "aud" under "payload" with consistent indentation (e.g., 2 or 4
spaces) for the "header"/"alg" and "payload"/"aud" blocks.
api-test/src/main/resources/esignet/OTPAuthFactorFlow/WithoutVerifiedClaims/Userinfo/GetOidcUserInfoResult.hbs (1)

1-8: LGTM! JWT structure for user info response is appropriate.

Using RS256 for user info responses is a valid choice. Similar to the other HBS template, there's a minor formatting inconsistency (tabs vs spaces) that could be addressed for consistency.

🔧 Suggested fix for consistent formatting
 {
   "header": {
-	"alg": "RS256"
-},
+    "alg": "RS256"
+  },
   "payload": {
     "aud": "{{aud}}"
   }
 }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@api-test/src/main/resources/esignet/OTPAuthFactorFlow/WithoutVerifiedClaims/Userinfo/GetOidcUserInfoResult.hbs`
around lines 1 - 8, The template GetOidcUserInfoResult.hbs has inconsistent
indentation (mix of tabs and spaces) in the JSON structure (notably around the
"header" block and its "alg" line); normalize indentation across the file by
replacing tabs with the project's standard spaces (e.g., 2 or 4 spaces) so the
"header" and "payload" objects align consistently with the rest of the HBS
templates.
api-test/src/main/resources/esignet/OTPAuthFactorFlow/WithoutVerifiedClaims/GenToken/GenerateTokenResult.hbs (1)

1-8: Minor formatting inconsistency in JSON template.

The indentation is inconsistent - lines 3-4 use tabs while other lines use spaces. This doesn't affect functionality but could improve maintainability.

🔧 Suggested fix for consistent formatting
 {
   "header": {
-	"alg": "PS256"
-},
+    "alg": "PS256"
+  },
   "payload": {
     "aud": "{{aud}}"
   }
 }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@api-test/src/main/resources/esignet/OTPAuthFactorFlow/WithoutVerifiedClaims/GenToken/GenerateTokenResult.hbs`
around lines 1 - 8, The JSON Handlebars template GenerateTokenResult.hbs has
mixed tabs and spaces causing inconsistent indentation; update the file so all
indentation uses spaces (or all tabs) consistently—align the "header", its
"alg": "PS256" entry, and the "payload" block with the same indentation style
and level (ensure lines containing "header", "alg", "payload", and "aud" are
consistently indented) to improve maintainability.
api-test/src/main/java/io/mosip/testrig/apirig/esignet/testscripts/SimplePost.java (1)

3-3: Remove unused imports java.lang.reflect.Field, org.testng.internal.BaseTestMethod, and org.testng.internal.TestResult. These are not referenced anywhere in the file.

🧹 Suggested cleanup
 package io.mosip.testrig.apirig.esignet.testscripts;
 
-import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
-import org.testng.internal.BaseTestMethod;
-import org.testng.internal.TestResult;
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@api-test/src/main/java/io/mosip/testrig/apirig/esignet/testscripts/SimplePost.java`
at line 3, Remove the unused imports from SimplePost: delete the import lines
for java.lang.reflect.Field, org.testng.internal.BaseTestMethod, and
org.testng.internal.TestResult since none of those types are referenced in the
class (look for the import statements at the top of SimplePost and remove them).
api-test/src/main/resources/esignet/OIDCClientV2/OIDCClientV2.yml (1)

33-62: Consider updating descriptions for clarity (optional).

The descriptions for all three test cases are identical: "To create OIDC Client V2 with all valid data". Consider making them more specific:

  • Test 2 (Misp): Could mention it uses a different JWK key ($OIDCJWKKEY3$)
  • Test 3 (NonAuth): Could mention it uses a subset of ACR values (no linked-wallet, knowledge, id-token)

This is purely for maintainability—the tests function correctly as-is.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@api-test/src/main/resources/esignet/OIDCClientV2/OIDCClientV2.yml` around
lines 33 - 62, Descriptions for the OIDC client tests are identical and should
be made more specific for maintainability: update the description field for
ESignet_CreateOIDCClient_Misp_Valid_Smoke_sid to mention it uses the alternative
JWK ($OIDCJWKKEY3$) and update the description for the NonAuth variant (e.g.,
ESignet_CreateOIDCClient_NonAuth_Valid_Smoke_sid) to note it uses a subset of
ACR values (omits linked-wallet, knowledge, id-token); locate and edit the
description fields for these test entries so each clearly states the
distinguishing input differences.
api-test/src/main/java/io/mosip/testrig/apirig/esignet/testscripts/PatchWithPathParamsAndBody.java (1)

101-109: Avoid routing by testcase-name prefix.

This chooses base URL and auth mode from testCaseName.contains("ESignet_"). A rename or a copied testcase without that prefix silently falls back to the cookie flow. An explicit XML/YAML flag would be safer.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@api-test/src/main/java/io/mosip/testrig/apirig/esignet/testscripts/PatchWithPathParamsAndBody.java`
around lines 101 - 109, The code currently chooses between
patchWithPathParamsBodyHeaderWithBearerToken and
patchWithPathParamsBodyAndCookie by checking testCaseName.contains("ESignet_"),
which is fragile; instead add an explicit flag or enum on TestCaseDTO (e.g.,
getAuthMode() or isEsignet()) or a provider field, populate it when parsing the
test case, and branch on that flag; update this block to call
patchWithPathParamsBodyHeaderWithBearerToken(tempUrl +
testCaseDTO.getEndPoint(), ...) when testCaseDTO indicates ESignet/Bearer auth
and otherwise call patchWithPathParamsBodyAndCookie(ApplnURI +
testCaseDTO.getEndPoint(), ...); ensure any test case parser that builds
TestCaseDTO is updated to set the new flag/enum.
api-test/src/main/java/io/mosip/testrig/apirig/esignet/utils/EsignetUtil.java (1)

863-883: Consider data-driving the OIDC JWK slot handling.

Adding key 13/14 required another placeholder branch, constants, fields, flags, and accessors. This pattern is getting expensive to extend and easy to desynchronize; a small keyed resolver would make future additions much safer.

Also applies to: 1852-1869, 1908-2222

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@api-test/src/main/java/io/mosip/testrig/apirig/esignet/utils/EsignetUtil.java`
around lines 863 - 883, The repeated per-slot branches for OIDC JWK placeholders
(e.g., handling "$OIDCJWKKEY13$"/"$OIDCJWKKEY14$" with
gettriggerESignetKeyGen37/38, settriggerESignetKeyGen37/38, OIDCJWK13/14 and
JWKKeyUtil.generateAndCacheEncJWKKey/getJWKKey calls) should be replaced with a
data-driven resolver: create a map/datastructure that binds each placeholder
string to its OIDC key identifier (e.g., OIDCJWK13) and to a single trigger flag
accessor (or a boolean field wrapper) so you can iterate over entries, check
jsonString.contains(placeholder), then if trigger is true call
JWKKeyUtil.generateAndCacheEncJWKKey(id) and clear the trigger, else call
JWKKeyUtil.getJWKKey(id), and finally call replaceKeywordValue(jsonString,
placeholder, jwkKey); update usages (including other duplicated regions) to use
this loop-based resolver instead of duplicating blocks.
api-test/src/main/resources/esignet/LinkedConsent/GetOidcUserInfoLinkedConsent/GetOidcUserInfoLinkedConsent.yml (1)

16-17: Consider adding a blank line between test case entries.

Line 17 immediately follows line 16 without a separating blank line, unlike the spacing convention used in other test YAML files (e.g., GetLinkStatusConsent.yml where entries are separated by blank lines). This is a minor readability/consistency concern.

📝 Suggested formatting fix
       output: '{
         "aud": "$ID:CreateOIDCClient_all_Valid_Smoke_sid_clientId$"
 }'
+
    ESignet_GetOidcUserInfo_LinkedConsent_Vid_IdpAccessToken_GetUserInfoJWS_Valid_Smoke_sid:
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@api-test/src/main/resources/esignet/LinkedConsent/GetOidcUserInfoLinkedConsent/GetOidcUserInfoLinkedConsent.yml`
around lines 16 - 17, Add a blank line between YAML test case entries to match
project spacing conventions: insert a single empty line between the closing '}'
of the previous block and the next test key
ESignet_GetOidcUserInfo_LinkedConsent_Vid_IdpAccessToken_GetUserInfoJWS_Valid_Smoke_sid
so entries are visually separated and consistent with other files like
GetLinkStatusConsent.yml.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@api-test/README.md`:
- Around line 162-166: The README uses a nonstandard glob `**` in the example
java -jar command (the apitest-esignet-**-jar-with-dependencies.jar token);
replace `**` with a single `*` or explicitly document filling in the exact JAR
version so the example becomes apitest-esignet-*-jar-with-dependencies.jar (or
instruct the user to substitute the exact version) to ensure the shell wildcard
works as intended.

In
`@api-test/src/main/java/io/mosip/testrig/apirig/esignet/testrunner/MosipTestRunner.java`:
- Around line 188-191: The dependency-generation call is currently executed
unconditionally and can overwrite the shared dependency JSON after a failed run;
add a success guard so AdminTestUtil.generateTestCaseInterDependencies(...) runs
only when the test run completed without exceptions. Introduce a boolean flag
(e.g., runSuccessful) initialized false, set it true at the normal successful
end of the try block that executes tests, and change the condition to check
runSuccessful && "yes".equalsIgnoreCase(generateDependency) before calling
LOGGER.info and
AdminTestUtil.generateTestCaseInterDependencies(BaseTestCase.getTestCaseInterDependencyPath(EsignetUtil.getPluginName())).
Ensure the flag is not set in catch blocks so failures skip generation.

In
`@api-test/src/main/java/io/mosip/testrig/apirig/esignet/testscripts/GetWithParam.java`:
- Around line 186-190: getJsonFromTemplate is currently called unconditionally
in GetWithParam.java which causes failures for _StatusCode test cases that pass
scalar outputs; move the getJsonFromTemplate(testCaseDTO.getOutput(),
testCaseDTO.getOutputTemplate()) call into the branch that handles
non-_StatusCode cases (i.e., after you check if
testCaseName.contains("_StatusCode") and the _GetUserInfoJWS_ branch), so that
when testCaseName.contains("_StatusCode") you call
customStatusCodeResponse(String.valueOf(response.getStatusCode()),
testCaseDTO.getOutput()) and only in the else branch create outputJson and then
run EsignetUtil.inputstringKeyWordHandeler(outputJson, testCaseName) before
continuing with the existing validation logic.

In
`@api-test/src/main/java/io/mosip/testrig/apirig/esignet/testscripts/SimplePostForAutoGenIdForUrlEncoded.java`:
- Around line 199-205: The test currently decodes the JWT into payloadJson and
passes it directly to GlobalMethods.reportResponse which may leak sensitive
claims; instead, parse payloadJson (using AdminTestUtil.decodeBase64Url output)
and either extract only the specific assertion claims you need (e.g., "sub",
"exp" or whichever are under test) or redact sensitive keys (email, phone, uin,
etc.) before calling GlobalMethods.reportResponse; update the code around
DecodedJWT jwt = JWT.decode(token), headerJson/payloadJson creation and the
GlobalMethods.reportResponse call to supply the sanitized payload.
- Around line 183-219: The code overwrites the ouputValid map for each extracted
JWT so only the last token's validation is considered (and it can remain null if
no tokens exist); change the logic in the EsignetUtil.extractTokensFromResponse
handling to validate each token independently by calling
AdminTestUtil.decodeAndCombineJwt and
OutputValidationUtil.doJsonOutputValidation for every token and
accumulating/merging results into a single ouputValid collection (or
short-circuit and fail on first invalid) before calling Reporter.log and
OutputValidationUtil.publishOutputResult; ensure you still fallback to
validating the full responseBody when there are no tokens. Use the existing
symbols ouputValid, EsignetUtil.extractTokensFromResponse,
AdminTestUtil.decodeAndCombineJwt, OutputValidationUtil.doJsonOutputValidation,
Reporter.log and OutputValidationUtil.publishOutputResult to locate and update
the code.

In
`@api-test/src/main/java/io/mosip/testrig/apirig/esignet/utils/EsignetUtil.java`:
- Around line 2592-2614: The extractTokensFromResponse method currently assumes
responseBody is JSON and calls new JSONObject(...) which can throw
JSONException; wrap the JSON parsing in a try/catch and handle parse failures by
treating compact token bodies as valid tokens: if the raw responseBody looks
like a JWT/JWS/JWE (e.g., contains two '.' separators or matches a simple JWT
regex) or is a non-empty plain token string, return a List containing
responseBody; otherwise rethrow as an AdminTestException (include the original
exception message/cause). Update references in extractTokensFromResponse to
perform the JSON parse inside the try block and to fall back to the
compact-token/plain-token logic in the catch, ensuring all failure paths throw
AdminTestException.

In `@api-test/src/main/resources/config/testCaseInterDependency_sunbirdrc.json`:
- Line 111: The dependency is incorrect: remove the consumer dependency
"TC_ESignet_GetPolicySunBirdR_01" from the "TC_ESignet_SearchPolicySunBirdR_01"
entry and instead reference the producer test that creates policies (replace the
array value with the appropriate producer test case ID that seeds policies,
e.g., the CreatePolicy producer test). Update the mapping for
TC_ESignet_SearchPolicySunBirdR_01 so it depends on the policy producer test
case rather than the GetPolicy consumer to ensure SearchPolicy runs when
policies exist.

In
`@api-test/src/main/resources/esignet/DifferentScopeLanguageClaimsSce/Authenticate/AuthenticateUser.yml`:
- Line 2: The producer scenario
ESignet_OAuthDetailsRequest_DifferScope_V3_AuthToken_Xsrf_sid currently returns
an empty JSON and must be updated so the consumers can resolve
$ID:OAuthDetailsRequest_DifferScope_V3_AuthToken_Xsrf_sid_encodedResp$ and
$ID:OAuthDetailsRequest_DifferScope_V3_AuthToken_Xsrf_sid_transactionId$; modify
that scenario's output template to include populated fields "encodedResp" and
"transactionId" (with realistic sample values or templating that generates
them), or alternatively update the consumer references in AuthCode and
Authenticate to point to a different producer that emits those two fields.

In
`@api-test/src/main/resources/esignet/LinkAuthorizationCode/LinkAuthorizationCode.yml`:
- Line 10: The YAML references under the key additionalDependencies use the old
consent suite IDs TC_ESignet_LinkedAuthorizationConsent_*; update every
occurrence to the renamed IDs TC_ESignet_LinkedAuthConsent_* (e.g., change
additionalDependencies: TC_ESignet_LinkedAuthorizationConsent_01 to
additionalDependencies: TC_ESignet_LinkedAuthConsent_01) so the
LinkAuthorizationCode test cases correctly reference the producer consent flows;
apply the same renaming for all listed occurrences in this file (and any other
LinkAuthorizationCode blocks) to keep producer/consumer dependency sequencing
consistent.

In
`@api-test/src/main/resources/esignet/LinkedAuthenticationOtp/LinkedAuthenticationOtp.yml`:
- Line 454: The uniqueIdentifier value TC_ESignet_LinkedAuthenticationOtp_33
breaks the sequential numbering used by the surrounding test cases (e.g.,
TC_ESignet_LinkedAuthenticationOtp_15 and
TC_ESignet_LinkedAuthenticationOtp_16); update the uniqueIdentifier on the
offending test case to the next sequential ID (e.g.,
TC_ESignet_LinkedAuthenticationOtp_16 or appropriate next number) to restore
ordering, or if 33 is intentional add an inline YAML comment next to
uniqueIdentifier explaining the special numbering rationale so readers and
CI/reporting tools aren’t confused.

In
`@api-test/src/main/resources/esignet/PartialUpdateOIDCClient/PartialUpdateOIDCClient.hbs`:
- Line 5: The template emits encPublicKey raw which breaks JSON for string
inputs; update PartialUpdateOIDCClient.hbs so the encPublicKey field is emitted
as a properly quoted/escaped JSON string (e.g., use a Handlebars string
interpolation or a JSON-stringify helper instead of raw output) so
"encPublicKey" uses the quoted value for the encPublicKey variable rather than
unquoted raw insertion.

In
`@api-test/src/main/resources/esignet/PmsIntegration/UpdatePartnerCertificate/UpdatePartnerCertificate.yml`:
- Line 8: The inline additionalDependencies entry currently lists only
Dependent_Idrepo_uploadCACert_03,Dependent_Idrepo_uploadCACert_04 but must match
the centralized testCaseInterDependency_mosip-id.json which also includes
Dependent_Idrepo_createPartnerSelfRegistration_02 and
Dependent_Idrepo_uploadPartnerCert_02; update the additionalDependencies value
to include all four test IDs
(Dependent_Idrepo_createPartnerSelfRegistration_02,Dependent_Idrepo_uploadPartnerCert_02,Dependent_Idrepo_uploadCACert_03,Dependent_Idrepo_uploadCACert_04)
or remove the additionalDependencies line entirely so the file relies on the
centralized configuration; ensure the final change removes ambiguity about
precedence.

---

Outside diff comments:
In
`@api-test/src/main/java/io/mosip/testrig/apirig/esignet/testscripts/PostWithBodyAndQueryParamsForAutoGenId.java`:
- Around line 145-160: The code in test() leaves the Response variable
"response" null because authUtil.updatePartnerCertificate(...) returns a String
stored in "str" instead of a Response, causing NPEs in the branches that call
response.getStatusCode() or response.asString(); fix by replacing or augmenting
the call to authUtil.updatePartnerCertificate(...) so it returns/assigns a
Response (or call the appropriate method that returns a Response) and assign it
to "response" before using it, or alternatively adapt the validation logic (the
block that builds ouputValid and calls customStatusCodeResponse,
OutputValidationUtil.doJsonOutputValidation, getJsonFromTemplate) to use the
String "str" and a derived status code (e.g., parse status from the API wrapper
or set 200 for successful flows) instead of calling response methods; update
references in this method (test(), the ouputValid construction and
customStatusCodeResponse usage) to use the chosen approach consistently.

In
`@api-test/src/main/resources/esignet/Consent/OAuthDetailsRequestConsent/OAuthDetailsRequestConsent.yml`:
- Around line 137-170: For both test cases
ESignet_OAuthDetailsRequest_Consent_User2_all_Valid_Smoke_sid (uniqueIdentifier
TC_ESignet_OAuthDetailsRequestConsent_06) and
ESignet_OAuthDetailsRequest_Consent_Vid_User2_all_Valid_Smoke_sid
(uniqueIdentifier TC_ESignet_OAuthDetailsRequestConsent_07) add an explicit
inline additionalDependencies block that declares the producer referenced by the
input token $ID:CreateOIDCClient_Misp_Valid_Smoke_sid_clientId$ (i.e., add
additionalDependencies mapping for CreateOIDCClient_Misp_Valid_Smoke_sid so the
test case explicitly depends on the OIDC client producer), matching the pattern
used by adjacent consent entries.

In
`@api-test/src/main/resources/esignet/LinkedAuthenticationOtp/LinkedAuthenticationOtp.yml`:
- Line 308: The outputTemplate value in LinkedAuthenticationOtp.yml is a typo:
it is set to "iesignetdp/error" but should match the other test cases; update
the outputTemplate key in LinkedAuthenticationOtp.yml (the outputTemplate
property for LinkedAuthenticationOtp) to "esignet/error" so it is consistent
across the file and tests.

In
`@api-test/src/main/resources/esignet/LinkedValidateBinding/LinkedValidateBinding.yml`:
- Around line 53-61: The test case
ESignet_LinkedValidateBinding_Future_Val_requestTime_Neg is using a hardcoded
past timestamp in the requestTime field, so update the input for that test
(ESignet_LinkedValidateBinding_Future_Val_requestTime_Neg) to supply a true
future timestamp — either generate a dynamic future ISO8601 datetime at runtime
or replace the hardcoded value with a far-future constant (e.g., year 2099) so
the test exercises the future-timestamp validation path for the validate-binding
endpoint.
- Around line 138-157: The YAML contains a duplicated top-level test key
"ESignet_LinkedValidateBinding_Invalid_TransactionId_Neg" which causes one test
to be dropped; rename one of the duplicate keys (for example change the second
occurrence to "ESignet_LinkedValidateBinding_Invalid_TransactionId_Neg_2") and
ensure its uniqueIdentifier (TC_ESignet_LinkedValidateBinding_09 /
TC_ESignet_LinkedValidateBinding_10) remains accurate and distinct so both test
cases are preserved; update any references to that test name if needed.

---

Nitpick comments:
In
`@api-test/src/main/java/io/mosip/testrig/apirig/esignet/testscripts/GetWithQueryParam.java`:
- Line 3: Remove the now-unused imports introduced for reflection and TestNG
internals: delete the import for java.lang.reflect.Field and the TestNG imports
BaseTestMethod and TestResult (they were added for reflection handling but are
no longer referenced in the GetWithQueryParam class); run an import/compile
check after removal to ensure no remaining references to those symbols.

In
`@api-test/src/main/java/io/mosip/testrig/apirig/esignet/testscripts/PatchWithPathParamsAndBody.java`:
- Around line 101-109: The code currently chooses between
patchWithPathParamsBodyHeaderWithBearerToken and
patchWithPathParamsBodyAndCookie by checking testCaseName.contains("ESignet_"),
which is fragile; instead add an explicit flag or enum on TestCaseDTO (e.g.,
getAuthMode() or isEsignet()) or a provider field, populate it when parsing the
test case, and branch on that flag; update this block to call
patchWithPathParamsBodyHeaderWithBearerToken(tempUrl +
testCaseDTO.getEndPoint(), ...) when testCaseDTO indicates ESignet/Bearer auth
and otherwise call patchWithPathParamsBodyAndCookie(ApplnURI +
testCaseDTO.getEndPoint(), ...); ensure any test case parser that builds
TestCaseDTO is updated to set the new flag/enum.

In
`@api-test/src/main/java/io/mosip/testrig/apirig/esignet/testscripts/PostWithBodyAndQueryParamsForAutoGenId.java`:
- Line 3: Remove the now-unused reflection and TestNG internal imports from the
PostWithBodyAndQueryParamsForAutoGenId class: delete the import for
java.lang.reflect.Field and the TestNG internal imports BaseTestMethod and
TestResult so only required imports remain; search for these symbols in the
file's import block and remove them (ensure no remaining references to Field,
BaseTestMethod, or TestResult elsewhere in the class before committing).

In
`@api-test/src/main/java/io/mosip/testrig/apirig/esignet/testscripts/PostWithOnlyPathParam.java`:
- Line 3: Remove the now-unused imports to clean up PostWithOnlyPathParam:
delete the java.lang.reflect.Field import and the TestNG internal imports
BaseTestMethod and TestResult that remain after switching to setAttribute();
update the imports at the top of the PostWithOnlyPathParam class so only
actually referenced packages remain.

In
`@api-test/src/main/java/io/mosip/testrig/apirig/esignet/testscripts/SimplePost.java`:
- Line 3: Remove the unused imports from SimplePost: delete the import lines for
java.lang.reflect.Field, org.testng.internal.BaseTestMethod, and
org.testng.internal.TestResult since none of those types are referenced in the
class (look for the import statements at the top of SimplePost and remove them).

In
`@api-test/src/main/java/io/mosip/testrig/apirig/esignet/utils/EsignetUtil.java`:
- Around line 863-883: The repeated per-slot branches for OIDC JWK placeholders
(e.g., handling "$OIDCJWKKEY13$"/"$OIDCJWKKEY14$" with
gettriggerESignetKeyGen37/38, settriggerESignetKeyGen37/38, OIDCJWK13/14 and
JWKKeyUtil.generateAndCacheEncJWKKey/getJWKKey calls) should be replaced with a
data-driven resolver: create a map/datastructure that binds each placeholder
string to its OIDC key identifier (e.g., OIDCJWK13) and to a single trigger flag
accessor (or a boolean field wrapper) so you can iterate over entries, check
jsonString.contains(placeholder), then if trigger is true call
JWKKeyUtil.generateAndCacheEncJWKKey(id) and clear the trigger, else call
JWKKeyUtil.getJWKKey(id), and finally call replaceKeywordValue(jsonString,
placeholder, jwkKey); update usages (including other duplicated regions) to use
this loop-based resolver instead of duplicating blocks.

In `@api-test/src/main/resources/config/testCaseInterDependency_sunbirdrc.json`:
- Around line 2-29: Several TC_ESignet_OAuthDetailsRequestSunBirdC* entries
repeatedly copy the same prerequisite pair
["TC_ESignet_CreateOIDCClientV2SunBirdC_01",
"TC_ESignet_CreatePolicySunBirdR_01"]; extract that pair into a single reusable
dependency key (e.g., "COMMON_OAUTH_PREREQS") in this interdependency JSON and
replace the repeated arrays in each TC_ESignet_OAuthDetailsRequestSunBirdC_*
entry with a reference to that key (or the equivalent referencing mechanism your
test runner supports), updating the loader/merge logic if necessary so
TC_ESignet_CreateOIDCClientV2SunBirdC_01 and TC_ESignet_CreatePolicySunBirdR_01
are pulled from the single source of truth.

In
`@api-test/src/main/resources/esignet/CreateOIDCClientV3/CreateOIDCClientV3PublicKeyNegSce.yml`:
- Around line 232-277: The test case
ESignet_CreateOIDCClientV3_alg_empty_Public_Neg currently uses an invalid kty
("null") which confounds the failure cause; update the input for the
ESignet_CreateOIDCClientV3_alg_empty_Public_Neg test to use a valid key type
(e.g., "kty": "RSA") while keeping "alg": "" so the observed invalid_public_key
error can be attributed solely to the empty alg field.
- Around line 278-323: The test ESignet_CreateOIDCClientV3_use_empty_Public_Neg
is trying to validate an empty "use" but currently sets kty to the invalid
string "null", which confounds the failure cause; update the input payload for
this test so kty is a valid key type (e.g., "RSA" or a valid JWK kty value)
instead of "null" and keep "use": "" unchanged to isolate the empty-use
validation; ensure the JSON field named kty in the test input is corrected in
the CreateOIDCClientV3PublicKeyNegSce template so the only invalid field is use.
- Around line 186-231: The test case
ESignet_CreateOIDCClientV3_kty_Null_Public_Key_type_Neg currently has two
invalid fields (kty set to "null" and alg set to "RS"); update the request
payload in the input for this case so alg is a valid algorithm (e.g., "RS256")
or remove the alg field entirely so the only invalid value is kty, ensuring the
failure isolates the invalid public key type; locate the input block in
CreateOIDCClientV3PublicKeyNegSce and change the "alg" value accordingly.

In
`@api-test/src/main/resources/esignet/DifferentScopeLanguageClaimsSce/Userinfo/GetOidcUserInfoResult.hbs`:
- Around line 1-8: The JSON Handlebars template uses a tab on the "alg" line and
misaligned closing braces; normalize indentation to 2 spaces throughout and
replace the tab with two spaces so keys like "header", "alg", "payload", and
"aud" are consistently indented and closing braces align with their opening
braces; update the template in GetOidcUserInfoResult.hbs to use 2-space
indentation for all lines.

In
`@api-test/src/main/resources/esignet/LinkedConsent/GetOidcUserInfoLinkedConsent/GetOidcUserInfoLinkedConsent.yml`:
- Around line 16-17: Add a blank line between YAML test case entries to match
project spacing conventions: insert a single empty line between the closing '}'
of the previous block and the next test key
ESignet_GetOidcUserInfo_LinkedConsent_Vid_IdpAccessToken_GetUserInfoJWS_Valid_Smoke_sid
so entries are visually separated and consistent with other files like
GetLinkStatusConsent.yml.

In `@api-test/src/main/resources/esignet/OIDCClientV2/OIDCClientV2.yml`:
- Around line 33-62: Descriptions for the OIDC client tests are identical and
should be made more specific for maintainability: update the description field
for ESignet_CreateOIDCClient_Misp_Valid_Smoke_sid to mention it uses the
alternative JWK ($OIDCJWKKEY3$) and update the description for the NonAuth
variant (e.g., ESignet_CreateOIDCClient_NonAuth_Valid_Smoke_sid) to note it uses
a subset of ACR values (omits linked-wallet, knowledge, id-token); locate and
edit the description fields for these test entries so each clearly states the
distinguishing input differences.

In
`@api-test/src/main/resources/esignet/OTPAuthFactorFlow/ConsentNoCapture/GenTokenConsentNoCapture/GenTokenConsentNoCaptureResult.hbs`:
- Around line 1-8: The JSON template GenTokenConsentNoCaptureResult.hbs has
inconsistent indentation (a tab before "alg": "PS256" while other lines use
spaces and the closing brace alignment differs); fix by replacing the tab with
the project’s standard spaces and align the closing braces so "alg" sits under
"header" and "aud" under "payload" with consistent indentation (e.g., 2 or 4
spaces) for the "header"/"alg" and "payload"/"aud" blocks.

In
`@api-test/src/main/resources/esignet/OTPAuthFactorFlow/VerifiedClaims/Userinfo/GetOidcUserInfoResult.hbs`:
- Around line 1-8: The JSON in the Handlebars template GetOidcUserInfoResult.hbs
has inconsistent indentation where the "alg": "RS256" line uses a tab; replace
that tab with spaces to match the surrounding indentation style (use the same
number of spaces as other lines) so keys "header", "alg", "payload", and "aud"
align consistently across the template.

In
`@api-test/src/main/resources/esignet/OTPAuthFactorFlow/WithoutVerifiedClaims/GenToken/GenerateTokenResult.hbs`:
- Around line 1-8: The JSON Handlebars template GenerateTokenResult.hbs has
mixed tabs and spaces causing inconsistent indentation; update the file so all
indentation uses spaces (or all tabs) consistently—align the "header", its
"alg": "PS256" entry, and the "payload" block with the same indentation style
and level (ensure lines containing "header", "alg", "payload", and "aud" are
consistently indented) to improve maintainability.

In
`@api-test/src/main/resources/esignet/OTPAuthFactorFlow/WithoutVerifiedClaims/Userinfo/GetOidcUserInfoResult.hbs`:
- Around line 1-8: The template GetOidcUserInfoResult.hbs has inconsistent
indentation (mix of tabs and spaces) in the JSON structure (notably around the
"header" block and its "alg" line); normalize indentation across the file by
replacing tabs with the project's standard spaces (e.g., 2 or 4 spaces) so the
"header" and "payload" objects align consistently with the rest of the HBS
templates.

Copy link
Contributor

@mohanachandran-s mohanachandran-s left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hope POM file for the release branch is updated

Copy link
Contributor

@zesu22 zesu22 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approving because @mohanachandran-s already approved it

@zesu22 zesu22 merged commit 333af2d into mosip:release-1.8.x Mar 13, 2026
25 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants