jenesius-vue-modal
Version:
The progressive and simple modal system for Vue.js v3
136 lines (110 loc) • 5.19 kB
text/typescript
import {mount} from "@vue/test-utils";
import {container, getQueueByNamespace, pushModal, openModal, closeModal, Modal, getCurrentModal, closeById} from "./../src/index";
import ModalTitle from "./components/modal-title.vue";
import NamespaceStore from "./../src/utils/NamespaceStore";
let app
const space = "notification";
beforeEach(async () => {
const app = await mount({
template: `
<div>
<container/>
<container namespace = ${space} />
</div>
`,
components: {
container
}
});
const modals = [...Modal.STORE.values()];
for await(const modal of modals) {
await modal.close().catch(() => {});
}
})
describe("Namespace tests", () => {
test("Two separate namespace should display only bind modals", async () => {
await openModal(ModalTitle);
expect(getQueueByNamespace().length).toBe(1)
expect(getQueueByNamespace(space).length).toBe(0)
const t = await pushModal(ModalTitle);
expect(getQueueByNamespace().length).toBe(2)
expect(getQueueByNamespace(space).length).toBe(0)
await openModal(ModalTitle, {msg: "test"}, {namespace: space});
expect(getQueueByNamespace().length).toBe(2)
expect(getQueueByNamespace(space).length).toBe(1)
})
test("Method closeModal must close only modals for passed namespace", async () => {
await pushModal(ModalTitle);
expect(getQueueByNamespace().length).toBe(1)
await pushModal(ModalTitle);
expect(getQueueByNamespace().length).toBe(2)
expect(getQueueByNamespace(space).length).toBe(0)
await closeModal({namespace: space});
expect(getQueueByNamespace().length).toBe(2)
expect(getQueueByNamespace(space).length).toBe(0)
await closeModal();
expect(getQueueByNamespace().length).toBe(0)
expect(getQueueByNamespace(space).length).toBe(0)
})
test("Get current modal for namespace", async () => {
const modalMain_1 = await pushModal(ModalTitle, {}, {})
const modalMain_2 = await pushModal(ModalTitle, {}, {})
const modalSub_1 = await pushModal(ModalTitle, {}, {namespace: space})
const modalSub_2 = await pushModal(ModalTitle, {}, {namespace: space})
const modalSub_3 = await pushModal(ModalTitle, {}, {namespace: space})
expect(getCurrentModal()).toBe(modalMain_2);
expect(getCurrentModal(space)).toBe(modalSub_3);
})
test("Queue for namespace should return right", async () => {
const modalMain_1 = await pushModal(ModalTitle, {}, {})
const modalMain_2 = await pushModal(ModalTitle, {}, {})
const modalSub_1 = await pushModal(ModalTitle, {}, {namespace: space})
expect(getQueueByNamespace().map(i => i.id)).toEqual([modalMain_1.id, modalMain_2.id])
expect(getQueueByNamespace(space).map(i => i.id)).toEqual([modalSub_1.id])
})
test("CloseById should close modal from right namespace", async () => {
const modalMain_1 = await pushModal(ModalTitle, {}, {})
const modalMain_2 = await pushModal(ModalTitle, {}, {})
const modalSub_1 = await pushModal(ModalTitle, {}, {namespace: space})
const modalSub_2 = await pushModal(ModalTitle, {}, {namespace: space})
await closeById(modalSub_1.id)
expect(getQueueByNamespace().map(i => i.id)).toEqual([modalMain_1.id, modalMain_2.id])
expect(getQueueByNamespace(space).map(i => i.id)).toEqual([modalSub_2.id])
})
test("Namespace should be set right", async () => {
const modalMain_1 = await pushModal(ModalTitle, {}, {})
const modalSub_1 = await pushModal(ModalTitle, {}, {namespace: space})
expect(modalMain_1.namespace).toBe(NamespaceStore.DEFAULT_NAMESPACE);
expect(modalSub_1.namespace).toBe(space);
})
test("Modal closed value must display correct data from namespace", async () => {
const modalMain_1 = await pushModal(ModalTitle, {}, {})
const modalMain_2 = await pushModal(ModalTitle, {}, {})
const modalSub_1 = await pushModal(ModalTitle, {}, {namespace: space})
const modalSub_2 = await pushModal(ModalTitle, {}, {namespace: space})
await modalMain_1.close();
await modalSub_2.close();
expect(modalMain_1.closed.value).toBe(true);
expect(modalMain_2.closed.value).toBe(false);
expect(modalSub_1.closed.value).toBe(false);
expect(modalSub_2.closed.value).toBe(true);
})
test("Modal.namespace must be set correctly.", async () => {
const modal_default = await openModal(ModalTitle);
const modal_notification = await openModal(ModalTitle, {}, { namespace: space });
expect(modal_default.namespace).toBe(NamespaceStore.DEFAULT_NAMESPACE)
expect(modal_notification.namespace).toBe(space)
})
test("Modal.closed should return right values from corresponding namespace", async () => {
const modal_default = await openModal(ModalTitle);
const modal_notification = await openModal(ModalTitle, {}, { namespace: space });
expect(modal_default.closed.value).toBe(false)
expect(modal_notification.closed.value).toBe(false)
await closeModal()
expect(modal_default.closed.value).toBe(true)
expect(modal_notification.closed.value).toBe(false)
await closeModal({namespace: space})
expect(modal_default.closed.value).toBe(true)
expect(modal_notification.closed.value).toBe(true)
})
})