import { getLocalVue } from "@tests/vitest/helpers";
import { mount } from "@vue/test-utils";
import { describe, expect, it } from "vitest";
import ConfigureHeader from "./ConfigureHeader.vue";
import CellButton from "@/components/Markdown/Editor/CellButton.vue";
const localVue = getLocalVue();
function mountComponent(props = {}) {
return mount(ConfigureHeader, {
localVue,
propsData: { hasChanged: undefined, ...props },
stubs: {
BModal: {
template: "
",
props: ["visible"],
},
BButton: {
template: "",
},
FontAwesomeIcon: true,
Heading: {
template: "
",
},
},
});
}
describe("ConfigureHeader.vue", () => {
it("renders headings and instructions", () => {
const wrapper = mountComponent({ hasChanged: false });
expect(wrapper.text()).toContain("Attach Data");
expect(wrapper.text()).toContain("Fill in the fields below to map required inputs to this cell.");
});
it("renders Apply Changes and Cancel buttons when hasChanged is defined", () => {
const wrapper = mountComponent({ hasChanged: false });
const buttons = wrapper.findAllComponents(CellButton);
expect(buttons.length).toBe(2);
expect(buttons.at(0).props("title")).toBe("Apply Changes");
expect(buttons.at(1).props("title")).toBe("Cancel");
});
it("always renders Cancel button", () => {
const wrapper = mountComponent({ hasChanged: undefined });
const buttons = wrapper.findAllComponents(CellButton);
const cancelBtn = buttons.at(buttons.length - 1);
expect(cancelBtn.exists()).toBe(true);
expect(cancelBtn.props("title")).toBe("Cancel");
});
it("emits ok when Apply Changes is clicked", async () => {
const wrapper = mountComponent({ hasChanged: true });
const applyBtn = wrapper.findAllComponents(CellButton).at(0);
await applyBtn.trigger("click");
expect(wrapper.emitted("ok")).toBeTruthy();
});
it("emits cancel immediately if hasChanged is false", async () => {
const wrapper = mountComponent({ hasChanged: false });
const cancelBtn = wrapper.findAllComponents(CellButton).at(1);
await cancelBtn.trigger("click");
expect(wrapper.emitted("cancel")).toBeTruthy();
});
it("shows modal if hasChanged is true and Cancel is clicked", async () => {
const wrapper = mountComponent({ hasChanged: true });
const cancelBtn = wrapper.findAllComponents(CellButton).at(1);
await cancelBtn.trigger("click");
expect(wrapper.vm.showModal).toBe(true);
});
it("emits cancel from modal Discard Changes button", async () => {
const wrapper = mountComponent({ hasChanged: true });
wrapper.vm.showModal = true;
await wrapper.vm.$nextTick();
const buttons = wrapper.findAll("button").wrappers;
const discardBtn = buttons.find((b) => b.text().includes("Discard Changes"));
await discardBtn.trigger("click");
expect(wrapper.emitted("cancel")).toBeTruthy();
});
it("emits ok from modal Apply Changes button", async () => {
const wrapper = mountComponent({ hasChanged: true });
wrapper.vm.showModal = true;
await wrapper.vm.$nextTick();
const buttons = wrapper.findAll("button").wrappers;
const applyBtn = buttons.find((b) => b.text().includes("Apply Changes"));
await applyBtn.trigger("click");
expect(wrapper.emitted("ok")).toBeTruthy();
});
});