111 lines
3.3 KiB
TypeScript
111 lines
3.3 KiB
TypeScript
import { createPinia, setActivePinia } from "pinia";
|
|
import { beforeEach, describe, expect, vi } from "vitest";
|
|
|
|
import { START_LOCATION } from "vue-router";
|
|
import { useUserStore } from "../../stores/user";
|
|
import { onboardingRedirect } from "../onboarding";
|
|
|
|
describe("Onboarding", () => {
|
|
afterEach(() => {
|
|
vi.restoreAllMocks();
|
|
});
|
|
|
|
beforeEach(() => {
|
|
setActivePinia(createPinia());
|
|
});
|
|
|
|
it("redirect guest", () => {
|
|
const user = useUserStore();
|
|
user.loggedIn = false;
|
|
const mock = vi.fn();
|
|
onboardingRedirect(routeLocation("accountConfirm", "uk"), START_LOCATION, mock);
|
|
expect(mock).toHaveBeenCalledWith({
|
|
name: "accountCreate",
|
|
params: { courseType: "uk" },
|
|
});
|
|
});
|
|
|
|
it("redirect logged-in user from accountCreate to accountConfirm", () => {
|
|
const user = useUserStore();
|
|
user.loggedIn = true;
|
|
const mockNext = vi.fn();
|
|
onboardingRedirect(routeLocation("accountCreate", "uk"), START_LOCATION, mockNext);
|
|
expect(mockNext).toHaveBeenCalledWith({
|
|
name: "accountConfirm",
|
|
params: { courseType: "uk" },
|
|
});
|
|
});
|
|
|
|
it("UK: redirect to profile next route for logged-in user with organisation", () => {
|
|
const user = useUserStore();
|
|
user.loggedIn = true;
|
|
user.organisation = 1;
|
|
const mockNext = vi.fn();
|
|
onboardingRedirect(routeLocation("accountProfile", "uk"), START_LOCATION, mockNext);
|
|
expect(mockNext).toHaveBeenCalledWith({
|
|
name: "setupComplete",
|
|
params: { courseType: "uk" },
|
|
});
|
|
});
|
|
|
|
it("VV: redirect to profile next route for logged-in user with organisation", () => {
|
|
const testCases = ["vv-de", "vv-it", "vv-fr"];
|
|
testCases.forEach((testCase) => {
|
|
const user = useUserStore();
|
|
user.loggedIn = true;
|
|
user.organisation = 1;
|
|
const mockNext = vi.fn();
|
|
onboardingRedirect(
|
|
routeLocation("accountProfile", testCase),
|
|
START_LOCATION,
|
|
mockNext
|
|
);
|
|
expect(mockNext).toHaveBeenCalledWith({
|
|
name: "checkoutAddress",
|
|
params: { courseType: testCase },
|
|
});
|
|
});
|
|
});
|
|
|
|
it("no redirect for logged-in user without organisation to accountConfirm", () => {
|
|
const user = useUserStore();
|
|
user.loggedIn = true;
|
|
user.organisation = null;
|
|
const mockNext = vi.fn();
|
|
onboardingRedirect(routeLocation("accountConfirm", "uk"), START_LOCATION, mockNext);
|
|
expect(mockNext).toHaveBeenCalledWith(); // No arguments passed means no redirection
|
|
});
|
|
|
|
it("no redirect for logged-in user to a non-relevant route", () => {
|
|
const user = useUserStore();
|
|
user.loggedIn = true;
|
|
const mockNext = vi.fn();
|
|
onboardingRedirect(routeLocation("someOtherRoute", "uk"), START_LOCATION, mockNext);
|
|
expect(mockNext).toHaveBeenCalledWith(); // No arguments passed means no redirection
|
|
});
|
|
|
|
it("no redirect for guest on accountCreate page", () => {
|
|
const user = useUserStore();
|
|
user.loggedIn = false;
|
|
const mockNext = vi.fn();
|
|
onboardingRedirect(routeLocation("accountCreate", "uk"), START_LOCATION, mockNext);
|
|
expect(mockNext).toHaveBeenCalledWith(); // No arguments passed means no redirection
|
|
});
|
|
});
|
|
|
|
function routeLocation(name: string, courseType: string) {
|
|
return {
|
|
fullPath: "",
|
|
hash: "",
|
|
matched: [],
|
|
meta: {},
|
|
name: name,
|
|
params: {
|
|
courseType,
|
|
},
|
|
path: "",
|
|
query: {},
|
|
redirectedFrom: undefined,
|
|
};
|
|
}
|