75 lines
3.1 KiB
JavaScript
75 lines
3.1 KiB
JavaScript
const test = require("node:test");
|
|
const assert = require("node:assert/strict");
|
|
const { validPublishedUrl, validateWorkspaceSettings, publicWorkspaceSettings } = require("../src/security/workspaceSettings");
|
|
|
|
test("booking publication rejects placeholders and insecure URLs", () => {
|
|
assert.equal(validPublishedUrl("https://calendly.com/your-coach/intro"), false);
|
|
assert.equal(validPublishedUrl("http://calendar.test/intro"), false);
|
|
assert.equal(validPublishedUrl("https://calendar.coach.test/intro"), false);
|
|
assert.equal(validPublishedUrl("https://calendar.realcoach.com/intro"), true);
|
|
});
|
|
|
|
test("publishing requires configured identity and contact", () => {
|
|
assert.deepEqual(validateWorkspaceSettings({ published: true, brand_color: "teal", social_links: [], packages: [], testimonials: [] }).sort(), [
|
|
"booking_url_required",
|
|
"coach_bio_required",
|
|
"coach_name_required",
|
|
"contact_email_invalid",
|
|
"legal_contact_email_invalid",
|
|
"legal_entity_name_required",
|
|
"legal_review_required",
|
|
"legal_terms_effective_date_required",
|
|
"practice_name_required",
|
|
"published_package_required",
|
|
]);
|
|
});
|
|
|
|
test("unpublished settings do not expose workspace identity", () => {
|
|
const value = publicWorkspaceSettings({ practice_name: "Private Practice", contact_email: "private@coach.test", published: false });
|
|
assert.deepEqual(value, { published: false });
|
|
});
|
|
|
|
test("published settings omit invalid URLs and unverified testimonials", () => {
|
|
const value = publicWorkspaceSettings({
|
|
published: true,
|
|
default_booking_url: "https://example.com",
|
|
social_links: [{ label: "Unsafe", href: "http://social.test" }],
|
|
packages: [{ name: "Coaching", booking_url: "https://example.com" }],
|
|
testimonials: [{ quote: "Private", name: "Client", verified: false }],
|
|
});
|
|
assert.equal(value.default_booking_url, null);
|
|
assert.deepEqual(value.social_links, []);
|
|
assert.equal(value.packages[0].booking_url, null);
|
|
assert.deepEqual(value.testimonials, []);
|
|
});
|
|
|
|
test("publication rejects placeholder identity and package booking links", () => {
|
|
const errors = validateWorkspaceSettings({
|
|
published: true,
|
|
practice_name: "Demo Coaching Practice",
|
|
coach_name: "Demo Coach",
|
|
contact_email: "coach@example.com",
|
|
brand_color: "teal",
|
|
social_links: [],
|
|
packages: [{ name: "Coaching", booking_url: "https://example.com/book" }],
|
|
testimonials: [],
|
|
});
|
|
assert.equal(errors.includes("practice_name_placeholder"), true);
|
|
assert.equal(errors.includes("coach_name_placeholder"), true);
|
|
assert.equal(errors.includes("contact_email_invalid"), true);
|
|
assert.equal(errors.includes("packages_invalid"), true);
|
|
});
|
|
|
|
test("workspace assets must use non-placeholder HTTPS URLs", () => {
|
|
const errors = validateWorkspaceSettings({
|
|
published: false,
|
|
logo_url: "http://assets.coach.test/logo.png",
|
|
coach_photo_url: "https://example.com/coach.jpg",
|
|
social_links: [],
|
|
packages: [],
|
|
testimonials: [],
|
|
});
|
|
assert.equal(errors.includes("logo_url_invalid"), true);
|
|
assert.equal(errors.includes("coach_photo_url_invalid"), true);
|
|
});
|