diff --git a/src/webmention/receive.js b/src/webmention/receive.js index 0489687..8f85918 100644 --- a/src/webmention/receive.js +++ b/src/webmention/receive.js @@ -1,6 +1,6 @@ function isValidUrl(url) { - return url && + return url !== undefined && (url.startsWith("http://") || url.startsWith("https://")) } @@ -19,9 +19,9 @@ function isValidUrl(url) { */ function validate(request) { return request.type === "application/x-www-form-urlencoded" && - request.body && - isValidUrl(request.body.source) && - isValidUrl(request.body.target) + request.body !== undefined && + isValidUrl(request?.body.source) && + isValidUrl(request?.body.target) } async function receive(body) { diff --git a/test/webmention/receive.test.js b/test/webmention/receive.test.js new file mode 100644 index 0000000..b7f2040 --- /dev/null +++ b/test/webmention/receive.test.js @@ -0,0 +1,97 @@ + +const { receive, validate } = require('../../src/webmention/receive') + +describe("validate tests", () => { + + const validhttpurl = "http://localhost/bla" + const validhttpsurl = "https://localhost/blie" + const invalidurl = "lolzw" + + test("is valid if source and target https urls", () => { + const result = validate({ + type: "application/x-www-form-urlencoded", + body: { + source: validhttpsurl, + target: validhttpsurl + } + }) + + expect(result).toBe(true) + }) + test("is valid if source and target http urls", () => { + const result = validate({ + type: "application/x-www-form-urlencoded", + body: { + source: validhttpurl, + target: validhttpurl + } + }) + + expect(result).toBe(true) + }) + test("is NOT valid if source is not a valid url", () => { + const result = validate({ + type: "application/x-www-form-urlencoded", + body: { + source: invalidurl, + target: validhttpurl + } + }) + + expect(result).toBe(false) + }) + test("is NOT valid if target is not a valid url", () => { + const result = validate({ + type: "application/x-www-form-urlencoded", + body: { + source: validhttpurl, + target: invalidurl + } + }) + + expect(result).toBe(false) + }) + test("is NOT valid if source is missing", () => { + const result = validate({ + type: "application/x-www-form-urlencoded", + body: { + target: validhttpurl + } + }) + + expect(result).toBe(false) + }) + test("is NOT valid if target is missing", () => { + const result = validate({ + type: "application/x-www-form-urlencoded", + body: { + source: validhttpurl + } + }) + + expect(result).toBe(false) + }) + test("is NOT valid if no valid encoded form", () => { + const result = validate({ + type: "ow-mai-got", + body: { + source: validhttpurl, + target: validhttpurl + } + }) + + expect(result).toBe(false) + }) + test("is NOT valid if body is missing", () => { + const result = validate({ + type: "application/x-www-form-urlencoded" + }) + + expect(result).toBe(false) + }) + +}) + +describe("receive webmention process tests", () => { + +}) \ No newline at end of file