Skip to content

Commit da1a448

Browse files
committed
fixing test for AdvancedSearch.spec.js, AdvancedSearchDialogBox.spec.js and removing main.spec.js and App.spec.js
1 parent 4d037ba commit da1a448

5 files changed

Lines changed: 121 additions & 310 deletions

File tree

src/components/Home/Carousel.vue

Lines changed: 29 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,34 @@
11
<template>
2-
<v-sheet color="transparent">
3-
<v-tabs
4-
v-model="tabsData.selectedTab"
5-
:show-arrows="isMounted ? $vuetify.display.mdAndDown : false"
6-
align-tabs="center"
7-
bg-color="transparent"
8-
class="height-430"
9-
color="accent3"
10-
slider-color="accent3"
11-
slider-size="5"
2+
<v-tabs
3+
v-model="tabsData.selectedTab"
4+
:show-arrows="isMounted ? $vuetify.display.mdAndDown : false"
5+
align-tabs="center"
6+
bg-color="transparent"
7+
class="height-430"
8+
color="accent3"
9+
slider-color="accent3"
10+
slider-size="5"
11+
>
12+
<v-tab
13+
v-for="(tab, index) in tabsData.tabs"
14+
:key="tab.component + '_' + index"
1215
>
13-
<v-tab
14-
v-for="(tab, index) in tabsData.tabs"
15-
:key="tab.component + '_' + index"
16-
>
17-
{{ tab.title }}
18-
</v-tab>
19-
</v-tabs>
20-
<v-tabs-window v-model="tabsData.selectedTab">
21-
<v-tabs-window-item
22-
v-for="(tabItem, tabItemIndex) in tabsData.tabs"
23-
:key="tabItem + '_' + tabItemIndex"
24-
>
25-
<TabContent
26-
:description="tabItem.description"
27-
:header="tabItem.header"
28-
:image="tabItem.image"
29-
:link="tabItem.link"
30-
/>
31-
</v-tabs-window-item>
32-
</v-tabs-window>
33-
</v-sheet>
16+
{{ tab.title }}
17+
</v-tab>
18+
</v-tabs>
19+
<v-tabs-window v-model="tabsData.selectedTab">
20+
<v-tabs-window-item
21+
v-for="(tabItem, tabItemIndex) in tabsData.tabs"
22+
:key="tabItem + '_' + tabItemIndex"
23+
>
24+
<TabContent
25+
:description="tabItem.description"
26+
:header="tabItem.header"
27+
:image="tabItem.image"
28+
:link="tabItem.link"
29+
/>
30+
</v-tabs-window-item>
31+
</v-tabs-window>
3432
</template>
3533

3634
<script>

tests/unit/App.spec.js

Lines changed: 0 additions & 134 deletions
This file was deleted.

tests/unit/components/Records/Search/Input/AdvancedSearch/AdvancedSearch.spec.js

Lines changed: 63 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,26 @@
11
import { beforeEach, describe, expect, it, vi } from "vitest";
22
import { shallowMount } from "@vue/test-utils";
3+
import { ref } from "vue";
34

45
import AdvancedSearch from "@/components/Records/Search/Input/AdvancedSearch/AdvancedSearch.vue";
56

7+
// 1. Setup reactive references we can alter dynamically inside individual tests
8+
const mockXl = ref(false);
9+
const mockMdAndDown = ref(false);
10+
11+
// 2. Mock 'useDisplay' from Vuetify directly to control composition API output
12+
vi.mock("vuetify", async (importOriginal) => {
13+
const original = await importOriginal();
14+
return {
15+
...original,
16+
useDisplay: () => ({
17+
xl: mockXl,
18+
mdAndDown: mockMdAndDown,
19+
}),
20+
};
21+
});
22+
23+
// 3. Mock the Vuex store commit tracking via hoisted architecture
624
const { mockCommit } = vi.hoisted(() => {
725
return { mockCommit: vi.fn() };
826
});
@@ -14,22 +32,21 @@ vi.mock("@/store", () => ({
1432

1533
describe("AdvancedSearch.vue", () => {
1634
let wrapper;
17-
const createWrapper = (props = {}, displayMock = {}) => {
35+
36+
const createWrapper = (props = {}) => {
1837
return shallowMount(AdvancedSearch, {
1938
props,
2039
global: {
2140
mocks: {
22-
$vuetify: {
23-
display: {
24-
lgAndDown: false,
25-
xl: false,
26-
mdAndDown: false,
27-
...displayMock, // Override defaults with specific test cases
28-
},
41+
// Keep fallback store binding if component pulls globally outside Vuex plugin mapping
42+
$store: {
43+
commit: mockCommit,
2944
},
3045
},
3146
stubs: {
32-
"v-btn": true,
47+
"v-btn": {
48+
template: '<button class="v-btn-stub"><slot /></button>',
49+
},
3350
"v-icon": true,
3451
AdvancedSearchDialogBox: true,
3552
},
@@ -39,64 +56,73 @@ describe("AdvancedSearch.vue", () => {
3956

4057
beforeEach(() => {
4158
mockCommit.mockClear();
59+
// Reset reactive display behaviors back to default states
60+
mockXl.value = false;
61+
mockMdAndDown.value = false;
4262
});
4363

44-
describe("Responsive Vuetify Classes and Sizes", () => {
45-
it("applies 'advancedTextXl' and 'x-large' size when showHomeSearch is false AND xl is true", () => {
46-
wrapper = createWrapper(
47-
{ showHomeSearch: false },
48-
{ xl: true, mdAndDown: false },
49-
);
50-
const btn = wrapper.findComponent({ name: "v-btn" });
64+
describe("Responsive Vuetify Sizes", () => {
65+
it("applies 'x-large' size when showHomeSearch is false AND xl display is true", async () => {
66+
mockXl.value = true;
67+
mockMdAndDown.value = false;
68+
69+
wrapper = createWrapper({ showHomeSearch: false });
70+
await wrapper.vm.$nextTick();
71+
72+
const btn = wrapper.find(".v-btn-stub");
5173

52-
expect(btn.classes()).toContain("advancedTextXl");
5374
expect(btn.attributes("size")).toBe("x-large");
75+
expect(btn.classes()).toContain("advanced-header-btn");
5476
});
5577

56-
it("applies 'advancedTextMd' and 'large' size when showHomeSearch is false AND mdAndDown is true", () => {
57-
wrapper = createWrapper(
58-
{ showHomeSearch: false },
59-
{ xl: false, mdAndDown: true },
60-
);
61-
const btn = wrapper.findComponent({ name: "v-btn" });
78+
it("applies 'large' size when showHomeSearch is false AND mdAndDown display is true", async () => {
79+
mockXl.value = false;
80+
mockMdAndDown.value = true;
81+
82+
wrapper = createWrapper({ showHomeSearch: false });
83+
84+
// Wait for the mounted() hook data mutation (isMounted = true) to re-render the DOM template updates
85+
await wrapper.vm.$nextTick();
86+
87+
const btn = wrapper.find(".v-btn-stub");
6288

63-
expect(btn.classes()).toContain("advancedTextMd");
6489
expect(btn.attributes("size")).toBe("large");
90+
expect(btn.classes()).toContain("advanced-header-btn");
6591
});
6692
});
6793

6894
describe("Methods and Store Commits", () => {
69-
it("triggers openAdvanceSearch when the Home Search (first) button is clicked", async () => {
70-
const wrapper = createWrapper({ showHomeSearch: true });
71-
const firstBtn = wrapper.findComponent({ name: "v-btn" });
72-
expect(firstBtn.classes()).toContain("px-6");
73-
await firstBtn.trigger("click");
95+
it("triggers openAdvanceSearch when the Home Search button is clicked", async () => {
96+
wrapper = createWrapper({ showHomeSearch: true });
97+
const homeBtn = wrapper.find(".v-btn-stub");
98+
99+
expect(homeBtn.classes()).toContain("home-search-btn");
100+
await homeBtn.trigger("click");
74101

75-
// 4. Assert our hoisted store mock was called correctly!
76102
expect(mockCommit).toHaveBeenCalledOnce();
77103
expect(mockCommit).toHaveBeenCalledWith(
78104
"advancedSearch/setAdvancedSearchDialogStatus",
79105
true,
80106
);
81107
});
82-
it("commits to the advancedSearch store when openAdvanceSearch is called", () => {
108+
109+
it("commits to the advancedSearch store when openAdvanceSearch is executed manually", () => {
83110
wrapper = createWrapper();
84111

85-
// Trigger the method
86112
wrapper.vm.openAdvanceSearch();
87113

88-
// 4. Assert directly against the standalone spy!
89114
expect(mockCommit).toHaveBeenCalledOnce();
90115
expect(mockCommit).toHaveBeenCalledWith(
91116
"advancedSearch/setAdvancedSearchDialogStatus",
92117
true,
93118
);
94119
});
95120

96-
it("triggers openAdvanceSearch when the button is clicked", async () => {
97-
wrapper = createWrapper();
98-
const btn = wrapper.findComponent({ name: "v-btn" });
99-
await btn.trigger("click");
121+
it("triggers openAdvanceSearch when the header style button is clicked", async () => {
122+
wrapper = createWrapper({ showHomeSearch: false });
123+
const headerBtn = wrapper.find(".v-btn-stub");
124+
125+
await headerBtn.trigger("click");
100126
expect(mockCommit).toHaveBeenCalledOnce();
101127
});
102128
});

0 commit comments

Comments
 (0)