2024-02-23 10:33:42 +01:00
|
|
|
import { click, visit } from "@ember/test-helpers";
|
2024-11-22 17:11:51 +01:00
|
|
|
import $ from "jquery";
|
2022-07-27 12:47:50 +02:00
|
|
|
import { test } from "qunit";
|
2024-11-22 17:11:51 +01:00
|
|
|
import sinon from "sinon";
|
|
|
|
import DiscourseURL from "discourse/lib/url";
|
|
|
|
import pretender, { response } from "discourse/tests/helpers/create-pretender";
|
2022-07-27 12:47:50 +02:00
|
|
|
import {
|
|
|
|
acceptance,
|
|
|
|
count,
|
|
|
|
exists,
|
2022-07-27 16:30:45 +02:00
|
|
|
query,
|
2022-07-27 12:47:50 +02:00
|
|
|
} from "discourse/tests/helpers/qunit-helpers";
|
2024-11-22 17:11:51 +01:00
|
|
|
import I18n from "I18n";
|
2022-07-27 12:47:50 +02:00
|
|
|
import {
|
|
|
|
wizard,
|
|
|
|
wizardCompleted,
|
2023-01-26 11:26:24 +01:00
|
|
|
wizardGuest,
|
2022-07-27 12:47:50 +02:00
|
|
|
wizardNotPermitted,
|
2024-11-22 17:11:51 +01:00
|
|
|
wizardNoUser,
|
2024-02-23 10:33:42 +01:00
|
|
|
wizardResumeOnRevisit,
|
2022-07-27 12:47:50 +02:00
|
|
|
} from "../helpers/wizard";
|
|
|
|
|
|
|
|
acceptance("Wizard | Not logged in", function (needs) {
|
|
|
|
needs.pretender((server, helper) => {
|
2022-07-27 16:30:45 +02:00
|
|
|
server.get("/w/wizard.json", () => helper.response(wizardNoUser));
|
2022-07-27 12:47:50 +02:00
|
|
|
});
|
|
|
|
|
2022-08-01 09:41:11 +02:00
|
|
|
test("Requires login", async function (assert) {
|
2022-07-27 12:47:50 +02:00
|
|
|
await visit("/w/wizard");
|
|
|
|
assert.ok(exists(".wizard-no-access.requires-login"));
|
|
|
|
});
|
2022-08-01 09:41:11 +02:00
|
|
|
|
|
|
|
test("Requires login if a step path is used", async function (assert) {
|
|
|
|
await visit("/w/wizard/steps/1");
|
|
|
|
assert.ok(exists(".wizard-no-access.requires-login"));
|
|
|
|
});
|
2022-07-27 12:47:50 +02:00
|
|
|
});
|
|
|
|
|
2022-07-27 15:50:49 +02:00
|
|
|
acceptance("Wizard | Not permitted", function (needs) {
|
|
|
|
needs.user();
|
|
|
|
needs.pretender((server, helper) => {
|
2022-07-27 16:36:22 +02:00
|
|
|
server.get("/w/wizard.json", () => helper.response(wizardNotPermitted));
|
2022-07-27 15:50:49 +02:00
|
|
|
});
|
2022-07-27 12:47:50 +02:00
|
|
|
|
2022-07-27 15:50:49 +02:00
|
|
|
test("Wizard no access not permitted", async function (assert) {
|
|
|
|
await visit("/w/wizard");
|
|
|
|
assert.ok(exists(".wizard-no-access.not-permitted"));
|
|
|
|
});
|
|
|
|
});
|
2022-07-27 12:47:50 +02:00
|
|
|
|
|
|
|
acceptance("Wizard | Completed", function (needs) {
|
|
|
|
needs.user();
|
|
|
|
needs.pretender((server, helper) => {
|
2022-07-27 16:30:45 +02:00
|
|
|
server.get("/w/wizard.json", () => helper.response(wizardCompleted));
|
2022-07-27 12:47:50 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
test("Wizard no access completed", async function (assert) {
|
|
|
|
await visit("/w/wizard");
|
|
|
|
assert.ok(exists(".wizard-no-access.completed"));
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2023-07-11 18:49:08 +02:00
|
|
|
acceptance("Wizard | Redirect", function (needs) {
|
|
|
|
needs.user({
|
2023-07-11 18:58:10 +02:00
|
|
|
redirect_to_wizard: "wizard",
|
2023-07-11 18:49:08 +02:00
|
|
|
});
|
|
|
|
needs.pretender((server, helper) => {
|
|
|
|
server.get("/w/wizard.json", () => {
|
|
|
|
return helper.response(wizard);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
test("Redirect to pending Wizard", async function (assert) {
|
|
|
|
sinon.stub(DiscourseURL, "routeTo");
|
|
|
|
await visit("/latest");
|
|
|
|
assert.ok(
|
|
|
|
DiscourseURL.routeTo.calledWith("/w/wizard"),
|
|
|
|
"pending wizard routing works"
|
|
|
|
);
|
|
|
|
});
|
2023-09-08 08:13:52 +02:00
|
|
|
|
|
|
|
test("Don't redirect to pending Wizard when ingore redirect param is supplied", async function (assert) {
|
|
|
|
sinon.stub(DiscourseURL, "routeTo");
|
|
|
|
await visit("/latest?ignore_redirect=1");
|
|
|
|
assert.notOk(
|
|
|
|
DiscourseURL.routeTo.calledWith("/w/wizard"),
|
|
|
|
"pending wizard routing blocked"
|
|
|
|
);
|
|
|
|
});
|
2023-07-11 18:49:08 +02:00
|
|
|
});
|
|
|
|
|
2022-07-27 12:47:50 +02:00
|
|
|
acceptance("Wizard | Wizard", function (needs) {
|
|
|
|
needs.user();
|
|
|
|
needs.pretender((server, helper) => {
|
2022-07-27 16:30:45 +02:00
|
|
|
server.get("/w/wizard.json", () => {
|
2022-07-27 12:47:50 +02:00
|
|
|
return helper.response(wizard);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
test("Starts", async function (assert) {
|
|
|
|
await visit("/w/wizard");
|
|
|
|
assert.ok(query(".wizard-column"), true);
|
|
|
|
});
|
|
|
|
|
2022-08-01 18:18:21 +02:00
|
|
|
test("Applies the wizard body class", async function (assert) {
|
|
|
|
await visit("/w/wizard");
|
|
|
|
assert.ok($("body.custom-wizard").length);
|
|
|
|
});
|
|
|
|
|
2022-07-27 12:47:50 +02:00
|
|
|
test("Applies the body background color", async function (assert) {
|
|
|
|
await visit("/w/wizard");
|
|
|
|
assert.ok($("body")[0].style.background);
|
|
|
|
});
|
|
|
|
|
|
|
|
test("Renders the wizard form", async function (assert) {
|
|
|
|
await visit("/w/wizard");
|
|
|
|
assert.ok(exists(".wizard-column-contents .wizard-step"), true);
|
|
|
|
assert.ok(exists(".wizard-footer img"), true);
|
|
|
|
});
|
|
|
|
|
|
|
|
test("Renders the first step", async function (assert) {
|
|
|
|
await visit("/w/wizard");
|
|
|
|
assert.strictEqual(
|
|
|
|
query(".wizard-step-title p").textContent.trim(),
|
|
|
|
"Text"
|
|
|
|
);
|
|
|
|
assert.strictEqual(
|
|
|
|
query(".wizard-step-description p").textContent.trim(),
|
|
|
|
"Text inputs!"
|
|
|
|
);
|
|
|
|
assert.strictEqual(
|
|
|
|
query(".wizard-step-description p").textContent.trim(),
|
|
|
|
"Text inputs!"
|
|
|
|
);
|
|
|
|
assert.strictEqual(count(".wizard-step-form .wizard-field"), 6);
|
|
|
|
assert.ok(exists(".wizard-step-footer .wizard-progress"), true);
|
|
|
|
assert.ok(exists(".wizard-step-footer .wizard-buttons"), true);
|
|
|
|
});
|
2022-08-01 18:18:21 +02:00
|
|
|
|
|
|
|
test("Removes the wizard body class when navigating away", async function (assert) {
|
|
|
|
await visit("/");
|
|
|
|
assert.strictEqual($("body.custom-wizard").length, 0);
|
|
|
|
});
|
2022-07-27 12:47:50 +02:00
|
|
|
});
|
2023-01-26 11:26:24 +01:00
|
|
|
|
|
|
|
acceptance("Wizard | Guest access", function (needs) {
|
|
|
|
needs.pretender((server, helper) => {
|
|
|
|
server.get("/w/wizard.json", () => helper.response(wizardGuest));
|
|
|
|
});
|
|
|
|
|
|
|
|
test("Does not require login", async function (assert) {
|
|
|
|
await visit("/w/wizard");
|
|
|
|
assert.ok(!exists(".wizard-no-access.requires-login"));
|
|
|
|
});
|
|
|
|
|
|
|
|
test("Starts", async function (assert) {
|
|
|
|
await visit("/w/wizard");
|
|
|
|
assert.ok(query(".wizard-column"), true);
|
|
|
|
});
|
2023-02-07 12:46:17 +01:00
|
|
|
|
|
|
|
test("Applies the wizard body class", async function (assert) {
|
|
|
|
await visit("/w/wizard");
|
|
|
|
assert.ok($("body.custom-wizard").length);
|
|
|
|
});
|
|
|
|
|
|
|
|
test("Applies the body background color", async function (assert) {
|
|
|
|
await visit("/w/wizard");
|
|
|
|
assert.ok($("body")[0].style.background);
|
|
|
|
});
|
|
|
|
|
|
|
|
test("Renders the wizard form", async function (assert) {
|
|
|
|
await visit("/w/wizard");
|
|
|
|
assert.ok(exists(".wizard-column-contents .wizard-step"), true);
|
|
|
|
assert.ok(exists(".wizard-footer img"), true);
|
|
|
|
});
|
|
|
|
|
|
|
|
test("Renders the first step", async function (assert) {
|
|
|
|
await visit("/w/wizard");
|
|
|
|
assert.strictEqual(
|
|
|
|
query(".wizard-step-title p").textContent.trim(),
|
|
|
|
"Text"
|
|
|
|
);
|
|
|
|
assert.strictEqual(
|
|
|
|
query(".wizard-step-description p").textContent.trim(),
|
|
|
|
"Text inputs!"
|
|
|
|
);
|
|
|
|
assert.strictEqual(
|
|
|
|
query(".wizard-step-description p").textContent.trim(),
|
|
|
|
"Text inputs!"
|
|
|
|
);
|
|
|
|
assert.strictEqual(count(".wizard-step-form .wizard-field"), 6);
|
|
|
|
assert.ok(exists(".wizard-step-footer .wizard-progress"), true);
|
|
|
|
assert.ok(exists(".wizard-step-footer .wizard-buttons"), true);
|
|
|
|
});
|
|
|
|
|
|
|
|
test("Removes the wizard body class when navigating away", async function (assert) {
|
|
|
|
await visit("/");
|
|
|
|
assert.strictEqual($("body.custom-wizard").length, 0);
|
|
|
|
});
|
2023-01-26 11:26:24 +01:00
|
|
|
});
|
2024-02-23 10:33:42 +01:00
|
|
|
|
|
|
|
acceptance("Wizard | Resume on revisit", function (needs) {
|
|
|
|
needs.user();
|
|
|
|
|
|
|
|
test("Shows dialog", async function (assert) {
|
|
|
|
pretender.get("/w/wizard.json", () => {
|
|
|
|
return response(wizardResumeOnRevisit);
|
|
|
|
});
|
|
|
|
|
|
|
|
await visit("/w/wizard");
|
|
|
|
|
|
|
|
assert.strictEqual(count(".dialog-content:visible"), 1);
|
|
|
|
assert.strictEqual(
|
|
|
|
query(".dialog-header h3").textContent.trim(),
|
|
|
|
I18n.t("wizard.incomplete_submission.title", {
|
|
|
|
date: moment(wizardResumeOnRevisit.submission_last_updated_at).format(
|
|
|
|
"MMMM Do YYYY"
|
|
|
|
),
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
test("Resumes when resumed", async function (assert) {
|
|
|
|
pretender.get("/w/wizard.json", () => {
|
|
|
|
return response(wizardResumeOnRevisit);
|
|
|
|
});
|
|
|
|
await visit("/w/wizard");
|
|
|
|
await click(".dialog-footer .btn-primary");
|
|
|
|
assert.strictEqual(count(".dialog-content:visible"), 0);
|
|
|
|
});
|
|
|
|
|
|
|
|
test("Restarts when restarted", async function (assert) {
|
|
|
|
sinon.stub(DiscourseURL, "redirectTo");
|
|
|
|
let skips = 0;
|
|
|
|
pretender.get("/w/wizard.json", () => {
|
|
|
|
return response(wizardResumeOnRevisit);
|
|
|
|
});
|
|
|
|
pretender.put("/w/wizard/skip", () => {
|
|
|
|
skips++;
|
|
|
|
return response({});
|
|
|
|
});
|
|
|
|
await visit("/w/wizard");
|
|
|
|
await click(".dialog-footer .btn-default");
|
|
|
|
assert.strictEqual(skips, 1);
|
|
|
|
assert.ok(
|
|
|
|
DiscourseURL.redirectTo.calledWith("/w/wizard"),
|
|
|
|
"resuming wizard works"
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|