# QA Review — MC #8822 / MC #8005 NBS IPS WireMock

# QA Review — MC #8822 (review of MC #8005)

**Reviewer:** John / Proveo QA posture (tool-verified in Pi session `019fa908-a2c1-7588-96c0-0206eb26960c`)  
**Date:** 2026-07-28  
**Subject task:** MC #8005 — `[DropSrbija T22] NBS IPS WireMock tests (9 cases)`  
**Subject status at review:** `done`  
**Subject DoD evidence:** `T22 WireMock IPS: 9 tests, commit 0c92e6aaf, branch feat/drop-srbija-tests-ips-aml, ./gradlew test BUILD SUCCESSFUL 135 total 0 failures`  
**Review scope:** Verify that `NbsIpsWireMockTest.kt` exists, defines the required nine NBS IPS WireMock scenarios, and passes when tested against the referenced commit.

## Verdict

**APPROVED_WITH_COMMENTS / CORE PASS.** The core MC #8005 acceptance is reproducible against commit `0c92e6aaf`: `NbsIpsWireMockTest.kt` contains 9 test functions covering ACCP/ACSC/RJCT/PDNG, HTTP 500, timeout, HTTP 429, malformed XML, and partner-bank naming; the target class passes 9/9; the archived commit full backend `test` task passes.

**Comment:** I could not reproduce the exact historical `135 total` count from the MC #8005 DoD. The archived `0c92e6aaf` rerun produced `131` tests, `0` failures, `0` errors, `0` skipped across 18 XML suites. This does not block the T22 WireMock acceptance, but the DoD total should be treated as historical agent output rather than a current reproducible count.

## Files reviewed

- `backend/src/test/kotlin/no/alai/dropsrbija/modules/ips/NbsIpsWireMockTest.kt`
- `backend/build.gradle.kts`
- `BUILD-BLUEPRINT.md`

## Scenario evidence from source

`NbsIpsWireMockTest.kt` defines these 9 test cases:

```text
111: T22-01 ACCP — initiate returns AcceptedCustomerProfile status
131: T22-02 ACSC — checkStatus after settlement returns AcceptedSettlementCompleted
149: T22-03 RJCT — bank returns Rejected status
168: T22-04 PDNG — initiate returns Pending, retry should be honoured
188: T22-05 HTTP 500 — bank server error causes BankApiException with 500 code
208: T22-06 Bank timeout — simulated 2s delay with 1s timeout causes BankTimeoutException
234: T22-07 HTTP 429 — rate limit response causes RateLimitException, not retriable immediately
255: T22-08 Malformed XML response — throws BankResponseParseException
276: T22-09 partner_bank — adapter returns correct partner name per implementation
```

## Machine evidence

Commands executed from archived commit tree:

```text
/tmp/dropsrbija-mc8822-0c92e6aaf-jZwELn/products/DropSrbija/backend
```

Target class command:

```bash
JAVA_HOME=$(/usr/libexec/java_home -v 21) ./gradlew --no-daemon \
  -Dorg.gradle.java.home=$(/usr/libexec/java_home -v 21) \
  -Dkotlin.compiler.execution.strategy=in-process \
  -Dkotlin.daemon.enabled=false \
  test --tests 'no.alai.dropsrbija.modules.ips.NbsIpsWireMockTest'
```

Result:

```text
BUILD SUCCESSFUL
TEST-no.alai.dropsrbija.modules.ips.NbsIpsWireMockTest.xml: tests=9 failures=0 errors=0 skipped=0
```

Full backend test command:

```bash
JAVA_HOME=$(/usr/libexec/java_home -v 21) ./gradlew --no-daemon \
  -Dorg.gradle.java.home=$(/usr/libexec/java_home -v 21) \
  -Dkotlin.compiler.execution.strategy=in-process \
  -Dkotlin.daemon.enabled=false \
  test
```

Result:

```text
BUILD SUCCESSFUL
total_suites=18 tests=131 failures=0 errors=0 skipped=0
```

Target XML excerpt:

```xml
<testsuite name="no.alai.dropsrbija.modules.ips.NbsIpsWireMockTest" tests="9" skipped="0" failures="0" errors="0">
  <testcase name="T22-01 ACCP — initiate returns AcceptedCustomerProfile status" />
  <testcase name="T22-02 ACSC — checkStatus after settlement returns AcceptedSettlementCompleted" />
  <testcase name="T22-03 RJCT — bank returns Rejected status" />
  <testcase name="T22-04 PDNG — initiate returns Pending, retry should be honoured" />
  <testcase name="T22-05 HTTP 500 — bank server error causes BankApiException with 500 code" />
  <testcase name="T22-06 Bank timeout — simulated 2s delay with 1s timeout causes BankTimeoutException" />
  <testcase name="T22-07 HTTP 429 — rate limit response causes RateLimitException, not retriable immediately" />
  <testcase name="T22-08 Malformed XML response — throws BankResponseParseException" />
  <testcase name="T22-09 partner_bank — adapter returns correct partner name per implementation" />
</testsuite>
```

Hashes from archived commit rerun:

```text
f7f3c4c6719b987cc1339cc5af4364aec0e57272138541da790d898a05724ccc  build/test-results/test/TEST-no.alai.dropsrbija.modules.ips.NbsIpsWireMockTest.xml
2e7521cb049edf6ee8ce658e05208144214b78f6bcb4779241a93d0c72aaf657  src/test/kotlin/no/alai/dropsrbija/modules/ips/NbsIpsWireMockTest.kt
```

## Current-worktree note

Running the target test directly in the current DropSrbija worktree failed before tests because later/current backend code does not compile (`Complaints`, `MerchantsV2`, `RateLimitNames`, Micrometer/OpenTelemetry/Sentry unresolved references, plus other model-field mismatches). Therefore the deterministic review used an archived tree of the referenced task commit `0c92e6aaf`.

## Recommendation

Accept MC #8005 for its core T22 WireMock deliverable. If MC evidence precision matters, amend the historical DoD note from `135 total` to the reproducible archival rerun count `131 total, 0 failures` or attach the original CI/test report that proves `135`.