/
sc_coder
/
MentalCheckList
Обзор
Документация
Войти
/
sc_coder
/
MentalCheckList
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
tests/storage.test.js
118 строк
6 KB
ScCoder
Initial commit: Ментальный Чек-Лист PWA
14 июл 2026, 08:35
14 июл 2026, 08:35
482499e
Код
Авторство
О чём код?
var Logic = require('../logic'); var Storage = require('../storage'); beforeEach(function () { localStorage.clear(); }); describe('getQuestions', function () { test('инициализирует localStorage базовыми вопросами (с позитивной и негативной формулировкой) при первом обращении', function () { var questions = Storage.getQuestions(); expect(questions).toHaveLength(Logic.DEFAULT_QUESTIONS.length); expect(questions[0].id).toBe(Logic.DEFAULT_QUESTIONS[0].id); expect(questions[0].negativeText).toBe(Logic.DEFAULT_QUESTIONS[0].negativeText); expect(questions[0].positiveText).toBe(Logic.DEFAULT_QUESTIONS[0].positiveText); expect(localStorage.getItem(Storage.KEYS.QUESTIONS)).not.toBeNull(); }); test('возвращает ранее сохранённый список вместо дефолтного', function () { var custom = [{ id: 'x1', negativeText: 'Мой вопрос', positiveText: null, custom: true }]; Storage.saveQuestions(custom); expect(Storage.getQuestions()).toEqual(custom); }); }); describe('saveQuestions / getQuestions round-trip', function () { test('сохраняет и читает произвольный список вопросов', function () { var list = [ { id: 'a', negativeText: 'A', positiveText: 'A?', custom: false }, { id: 'b', negativeText: 'B', positiveText: null, custom: true } ]; Storage.saveQuestions(list); expect(Storage.getQuestions()).toEqual(list); }); }); describe('threshold', function () { test('возвращает значение по умолчанию, если ничего не сохранено', function () { expect(Storage.getThreshold()).toBe(Logic.DEFAULT_THRESHOLD); }); test('сохраняет и возвращает изменённый порог', function () { Storage.saveThreshold(45); expect(Storage.getThreshold()).toBe(45); }); test('ограничивает порог допустимыми границами при сохранении', function () { Storage.saveThreshold(1000); expect(Storage.getThreshold()).toBe(Logic.MAX_THRESHOLD); }); }); describe('history', function () { test('getHistory возвращает пустой объект, если истории ещё нет', function () { expect(Storage.getHistory()).toEqual({}); }); test('getHistory возвращает пустой объект при повреждённых данных в localStorage', function () { localStorage.setItem(Storage.KEYS.HISTORY, '{не валидный json'); expect(Storage.getHistory()).toEqual({}); }); test('saveHistoryEntry сохраняет запись, доступную через getHistoryEntry', function () { var entry = Logic.buildHistoryEntry('2026-07-14', [{ id: 'q1' }], { q1: true }, 30); Storage.saveHistoryEntry(entry); expect(Storage.getHistoryEntry('2026-07-14')).toEqual(entry); }); test('getHistoryEntry возвращает null для несуществующей даты', function () { expect(Storage.getHistoryEntry('2000-01-01')).toBeNull(); }); test('saveHistoryEntry накапливает записи за разные дни, не затирая предыдущие', function () { var entry1 = Logic.buildHistoryEntry('2026-07-13', [{ id: 'q1' }], { q1: false }, 30); var entry2 = Logic.buildHistoryEntry('2026-07-14', [{ id: 'q1' }], { q1: true }, 30); Storage.saveHistoryEntry(entry1); Storage.saveHistoryEntry(entry2); var history = Storage.getHistory(); expect(Object.keys(history)).toEqual(['2026-07-13', '2026-07-14']); }); test('повторное сохранение той же даты перезаписывает старую запись', function () { var first = Logic.buildHistoryEntry('2026-07-14', [{ id: 'q1' }], { q1: false }, 30); var second = Logic.buildHistoryEntry('2026-07-14', [{ id: 'q1' }], { q1: true }, 30); Storage.saveHistoryEntry(first); Storage.saveHistoryEntry(second); expect(Storage.getHistoryEntry('2026-07-14').checkedCount).toBe(1); }); }); describe('reminder settings', function () { test('возвращает значения по умолчанию, если ничего не сохранено', function () { expect(Storage.getReminderSettings()).toEqual({ enabled: false, time: '20:00' }); }); test('сохраняет и читает включённое напоминание с заданным временем', function () { Storage.saveReminderSettings({ enabled: true, time: '09:15' }); expect(Storage.getReminderSettings()).toEqual({ enabled: true, time: '09:15' }); }); test('подставляет время по умолчанию при некорректном значении', function () { Storage.saveReminderSettings({ enabled: true, time: 'not-a-time' }); expect(Storage.getReminderSettings().time).toBe('20:00'); }); test('возвращает значения по умолчанию при повреждённых данных в localStorage', function () { localStorage.setItem(Storage.KEYS.REMINDER, '{сломанный json'); expect(Storage.getReminderSettings()).toEqual({ enabled: false, time: '20:00' }); }); }); describe('last notified date', function () { test('возвращает null, если ещё не уведомляли', function () { expect(Storage.getLastNotifiedDate()).toBeNull(); }); test('сохраняет и возвращает дату последнего уведомления', function () { Storage.setLastNotifiedDate('2026-07-14'); expect(Storage.getLastNotifiedDate()).toBe('2026-07-14'); }); });