import { shallowMount } from "@vue/test-utils";
import checkboxQuestion from "./checkbox-question";
import { nextTick } from "vue";

// Mock CMS content
const questionText = "Question Text";
const mockMixin = {
    methods: {
        getCmsContent: jest.fn().mockImplementation(() => {
            return questionText;
        }),
    },
};

describe("checkbox-question.vue", () => {
    it("Should return checkbox name", async () => {
        // Act
        const wrapper = shallowMount(checkboxQuestion, {
            propsData: {
                checkboxName: "Checkbox",
            },
            mixins: [mockMixin],
        });

        // Assert
        const input = wrapper.find("input");

        // Expect
        expect(input.attributes().name).toEqual("Checkbox");
    });

    it("Should return default id when no custom id is specified", async () => {
        // Act
        const wrapper = shallowMount(checkboxQuestion, {
            propsData: {},
            mixins: [mockMixin],
        });

        // Assert
        const input = wrapper.find("input");

        // Expect
        expect(input.attributes().id).not.toBeFalsy();
    });

    it("Should return custom id when specified", async () => {
        // Act
        const wrapper = shallowMount(checkboxQuestion, {
            propsData: {
                customInputId: "Checkbox ID",
            },
            mixins: [mockMixin],
        });

        // Assert
        const input = wrapper.find("input");

        // Expect
        expect(input.attributes().id).toEqual("Checkbox ID");
    });

    it("Should return tabindex value", async () => {
        // Act
        const wrapper = shallowMount(checkboxQuestion, {
            propsData: {
                tabIndex: "1",
            },
            mixins: [mockMixin],
        });

        // Assert
        const input = wrapper.find("input");

        // Expect
        expect(input.attributes().tabindex).toEqual("1");
    });

    it("Should return label text", async () => {
        // Act
        const wrapper = shallowMount(checkboxQuestion, {
            propsData: {
                screenReaderOnlyText: "screenreader text",
            },
            mixins: [mockMixin],
        });

        // Assert
        const paragraph = wrapper.find("span");

        expect(paragraph.text()).toEqual("screenreader text");
    });
});
