mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-19 21:46:49 +00:00
77dddd5e8a
Release branch for 4.0.0.
66 lines
2.6 KiB
TypeScript
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('')
|
|
})
|
|
})
|