import assert from 'node:assert/strict' import test from 'node:test' import { ApiNetworkError, StaleSessionError } from '../src/api/errors' import { invalidateSession } from '../src/api/authSession' import { bindMeMutationApply, resetMeMutationQueueForTests, runMeMutation } from '../src/api/meMutationQueue' import { clonePlan, initialPlan, revisedPlan } from '../src/modules/gold-land/financial-goal/goalMath' test('changing the later rate does not change the initial snapshot', () => { const initial = initialPlan(30, 120, 15, 30, 10) assert.equal(initial.weeks, 6) assert.equal(initial.remaining, 90) const snapshot = clonePlan(15) const later = revisedPlan(30, 120, snapshot, 5, 20) assert.equal(snapshot, 15) assert.equal(later.balanceAfterTwo, 50) assert.equal(later.totalWeeks, 2 + Math.ceil(70 / 20)) const paused = revisedPlan(30, 120, snapshot, 0, 15) assert.equal(paused.balanceAfterTwo, 45) assert.equal(snapshot, 15) }) test('review and a failed submit keep the chosen plan', async () => { let answers = { 'q-left': '120' } answers = { ...answers, 'q-left': '90' } const plan = clonePlan({ initialWeekly: 15, exceptionWeekly: 5, continueWeekly: 15 }) resetMeMutationQueueForTests() let applied = 0 bindMeMutationApply(() => { applied += 1 return true }) await assert.rejects(() => runMeMutation(async () => { throw new ApiNetworkError() }), ApiNetworkError) await assert.rejects(() => runMeMutation(async () => { invalidateSession() return { me: { user: { coins: 1 } } } }), StaleSessionError) assert.equal(applied, 0) assert.equal(answers['q-left'], '90') assert.equal(plan.exceptionWeekly, 5) })