Files
pleno-vue/tests/unit/self-serve-tasks-step.spec.js
T

74 lines
2.7 KiB
JavaScript

// @vitest-environment jsdom
import { describe, expect, it } from "vitest";
import SelfServeTasksStep from "@/components/displays/selfServe/SelfServeTasksStep.vue";
import { mountWithApp } from "./helpers/mountWithApp.js";
const mountTasksStep = (props = {}) =>
mountWithApp(SelfServeTasksStep, {
props: {
isLoading: false,
dynamicImageUrl: "https://cdn.example.test/dynamic.png",
activeTasks: [],
completedTasks: {},
allVisibleQuestionsAnswered: false,
editAnswers: false,
...props,
},
global: {
stubs: {
BIcon: true,
SelfServeTaskList: {
template: '<div data-testid="self-serve-task-list-stub" />',
},
},
},
});
describe("SelfServeTasksStep", () => {
it("shows a Buefy skeleton until the dynamic image loads", async () => {
const wrapper = mountTasksStep();
expect(wrapper.get('[data-testid="self-serve-dynamic-image-skeleton"]').exists()).toBe(true);
expect(wrapper.get('[data-testid="self-serve-dynamic-image"]').classes()).toContain("is-loading");
await wrapper.get('[data-testid="self-serve-dynamic-image"]').trigger("load");
expect(wrapper.find('[data-testid="self-serve-dynamic-image-skeleton"]').exists()).toBe(false);
expect(wrapper.get('[data-testid="self-serve-dynamic-image"]').classes()).not.toContain("is-loading");
});
it("shows the skeleton again when the dynamic image URL changes", async () => {
const wrapper = mountTasksStep();
await wrapper.get('[data-testid="self-serve-dynamic-image"]').trigger("load");
expect(wrapper.find('[data-testid="self-serve-dynamic-image-skeleton"]').exists()).toBe(false);
await wrapper.setProps({
dynamicImageUrl: "https://cdn.example.test/dynamic-step-2.png",
});
expect(wrapper.get('[data-testid="self-serve-dynamic-image-skeleton"]').exists()).toBe(true);
expect(wrapper.get('[data-testid="self-serve-dynamic-image"]').attributes("src")).toBe(
"https://cdn.example.test/dynamic-step-2.png"
);
});
it("clears loading state and emits clear-dynamic-image on image errors", async () => {
const wrapper = mountTasksStep();
await wrapper.get('[data-testid="self-serve-dynamic-image"]').trigger("error");
expect(wrapper.find('[data-testid="self-serve-dynamic-image-skeleton"]').exists()).toBe(false);
expect(wrapper.emitted("clear-dynamic-image")).toEqual([[]]);
});
it("does not render a skeleton when there is no dynamic image URL", () => {
const wrapper = mountTasksStep({
dynamicImageUrl: null,
});
expect(wrapper.find('[data-testid="self-serve-dynamic-image-skeleton"]').exists()).toBe(false);
expect(wrapper.find('[data-testid="self-serve-dynamic-image"]').exists()).toBe(false);
});
});