after audit
This commit is contained in:
parent
e8e20637e6
commit
a5165dc3ba
80 changed files with 8489 additions and 7302 deletions
|
|
@ -0,0 +1,89 @@
|
|||
// @vitest-environment happy-dom
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { mount } from "@vue/test-utils";
|
||||
import PublicationToolbar from "./PublicationToolbar.vue";
|
||||
|
||||
const defaultProps = {
|
||||
mode: "all" as const,
|
||||
selectedScholarFilter: "",
|
||||
searchQuery: "",
|
||||
favoriteOnly: false,
|
||||
actionBusy: false,
|
||||
loading: false,
|
||||
scholars: [],
|
||||
startRunDisabled: false,
|
||||
startRunDisabledReason: null,
|
||||
startRunButtonLabel: "Check now",
|
||||
};
|
||||
|
||||
describe("PublicationToolbar", () => {
|
||||
it("renders mode, scholar filter, and search inputs", () => {
|
||||
const wrapper = mount(PublicationToolbar, { props: defaultProps });
|
||||
expect(wrapper.text()).toContain("Status");
|
||||
expect(wrapper.text()).toContain("Scholar");
|
||||
expect(wrapper.text()).toContain("Search");
|
||||
});
|
||||
|
||||
it("renders the start run button with provided label", () => {
|
||||
const wrapper = mount(PublicationToolbar, { props: defaultProps });
|
||||
expect(wrapper.text()).toContain("Check now");
|
||||
});
|
||||
|
||||
it("disables start run button when startRunDisabled is true", () => {
|
||||
const wrapper = mount(PublicationToolbar, {
|
||||
props: { ...defaultProps, startRunDisabled: true, startRunDisabledReason: "Cooldown active" },
|
||||
});
|
||||
const buttons = wrapper.findAll("button");
|
||||
const runButton = buttons.find((b) => b.text().includes("Check now"));
|
||||
expect(runButton?.attributes("disabled")).toBeDefined();
|
||||
});
|
||||
|
||||
it("emits start-run when start button is clicked", async () => {
|
||||
const wrapper = mount(PublicationToolbar, { props: defaultProps });
|
||||
const buttons = wrapper.findAll("button");
|
||||
const runButton = buttons.find((b) => b.text().includes("Check now"));
|
||||
await runButton?.trigger("click");
|
||||
expect(wrapper.emitted("start-run")).toHaveLength(1);
|
||||
});
|
||||
|
||||
it("emits favorite-only-changed when star filter is clicked", async () => {
|
||||
const wrapper = mount(PublicationToolbar, { props: defaultProps });
|
||||
await wrapper.find(".favorite-filter-button").trigger("click");
|
||||
expect(wrapper.emitted("favorite-only-changed")).toHaveLength(1);
|
||||
});
|
||||
|
||||
it("shows active star filter style when favoriteOnly is true", () => {
|
||||
const wrapper = mount(PublicationToolbar, { props: { ...defaultProps, favoriteOnly: true } });
|
||||
expect(wrapper.find(".favorite-filter-on").exists()).toBe(true);
|
||||
});
|
||||
|
||||
it("shows inactive star filter style when favoriteOnly is false", () => {
|
||||
const wrapper = mount(PublicationToolbar, { props: defaultProps });
|
||||
expect(wrapper.find(".favorite-filter-off").exists()).toBe(true);
|
||||
});
|
||||
|
||||
it("renders scholar options from props", () => {
|
||||
const scholars = [
|
||||
{ id: 1, scholar_id: "abc123", display_name: "Alice", profile_image_url: null, profile_image_source: "none" as const, is_enabled: true, baseline_completed: true, last_run_dt: null, last_run_status: null },
|
||||
{ id: 2, scholar_id: "def456", display_name: "", profile_image_url: null, profile_image_source: "none" as const, is_enabled: true, baseline_completed: true, last_run_dt: null, last_run_status: null },
|
||||
];
|
||||
const wrapper = mount(PublicationToolbar, { props: { ...defaultProps, scholars } });
|
||||
expect(wrapper.text()).toContain("Alice");
|
||||
expect(wrapper.text()).toContain("def456");
|
||||
});
|
||||
|
||||
it("shows clear button only when search query is non-empty", () => {
|
||||
const empty = mount(PublicationToolbar, { props: defaultProps });
|
||||
expect(empty.text()).not.toContain("Clear");
|
||||
|
||||
const withQuery = mount(PublicationToolbar, { props: { ...defaultProps, searchQuery: "test" } });
|
||||
expect(withQuery.text()).toContain("Clear");
|
||||
});
|
||||
|
||||
it("emits reset-search when clear button is clicked", async () => {
|
||||
const wrapper = mount(PublicationToolbar, { props: { ...defaultProps, searchQuery: "test" } });
|
||||
const clearButton = wrapper.findAll("button").find((b) => b.text().includes("Clear"));
|
||||
await clearButton?.trigger("click");
|
||||
expect(wrapper.emitted("reset-search")).toHaveLength(1);
|
||||
});
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue