This project is a palette creator tool that allows users to generate and customize color palettes for their design projects.
at main 140 lines 3.9 kB view raw
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});