soapbox/src/jest/factory.ts

103 wiersze
2.4 KiB
TypeScript
Czysty Zwykły widok Historia

import { v4 as uuidv4 } from 'uuid';
import {
accountSchema,
2023-05-02 23:30:21 +00:00
cardSchema,
groupMemberSchema,
groupRelationshipSchema,
groupSchema,
groupTagSchema,
2023-05-02 23:49:13 +00:00
relationshipSchema,
2023-06-20 19:24:39 +00:00
statusSchema,
type Account,
2023-05-02 23:30:21 +00:00
type Card,
type Group,
type GroupMember,
type GroupRelationship,
type GroupTag,
2023-05-02 23:49:13 +00:00
type Relationship,
2023-05-13 01:50:30 +00:00
type Status,
2023-09-24 01:41:24 +00:00
Instance,
instanceSchema,
} from 'soapbox/schemas';
import { GroupRoles } from 'soapbox/schemas/group-member';
2023-06-20 19:24:39 +00:00
import type { PartialDeep } from 'type-fest';
// TODO: there's probably a better way to create these factory functions.
// This looks promising but didn't work on my first attempt: https://github.com/anatine/zod-plugins/tree/main/packages/zod-mock
2023-06-20 19:24:39 +00:00
function buildAccount(props: PartialDeep<Account> = {}): Account {
return accountSchema.parse(Object.assign({
id: uuidv4(),
2023-07-16 01:25:39 +00:00
url: `https://soapbox.test/users/${uuidv4()}`,
}, props));
}
2023-06-20 19:24:39 +00:00
function buildCard(props: PartialDeep<Card> = {}): Card {
2023-05-02 23:30:21 +00:00
return cardSchema.parse(Object.assign({
url: 'https://soapbox.test',
}, props));
}
2023-06-20 19:24:39 +00:00
function buildGroup(props: PartialDeep<Group> = {}): Group {
return groupSchema.parse(Object.assign({
id: uuidv4(),
2023-05-31 12:57:43 +00:00
owner: {
id: uuidv4(),
},
}, props));
}
2023-06-20 19:24:39 +00:00
function buildGroupRelationship(props: PartialDeep<GroupRelationship> = {}): GroupRelationship {
return groupRelationshipSchema.parse(Object.assign({
id: uuidv4(),
}, props));
}
2023-06-20 19:24:39 +00:00
function buildGroupTag(props: PartialDeep<GroupTag> = {}): GroupTag {
return groupTagSchema.parse(Object.assign({
id: uuidv4(),
name: uuidv4(),
}, props));
}
function buildGroupMember(
2023-06-20 19:24:39 +00:00
props: PartialDeep<GroupMember> = {},
accountProps: PartialDeep<Account> = {},
): GroupMember {
return groupMemberSchema.parse(Object.assign({
id: uuidv4(),
account: buildAccount(accountProps),
role: GroupRoles.USER,
}, props));
}
2023-09-24 01:41:24 +00:00
function buildInstance(props: PartialDeep<Instance> = {}) {
return instanceSchema.parse(props);
}
2023-06-20 19:24:39 +00:00
function buildRelationship(props: PartialDeep<Relationship> = {}): Relationship {
2023-05-02 23:49:13 +00:00
return relationshipSchema.parse(Object.assign({
id: uuidv4(),
}, props));
}
2023-06-20 19:24:39 +00:00
function buildStatus(props: PartialDeep<Status> = {}) {
return statusSchema.parse(Object.assign({
2023-05-08 17:29:11 +00:00
id: uuidv4(),
account: buildAccount(),
2023-05-08 17:29:11 +00:00
}, props));
}
2023-05-02 23:49:13 +00:00
export {
2023-06-20 19:24:39 +00:00
buildAccount,
2023-05-02 23:49:13 +00:00
buildCard,
buildGroup,
buildGroupMember,
2023-05-02 23:49:13 +00:00
buildGroupRelationship,
buildGroupTag,
2023-09-24 01:41:24 +00:00
buildInstance,
2023-05-02 23:49:13 +00:00
buildRelationship,
2023-05-08 17:29:11 +00:00
buildStatus,
2023-05-02 23:49:13 +00:00
};