|
| 1 | +import { entries, mapEntries } from '@seedcompany/common'; |
1 | 2 | import { DateTime } from 'luxon';
|
2 | 3 | import { type ID, Role } from '~/common';
|
3 | 4 | import { graphql } from '~/graphql';
|
@@ -66,6 +67,15 @@ it('director change replaces memberships on open projects', async () => {
|
66 | 67 | });
|
67 | 68 | return project;
|
68 | 69 | })(),
|
| 70 | + hasMemberIncludingOtherRoles: await (async () => { |
| 71 | + const project = await createProject(app); |
| 72 | + await createProjectMember(app, { |
| 73 | + projectId: project.id, |
| 74 | + userId: directors.old.id, |
| 75 | + roles: [Role.RegionalDirector, Role.ProjectManager], |
| 76 | + }); |
| 77 | + return project; |
| 78 | + })(), |
69 | 79 | alreadyHasRoleFilled: await (async () => {
|
70 | 80 | const project = await createProject(app);
|
71 | 81 | await createProjectMember(app, {
|
@@ -138,33 +148,13 @@ it('director change replaces memberships on open projects', async () => {
|
138 | 148 | };
|
139 | 149 |
|
140 | 150 | const getResults = async () => {
|
141 |
| - const results = { |
142 |
| - needsSwapA: await fetchMembers(app, projects.needsSwapA.id), |
143 |
| - needsSwapB: await fetchMembers(app, projects.needsSwapB.id), |
144 |
| - doesNotHaveMember: await fetchMembers(app, projects.doesNotHaveMember.id), |
145 |
| - hasMemberButInactive: await fetchMembers( |
146 |
| - app, |
147 |
| - projects.hasMemberButInactive.id, |
148 |
| - ), |
149 |
| - alreadyHasRoleFilled: await fetchMembers( |
150 |
| - app, |
151 |
| - projects.alreadyHasRoleFilled.id, |
152 |
| - ), |
153 |
| - alreadyHasNewDirectorActive: await fetchMembers( |
154 |
| - app, |
155 |
| - projects.alreadyHasNewDirectorActive.id, |
156 |
| - ), |
157 |
| - alreadyHasNewDirectorInactive: await fetchMembers( |
158 |
| - app, |
159 |
| - projects.alreadyHasNewDirectorInactive.id, |
160 |
| - ), |
161 |
| - alreadyHasNewDirectorWithoutRole: await fetchMembers( |
162 |
| - app, |
163 |
| - projects.alreadyHasNewDirectorWithoutRole.id, |
164 |
| - ), |
165 |
| - closed: await fetchMembers(app, projects.closed.id), |
166 |
| - }; |
167 |
| - |
| 151 | + const resultList = await Promise.all( |
| 152 | + entries(projects).map(async ([key, project]) => { |
| 153 | + const results = await fetchMembers(app, project.id); |
| 154 | + return [key, results] as const; |
| 155 | + }), |
| 156 | + ); |
| 157 | + const results = mapEntries(resultList, (i) => i).asRecord; |
168 | 158 | return {
|
169 | 159 | get: (project: keyof typeof results, key: keyof typeof directors) => {
|
170 | 160 | const member = results[project].find(
|
@@ -200,6 +190,14 @@ it('director change replaces memberships on open projects', async () => {
|
200 | 190 | expect(before.get('hasMemberButInactive', 'old')).toEqual(InactiveRD);
|
201 | 191 | expect(before.get('hasMemberButInactive', 'new')).toBeUndefined();
|
202 | 192 | expect(before.get('hasMemberButInactive', 'unrelated')).toBeUndefined();
|
| 193 | + expect(before.get('hasMemberIncludingOtherRoles', 'old')).toEqual({ |
| 194 | + active: true, |
| 195 | + roles: [Role.RegionalDirector, Role.ProjectManager], |
| 196 | + }); |
| 197 | + expect(before.get('hasMemberIncludingOtherRoles', 'new')).toBeUndefined(); |
| 198 | + expect( |
| 199 | + before.get('hasMemberIncludingOtherRoles', 'unrelated'), |
| 200 | + ).toBeUndefined(); |
203 | 201 | expect(before.get('alreadyHasRoleFilled', 'old')).toBeUndefined();
|
204 | 202 | expect(before.get('alreadyHasRoleFilled', 'new')).toBeUndefined();
|
205 | 203 | expect(before.get('alreadyHasRoleFilled', 'unrelated')).toEqual(ActiveRD);
|
@@ -264,6 +262,14 @@ it('director change replaces memberships on open projects', async () => {
|
264 | 262 | expect(after.get('hasMemberButInactive', 'old')).toEqual(InactiveRD);
|
265 | 263 | expect(after.get('hasMemberButInactive', 'new')).toBeUndefined();
|
266 | 264 | expect(after.get('hasMemberButInactive', 'unrelated')).toBeUndefined();
|
| 265 | + expect(after.get('hasMemberIncludingOtherRoles', 'old')).toEqual({ |
| 266 | + active: true, // still active |
| 267 | + roles: [Role.ProjectManager], // but without RD |
| 268 | + }); |
| 269 | + expect(after.get('hasMemberIncludingOtherRoles', 'new')).toEqual(ActiveRD); |
| 270 | + expect( |
| 271 | + after.get('hasMemberIncludingOtherRoles', 'unrelated'), |
| 272 | + ).toBeUndefined(); |
267 | 273 | expect(after.get('alreadyHasRoleFilled', 'old')).toBeUndefined();
|
268 | 274 | expect(after.get('alreadyHasRoleFilled', 'new')).toBeUndefined();
|
269 | 275 | expect(after.get('alreadyHasRoleFilled', 'unrelated')).toEqual(ActiveRD);
|
|
0 commit comments