Versie 0.2.0
This commit is contained in:
commit
e77d8fd373
495 files changed
+81026
No files matched your search
@@ -0,0 +1,75 @@
|
||||
// Generated, do not edit. sha256:415ae19f3cfe2e0ac5a4506d3d7d7f1611e2eb531e32c2abb96255b051ae85dd
|
||||
import { describe, it } from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
|
||||
import { durationParts, exchangeStatus, localClock, wallToInstant } from '../../client/widgets/exchange-times.js';
|
||||
import { CLOCKS } from '../../shared/config.js';
|
||||
|
||||
const NYSE = CLOCKS.EXCHANGES.find(e => e.key === 'nyse');
|
||||
const TSE = CLOCKS.EXCHANGES.find(e => e.key === 'tse');
|
||||
const iso = (d) => d.toISOString().slice(0, 16);
|
||||
const at = (s) => new Date(`${s}:00Z`);
|
||||
|
||||
describe('wallToInstant', () => {
|
||||
it('rekent de muurtijd van een zone om naar een tijdstip, met en zonder zomertijd', () => {
|
||||
assert.equal(iso(wallToInstant('America/New_York', 2026, 3, 2, 9, 30)), '2026-03-02T14:30', 'EST, UTC-5');
|
||||
assert.equal(iso(wallToInstant('America/New_York', 2026, 3, 16, 9, 30)), '2026-03-16T13:30', 'EDT, UTC-4');
|
||||
assert.equal(iso(wallToInstant('Asia/Tokyo', 2026, 7, 1, 9, 0)), '2026-07-01T00:00', 'Tokio kent geen zomertijd');
|
||||
});
|
||||
});
|
||||
|
||||
describe('exchangeStatus', () => {
|
||||
it('is dicht vóór de opening en noemt het tijdstip', () => {
|
||||
const s = exchangeStatus(NYSE, at('2026-03-16T13:00'));
|
||||
assert.equal(s.isOpen, false);
|
||||
assert.equal(iso(s.opensAt), '2026-03-16T13:30');
|
||||
});
|
||||
|
||||
it('is open tijdens de sessie en noemt opening en sluiting', () => {
|
||||
const s = exchangeStatus(NYSE, at('2026-03-16T15:00'));
|
||||
assert.equal(s.isOpen, true);
|
||||
assert.equal(iso(s.openedAt), '2026-03-16T13:30');
|
||||
assert.equal(iso(s.closesAt), '2026-03-16T20:00');
|
||||
assert.equal(s.opensAt, null);
|
||||
});
|
||||
|
||||
it('springt na de sluiting op vrijdag en in het weekend naar maandag', () => {
|
||||
assert.equal(iso(exchangeStatus(NYSE, at('2026-03-20T21:00')).opensAt), '2026-03-23T13:30', 'vrijdag na de sluiting');
|
||||
assert.equal(iso(exchangeStatus(NYSE, at('2026-03-21T15:00')).opensAt), '2026-03-23T13:30', 'zaterdag');
|
||||
});
|
||||
|
||||
it('neemt de kalenderdag van de BEURS en niet die van UTC', () => {
|
||||
const s = exchangeStatus(TSE, at('2026-03-15T21:00'));
|
||||
assert.equal(s.isOpen, false);
|
||||
assert.equal(iso(s.opensAt), '2026-03-16T00:00');
|
||||
});
|
||||
});
|
||||
|
||||
describe('localClock: de opening in een andere zone, per dag omgerekend', () => {
|
||||
it('zet New York in Amsterdam op 15:30, behalve in de weken dat alleen de VS al zomertijd heeft', () => {
|
||||
const nu = at('2026-01-01T00:00');
|
||||
const ams = (instant) => localClock(instant, nu, 'Europe/Amsterdam').time;
|
||||
assert.equal(ams(exchangeStatus(NYSE, at('2026-03-02T12:00')).opensAt), '15:30', 'begin maart: allebei wintertijd');
|
||||
assert.equal(ams(exchangeStatus(NYSE, at('2026-03-16T12:00')).opensAt), '14:30', 'half maart: alleen de VS op zomertijd');
|
||||
assert.equal(ams(exchangeStatus(NYSE, at('2026-04-06T12:00')).opensAt), '15:30', 'april: allebei zomertijd');
|
||||
});
|
||||
|
||||
it('zegt of het tijdstip op een andere dag valt, met de weekdag erbij', () => {
|
||||
const nu = at('2026-03-21T15:00');
|
||||
const c = localClock(exchangeStatus(NYSE, nu).opensAt, nu, 'Europe/Amsterdam');
|
||||
assert.equal(c.otherDay, true);
|
||||
assert.match(c.weekday, /^ma/);
|
||||
assert.equal(localClock(at('2026-03-21T16:00'), nu, 'Europe/Amsterdam').otherDay, false);
|
||||
});
|
||||
});
|
||||
|
||||
describe('durationParts', () => {
|
||||
it('kiest de eenheid naar de lengte, en rondt naar boven af op de minuut', () => {
|
||||
const m = (n) => n * 60 * 1000;
|
||||
assert.deepEqual(durationParts(30 * 1000), { unit: 'min', n: 1 }, 'nooit "0 min" zolang hij dicht is');
|
||||
assert.deepEqual(durationParts(m(40)), { unit: 'min', n: 40 });
|
||||
assert.deepEqual(durationParts(m(100)), { unit: 'hourMin', n: 1, m: 40 }, '"1 uur" voor 1:40 zou misleiden');
|
||||
assert.deepEqual(durationParts(m(200)), { unit: 'hours', n: 3 });
|
||||
assert.deepEqual(durationParts(m(26 * 60)), { unit: 'days', n: 1 });
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user