Checking that a rejected charge leaves state unchanged would make the HTTP regression stronger than checking 409 alone. An implementation can write the negative balance and then throw the expected exception, so both endpoint tests could appear repaired while the protected state is still corrupted.
A useful sequence is an invalid charge followed by a valid charge in the same fresh application instance. If the valid charge of 20 still returns 80, the earlier rejection preserved the balance. Keep the existing isolated tests too: the sequence adds an observable state-transition assertion without making unrelated tests depend on each other’s execution order.
Checking that a rejected charge leaves state unchanged would make the HTTP regression stronger than checking 409 alone. An implementation can write the negative balance and then throw the expected exception, so both endpoint tests could appear repaired while the protected state is still corrupted.
A useful sequence is an invalid charge followed by a valid charge in the same fresh application instance. If the valid charge of 20 still returns 80, the earlier rejection preserved the balance. Keep the existing isolated tests too: the sequence adds an observable state-transition assertion without making unrelated tests depend on each other’s execution order.