/
spectree
/
mstroy
Обзор
Документация
Войти
/
spectree
/
mstroy
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/services/TreeStore.test.ts
168 строк
6 KB
Alastrr
feature: реализация тестового задания согласно тз
16 апр 2026, 23:22
16 апр 2026, 23:22
55ff14c
Код
Авторство
О чём код?
import { describe, it, expect, beforeEach } from 'vitest' import { TreeStore } from './TreeStore' import { INITIAL_ITEMS } from '@/data/items' describe('TreeStore', () => { let store: TreeStore beforeEach(() => { store = new TreeStore([...INITIAL_ITEMS]) }) describe('getAll', () => { it('возвращает все элементы', () => { expect(store.getAll()).toHaveLength(8) }) it('возвращает корректные данные', () => { expect(store.getAll()).toEqual(INITIAL_ITEMS) }) }) describe('getItem', () => { it('возвращает элемент по числовому id', () => { expect(store.getItem(1)).toEqual({ id: 1, parent: null, label: 'Айтем 1', }) }) it('возвращает элемент по строковому id', () => { expect(store.getItem('91064cee')).toEqual({ id: '91064cee', parent: 1, label: 'Айтем 2', }) }) it('возвращает undefined если элемент не найден', () => { expect(store.getItem(999)).toBeUndefined() }) it('возвращает undefined при id === null', () => { expect(store.getItem(null)).toBeUndefined() }) }) describe('getChildren', () => { it('возвращает прямых потомков', () => { expect(store.getChildren(1)).toHaveLength(2) }) it('возвращает корректных потомков', () => { const ids = store.getChildren(1).map((el) => el.id) expect(ids).toContain('91064cee') expect(ids).toContain(3) }) it('возвращает пустой массив если потомков нет', () => { expect(store.getChildren(7)).toEqual([]) }) it('возвращает пустой массив при id === null', () => { expect(store.getChildren(null)).toEqual([]) }) }) describe('getAllChildren', () => { it('возвращает всех потомков рекурсивно', () => { expect(store.getAllChildren(1)).toHaveLength(7) }) it('возвращает всех потомков на всех уровнях вложенности', () => { const ids = store.getAllChildren(1).map((el) => el.id) expect(ids).toContain('91064cee') expect(ids).toContain(4) expect(ids).toContain(7) }) it('возвращает пустой массив для листового элемента', () => { expect(store.getAllChildren(7)).toEqual([]) }) it('возвращает пустой массив при id === null', () => { expect(store.getAllChildren(null)).toEqual([]) }) }) describe('getAllParents', () => { it('возвращает цепочку родителей от элемента до корня', () => { const ids = store.getAllParents(7).map((el) => el.id) expect(ids).toEqual([7, 4, '91064cee', 1]) }) it('возвращает только сам элемент для корневого', () => { expect(store.getAllParents(1)).toHaveLength(1) expect(store.getAllParents(1)[0].id).toBe(1) }) it('возвращает пустой массив при id === null', () => { expect(store.getAllParents(null)).toEqual([]) }) }) describe('addItem', () => { it('добавляет элемент в хранилище', () => { store.addItem({ id: 9, parent: 1, label: 'Айтем 9' }) expect(store.getAll()).toHaveLength(9) }) it('новый элемент доступен через getItem', () => { store.addItem({ id: 9, parent: 1, label: 'Айтем 9' }) expect(store.getItem(9)).toEqual({ id: 9, parent: 1, label: 'Айтем 9', }) }) it('новый элемент появляется в getChildren родителя', () => { store.addItem({ id: 9, parent: 1, label: 'Айтем 9' }) const ids = store.getChildren(1).map((el) => el.id) expect(ids).toContain(9) }) }) describe('removeItem', () => { it('удаляет элемент из хранилища', () => { store.removeItem(3) expect(store.getItem(3)).toBeUndefined() }) it('удаляет элемент вместе со всеми потомками', () => { store.removeItem('91064cee') expect(store.getAll()).toHaveLength(2) }) it('удалённый элемент пропадает из getChildren родителя', () => { store.removeItem(3) const ids = store.getChildren(1).map((el) => el.id) expect(ids).not.toContain(3) }) it('ничего не делает при id === null', () => { store.removeItem(null) expect(store.getAll()).toHaveLength(8) }) }) describe('updateItem', () => { it('обновляет label элемента', () => { store.updateItem({ id: 1, parent: null, label: 'Обновлённый' }) expect(store.getItem(1)?.label).toBe('Обновлённый') }) it('изменения отражаются в getAll', () => { store.updateItem({ id: 1, parent: null, label: 'Обновлённый' }) const item = store.getAll().find((el) => el.id === 1) expect(item?.label).toBe('Обновлённый') }) it('ничего не делает если элемент не найден', () => { expect(() => store.updateItem({ id: 999, parent: null, label: 'X' }) ).not.toThrow() }) }) })