I think the real problem is that the coupon amount is stored in a session variable.
When testing something like coupons where values are stored in sessions, you need to be careful to make sure the session is cleared between tests.
the coupon doe not get cleared when the the user logs out, it gets cleared either when the order goes through or the browser is completely closed.