@schukai/monster
Version:
Monster is a simple library for creating fast, robust and lightweight websites.
164 lines (138 loc) • 4.13 kB
JavaScript
import * as chai from "chai";
import { chaiDom } from "../../../util/chai-dom.mjs";
import { initJSDOM } from "../../../util/jsdom.mjs";
let expect = chai.expect;
chai.use(chaiDom);
let Login;
describe("Login", function () {
this.timeout(10000);
before(function (done) {
initJSDOM().then(() => {
import("element-internals-polyfill")
.then(() => import("../../../../source/components/form/login.mjs"))
.then((module) => {
Login = module.Login;
done();
})
.catch((error) => done(error));
});
});
beforeEach(() => {
document.getElementById("mocks").innerHTML = "";
});
afterEach(() => {
document.getElementById("mocks").innerHTML = "";
});
it("should create a monster-login element", function () {
expect(document.createElement("monster-login")).is.instanceof(Login);
});
it("should respect the native hidden attribute on the host", function () {
const login = document.createElement("monster-login");
login.setAttribute("hidden", "");
document.getElementById("mocks").appendChild(login);
expect(login.hidden).to.be.true;
expect(login.visible).to.be.false;
expect(login.isVisible).to.be.false;
});
it("should hide and show the host with the public visibility API", function (done) {
const login = document.createElement("monster-login");
document.getElementById("mocks").appendChild(login);
const states = [];
login.addEventListener("monster-visibility-changed", (event) => {
states.push(event.detail.visible);
});
setTimeout(() => {
try {
const username = login.shadowRoot.querySelector("input[name='username']");
username.focus();
login.hide();
} catch (error) {
done(error);
}
}, 150);
setTimeout(() => {
try {
expect(login.hidden).to.be.true;
expect(login.visible).to.be.false;
login.show();
setTimeout(() => {
try {
expect(login.hidden).to.be.false;
expect(login.visible).to.be.true;
expect(states).to.deep.equal([false, true]);
done();
} catch (error) {
done(error);
}
}, 25);
} catch (error) {
done(error);
}
}, 200);
});
it("should keep host visibility separate from openLogin", function (done) {
const login = document.createElement("monster-login");
document.getElementById("mocks").appendChild(login);
setTimeout(() => {
try {
login.hide();
login.openLogin();
expect(login.hidden).to.be.true;
expect(login.visible).to.be.false;
done();
} catch (error) {
done(error);
}
}, 150);
});
it("should show the custom collapse and close the login collapse", function (done) {
const login = document.createElement("monster-login");
document.getElementById("mocks").appendChild(login);
setTimeout(() => {
try {
const loginCollapse = login.shadowRoot.querySelector(
'[data-monster-role="login-collapse"]',
);
const customCollapse = login.shadowRoot.querySelector(
'[data-monster-role="custom-collapse"]',
);
expect(loginCollapse.isOpen()).to.be.true;
expect(customCollapse.isClosed()).to.be.true;
const button = document.createElement("button");
button.textContent = "Weiter";
login.showCustomCollapse({
header: "Hinweis",
content: ["Manueller Inhalt", button],
footer: "Footer",
});
setTimeout(() => {
try {
expect(customCollapse.isOpen()).to.be.true;
expect(loginCollapse.isClosed()).to.be.true;
expect(
login.shadowRoot.getElementById("customCollapseHeader").textContent,
).to.equal("Hinweis");
expect(
login.shadowRoot
.getElementById("customCollapseContent")
.textContent.includes("Manueller Inhalt"),
).to.be.true;
expect(
login.shadowRoot
.getElementById("customCollapseContent")
.querySelector("button"),
).to.equal(button);
expect(
login.shadowRoot.getElementById("customCollapseFooter").textContent,
).to.equal("Footer");
done();
} catch (error) {
done(error);
}
}, 700);
} catch (error) {
done(error);
}
}, 150);
});
});