describe("pingback receive validation tests", () => {
const { validate } = require('../../src/pingback/receive')
test("not valid if malformed XML as body", () => {
const result = validate("ola pola")
expect(result).toBe(false)
})
test("not valid if methodName is not pingback.ping", () => {
const result = validate(`
ka.tsjing
https://cool.site
https://brainbaking.com/post/2021/03/cool-ness
`)
expect(result).toBe(false)
})
test("not valid if less than two parameters", () => {
const result = validate(`
pingback.ping
https://brainbaking.com/post/2021/03/cool-ness
`)
expect(result).toBe(false)
})
test("not valid if more than two parameters", () => {
const xml = `
pingback.ping
https://cool.site
https://brainbaking.com/post/2021/03/cool-ness
https://brainbaking.com/post/2021/03/cool-ness
`
expect(validate(xml)).toBe(false)
})
test("not valid if target is not in trusted domains from config", () => {
const result = validate(`
pingback.ping
https://cool.site
https://flashballz.com/post/2021/03/cool-ness
`)
expect(result).toBe(false)
})
test("not valid if target is not http(s)", () => {
const result = validate(`
pingback.ping
https://cool.site
gemini://brainbaking.com/post/2021/03/cool-ness
`)
expect(result).toBe(false)
})
test("not valid if source is not http(s)", () => {
const result = validate(`
pingback.ping
gemini://cool.site
https://brainbaking.com/post/2021/03/cool-ness
`)
expect(result).toBe(false)
})
test("is valid if pingback.ping and two http(s) parameters of which target is trusted", () => {
const result = validate(`
pingback.ping
https://cool.site
https://brainbaking.com/post/2021/03/cool-ness
`)
expect(result).toBe(true)
})
})