chore: establish formatting baseline and verification scripts
This commit is contained in:
+55
-35
@@ -1,47 +1,67 @@
|
||||
import test from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import {createState, purchaseBlocker, priceAt, canAffordAnything, formatClock} from '../src/game-state.js';
|
||||
import {createPayment, beginPayment, readyPayment, swipePayment, cancelPayment} from '../src/payment.js';
|
||||
import {machineById, machines} from '../src/locations.js';
|
||||
import {
|
||||
createState,
|
||||
purchaseBlocker,
|
||||
priceAt,
|
||||
canAffordAnything,
|
||||
formatClock,
|
||||
} from '../src/game-state.js';
|
||||
import {
|
||||
createPayment,
|
||||
beginPayment,
|
||||
readyPayment,
|
||||
swipePayment,
|
||||
cancelPayment,
|
||||
} from '../src/payment.js';
|
||||
import { machineById, machines } from '../src/locations.js';
|
||||
|
||||
const park = machineById('mellat-park'), school = machineById('school-rahil'), uni = machineById('ferdowsi-university');
|
||||
const park = machineById('mellat-park'),
|
||||
school = machineById('school-rahil'),
|
||||
uni = machineById('ferdowsi-university');
|
||||
|
||||
test('Payment charges once, only after ready and an explicit swipe', () => {
|
||||
const state = createState(), payment = createPayment();
|
||||
assert.ok(beginPayment(state, payment, park, 'juice'));
|
||||
assert.equal(state.balance, 500);
|
||||
assert.equal(swipePayment(state, payment), false, 'not ready yet');
|
||||
assert.ok(readyPayment(payment));
|
||||
assert.ok(swipePayment(state, payment));
|
||||
assert.equal(state.balance, 465);
|
||||
assert.equal(swipePayment(state, payment), false, 'no double charge');
|
||||
assert.equal(state.purchases.length, 1);
|
||||
assert.equal(beginPayment(state, createPayment(), park, 'water'), false, 'busy until delivery ends');
|
||||
const state = createState(),
|
||||
payment = createPayment();
|
||||
assert.ok(beginPayment(state, payment, park, 'juice'));
|
||||
assert.equal(state.balance, 500);
|
||||
assert.equal(swipePayment(state, payment), false, 'not ready yet');
|
||||
assert.ok(readyPayment(payment));
|
||||
assert.ok(swipePayment(state, payment));
|
||||
assert.equal(state.balance, 465);
|
||||
assert.equal(swipePayment(state, payment), false, 'no double charge');
|
||||
assert.equal(state.purchases.length, 1);
|
||||
assert.equal(
|
||||
beginPayment(state, createPayment(), park, 'water'),
|
||||
false,
|
||||
'busy until delivery ends',
|
||||
);
|
||||
});
|
||||
|
||||
test('Cancel, closed machines, unknown products and low funds never charge', () => {
|
||||
const state = createState(), payment = createPayment();
|
||||
assert.ok(beginPayment(state, payment, park, 'cake'));
|
||||
assert.ok(cancelPayment(state, payment));
|
||||
assert.equal(state.balance, 500);
|
||||
assert.equal(state.busy, false);
|
||||
assert.equal(purchaseBlocker(state, park, 'not-a-product'), 'unknown');
|
||||
assert.equal(purchaseBlocker(state, school, 'nuts'), 'unknown', 'school does not sell nuts');
|
||||
state.minutes = 14 * 60;
|
||||
assert.equal(purchaseBlocker(state, school, 'water'), 'closed');
|
||||
state.minutes = 9 * 60;
|
||||
state.balance = 10;
|
||||
assert.equal(purchaseBlocker(state, park, 'water'), 'funds');
|
||||
assert.equal(beginPayment(state, payment, park, 'water'), false);
|
||||
const state = createState(),
|
||||
payment = createPayment();
|
||||
assert.ok(beginPayment(state, payment, park, 'cake'));
|
||||
assert.ok(cancelPayment(state, payment));
|
||||
assert.equal(state.balance, 500);
|
||||
assert.equal(state.busy, false);
|
||||
assert.equal(purchaseBlocker(state, park, 'not-a-product'), 'unknown');
|
||||
assert.equal(purchaseBlocker(state, school, 'nuts'), 'unknown', 'school does not sell nuts');
|
||||
state.minutes = 14 * 60;
|
||||
assert.equal(purchaseBlocker(state, school, 'water'), 'closed');
|
||||
state.minutes = 9 * 60;
|
||||
state.balance = 10;
|
||||
assert.equal(purchaseBlocker(state, park, 'water'), 'funds');
|
||||
assert.equal(beginPayment(state, payment, park, 'water'), false);
|
||||
});
|
||||
|
||||
test('Prices follow machine discounts and the clock is Persian', () => {
|
||||
assert.equal(priceAt(uni, 'nuts'), 52);
|
||||
assert.equal(priceAt(park, 'nuts'), 65);
|
||||
assert.equal(formatClock(8 * 60 + 5), '۰۸:۰۵');
|
||||
const state = createState();
|
||||
state.balance = 5;
|
||||
assert.equal(canAffordAnything(state, machines), false);
|
||||
state.balance = 15;
|
||||
assert.ok(canAffordAnything(state, machines));
|
||||
assert.equal(priceAt(uni, 'nuts'), 52);
|
||||
assert.equal(priceAt(park, 'nuts'), 65);
|
||||
assert.equal(formatClock(8 * 60 + 5), '۰۸:۰۵');
|
||||
const state = createState();
|
||||
state.balance = 5;
|
||||
assert.equal(canAffordAnything(state, machines), false);
|
||||
state.balance = 15;
|
||||
assert.ok(canAffordAnything(state, machines));
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user