Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
capJavert authored Feb 6, 2025
2 parents 23e710f + 9aa8a7e commit 5e58924
Show file tree
Hide file tree
Showing 7 changed files with 300 additions and 149 deletions.
4 changes: 2 additions & 2 deletions __tests__/notifications/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1295,7 +1295,7 @@ describe('storeNotificationBundle', () => {
);
expect(actual.notification.description).toBeFalsy();
expect(actual.notification.targetUrl).toEqual(
'http://localhost:5002/squads/a/moderate',
'http://localhost:5002/squads/moderate',
);
expect(actual.avatars).toEqual([
{
Expand Down Expand Up @@ -1352,7 +1352,7 @@ describe('storeNotificationBundle', () => {
);
expect(actual.notification.description).toEqual('Lacks value.');
expect(actual.notification.targetUrl).toEqual(
'http://localhost:5002/squads/a/moderate',
'http://localhost:5002/squads/moderate?handle=a',
);
expect(actual.avatars).toEqual([
{
Expand Down
98 changes: 76 additions & 22 deletions __tests__/posts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -153,18 +153,33 @@ beforeEach(async () => {
name: 'Joanna Deer',
},
]);
await con.getRepository(SquadSource).save({
id: 'm',
name: 'Moderated Squad',
image: 'http//image.com/m',
handle: 'moderatedSquad',
type: SourceType.Squad,
active: true,
private: false,
moderationRequired: true,
memberPostingRank: sourceRoleRank[SourceMemberRoles.Member],
memberInviteRank: sourceRoleRank[SourceMemberRoles.Member],
});
await con.getRepository(SquadSource).save([
{
id: 'm',
name: 'Moderated Squad',
image: 'http//image.com/m',
handle: 'moderatedSquad',
type: SourceType.Squad,
active: true,
private: false,
moderationRequired: true,
memberPostingRank: sourceRoleRank[SourceMemberRoles.Member],
memberInviteRank: sourceRoleRank[SourceMemberRoles.Member],
},
{
id: 'm2',
name: 'Second Moderated Squad',
image: 'http//image.com/m2',
handle: 'moderatedSquad2',
type: SourceType.Squad,
active: true,
private: false,
moderationRequired: true,
memberPostingRank: sourceRoleRank[SourceMemberRoles.Member],
memberInviteRank: sourceRoleRank[SourceMemberRoles.Member],
},
]);

await con.getRepository(SourceMember).save([
{
userId: '3',
Expand All @@ -184,6 +199,12 @@ beforeEach(async () => {
role: SourceMemberRoles.Member,
referralToken: randomUUID(),
},
{
userId: '2',
sourceId: 'm2',
role: SourceMemberRoles.Moderator,
referralToken: randomUUID(),
},
]);
await deleteKeysByPattern(`${rateLimiterName}:*`);
});
Expand Down Expand Up @@ -6442,7 +6463,7 @@ describe('query postCodeSnippets', () => {
});

describe('Source post moderation approve/reject', () => {
const [pendingId, rejectedId] = Array.from({ length: 2 }, () =>
const [pendingId, pendingId2, rejectedId] = Array.from({ length: 2 }, () =>
generateUUID(),
);
beforeEach(async () => {
Expand All @@ -6457,6 +6478,15 @@ describe('Source post moderation approve/reject', () => {
status: SourcePostModerationStatus.Pending,
type: PostType.Article,
},
{
id: pendingId2,
sourceId: 'm2',
createdById: '4',
title: 'Title',
content: 'Content',
status: SourcePostModerationStatus.Pending,
type: PostType.Article,
},
{
id: rejectedId,
sourceId: 'm',
Expand All @@ -6476,7 +6506,7 @@ describe('Source post moderation approve/reject', () => {
mutation ModerateSourcePost(
$postIds: [ID]!,
$status: String,
$sourceId: ID!,
$sourceId: ID,
$rejectionReason: String,
$moderatorMessage: String
) {
Expand All @@ -6494,7 +6524,6 @@ describe('Source post moderation approve/reject', () => {
mutation: MUTATION,
variables: {
postIds: [pendingId],
sourceId: 'm',
status: SourcePostModerationStatus.Approved,
},
},
Expand All @@ -6510,7 +6539,6 @@ describe('Source post moderation approve/reject', () => {
mutation: MUTATION,
variables: {
postIds: [pendingId],
sourceId: 'm',
status: SourcePostModerationStatus.Approved,
},
},
Expand All @@ -6526,7 +6554,6 @@ describe('Source post moderation approve/reject', () => {
mutation: MUTATION,
variables: {
postIds: [pendingId],
sourceId: 'm',
status: SourcePostModerationStatus.Approved,
},
},
Expand All @@ -6542,7 +6569,6 @@ describe('Source post moderation approve/reject', () => {
}> = await client.mutate(MUTATION, {
variables: {
postIds: [pendingId],
sourceId: 'm',
status: SourcePostModerationStatus.Approved,
},
});
Expand All @@ -6557,6 +6583,38 @@ describe('Source post moderation approve/reject', () => {
expect(post.moderatedById).toEqual('3');
});

it('should not approve posts in sources where user is not moderator', async () => {
loggedUser = '2'; // Not moderator of "m" squad, which "pendingId" post belongs to.

await testMutationErrorCode(
client,
{
mutation: MUTATION,
variables: {
postIds: [pendingId],
status: SourcePostModerationStatus.Approved,
},
},
'FORBIDDEN',
);
});

it('should throw error when one or more posts in postIds is from a source where user is not moderator', async () => {
loggedUser = '2'; // Not moderator of "m" squad, which "pendingId" post belongs to.

await testMutationErrorCode(
client,
{
mutation: MUTATION,
variables: {
postIds: [pendingId, pendingId2],
status: SourcePostModerationStatus.Approved,
},
},
'FORBIDDEN',
);
});

it('should reject pending posts', async () => {
loggedUser = '3'; // Moderator level

Expand All @@ -6565,7 +6623,6 @@ describe('Source post moderation approve/reject', () => {
}> = await client.mutate(MUTATION, {
variables: {
postIds: [pendingId],
sourceId: 'm',
status: SourcePostModerationStatus.Rejected,
rejectionReason: 'Spam',
moderatorMessage: 'This is spam',
Expand Down Expand Up @@ -6593,7 +6650,6 @@ describe('Source post moderation approve/reject', () => {
mutation: MUTATION,
variables: {
postIds: [pendingId],
sourceId: 'm',
status: SourcePostModerationStatus.Rejected,
moderatorMessage: 'This is spam',
},
Expand All @@ -6611,7 +6667,6 @@ describe('Source post moderation approve/reject', () => {
mutation: MUTATION,
variables: {
postIds: [pendingId],
sourceId: 'm',
status: SourcePostModerationStatus.Rejected,
rejectionReason: 'Other',
},
Expand All @@ -6628,7 +6683,6 @@ describe('Source post moderation approve/reject', () => {
}> = await client.mutate(MUTATION, {
variables: {
postIds: [pendingId, rejectedId],
sourceId: 'm',
status: SourcePostModerationStatus.Approved,
},
});
Expand Down
Loading

0 comments on commit 5e58924

Please sign in to comment.