Annisa Nurul Islami

Home/QA case studies/3 of 6

Top Up e-Money Bundling AXA Mandiri

Bundled feature integrating e-Money top-up with AXA Mandiri insurance, allowing customers to reload e-Money balance and access insurance benefits in a single flow. Requires validation across two external service providers.

4 sample test cases2 pass2 fail3 bugs found

Note: all test cases and bug reports in this portfolio are illustrative samples reconstructed from memory after leaving Bank Mandiri. Original documents were stored in Jira, accessible only via the internal Bank Mandiri network. Feature names, flows, and defect types reflect actual work performed; sensitive internal data has been anonymized.

Sample test cases

Four cases across the top-up flow and the AXA endpoint.

Scroll the table sideways to see every column.

TC IDStatusTest scenarioTest stepsExpected resultActual resultPriority
TC-EMX-01PASSTop-up e-Money Rp 100.000 with AXA insurance bundled
  1. Navigate to e-Money Top Up
  2. Enter Rp 100.000
  3. Observe AXA insurance bundle offer
  4. Accept bundle
  5. Confirm top-up
e-Money balance +Rp 100.000; AXA insurance activated; both records saved in DBe-Money balance updated correctly; AXA insurance record saved successfullyHigh
TC-EMX-02FAILData mismatch between e-Money balance on UI and database
  1. Complete top-up of Rp 200.000
  2. Check balance on app
  3. Query e-money_balance table in DBeaver
UI balance matches database value exactlyUI shows Rp 200.000 increase but DB only updated by Rp 100.000High
TC-EMX-03PASSTop-up with restricted account status
  1. Set account status to Restricted
  2. Attempt e-Money top-up
  3. Observe result screen
Error: account restricted, transaction blocked with clear messageError message displayed correctlyHigh
TC-EMX-04FAILAXA insurance endpoint returns wrong error code on timeout
  1. Simulate AXA API timeout via Postman
  2. Observe error response
API returns 504 Gateway Timeout with appropriate error messageAPI returns 200 OK with null insurance data instead of timeout errorHigh

Bugs found

Three sample bug reports, as written for the development team.

BUG-EMX-01Severity high

e-Money balance data mismatch: UI shows +Rp200K but DB only updated by Rp100K

Steps to reproduce

  1. Top-up Rp 200.000
  2. Compare UI balance vs DB query on e_money_balance table

ExpectedDB balance matches UI exactly.

ActualDB balance difference of Rp 100.000 from UI displayed amount.

Priority: High

BUG-EMX-02Severity high

AXA API returns 200 OK on timeout instead of 504 Gateway Timeout

Steps to reproduce

  1. Simulate AXA timeout via Postman mock
  2. Check response code and body

Expected504 with TIMEOUT error code.

Actual200 OK with null insurance_data field, causing silent failure.

Priority: High

BUG-EMX-03Severity low

AXA insurance bundle UI element misaligned on smaller Android screens

Steps to reproduce

  1. Open top-up flow on device with 5-inch screen
  2. Observe AXA bundle offer section

ExpectedAXA bundle section fully visible and aligned.

ActualAXA bundle CTA button partially cut off below screen fold.

Priority: Low

SQL and JQL

One query to validate the data, one to track the defects.

SQL · data validation (SQLite)
SELECT account_id, balance, updated_at
FROM e_money_balance
WHERE account_id = '1023456789'
ORDER BY updated_at DESC
LIMIT 1;

Used to confirm BUG-EMX-01: the database balance reflected only a Rp 100.000 increase while the app UI displayed a Rp 200.000 increase after top-up, revealing a frontend-backend data mismatch.

JQL · bug tracking
project = "LIVIN"
AND component = "e-Money AXA"
AND issuetype = Bug
AND status IN ("Open", "In Progress", "Reopened")
ORDER BY priority DESC, created ASC

Surfaces open defects for the e-Money/AXA bundling feature, useful for coordinating fixes that span both internal systems and AXA's external API.

About the SQL. The query is an illustrative example reconstructed to show the type of database validation performed during testing. Table and column names have been generalized and anonymized and do not reflect the actual production schema. It uses SQLite syntax as a lightweight, portable reference; the same logic applies on MySQL or PostgreSQL with minor syntax adjustments.

About the JQL. It uses Jira's real query language and reflects the kind of filter commonly used for defect tracking. The project key ("LIVIN") and component name are illustrative. JQL filters and sorts issues; for counts by status or component, the filter is combined with Jira's "Group By" option or a dashboard gadget.