Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
/**
* @jest-environment jsdom
*/
import React from 'react';
import { render } from '@testing-library/react';
import { SurveyTask } from '@careevolution/mydatahelps-js';
import SingleSurveyTask from '../../../../src/components/presentational/SingleSurveyTask/SingleSurveyTask';

// The helpers barrel pulls in langchain, which needs TextEncoder (absent from jsdom).
jest.mock('../../../../src/helpers/AIAssistant', () => ({}));
jest.mock('../../../../src/assets/greenCheck.svg', () => 'greenCheck.svg');

describe('SingleSurveyTask Component Tests', () => {
const now = new Date(2026, 9, 1, 16, 0);

beforeEach(() => {
jest.useFakeTimers();
jest.setSystemTime(now);
});

afterEach(() => {
jest.useRealTimers();
});

const renderDueDate = (dueDate: Date, preciseDueDate?: boolean): string => {
const task = {
surveyDisplayName: 'Survey Name',
status: 'incomplete',
dueDate: dueDate.toISOString(),
preciseDueDate
} as SurveyTask;
const { container } = render(<SingleSurveyTask task={task} onClick={() => { }} />);
return container.querySelector('.due-date')?.textContent ?? '';
};

describe('Day-granular due dates', () => {
it('Should show Due Today for a legacy task due earlier today.', () => {
expect(renderDueDate(new Date(2026, 9, 1, 14, 37))).toBe('Due Today');
});

it('Should show Due Tomorrow without a time for a legacy task due tomorrow.', () => {
expect(renderDueDate(new Date(2026, 9, 2, 10, 15))).toBe('Due Tomorrow');
});

it('Should show Due Today when preciseDueDate is false.', () => {
expect(renderDueDate(new Date(2026, 9, 1, 14, 37), false)).toBe('Due Today');
});
});

describe('Precise due dates', () => {
it('Should show Overdue for a task due earlier today.', () => {
expect(renderDueDate(new Date(2026, 9, 1, 14, 0), true)).toBe('Overdue');
});

it('Should show Due Today with the time for a task due later today.', () => {
expect(renderDueDate(new Date(2026, 9, 1, 18, 30), true)).toBe('Due Today at 6:30 PM');
});

it('Should show Due Tomorrow with the time for a task due tomorrow.', () => {
expect(renderDueDate(new Date(2026, 9, 2, 9, 0), true)).toBe('Due Tomorrow at 9:00 AM');
});
});
});
31 changes: 30 additions & 1 deletion __tests__/helpers/locale/date-helpers.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import { toDate, daysInMonth, getDayOfWeek, getDayOfWeekLetter,
getAbbreviatedDayOfWeek, getDayAndDateAndTimeString, getFullDayAndDateString,
getFullDateString, getLongDateString, getShortDateString, getShortestDateString,
getMonthName, getAbbreviatedMonthName, getTimeFromNowString,
getMonthName, getAbbreviatedMonthName, getTimeFromNowString, getStrictTimeFromNowString,
getRelativeDateString, getTimeOfDayString, getShortTimeOfDayString, getDayOfMonth } from '../../../src/helpers/date-helpers';
import { describe, it } from '@jest/globals';

Expand Down Expand Up @@ -244,6 +244,35 @@ describe('Date Helper Tests', () => {
});
});

describe('getStrictTimeFromNowString', () => {
const now = new Date(2026, 9, 1, 16, 0);

beforeEach(() => {
jest.useFakeTimers();
jest.setSystemTime(now);
});

afterEach(() => {
jest.useRealTimers();
});

it('Should return an English strict time string in hours.', () => {
mockMDHLanguage = "en";
const result = getStrictTimeFromNowString(new Date(now.getTime() + 3 * 60 * 60 * 1000));
expect(result).toBe("3 hours");
});
it('Should return an English strict time string in minutes.', () => {
mockMDHLanguage = "en";
const result = getStrictTimeFromNowString(new Date(now.getTime() + 45 * 60 * 1000));
expect(result).toBe("45 minutes");
});
it('Should return a localized strict time string.', () => {
mockMDHLanguage = "de-DE";
const result = getStrictTimeFromNowString(new Date(now.getTime() + 24 * 60 * 60 * 1000));
expect(result).toBe("1 Tag");
});
});

describe('getRelativeDateString', () => {
it('Should return an English time string.', () => {
mockMDHLanguage = "en";
Expand Down
2 changes: 2 additions & 0 deletions locales/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -430,7 +430,9 @@
"due": "Fällig",
"due-in": "Fällig in",
"due-today": "Heute fällig",
"due-today-with-time": "Heute fällig um {time}",
"due-tomorrow": "Morgen fällig",
"due-tomorrow-with-time": "Morgen fällig um {time}",
"edit": "Bearbeiten",
"ehr-intro-search": "Suchen Sie, indem Sie den Namen Ihres Anbieters oder des Mitgliederportals für Ihren Gesundheitsdienstleister oder Ihre Krankenkasse eingeben.",
"elevated-heart-rate-time": "Zeit mit erhöhter Herzfrequenz",
Expand Down
2 changes: 2 additions & 0 deletions locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -430,7 +430,9 @@
"due": "Due",
"due-in": "Due in",
"due-today": "Due Today",
"due-today-with-time": "Due Today at {time}",
"due-tomorrow": "Due Tomorrow",
"due-tomorrow-with-time": "Due Tomorrow at {time}",
"edit": "Edit",
"ehr-intro-search": "Search by entering the name of your provider or member portal for your healthcare provider or health plan.",
"elevated-heart-rate-time": "Elevated Heart Rate Time",
Expand Down
2 changes: 2 additions & 0 deletions locales/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -430,7 +430,9 @@
"due": "Vence",
"due-in": "Vencido en",
"due-today": "Vence hoy",
"due-today-with-time": "Vence hoy a las {time}",
"due-tomorrow": "Vence mañana",
"due-tomorrow-with-time": "Vence mañana a las {time}",
"edit": "Editar",
"ehr-intro-search": "Busca ingresando el nombre de tu proveedor o portal de miembros de tu proveedor de atención médica o plan de salud.",
"elevated-heart-rate-time": "Tiempo con Frecuencia Cardíaca Elevada",
Expand Down
2 changes: 2 additions & 0 deletions locales/fil.json
Original file line number Diff line number Diff line change
Expand Up @@ -430,7 +430,9 @@
"due": "Dapat",
"due-in": "Dapat sa loob ng",
"due-today": "Dapat Ngayon",
"due-today-with-time": "Dapat Ngayon nang {time}",
"due-tomorrow": "Dapat Bukas",
"due-tomorrow-with-time": "Dapat Bukas nang {time}",
"edit": "I-edit",
"ehr-intro-search": "Maghanap sa pamamagitan ng paglalagay ng pangalan ng iyong provider o member portal para sa iyong healthcare provider o health plan.",
"elevated-heart-rate-time": "Oras ng Mataas na Heart Rate",
Expand Down
2 changes: 2 additions & 0 deletions locales/fr-CA.json
Original file line number Diff line number Diff line change
Expand Up @@ -430,7 +430,9 @@
"due": "À faire",
"due-in": "À faire dans",
"due-today": "À faire aujourd'hui",
"due-today-with-time": "À faire aujourd'hui à {time}",
"due-tomorrow": "À faire demain",
"due-tomorrow-with-time": "À faire demain à {time}",
"edit": "Modifier",
"ehr-intro-search": "Recherchez en saisissant le nom de votre fournisseur ou le portail membre pour votre fournisseur de soins de santé ou régime de santé.",
"elevated-heart-rate-time": "Temps de fréquence cardiaque élevée",
Expand Down
2 changes: 2 additions & 0 deletions locales/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -430,7 +430,9 @@
"due": "À faire",
"due-in": "À faire dans",
"due-today": "À faire aujourd'hui",
"due-today-with-time": "À faire aujourd'hui à {time}",
"due-tomorrow": "À faire demain",
"due-tomorrow-with-time": "À faire demain à {time}",
"edit": "Éditer",
"ehr-intro-search": "Recherchez en entrant le nom de votre prestataire ou du portail des membres de votre prestataire de soins de santé ou de votre mutuelle.",
"elevated-heart-rate-time": "Temps avec Fréquence Cardiaque Élevée",
Expand Down
2 changes: 2 additions & 0 deletions locales/it.json
Original file line number Diff line number Diff line change
Expand Up @@ -430,7 +430,9 @@
"due": "Scadenza",
"due-in": "Scadenza tra",
"due-today": "Scadenza oggi",
"due-today-with-time": "Scadenza oggi alle {time}",
"due-tomorrow": "Scadenza domani",
"due-tomorrow-with-time": "Scadenza domani alle {time}",
"edit": "Modificare",
"ehr-intro-search": "Cerca inserendo il nome del tuo medico o del portale per i membri del tuo fornitore di assistenza sanitaria o del tuo piano sanitario.",
"elevated-heart-rate-time": "Tempo con Frequenza Cardiaca Elevata",
Expand Down
2 changes: 2 additions & 0 deletions locales/nl.json
Original file line number Diff line number Diff line change
Expand Up @@ -430,7 +430,9 @@
"due": "Vervallen",
"due-in": "Vervalt over",
"due-today": "Vandaag vervallen",
"due-today-with-time": "Vandaag vervallen om {time}",
"due-tomorrow": "Morgen vervallen",
"due-tomorrow-with-time": "Morgen vervallen om {time}",
"edit": "Bewerken",
"ehr-intro-search": "Zoek door de naam van uw zorgverlener of ledenportaal voor uw zorgverlener of zorgverzekeraar in te voeren.",
"elevated-heart-rate-time": "Tijd met Verhoogde Hartslag",
Expand Down
2 changes: 2 additions & 0 deletions locales/pl.json
Original file line number Diff line number Diff line change
Expand Up @@ -430,7 +430,9 @@
"due": "Termin",
"due-in": "Termin za",
"due-today": "Termin dzisiaj",
"due-today-with-time": "Termin dzisiaj o {time}",
"due-tomorrow": "Termin jutro",
"due-tomorrow-with-time": "Termin jutro o {time}",
"edit": "Edytować",
"ehr-intro-search": "Wyszukaj, wpisując nazwę swojego dostawcy usług medycznych lub portalu członkowskiego dla swojego dostawcy usług medycznych lub planu zdrowotnego.",
"elevated-heart-rate-time": "Czas z podwyższoną częstością akcji serca",
Expand Down
2 changes: 2 additions & 0 deletions locales/pt-PT.json
Original file line number Diff line number Diff line change
Expand Up @@ -430,7 +430,9 @@
"due": "Vencimento",
"due-in": "Vencimento em",
"due-today": "Vence hoje",
"due-today-with-time": "Vence hoje às {time}",
"due-tomorrow": "Vence amanhã",
"due-tomorrow-with-time": "Vence amanhã às {time}",
"edit": "Editar",
"ehr-intro-search": "Pesquise digitando o nome do seu prestador ou o portal de membros do seu prestador de saúde ou do seu plano de saúde.",
"elevated-heart-rate-time": "Tempo com frequência cardíaca elevada",
Expand Down
2 changes: 2 additions & 0 deletions locales/pt.json
Original file line number Diff line number Diff line change
Expand Up @@ -430,7 +430,9 @@
"due": "Vencimento",
"due-in": "Vencimento em",
"due-today": "Vencimento hoje",
"due-today-with-time": "Vencimento hoje às {time}",
"due-tomorrow": "Vencimento amanhã",
"due-tomorrow-with-time": "Vencimento amanhã às {time}",
"edit": "Editar",
"ehr-intro-search": "Pesquise digitando o nome do seu provedor ou portal de membros do seu provedor de saúde ou plano de saúde.",
"elevated-heart-rate-time": "Tempo com Frequência Cardíaca Elevada",
Expand Down
2 changes: 2 additions & 0 deletions locales/ro.json
Original file line number Diff line number Diff line change
Expand Up @@ -430,7 +430,9 @@
"due": "Scadent",
"due-in": "Scadent în",
"due-today": "Scadente azi",
"due-today-with-time": "Scadente azi la {time}",
"due-tomorrow": "Scadente mâine",
"due-tomorrow-with-time": "Scadente mâine la {time}",
"edit": "Editează",
"ehr-intro-search": "Caută introducând numele furnizorului tău sau portalul de membru pentru furnizorul tău de servicii medicale sau planul de sănătate.",
"elevated-heart-rate-time": "Timp cu ritm cardiac ridicat",
Expand Down
2 changes: 2 additions & 0 deletions locales/so.json
Original file line number Diff line number Diff line change
Expand Up @@ -430,7 +430,9 @@
"due": "Waa la bixinayaa",
"due-in": "Waa la bixinayaa",
"due-today": "Maanta waa la bixinayaa",
"due-today-with-time": "Maanta waa la bixinayaa saacadda {time}",
"due-tomorrow": "Berri waa la bixinayaa",
"due-tomorrow-with-time": "Berri waa la bixinayaa saacadda {time}",
"edit": "Wax ka beddel",
"ehr-intro-search": "Raadi adiga oo gelin magaca bixiyahaaga ama barta xubnaha ee bixiyahaaga daryeelka caafimaadka ama qorshaha caafimaadka.",
"elevated-heart-rate-time": "Waqtiga Garaaca Wadnaha Sare",
Expand Down
2 changes: 2 additions & 0 deletions locales/sw.json
Original file line number Diff line number Diff line change
Expand Up @@ -430,7 +430,9 @@
"due": "Inadaiwa",
"due-in": "Inadaiwa kwa",
"due-today": "Zinadaiwa Leo",
"due-today-with-time": "Zinadaiwa Leo saa {time}",
"due-tomorrow": "Zinadaiwa Kesho",
"due-tomorrow-with-time": "Zinadaiwa Kesho saa {time}",
"edit": "Hariri",
"ehr-intro-search": "Tafuta kwa kuingiza jina la mtoa huduma wako au tovuti ya mwanachama kwa mtoa huduma wako wa afya au mpango wa afya.",
"elevated-heart-rate-time": "Muda wa Mapigo ya Moyo Yaliyopanda",
Expand Down
2 changes: 2 additions & 0 deletions locales/tl.json
Original file line number Diff line number Diff line change
Expand Up @@ -430,7 +430,9 @@
"due": "Dapat",
"due-in": "Dapat sa loob ng",
"due-today": "Dapat Ngayon",
"due-today-with-time": "Dapat Ngayon nang {time}",
"due-tomorrow": "Dapat Bukas",
"due-tomorrow-with-time": "Dapat Bukas nang {time}",
"edit": "I-edit",
"ehr-intro-search": "Maghanap sa pamamagitan ng paglalagay ng pangalan ng iyong provider o portal ng miyembro para sa iyong healthcare provider o health plan.",
"elevated-heart-rate-time": "Oras ng Mataas na Heart Rate",
Expand Down
2 changes: 2 additions & 0 deletions locales/vi.json
Original file line number Diff line number Diff line change
Expand Up @@ -430,7 +430,9 @@
"due": "Đến hạn",
"due-in": "Đến hạn trong",
"due-today": "Đến hạn hôm nay",
"due-today-with-time": "Đến hạn hôm nay lúc {time}",
"due-tomorrow": "Đến hạn ngày mai",
"due-tomorrow-with-time": "Đến hạn ngày mai lúc {time}",
"edit": "Chỉnh sửa",
"ehr-intro-search": "Tìm kiếm bằng cách nhập tên nhà cung cấp hoặc cổng thành viên cho nhà cung cấp dịch vụ chăm sóc sức khỏe hoặc kế hoạch sức khỏe của bạn.",
"elevated-heart-rate-time": "Thời gian nhịp tim tăng cao",
Expand Down
10 changes: 5 additions & 5 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
"@babel/preset-env": "^7.21.5",
"@babel/preset-react": "^7.18.6",
"@babel/preset-typescript": "^7.21.5",
"@careevolution/mydatahelps-js": "5.9.0",
"@careevolution/mydatahelps-js": "5.9.1",
"@chromatic-com/storybook": "^1.9.0",
"@rollup/plugin-commonjs": "^29.0.2",
"@rollup/plugin-image": "^3.0.3",
Expand Down Expand Up @@ -114,7 +114,7 @@
"zod": "^3.23.8"
},
"peerDependencies": {
"@careevolution/mydatahelps-js": "^5.9.0",
"@careevolution/mydatahelps-js": "^5.9.1",
"react": "^18.2.0",
"react-dom": "^18.2.0"
},
Expand Down
Loading
Loading