mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-18 21:16:47 +00:00
acd6f1acdf
The Atlas tooltip took both dates from the start dates of every trip with a place in the country. One trip showed the month it began twice, the month it ended never appeared, and a trip only booked could become the last visit of a country already visited. Both now come from the trips that give the country its status, places and bookings alike: the start of the earliest and the end of the latest, with a trip still under way ending today. The optimistic mark on the client clears the dates the same way the server does. The second label rendered the raw key atlas.lastVisitLabel since #1908 removed it from the locales; the strings are back as they were. The month is built from the date's digits now, because a 'YYYY-MM-DD' string parses as UTC and showed the month before anywhere west of Greenwich. Closes #1535
82 lines
3.2 KiB
TypeScript
82 lines
3.2 KiB
TypeScript
/**
|
|
* The First trip / Last trip dates behind the Atlas tooltip (#1535). Pure, so no DB:
|
|
* every case is a set of trips and the status the country ended up with.
|
|
*/
|
|
import { describe, it, expect } from 'vitest';
|
|
|
|
import { countryVisitDates } from '../../../src/nest/atlas/visit-dates';
|
|
|
|
const TODAY = '2026-09-15';
|
|
|
|
describe('countryVisitDates', () => {
|
|
it('ATLAS-DATES-001: a trip over two months keeps both months', () => {
|
|
expect(countryVisitDates([{ start_date: '2025-03-28', end_date: '2025-04-12' }], 'visited', TODAY)).toEqual({
|
|
firstVisit: '2025-03-28',
|
|
lastVisit: '2025-04-12',
|
|
});
|
|
});
|
|
|
|
it('ATLAS-DATES-002: several visited trips span from the earliest start to the latest end', () => {
|
|
const trips = [
|
|
{ start_date: '2024-06-01', end_date: '2024-06-10' },
|
|
{ start_date: '2022-01-05', end_date: '2022-01-20' },
|
|
{ start_date: '2023-07-01', end_date: '2023-07-03' },
|
|
];
|
|
expect(countryVisitDates(trips, 'visited', TODAY)).toEqual({ firstVisit: '2022-01-05', lastVisit: '2024-06-10' });
|
|
});
|
|
|
|
it('ATLAS-DATES-003: a visited country ignores its planned and dateless trips', () => {
|
|
const trips = [
|
|
{ start_date: '2025-05-01', end_date: '2025-05-04' },
|
|
{ start_date: '2027-01-01', end_date: '2027-01-09' },
|
|
{ start_date: null, end_date: null },
|
|
];
|
|
expect(countryVisitDates(trips, 'visited', TODAY)).toEqual({ firstVisit: '2025-05-01', lastVisit: '2025-05-04' });
|
|
});
|
|
|
|
it('ATLAS-DATES-004: a trip still under way ends today', () => {
|
|
expect(countryVisitDates([{ start_date: '2026-09-10', end_date: '2026-09-20' }], 'visited', TODAY)).toEqual({
|
|
firstVisit: '2026-09-10',
|
|
lastVisit: TODAY,
|
|
});
|
|
});
|
|
|
|
it('ATLAS-DATES-005: a planned country keeps its future dates', () => {
|
|
const trips = [
|
|
{ start_date: '2027-03-01', end_date: '2027-03-08' },
|
|
{ start_date: '2026-12-20', end_date: '2026-12-27' },
|
|
];
|
|
expect(countryVisitDates(trips, 'planned', TODAY)).toEqual({ firstVisit: '2026-12-20', lastVisit: '2027-03-08' });
|
|
});
|
|
|
|
it('ATLAS-DATES-006: a trip with one date only starts and ends on it', () => {
|
|
expect(countryVisitDates([{ start_date: '2025-02-02' }], 'visited', TODAY)).toEqual({
|
|
firstVisit: '2025-02-02',
|
|
lastVisit: '2025-02-02',
|
|
});
|
|
expect(countryVisitDates([{ start_date: null, end_date: '2025-02-09' }], 'visited', TODAY)).toEqual({
|
|
firstVisit: '2025-02-09',
|
|
lastVisit: '2025-02-09',
|
|
});
|
|
});
|
|
|
|
it('ATLAS-DATES-007: an end typed before the start does not end the trip before it began', () => {
|
|
expect(countryVisitDates([{ start_date: '2025-02-10', end_date: '2025-02-01' }], 'visited', TODAY)).toEqual({
|
|
firstVisit: '2025-02-10',
|
|
lastVisit: '2025-02-10',
|
|
});
|
|
});
|
|
|
|
it('ATLAS-DATES-008: no matching trip gives no dates', () => {
|
|
expect(countryVisitDates([], 'visited', TODAY)).toEqual({ firstVisit: null, lastVisit: null });
|
|
expect(countryVisitDates([{ start_date: '2027-01-01', end_date: '2027-01-02' }], 'visited', TODAY)).toEqual({
|
|
firstVisit: null,
|
|
lastVisit: null,
|
|
});
|
|
expect(countryVisitDates([{ start_date: null, end_date: null }], 'idea', TODAY)).toEqual({
|
|
firstVisit: null,
|
|
lastVisit: null,
|
|
});
|
|
});
|
|
});
|