Skip to content

Commit 268574c

Browse files
authored
fix: only show active fap reviews in ProposalTableReviewer (#1269)
1 parent ba63b16 commit 268574c

7 files changed

Lines changed: 65 additions & 10 deletions

File tree

apps/backend/src/datasources/ReviewDataSource.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,16 @@ export interface ReviewDataSource {
2121
userId?: number,
2222
callId?: number,
2323
instrumentId?: number,
24-
submitted?: number
24+
submitted?: number,
25+
active?: boolean
2526
): Promise<Review[]>;
2627
getAllUsersReviews(
2728
fapIds: number[],
2829
userId?: number,
2930
callId?: number,
3031
instrumentId?: number,
31-
submitted?: number
32+
submitted?: number,
33+
active?: boolean
3234
): Promise<Review[]>;
3335
getAssignmentReview(
3436
fapId: number,

apps/backend/src/datasources/postgres/ReviewDataSource.ts

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,8 @@ export default class PostgresReviewDataSource implements ReviewDataSource {
349349
userId?: number,
350350
callId?: number,
351351
instrumentId?: number,
352-
status?: ReviewStatus
352+
status?: ReviewStatus,
353+
active?: boolean
353354
): Promise<Review[]> {
354355
return database
355356
.select()
@@ -378,6 +379,16 @@ export default class PostgresReviewDataSource implements ReviewDataSource {
378379
if (status !== undefined && status !== null) {
379380
qb.where('fap_reviews.status', status);
380381
}
382+
383+
if (active) {
384+
qb.join('proposals', {
385+
'proposals.proposal_pk': 'fap_reviews.proposal_pk',
386+
});
387+
qb.join('call', {
388+
'call.call_id': 'proposals.call_id',
389+
});
390+
qb.where('call.call_fap_review_ended', false);
391+
}
381392
})
382393
.whereIn('fap_id', fapIds)
383394
.distinctOn('fap_reviews.proposal_pk')
@@ -414,7 +425,8 @@ export default class PostgresReviewDataSource implements ReviewDataSource {
414425
userId?: number,
415426
callId?: number,
416427
instrumentId?: number,
417-
status?: ReviewStatus
428+
status?: ReviewStatus,
429+
active?: boolean
418430
): Promise<Review[]> {
419431
return database
420432
.select('fapReviewsTemp.*')
@@ -440,6 +452,16 @@ export default class PostgresReviewDataSource implements ReviewDataSource {
440452
if (status !== null && status !== undefined) {
441453
qb.where('fap_reviews.status', status);
442454
}
455+
456+
if (active) {
457+
qb.join('proposals', {
458+
'proposals.proposal_pk': 'fap_reviews.proposal_pk',
459+
});
460+
qb.join('call', {
461+
'call.call_id': 'proposals.call_id',
462+
});
463+
qb.where('call.call_fap_review_ended', false);
464+
}
443465
})
444466
.whereIn('fap_id', fapIds)
445467
.as('fapReviewsTemp')

apps/backend/src/resolvers/types/User.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -114,9 +114,10 @@ export class UserResolver {
114114
@Arg('callId', () => Int, { nullable: true }) callId: number,
115115
@Arg('instrumentId', () => Int, { nullable: true }) instrumentId: number,
116116
@Arg('status', () => ReviewStatus, { nullable: true }) status: number,
117-
@Arg('reviewer', () => ReviewerFilter, { nullable: true })
118-
reviewer: number,
119-
@Ctx() context: ResolverContext
117+
@Arg('reviewer', () => ReviewerFilter, { nullable: true }) reviewer: number,
118+
@Arg('active', () => Boolean, { nullable: true }) active: boolean,
119+
@Ctx()
120+
context: ResolverContext
120121
) {
121122
if (!context.user || !context.user.currentRole) {
122123
return [];
@@ -136,15 +137,17 @@ export class UserResolver {
136137
user.id,
137138
callId,
138139
instrumentId,
139-
status
140+
status,
141+
active
140142
);
141143
} else {
142144
return context.queries.review.dataSource.getAllUsersReviews(
143145
fapsUserIsMemberOf.map((faps) => faps.id),
144146
user.id,
145147
callId,
146148
instrumentId,
147-
status
149+
status,
150+
active
148151
);
149152
}
150153
}

apps/e2e/cypress/e2e/FAPs.cy.ts

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1816,6 +1816,31 @@ context('Fap reviews tests', () => {
18161816
cy.contains(proposal1.title);
18171817
cy.contains(proposal3.title);
18181818
});
1819+
it('Fap Reviewer should only be able to see proposals from calls with active fap review periods', () => {
1820+
cy.get('#reviewer-selection', { timeout: 5000 })
1821+
.parent()
1822+
.should('be.visible')
1823+
.click();
1824+
cy.get('[role="presentation"]').contains('My proposals').click();
1825+
cy.finishedLoading();
1826+
cy.contains(proposal1.title);
1827+
1828+
cy.updateCall({
1829+
id: initialDBData.call.id,
1830+
callFapReviewEnded: true,
1831+
});
1832+
cy.reload();
1833+
1834+
cy.get('#reviewer-selection', { timeout: 5000 })
1835+
.parent()
1836+
.should('be.visible')
1837+
.click();
1838+
cy.get('[role="presentation"]').contains('My proposals').click();
1839+
cy.finishedLoading();
1840+
1841+
cy.contains(proposal1.title).should('not.exist');
1842+
});
1843+
18191844
it('Fap Reviewer should not be able to submit a grade for proposals on which they are not reviewer, they should only able to view them', () => {
18201845
cy.get('#reviewer-selection', { timeout: 5000 })
18211846
.parent()
@@ -3836,7 +3861,6 @@ context('Fap meeting components tests', () => {
38363861
cy.visit('/');
38373862
cy.get('main table tbody').contains('No records to display');
38383863
});
3839-
38403864
it('Fap Reviewer should be able to give review', () => {
38413865
cy.login(fapMembers.reviewer);
38423866
cy.visit('/');

apps/frontend/src/components/review/ProposalTableReviewer.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ const ProposalTableReviewer = ({ confirm }: { confirm: WithConfirmType }) => {
116116
instrumentId: selectedInstrumentId,
117117
status: getFilterStatus(reviewStatus),
118118
reviewer: getFilterReviewer(reviewer),
119+
active: true,
119120
});
120121

121122
useEffect(() => {

apps/frontend/src/graphql/review/userWithReviews.graphql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ query userWithReviews(
33
$instrumentId: Int
44
$status: ReviewStatus
55
$reviewer: ReviewerFilter
6+
$active: Boolean
67
) {
78
me {
89
id
@@ -14,6 +15,7 @@ query userWithReviews(
1415
instrumentId: $instrumentId
1516
status: $status
1617
reviewer: $reviewer
18+
active: $active
1719
) {
1820
id
1921
grade

apps/frontend/src/hooks/user/useUserData.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ export function useUserWithReviewsData(filters?: {
6161
instrumentId?: number | null;
6262
status?: ReviewStatus;
6363
reviewer?: ReviewerFilter;
64+
active?: boolean;
6465
}) {
6566
const api = useDataApi();
6667
const [userWithReviewsFilter, setUserWithReviewsFilter] = useState(filters);

0 commit comments

Comments
 (0)