This project is a palette creator tool that allows users to generate and customize color palettes for their design projects.
1// oxlint-disable max-lines
2
3import { mount } from '@vue/test-utils';
4
5import App from './App.vue';
6import stateFactory from './store/state';
7import store from './store';
8
9vi.mock(import('mosha-vue-toastify'), () => ({
10 createToast: vi.fn(),
11}));
12
13// oxlint-disable-next-line max-lines-per-function
14describe('component App.vue', () => {
15 /** @type {import('@vue/test-utils').VueWrapper} */
16 let wrapper;
17
18 beforeEach(() => {
19 Object.assign(store.state, stateFactory());
20 wrapper = mount(App, {
21 global: {
22 plugins: [store],
23 },
24 });
25 });
26
27 afterEach(() => {
28 wrapper.unmount();
29 vi.restoreAllMocks();
30 });
31
32 it('renders the main navigation', () => {
33 expect(
34 wrapper.findComponent({ name: 'SiteHeader' }).exists(),
35 ).toBeTruthy();
36 });
37
38 it('shows utility buttons panel when colors are present', async () => {
39 store.state.allColors = [
40 {
41 hex: '#ff0000',
42 hsl: 'hsl(0, 100%, 50%)',
43 rgb: 'rgb(255,0,0)',
44 type: 'complement',
45 },
46 ];
47 await wrapper.vm.$nextTick();
48
49 expect(
50 wrapper.findComponent({ name: 'UtilityButtonsPanel' }).exists(),
51 ).toBeTruthy();
52 });
53
54 it('hides utility buttons panel when no colors are present', async () => {
55 store.state.allColors = [];
56 await wrapper.vm.$nextTick();
57
58 expect(
59 wrapper.findComponent({ name: 'UtilityButtonsPanel' }).exists(),
60 ).toBeFalsy();
61 });
62
63 it('shows saved palettes section when there are saved palettes', async () => {
64 store.state.savedPalettes = [
65 {
66 createdAt: new Date().toISOString(),
67 id: '1',
68 name: 'Test',
69 scheme: [],
70 },
71 ];
72 await wrapper.vm.$nextTick();
73
74 expect(
75 wrapper.findComponent({ name: 'SavedPalettesPanel' }).exists(),
76 ).toBeTruthy();
77 });
78
79 it('opens and closes Instructions modal', async () => {
80 await wrapper
81 .findComponent({ name: 'SiteHeader' })
82 .vm.$emit('openInstructionsModal');
83 await wrapper.vm.$nextTick();
84
85 expect(wrapper.vm.showInstructionsModal).toBeTruthy();
86
87 const instructionsModal = wrapper.findComponent({
88 name: 'InstructionsModal',
89 });
90
91 expect(instructionsModal.exists()).toBeTruthy();
92
93 await instructionsModal.vm.$emit('close');
94 await wrapper.vm.$nextTick();
95
96 expect(wrapper.vm.showInstructionsModal).toBeFalsy();
97 });
98
99 it('opens and closes Copy modal', async () => {
100 await wrapper
101 .findComponent({ name: 'UtilityButtonsPanel' })
102 .vm.$emit('copyPalette');
103 await wrapper.vm.$nextTick();
104
105 expect(wrapper.vm.showCopyModal).toBeTruthy();
106
107 // Close modal via @close event
108 const exportCssModal = wrapper.findComponent({
109 name: 'ExportCssModal',
110 });
111
112 expect(exportCssModal.exists()).toBeTruthy();
113
114 await exportCssModal.vm.$emit('close');
115 await wrapper.vm.$nextTick();
116
117 expect(wrapper.vm.showCopyModal).toBeFalsy();
118 });
119
120 it('opens and closes SavePalette modal', async () => {
121 await wrapper
122 .findComponent({ name: 'UtilityButtonsPanel' })
123 .vm.$emit('savePalette');
124 await wrapper.vm.$nextTick();
125
126 expect(wrapper.vm.showSaveModal).toBeTruthy();
127
128 // Close modal via @close event
129 const savePaletteModal = wrapper.findComponent({
130 name: 'SavePaletteModal',
131 });
132
133 expect(savePaletteModal.exists()).toBeTruthy();
134
135 await savePaletteModal.vm.$emit('close');
136 await wrapper.vm.$nextTick();
137
138 expect(wrapper.vm.showSaveModal).toBeFalsy();
139 });
140});