Files
TREK/client/tests/unit/studio/entryText.test.ts
T
jubnl 77dddd5e8a v4.0.0 (#1719)
Release branch for 4.0.0.
2026-08-27 13:22:39 +02:00

66 lines
2.6 KiB
TypeScript

import { describe, it, expect } from 'vitest'
import { formatBookCoords, formatBookDate } from '../../../src/components/Studio/entryText'
/**
* The strings a journal entry lends to a page (#1973).
*
* These are pinned rather than sampled, because three call sites have to agree
* on them character for character: the chip that places a mark, the template
* filler that fills one that was drawn, and the resolver that re-reads it when
* the book is opened. If the chip and the resolver ever disagree by a space,
* opening a book rewrites the element and the autosave writes it back, which
* looks like a book that edits itself.
*
* The degrees form is also the one already printed by the auto layout and by
* the Travel panel, so changing it here changes what is on pages people have
* already made.
*/
describe('coordinates', () => {
it('sets degrees, minutes and seconds with a hemisphere letter', () => {
expect(formatBookCoords(52.5163, 13.3777)).toBe(`52° 30' 59" N 13° 22' 40" E`)
})
it('says south and west rather than using a minus sign', () => {
// A printed page has no room for a sign somebody has to decode, and the
// letter is unambiguous in a way -33.8688 is not.
expect(formatBookCoords(-33.8688, -70.6693)).toBe(`33° 52' 8" S 70° 40' 9" W`)
})
it('sets the decimal form to four places, which is about eleven metres', () => {
expect(formatBookCoords(52.5163, 13.3777, 'decimal')).toBe('52.5163° N 13.3777° E')
})
it('keeps the hemisphere letter in the decimal form too', () => {
expect(formatBookCoords(-33.8688, -70.6693, 'decimal')).toBe('33.8688° S 70.6693° W')
})
it('defaults to degrees, which is what the rest of Studio prints', () => {
expect(formatBookCoords(10, 20)).toBe(formatBookCoords(10, 20, 'dms'))
})
})
describe('the entry date', () => {
it('spells the month out, in the app language', () => {
expect(formatBookDate('2026-06-12', 'de-DE')).toBe('12. Juni 2026')
expect(formatBookDate('2026-06-12', 'en-GB')).toBe('12 June 2026')
})
/*
* Local midnight, not UTC. The date on an entry is the day the writer had,
* and reading it as an instant moves it backwards for everyone west of
* Greenwich, which is a photo book dated the day before the photographs.
*/
it('reads the day as a day rather than as a moment in time', () => {
expect(formatBookDate('2026-01-01', 'en-GB')).toBe('1 January 2026')
})
it('gives nothing back for an entry with no date', () => {
expect(formatBookDate(null, 'en-GB')).toBe('')
})
it('gives nothing back rather than printing Invalid Date', () => {
expect(formatBookDate('not-a-date', 'en-GB')).toBe('')
})
})