fix: Server error when listing memberships for group with deleted user (#1288)

* fix: Server error when listing memberships for group with deleted user

* PR feedback: Filter before slice
This commit is contained in:
Tom Moor 2020-05-28 08:21:22 -07:00 committed by GitHub
parent ca1ba277ad
commit 7d55b7f69b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 36 additions and 1 deletions

View File

@ -40,7 +40,11 @@ router.post('groups.list', auth(), pagination(), async ctx => {
data: {
groups: groups.map(presentGroup),
groupMemberships: groups
.map(g => g.groupMemberships.slice(0, MAX_AVATAR_DISPLAY))
.map(g =>
g.groupMemberships
.filter(membership => !!membership.user)
.slice(0, MAX_AVATAR_DISPLAY)
)
.flat()
.map(presentGroupMembership),
},

View File

@ -144,6 +144,33 @@ describe('#groups.list', async () => {
expect(body.policies.length).toEqual(1);
expect(body.policies[0].abilities.read).toEqual(true);
});
it('should return groups when membership user is deleted', async () => {
const me = await buildUser();
const user = await buildUser({ teamId: me.teamId });
const group = await buildGroup({ teamId: user.teamId });
await group.addUser(user, { through: { createdById: me.id } });
await group.addUser(me, { through: { createdById: me.id } });
await user.destroy();
const res = await server.post('/api/groups.list', {
body: { token: me.getJwtToken() },
});
const body = await res.json();
expect(res.status).toEqual(200);
expect(body.data['groups'].length).toEqual(1);
expect(body.data['groups'][0].id).toEqual(group.id);
expect(body.data['groupMemberships'].length).toEqual(1);
expect(body.data['groupMemberships'][0].groupId).toEqual(group.id);
expect(body.data['groupMemberships'][0].user.id).toEqual(me.id);
expect(body.policies.length).toEqual(1);
expect(body.policies[0].abilities.read).toEqual(true);
});
});
describe('#groups.info', async () => {
@ -273,10 +300,14 @@ describe('#groups.memberships', async () => {
it('should allow filtering members in group by name', async () => {
const user = await buildUser();
const user2 = await buildUser({ name: "Won't find" });
const user3 = await buildUser({ teamId: user.teamId, name: 'Deleted' });
const group = await buildGroup({ teamId: user.teamId });
await group.addUser(user, { through: { createdById: user.id } });
await group.addUser(user2, { through: { createdById: user.id } });
await group.addUser(user3, { through: { createdById: user.id } });
await user3.destroy();
const res = await server.post('/api/groups.memberships', {
body: {