Skip to content

Commit

Permalink
feat(test): サーバーのバリデーションテストの実装
Browse files Browse the repository at this point in the history
  • Loading branch information
laminne committed Sep 9, 2023
1 parent a79b6bb commit bb46f48
Show file tree
Hide file tree
Showing 2 changed files with 163 additions and 0 deletions.
116 changes: 116 additions & 0 deletions src/domain/server.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
import { describe, expect, it } from "vitest";
import { Server, ServerArgs } from "./server.js";
import { Snowflake } from "../helpers/id_generator.js";

describe("Server", () => {
const defaultServerArgs: ServerArgs = {
id: "10101294855225344" as Snowflake,
host: "social.example.jp",
softwareName: "Mastodon",
softwareVersion: "4.0.0",
name: "example social",
description: "this is example social",
maintainer: "example maintainer",
maintainerEmail: "[email protected]",
iconURL: "https://social.example.jp/icon.png",
faviconURL: "https://social.example.jp/favicon.png",
};

it("128文字以上のホスト名は設定できない", () => {
expect(() => {
new Server({
...defaultServerArgs,
host: "a".repeat(128 + 1),
});
}).toThrowError(new Error("failed to create server: host is too long"));
});

it("4文字以下のホスト名は設定できない", () => {
expect(() => {
new Server({
...defaultServerArgs,
host: "a.b",
});
}).toThrowError(new Error("failed to create server: host is too short"));
});

it("ホスト名を設定できる", () => {
expect(() => {
new Server({
...defaultServerArgs,
});
}).toBeTruthy();
});

it("128文字以上のソフトウェア名は設定できない", () => {
expect(() => {
new Server({
...defaultServerArgs,
softwareName: "a".repeat(128 + 1),
});
}).toThrowError(
new Error("failed to create server: softwareName is too long"),
);
});

it("ソフトウェア名を設定できる", () => {
expect(() => {
new Server({
...defaultServerArgs,
});
}).toBeTruthy();
});

it("128文字以上のソフトウェアバージョンは設定できない", () => {
expect(() => {
new Server({
...defaultServerArgs,
softwareVersion: "a".repeat(128 + 1),
});
}).toThrowError(
new Error("failed to create server: softwareVersion is too long"),
);
});

it("128文字以上のサーバー名は設定できない", () => {
expect(() => {
new Server({
...defaultServerArgs,
name: "a".repeat(128 + 1),
});
}).toThrowError(new Error("failed to create server: name is too long"));
});

it("3000文字以上のサーバー説明文は設定できない", () => {
expect(() => {
new Server({
...defaultServerArgs,
description: "a".repeat(3000 + 1),
});
}).toThrowError(
new Error("failed to create server: description is too long"),
);
});

it("256文字以上の管理者名は設定できない", () => {
expect(() => {
new Server({
...defaultServerArgs,
maintainer: "a".repeat(256 + 1),
});
}).toThrowError(
new Error("failed to create server: maintainer is too long"),
);
});

it("256文字以上の管理者メールアドレスは設定できない", () => {
expect(() => {
new Server({
...defaultServerArgs,
maintainerEmail: "a".repeat(256 + 1),
});
}).toThrowError(
new Error("failed to create server: maintainerEmail is too long"),
);
});
});
47 changes: 47 additions & 0 deletions src/domain/server.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,18 @@
import { Snowflake } from "../helpers/id_generator.js";

export interface ServerArgs {
id: Snowflake;
host: string;
softwareName: string;
softwareVersion: string;
name: string;
description: string;
maintainer: string;
maintainerEmail: string;
iconURL: string;
faviconURL: string;
}

export class Server {
get softwareName(): string {
return this._softwareName;
Expand Down Expand Up @@ -105,6 +118,8 @@ export class Server {
iconURL: string;
faviconURL: string;
}) {
this.validate(args);

this._id = args.id;
this._host = args.host;
this._softwareName = args.softwareName;
Expand All @@ -116,4 +131,36 @@ export class Server {
this._iconURL = args.iconURL;
this._faviconURL = args.faviconURL;
}

private validate(args: ServerArgs) {
if ([...args.host].length > 128) {
throw new Error("failed to create server: host is too long");
} else if ([...args.host].length < 4) {
throw new Error("failed to create server: host is too short");
}

if ([...args.softwareName].length > 128) {
throw new Error("failed to create server: softwareName is too long");
}

if ([...args.softwareVersion].length > 128) {
throw new Error("failed to create server: softwareVersion is too long");
}

if ([...args.name].length > 128) {
throw new Error("failed to create server: name is too long");
}

if ([...args.description].length > 3000) {
throw new Error("failed to create server: description is too long");
}

if ([...args.maintainer].length > 256) {
throw new Error("failed to create server: maintainer is too long");
}

if ([...args.maintainerEmail].length > 256) {
throw new Error("failed to create server: maintainerEmail is too long");
}
}
}

0 comments on commit bb46f48

Please sign in to comment.