Merge branch 'groupschema-tests' into 'develop'
Add group factory functions for tests, add a groupSchema test See merge request soapbox-pub/soapbox!2344
This commit is contained in:
commit
6ac57910bf
9 changed files with 68 additions and 23 deletions
16
app/soapbox/__fixtures__/group-truthsocial.json
Normal file
16
app/soapbox/__fixtures__/group-truthsocial.json
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
{
|
||||||
|
"note": "patriots 900000001",
|
||||||
|
"discoverable": true,
|
||||||
|
"id": "109989480368015378",
|
||||||
|
"domain": null,
|
||||||
|
"avatar": "https://media.covfefe.social/groups/avatars/109/989/480/368/015/378/original/50b0d899bc5aae13.jpg",
|
||||||
|
"avatar_static": "https://media.covfefe.social/groups/avatars/109/989/480/368/015/378/original/50b0d899bc5aae13.jpg",
|
||||||
|
"header": "https://media.covfefe.social/groups/headers/109/989/480/368/015/378/original/c5063b59f919cd4a.png",
|
||||||
|
"header_static": "https://media.covfefe.social/groups/headers/109/989/480/368/015/378/original/c5063b59f919cd4a.png",
|
||||||
|
"group_visibility": "everyone",
|
||||||
|
"created_at": "2023-03-08T00:00:00.000Z",
|
||||||
|
"display_name": "PATRIOT PATRIOTS",
|
||||||
|
"membership_required": true,
|
||||||
|
"members_count": 1,
|
||||||
|
"tags": []
|
||||||
|
}
|
|
@ -1,7 +1,7 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
|
import { buildGroup, buildGroupRelationship } from 'soapbox/jest/factory';
|
||||||
import { render, screen } from 'soapbox/jest/test-helpers';
|
import { render, screen } from 'soapbox/jest/test-helpers';
|
||||||
import { normalizeGroup, normalizeGroupRelationship } from 'soapbox/normalizers';
|
|
||||||
import { Group } from 'soapbox/types/entities';
|
import { Group } from 'soapbox/types/entities';
|
||||||
|
|
||||||
import GroupActionButton from '../group-action-button';
|
import GroupActionButton from '../group-action-button';
|
||||||
|
@ -11,7 +11,7 @@ let group: Group;
|
||||||
describe('<GroupActionButton />', () => {
|
describe('<GroupActionButton />', () => {
|
||||||
describe('with no group relationship', () => {
|
describe('with no group relationship', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
group = normalizeGroup({
|
group = buildGroup({
|
||||||
relationship: null,
|
relationship: null,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -43,8 +43,8 @@ describe('<GroupActionButton />', () => {
|
||||||
|
|
||||||
describe('with no group relationship member', () => {
|
describe('with no group relationship member', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
group = normalizeGroup({
|
group = buildGroup({
|
||||||
relationship: normalizeGroupRelationship({
|
relationship: buildGroupRelationship({
|
||||||
member: null,
|
member: null,
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
@ -77,8 +77,8 @@ describe('<GroupActionButton />', () => {
|
||||||
|
|
||||||
describe('when the user has requested to join', () => {
|
describe('when the user has requested to join', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
group = normalizeGroup({
|
group = buildGroup({
|
||||||
relationship: normalizeGroupRelationship({
|
relationship: buildGroupRelationship({
|
||||||
requested: true,
|
requested: true,
|
||||||
member: true,
|
member: true,
|
||||||
}),
|
}),
|
||||||
|
@ -94,8 +94,8 @@ describe('<GroupActionButton />', () => {
|
||||||
|
|
||||||
describe('when the user is an Admin', () => {
|
describe('when the user is an Admin', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
group = normalizeGroup({
|
group = buildGroup({
|
||||||
relationship: normalizeGroupRelationship({
|
relationship: buildGroupRelationship({
|
||||||
requested: false,
|
requested: false,
|
||||||
member: true,
|
member: true,
|
||||||
role: 'admin',
|
role: 'admin',
|
||||||
|
@ -112,8 +112,8 @@ describe('<GroupActionButton />', () => {
|
||||||
|
|
||||||
describe('when the user is just a member', () => {
|
describe('when the user is just a member', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
group = normalizeGroup({
|
group = buildGroup({
|
||||||
relationship: normalizeGroupRelationship({
|
relationship: buildGroupRelationship({
|
||||||
requested: false,
|
requested: false,
|
||||||
member: true,
|
member: true,
|
||||||
role: 'user',
|
role: 'user',
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
|
import { buildGroup } from 'soapbox/jest/factory';
|
||||||
import { render, screen } from 'soapbox/jest/test-helpers';
|
import { render, screen } from 'soapbox/jest/test-helpers';
|
||||||
import { normalizeGroup } from 'soapbox/normalizers';
|
|
||||||
import { Group } from 'soapbox/types/entities';
|
import { Group } from 'soapbox/types/entities';
|
||||||
|
|
||||||
import GroupMemberCount from '../group-member-count';
|
import GroupMemberCount from '../group-member-count';
|
||||||
|
@ -12,7 +12,7 @@ describe('<GroupMemberCount />', () => {
|
||||||
describe('with support for "members_count"', () => {
|
describe('with support for "members_count"', () => {
|
||||||
describe('with 1 member', () => {
|
describe('with 1 member', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
group = normalizeGroup({
|
group = buildGroup({
|
||||||
members_count: 1,
|
members_count: 1,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -26,7 +26,7 @@ describe('<GroupMemberCount />', () => {
|
||||||
|
|
||||||
describe('with 2 members', () => {
|
describe('with 2 members', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
group = normalizeGroup({
|
group = buildGroup({
|
||||||
members_count: 2,
|
members_count: 2,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -40,7 +40,7 @@ describe('<GroupMemberCount />', () => {
|
||||||
|
|
||||||
describe('with 1000 members', () => {
|
describe('with 1000 members', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
group = normalizeGroup({
|
group = buildGroup({
|
||||||
members_count: 1000,
|
members_count: 1000,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
|
import { buildGroup } from 'soapbox/jest/factory';
|
||||||
import { render, screen } from 'soapbox/jest/test-helpers';
|
import { render, screen } from 'soapbox/jest/test-helpers';
|
||||||
import { normalizeGroup } from 'soapbox/normalizers';
|
|
||||||
import { Group } from 'soapbox/types/entities';
|
import { Group } from 'soapbox/types/entities';
|
||||||
|
|
||||||
import GroupPrivacy from '../group-privacy';
|
import GroupPrivacy from '../group-privacy';
|
||||||
|
@ -11,7 +11,7 @@ let group: Group;
|
||||||
describe('<GroupPrivacy />', () => {
|
describe('<GroupPrivacy />', () => {
|
||||||
describe('with a Private group', () => {
|
describe('with a Private group', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
group = normalizeGroup({
|
group = buildGroup({
|
||||||
locked: true,
|
locked: true,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -25,7 +25,7 @@ describe('<GroupPrivacy />', () => {
|
||||||
|
|
||||||
describe('with a Public group', () => {
|
describe('with a Public group', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
group = normalizeGroup({
|
group = buildGroup({
|
||||||
locked: false,
|
locked: false,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
import { __stub } from 'soapbox/api';
|
import { __stub } from 'soapbox/api';
|
||||||
|
import { buildGroup } from 'soapbox/jest/factory';
|
||||||
import { render, screen, waitFor } from 'soapbox/jest/test-helpers';
|
import { render, screen, waitFor } from 'soapbox/jest/test-helpers';
|
||||||
import { normalizeGroup, normalizeInstance } from 'soapbox/normalizers';
|
import { normalizeInstance } from 'soapbox/normalizers';
|
||||||
|
|
||||||
import Search from '../search';
|
import Search from '../search';
|
||||||
|
|
||||||
|
@ -35,7 +36,7 @@ describe('<Search />', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
__stub((mock) => {
|
__stub((mock) => {
|
||||||
mock.onGet('/api/v1/groups/search').reply(200, [
|
mock.onGet('/api/v1/groups/search').reply(200, [
|
||||||
normalizeGroup({
|
buildGroup({
|
||||||
display_name: 'Group',
|
display_name: 'Group',
|
||||||
id: '1',
|
id: '1',
|
||||||
}),
|
}),
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
import { Map as ImmutableMap } from 'immutable';
|
import { Map as ImmutableMap } from 'immutable';
|
||||||
|
|
||||||
import { __stub } from 'soapbox/api';
|
import { __stub } from 'soapbox/api';
|
||||||
|
import { buildGroup, buildGroupRelationship } from 'soapbox/jest/factory';
|
||||||
import { renderHook, waitFor } from 'soapbox/jest/test-helpers';
|
import { renderHook, waitFor } from 'soapbox/jest/test-helpers';
|
||||||
import { normalizeAccount, normalizeGroup, normalizeGroupRelationship, normalizeInstance } from 'soapbox/normalizers';
|
import { normalizeAccount, normalizeInstance } from 'soapbox/normalizers';
|
||||||
|
|
||||||
import { useGroupsPath } from '../useGroupsPath';
|
import { useGroupsPath } from '../useGroupsPath';
|
||||||
|
|
||||||
|
@ -53,14 +54,14 @@ describe('useGroupsPath()', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
__stub((mock) => {
|
__stub((mock) => {
|
||||||
mock.onGet('/api/v1/groups').reply(200, [
|
mock.onGet('/api/v1/groups').reply(200, [
|
||||||
normalizeGroup({
|
buildGroup({
|
||||||
display_name: 'Group',
|
display_name: 'Group',
|
||||||
id: '1',
|
id: '1',
|
||||||
}),
|
}),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
mock.onGet('/api/v1/groups/relationships?id[]=1').reply(200, [
|
mock.onGet('/api/v1/groups/relationships?id[]=1').reply(200, [
|
||||||
normalizeGroupRelationship({
|
buildGroupRelationship({
|
||||||
id: '1',
|
id: '1',
|
||||||
}),
|
}),
|
||||||
]);
|
]);
|
||||||
|
|
20
app/soapbox/jest/factory.ts
Normal file
20
app/soapbox/jest/factory.ts
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
import { v4 as uuidv4 } from 'uuid';
|
||||||
|
|
||||||
|
import { groupSchema, Group, groupRelationshipSchema, GroupRelationship } from 'soapbox/schemas';
|
||||||
|
|
||||||
|
// 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
|
||||||
|
|
||||||
|
function buildGroup(props: Record<string, any> = {}): Group {
|
||||||
|
return groupSchema.parse(Object.assign({
|
||||||
|
id: uuidv4(),
|
||||||
|
}, props));
|
||||||
|
}
|
||||||
|
|
||||||
|
function buildGroupRelationship(props: Record<string, any> = {}): GroupRelationship {
|
||||||
|
return groupRelationshipSchema.parse(Object.assign({
|
||||||
|
id: uuidv4(),
|
||||||
|
}, props));
|
||||||
|
}
|
||||||
|
|
||||||
|
export { buildGroup, buildGroupRelationship };
|
7
app/soapbox/schemas/__tests__/group.test.ts
Normal file
7
app/soapbox/schemas/__tests__/group.test.ts
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
import { groupSchema } from '../group';
|
||||||
|
|
||||||
|
test('groupSchema with a TruthSocial group', () => {
|
||||||
|
const data = require('soapbox/__fixtures__/group-truthsocial.json');
|
||||||
|
const group = groupSchema.parse(data);
|
||||||
|
expect(group.display_name_html).toEqual('PATRIOT PATRIOTS');
|
||||||
|
});
|
|
@ -21,7 +21,7 @@ const groupSchema = z.object({
|
||||||
group_visibility: z.string().catch(''), // TruthSocial
|
group_visibility: z.string().catch(''), // TruthSocial
|
||||||
header: z.string().catch(headerMissing),
|
header: z.string().catch(headerMissing),
|
||||||
header_static: z.string().catch(''),
|
header_static: z.string().catch(''),
|
||||||
id: z.string().catch(''),
|
id: z.string(),
|
||||||
locked: z.boolean().catch(false),
|
locked: z.boolean().catch(false),
|
||||||
membership_required: z.boolean().catch(false),
|
membership_required: z.boolean().catch(false),
|
||||||
members_count: z.number().catch(0),
|
members_count: z.number().catch(0),
|
||||||
|
|
Loading…
Reference in a new issue