| 1 | import assert from "node:assert/strict"; |
| 2 | import { test } from "node:test"; |
| 3 | |
| 4 | import { CHECKS, pageText, verdict } from "./smoke.mjs"; |
| 5 | |
| 6 | test("a page's text leaves out scripts, styles and tags", () => { |
| 7 | const html = `<html><style>.a{}</style><script>var x="Request access"</script><h1>Have an <b>invite?</b></h1></html>`; |
| 8 | assert.equal(pageText(html), "Have an invite?"); |
| 9 | assert.equal(pageText("<p>Don't</p>"), "Don't"); |
| 10 | }); |
| 11 | |
| 12 | test("a check passes on its status with every phrase on the page", () => { |
| 13 | const check = { path: "/register", expect: ["Have an invite?", "Request access"] }; |
| 14 | assert.equal(verdict(check, 200, "<p>Have an invite?</p><button>Request access</button>"), null); |
| 15 | assert.equal(verdict(check, 500, ""), "answered 500, expected 200"); |
| 16 | assert.equal(verdict(check, 200, "<p>Have an invite?</p>"), 'missing "Request access"'); |
| 17 | }); |
| 18 | |
| 19 | test("a phrase only inside a script does not count", () => { |
| 20 | const check = { path: "/", expect: ["Request access"] }; |
| 21 | assert.equal(verdict(check, 200, `<script>"Request access"</script>`), 'missing "Request access"'); |
| 22 | }); |
| 23 | |
| 24 | test("the waitlist check sends an address identity refuses before writing", () => { |
| 25 | const waitlist = CHECKS.find((check) => check.form); |
| 26 | assert.ok(waitlist); |
| 27 | assert.equal(waitlist.form.intent, "request-access"); |
| 28 | assert.ok(!waitlist.form.email.includes("@"), "never a real-looking address, so nothing is kept"); |
| 29 | assert.equal(waitlist.status, 422); |
| 30 | assert.equal(verdict(waitlist, 422, "<p>Enter a valid email address.</p>"), null); |
| 31 | }); |