UNPKG

@fedify/fedify

Version:

An ActivityPub server framework

205 lines (201 loc) 4.5 kB
import { Temporal } from "@js-temporal/polyfill"; import { URLPattern } from "urlpattern-polyfill"; globalThis.addEventListener = () => {}; import { assertEquals } from "../assert_equals-CTYbeopb.js"; import "../assert-DmFG7ppO.js"; import "../assert_instance_of-CF09JHYM.js"; import "../semver-DWClQt_5.js"; import { nodeInfoToJson } from "../types-C7C_l-jz.js"; import { test } from "../testing-BZ0dJ4qn.js"; import "../std__assert-vp0TKMS1.js"; import "../assert_rejects-C-sxEMM5.js"; import "../assert_is_error-nrwA1GeT.js"; import "../assert_not_equals-Dc7y-V5Q.js"; import { assertThrows } from "../assert_throws-Cn9C6Jur.js"; //#region nodeinfo/types.test.ts test("nodeInfoToJson()", () => { const validInfo = { software: { name: "software-name", version: { major: 1, minor: 2, patch: 3 } }, protocols: ["activitypub"], usage: { users: { total: 100, activeHalfyear: 50, activeMonth: 10 }, localPosts: 1e3, localComments: 1e4 } }; assertEquals(nodeInfoToJson(validInfo), { "$schema": "http://nodeinfo.diaspora.software/ns/schema/2.1#", version: "2.1", software: { name: "software-name", version: "1.2.3", repository: void 0, homepage: void 0 }, protocols: ["activitypub"], services: { inbound: [], outbound: [] }, openRegistrations: false, usage: { localComments: 1e4, localPosts: 1e3, users: { activeHalfyear: 50, activeMonth: 10, total: 100 } }, metadata: {} }); assertEquals(nodeInfoToJson({ ...validInfo, software: { ...validInfo.software, repository: new URL("https://example.com/repo"), homepage: new URL("https://example.com/home") }, services: { inbound: ["atom1.0", "imap"], outbound: ["atom1.0", "smtp"] }, openRegistrations: true }), { "$schema": "http://nodeinfo.diaspora.software/ns/schema/2.1#", version: "2.1", software: { name: "software-name", version: "1.2.3", repository: "https://example.com/repo", homepage: "https://example.com/home" }, protocols: ["activitypub"], services: { inbound: ["atom1.0", "imap"], outbound: ["atom1.0", "smtp"] }, openRegistrations: true, usage: { localComments: 1e4, localPosts: 1e3, users: { activeHalfyear: 50, activeMonth: 10, total: 100 } }, metadata: {} }); assertThrows(() => nodeInfoToJson({ ...validInfo, software: { ...validInfo.software, name: "INVALID-NAME" } }), TypeError, "Invalid software name"); assertThrows(() => nodeInfoToJson({ ...validInfo, protocols: [] }), TypeError, "At least one protocol must be supported"); assertThrows(() => nodeInfoToJson({ ...validInfo, usage: { ...validInfo.usage, users: { ...validInfo.usage.users, total: -1 } } }), TypeError, "Invalid total users"); assertThrows(() => nodeInfoToJson({ ...validInfo, usage: { ...validInfo.usage, users: { ...validInfo.usage.users, total: 1.23 } } }), TypeError, "Invalid total users"); assertThrows(() => nodeInfoToJson({ ...validInfo, usage: { ...validInfo.usage, users: { ...validInfo.usage.users, activeHalfyear: -1 } } }), TypeError, "Invalid active halfyear users"); assertThrows(() => nodeInfoToJson({ ...validInfo, usage: { ...validInfo.usage, users: { ...validInfo.usage.users, activeHalfyear: 1.23 } } }), TypeError, "Invalid active halfyear users"); assertThrows(() => nodeInfoToJson({ ...validInfo, usage: { ...validInfo.usage, users: { ...validInfo.usage.users, activeMonth: -1 } } }), TypeError, "Invalid active month users"); assertThrows(() => nodeInfoToJson({ ...validInfo, usage: { ...validInfo.usage, users: { ...validInfo.usage.users, activeMonth: 1.23 } } }), TypeError, "Invalid active month users"); assertThrows(() => nodeInfoToJson({ ...validInfo, usage: { ...validInfo.usage, localPosts: -1 } }), TypeError, "Invalid local posts"); assertThrows(() => nodeInfoToJson({ ...validInfo, usage: { ...validInfo.usage, localPosts: 1.23 } }), TypeError, "Invalid local posts"); assertThrows(() => nodeInfoToJson({ ...validInfo, usage: { ...validInfo.usage, localComments: -1 } }), TypeError, "Invalid local comments"); assertThrows(() => nodeInfoToJson({ ...validInfo, usage: { ...validInfo.usage, localComments: 1.23 } }), TypeError, "Invalid local comments"); }); //#endregion