From 036f23470d2bcb0e28d067961dbfa2b932b7062c Mon Sep 17 00:00:00 2001 From: te-sa Date: Tue, 26 Mar 2024 18:08:42 -0700 Subject: [PATCH 1/7] Added padding to the RHS --- src/app/submission-box/[boxId]/page.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/submission-box/[boxId]/page.tsx b/src/app/submission-box/[boxId]/page.tsx index a7abd38e..c5e4a161 100644 --- a/src/app/submission-box/[boxId]/page.tsx +++ b/src/app/submission-box/[boxId]/page.tsx @@ -139,7 +139,7 @@ export default function SubmissionBoxDetailPage({ params }: SubmissionBoxDetailP emptyMessage={'No Videos Have Been Submitted to Your Box'} /> - + {!isEditing && ( Date: Tue, 26 Mar 2024 18:45:29 -0700 Subject: [PATCH 2/7] Extended APIs to return emails of requested submissions --- src/app/api/submission-box/[id]/route.ts | 1 + src/app/api/submission-box/update/[id]/route.ts | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/src/app/api/submission-box/[id]/route.ts b/src/app/api/submission-box/[id]/route.ts index 8c727649..61e4f528 100644 --- a/src/app/api/submission-box/[id]/route.ts +++ b/src/app/api/submission-box/[id]/route.ts @@ -40,6 +40,7 @@ export async function GET(req: NextRequest): Promise { select: { id: true, userId: true, + email: true, }, }, }, diff --git a/src/app/api/submission-box/update/[id]/route.ts b/src/app/api/submission-box/update/[id]/route.ts index 5ff3af2d..5beb88be 100644 --- a/src/app/api/submission-box/update/[id]/route.ts +++ b/src/app/api/submission-box/update/[id]/route.ts @@ -78,12 +78,20 @@ export async function PUT(req: NextRequest): Promise { where: { id: submissionBoxId, }, + include: { + requestedSubmissions: { + select: { + email: true, + }, + }, + }, data: { title: title, description: description, closesAt: closesAt ? new Date(closesAt.toString()) : null, }, }) + return NextResponse.json( {submission: updatedSubmissionBox}, { status: 200 }) } catch (error) { return NextResponse.json({ error: 'Internal Server Error' }, { status: 500 }) From 7d8f630c35daf56cade2e8373bed1cdd4d0a0ca7 Mon Sep 17 00:00:00 2001 From: te-sa Date: Tue, 26 Mar 2024 18:45:50 -0700 Subject: [PATCH 3/7] Added members to submission box detail page --- src/components/SubmissionBoxDetails/index.tsx | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/components/SubmissionBoxDetails/index.tsx b/src/components/SubmissionBoxDetails/index.tsx index 36575691..93325cd7 100644 --- a/src/components/SubmissionBoxDetails/index.tsx +++ b/src/components/SubmissionBoxDetails/index.tsx @@ -2,12 +2,12 @@ import Typography from '@mui/material/Typography' import React from 'react' -import { SubmissionBox } from '@prisma/client' -import { Box } from '@mui/material' +import { RequestedSubmission, SubmissionBox } from '@prisma/client' +import { Box, Chip } from '@mui/material' import Button from '@mui/material/Button' export type SubmissionBoxInfoProps = { - submissionBox: SubmissionBox | null + submissionBox: SubmissionBox & { requestedSubmissions: RequestedSubmission[]} | null onUnsubmit?: () => void } export default function SubmissionBoxDetails(props: SubmissionBoxInfoProps) { @@ -61,6 +61,19 @@ export default function SubmissionBoxDetails(props: SubmissionBoxInfoProps) { )} + {props.submissionBox && props.submissionBox.requestedSubmissions && ( + + + Members + + + {props.submissionBox.requestedSubmissions.map((requestedSubmission: {id: string, email: string}) => + + ) + } + + + )} {props.onUnsubmit && ( Date: Tue, 26 Mar 2024 19:18:21 -0700 Subject: [PATCH 4/7] Fixed incorrect title --- cypress/e2e/app/submission-box/detail/editBoxDetail.cy.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cypress/e2e/app/submission-box/detail/editBoxDetail.cy.ts b/cypress/e2e/app/submission-box/detail/editBoxDetail.cy.ts index 0d1309b5..1289826c 100644 --- a/cypress/e2e/app/submission-box/detail/editBoxDetail.cy.ts +++ b/cypress/e2e/app/submission-box/detail/editBoxDetail.cy.ts @@ -1,6 +1,6 @@ import { TIMEOUT } from '../../../../utils/constants' -describe('Recieving Dashboard Details Page Tests', () => { +describe('Edit Box Detail Page Tests', () => { // Submission Box information const submissionBoxTitle1 = 'Test Modification with only title' const submissionBoxTitle2 = 'Test Modification with all fields' @@ -12,6 +12,7 @@ describe('Recieving Dashboard Details Page Tests', () => { const newDescription = 'A new description for the submission box.' const newTimeCharacters = '2060 06 13 03:30 AM' // Characters to be typed in DatePicker const newTimeDisplay = '2060/06/13 03:30 AM' + beforeEach(() => { cy.task('clearDB') // User information From 4fd8ee3b7ab570b8f0903c74ca26de84802f963d Mon Sep 17 00:00:00 2001 From: te-sa Date: Tue, 26 Mar 2024 19:18:34 -0700 Subject: [PATCH 5/7] Added tests --- .../submission-box/detail/viewBoxDetail.cy.ts | 59 +++++++++++++++++++ src/components/SubmissionBoxDetails/index.tsx | 6 +- 2 files changed, 62 insertions(+), 3 deletions(-) create mode 100644 cypress/e2e/app/submission-box/detail/viewBoxDetail.cy.ts diff --git a/cypress/e2e/app/submission-box/detail/viewBoxDetail.cy.ts b/cypress/e2e/app/submission-box/detail/viewBoxDetail.cy.ts new file mode 100644 index 00000000..b16e082a --- /dev/null +++ b/cypress/e2e/app/submission-box/detail/viewBoxDetail.cy.ts @@ -0,0 +1,59 @@ +import { TIMEOUT } from '../../../../utils/constants' + +describe('View Box Detail Page Tests', () => { + // Submission Box information + const submissionBoxTitle1 = 'Test Viewing With Members' + const submissionBoxTitle2 = 'Test Viewing Without Members' + const submissionBoxDescription = 'Description' + const submissionBoxTime = new Date('December 17, 2045 03:24:00') + const invitedEmail = 'invited@member.email' + + beforeEach(() => { + cy.task('clearDB') + // User information + const email = 'view@detail.test' + const password = 'Pass1234' + + // Create a user with two managed submission boxes, one with members, one without + cy.task('createUser', { email, password }) + cy.visit('/login') + cy.get('[data-cy=email]').type(email) + cy.get('[data-cy=password]').type(password) + cy.get('[data-cy=submit]').click() + cy.url({ timeout: TIMEOUT.EXTRA_LONG }).should('not.contain', 'login') + cy.task('getUserId', email).then((userId) => { + cy.task('createSubmissionBoxWithEmail', { submissionBoxTitle: submissionBoxTitle1, email: invitedEmail, userId, submissionBoxDescription}) + cy.task('createSubmissionBoxForSubmissions', { submissionBoxTitle: submissionBoxTitle2, submissionBoxDescription, userId, closesAt: submissionBoxTime }) + }) + cy.reload() + cy.visit('/dashboard') + }) + + it('Should allow the user to view members if there are members', () => { + cy.get('[data-cy="Manage Boxes"]') + cy.wait(1000) + cy.get('[data-cy="Manage Boxes"]').click() + + cy.get(`[data-cy="${ submissionBoxTitle1 }"]`) + cy.wait(1000) // Waiting for it to be clickable + cy.get(`[data-cy="${ submissionBoxTitle1 }"]`).click() + + cy.get('[data-cy="submissionBoxMembersHeading"]').should('be.visible') + + cy.get('[data-cy="submissionBoxMembers"]').should('contain', invitedEmail) + }) + + it('Should not display members if there aren\'t any', () => { + cy.get('[data-cy="Manage Boxes"]') + cy.wait(1000) + cy.get('[data-cy="Manage Boxes"]').click() + + cy.get(`[data-cy="${ submissionBoxTitle2 }"]`) + cy.wait(1000) // Waiting for it to be clickable + cy.get(`[data-cy="${ submissionBoxTitle2 }"]`).click() + + cy.get('[data-cy="submissionBoxMembersHeading"]').should('not.exist') + + cy.get('[data-cy="submissionBoxMembers"]').should('not.exist') + }) +}) diff --git a/src/components/SubmissionBoxDetails/index.tsx b/src/components/SubmissionBoxDetails/index.tsx index 93325cd7..828af59c 100644 --- a/src/components/SubmissionBoxDetails/index.tsx +++ b/src/components/SubmissionBoxDetails/index.tsx @@ -61,12 +61,12 @@ export default function SubmissionBoxDetails(props: SubmissionBoxInfoProps) { )} - {props.submissionBox && props.submissionBox.requestedSubmissions && ( + {props.submissionBox && props.submissionBox.requestedSubmissions && props.submissionBox.requestedSubmissions.length > 0 && ( - + Members - + {props.submissionBox.requestedSubmissions.map((requestedSubmission: {id: string, email: string}) => ) From 1a326326eeda8d7ae00f11345e8330d24ca9d303 Mon Sep 17 00:00:00 2001 From: te-sa Date: Tue, 26 Mar 2024 19:32:44 -0700 Subject: [PATCH 6/7] Only displaying emails on owned submission boxes --- src/app/submission-box/[boxId]/page.tsx | 8 ++++---- src/components/SubmissionBoxDetails/index.tsx | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/app/submission-box/[boxId]/page.tsx b/src/app/submission-box/[boxId]/page.tsx index c5e4a161..df83d8f6 100644 --- a/src/app/submission-box/[boxId]/page.tsx +++ b/src/app/submission-box/[boxId]/page.tsx @@ -3,7 +3,7 @@ import { useRouter } from 'next/navigation' import React, { useEffect, useState } from 'react' import { Typography, Box, Link, Dialog, DialogTitle, DialogActions, Button, Alert, TextField } from '@mui/material' -import { SubmissionBox, Video } from '@prisma/client' +import { RequestedSubmission, SubmissionBox, Video } from '@prisma/client' import VideoList from '@/components/VideoList' import BackButtonWithLink from '@/components/BackButtonWithLink' import SubmissionBoxDetails from '@/components/SubmissionBoxDetails' @@ -32,7 +32,7 @@ export default function SubmissionBoxDetailPage({ params }: SubmissionBoxDetailP const [isFetchingSubmissionBox, setIsFetchingSubmissionBox] = useState(true) const [boxType, setBoxType] = useState('requested') const [videos, setVideos] = useState<(Video & VideoSubmission)[]>([]) - const [boxInfo, setBoxInfo] = useState(null) + const [boxInfo, setBoxInfo] = useState(null) const [isEditing, setIsEditing] = useState(false) const [isFormSubmitted, setIsFormSubmitted] = useState(false) @@ -158,7 +158,7 @@ export default function SubmissionBoxDetailPage({ params }: SubmissionBoxDetailP )} {!isEditing ? ( - + ) : ( <>
@@ -334,7 +334,7 @@ export default function SubmissionBoxDetailPage({ params }: SubmissionBoxDetailP - setUnsubmitDialogOpen(true) : undefined}/> + setUnsubmitDialogOpen(true) : undefined} isOwned={false}/> setUnsubmitDialogOpen(false)} diff --git a/src/components/SubmissionBoxDetails/index.tsx b/src/components/SubmissionBoxDetails/index.tsx index 828af59c..1fbba491 100644 --- a/src/components/SubmissionBoxDetails/index.tsx +++ b/src/components/SubmissionBoxDetails/index.tsx @@ -9,6 +9,7 @@ import Button from '@mui/material/Button' export type SubmissionBoxInfoProps = { submissionBox: SubmissionBox & { requestedSubmissions: RequestedSubmission[]} | null onUnsubmit?: () => void + isOwned: boolean } export default function SubmissionBoxDetails(props: SubmissionBoxInfoProps) { return ( @@ -61,7 +62,7 @@ export default function SubmissionBoxDetails(props: SubmissionBoxInfoProps) { )} - {props.submissionBox && props.submissionBox.requestedSubmissions && props.submissionBox.requestedSubmissions.length > 0 && ( + {props.isOwned && props.submissionBox && props.submissionBox.requestedSubmissions && props.submissionBox.requestedSubmissions.length > 0 && ( Members From 3f2991e48464f8d105e189452189738c57982421 Mon Sep 17 00:00:00 2001 From: te-sa Date: Wed, 27 Mar 2024 10:02:44 -0700 Subject: [PATCH 7/7] Added tests to existing files --- .../detail/myBoxesDetails.cy.ts | 50 ++++++++++++++++ .../detail/requestedDetail.cy.ts | 4 ++ .../submission-box/detail/viewBoxDetail.cy.ts | 59 ------------------- 3 files changed, 54 insertions(+), 59 deletions(-) delete mode 100644 cypress/e2e/app/submission-box/detail/viewBoxDetail.cy.ts diff --git a/cypress/e2e/app/submission-box/detail/myBoxesDetails.cy.ts b/cypress/e2e/app/submission-box/detail/myBoxesDetails.cy.ts index 5554c900..2d135a5e 100644 --- a/cypress/e2e/app/submission-box/detail/myBoxesDetails.cy.ts +++ b/cypress/e2e/app/submission-box/detail/myBoxesDetails.cy.ts @@ -6,6 +6,7 @@ describe('Receiving Dashboard Details Page Tests', () => { const fakeEmail = 'invalidUser@mail.com' const moreFakeEmail = 'wowsuchuser@person.com' const password = 'Pass1234' + beforeEach(() => { cy.task('clearDB') // Can create the same user for each test, but need to create two separate submission boxes @@ -241,4 +242,53 @@ describe('Receiving Dashboard Details Page Tests', () => { cy.get('[data-cy="back-button"]').should('exist').and('be.visible').click() cy.url({ timeout: TIMEOUT.EXTRA_LONG }).should('contain', 'submission-box') }) + + // Submission Box information + const submissionBoxTitle1 = 'Test Viewing With Members' + const submissionBoxTitle2 = 'Test Viewing Without Members' + const submissionBoxDescription = 'Description' + const submissionBoxTime = new Date('December 17, 2045 03:24:00') + const invitedEmail = 'invited@member.email' + + it('Should allow the user to view members if there are members', () => { + cy.task('getUserId', email).then((userId) => { + cy.task('createSubmissionBoxWithEmail', { submissionBoxTitle: submissionBoxTitle1, email: invitedEmail, userId, submissionBoxDescription}) + cy.task('createSubmissionBoxForSubmissions', { submissionBoxTitle: submissionBoxTitle2, submissionBoxDescription, userId, closesAt: submissionBoxTime }) + }) + cy.reload() + cy.visit('/dashboard') + + cy.get('[data-cy="Manage Boxes"]') + cy.wait(1000) + cy.get('[data-cy="Manage Boxes"]').click() + + cy.get(`[data-cy="${ submissionBoxTitle1 }"]`) + cy.wait(1000) // Waiting for it to be clickable + cy.get(`[data-cy="${ submissionBoxTitle1 }"]`).click() + + cy.get('[data-cy="submissionBoxMembersHeading"]').should('be.visible') + + cy.get('[data-cy="submissionBoxMembers"]').should('contain', invitedEmail) + }) + + it('Should not display members if there aren\'t any', () => { + cy.task('getUserId', email).then((userId) => { + cy.task('createSubmissionBoxWithEmail', { submissionBoxTitle: submissionBoxTitle1, email: invitedEmail, userId, submissionBoxDescription}) + cy.task('createSubmissionBoxForSubmissions', { submissionBoxTitle: submissionBoxTitle2, submissionBoxDescription, userId, closesAt: submissionBoxTime }) + }) + cy.reload() + cy.visit('/dashboard') + + cy.get('[data-cy="Manage Boxes"]') + cy.wait(1000) + cy.get('[data-cy="Manage Boxes"]').click() + + cy.get(`[data-cy="${ submissionBoxTitle2 }"]`) + cy.wait(1000) // Waiting for it to be clickable + cy.get(`[data-cy="${ submissionBoxTitle2 }"]`).click() + + cy.get('[data-cy="submissionBoxMembersHeading"]').should('not.exist') + + cy.get('[data-cy="submissionBoxMembers"]').should('not.exist') + }) }) diff --git a/cypress/e2e/app/submission-box/detail/requestedDetail.cy.ts b/cypress/e2e/app/submission-box/detail/requestedDetail.cy.ts index 0a3f4924..f982bc58 100644 --- a/cypress/e2e/app/submission-box/detail/requestedDetail.cy.ts +++ b/cypress/e2e/app/submission-box/detail/requestedDetail.cy.ts @@ -88,6 +88,10 @@ describe('Requested Dashboard Details Page Tests', () => { cy.get('[data-cy="submissionBoxDate"]').should('contain', new Date().toDateString().slice(4)) cy.get('[data-cy="submissionBoxDesc"]').should('contain', submissionBoxDescription) + // Assert that member information is not visible on box user was invited to (should only be visible on owned boxes) + cy.get('[data-cy="submissionBoxMembersHeading"]').should('not.exist') + cy.get('[data-cy="submissionBoxMembers"]').should('not.exist') + // Assert video player is visible cy.get('[data-cy="video-player"]', { timeout: 2 * TIMEOUT.EXTRA_EXTRA_LONG, diff --git a/cypress/e2e/app/submission-box/detail/viewBoxDetail.cy.ts b/cypress/e2e/app/submission-box/detail/viewBoxDetail.cy.ts deleted file mode 100644 index b16e082a..00000000 --- a/cypress/e2e/app/submission-box/detail/viewBoxDetail.cy.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { TIMEOUT } from '../../../../utils/constants' - -describe('View Box Detail Page Tests', () => { - // Submission Box information - const submissionBoxTitle1 = 'Test Viewing With Members' - const submissionBoxTitle2 = 'Test Viewing Without Members' - const submissionBoxDescription = 'Description' - const submissionBoxTime = new Date('December 17, 2045 03:24:00') - const invitedEmail = 'invited@member.email' - - beforeEach(() => { - cy.task('clearDB') - // User information - const email = 'view@detail.test' - const password = 'Pass1234' - - // Create a user with two managed submission boxes, one with members, one without - cy.task('createUser', { email, password }) - cy.visit('/login') - cy.get('[data-cy=email]').type(email) - cy.get('[data-cy=password]').type(password) - cy.get('[data-cy=submit]').click() - cy.url({ timeout: TIMEOUT.EXTRA_LONG }).should('not.contain', 'login') - cy.task('getUserId', email).then((userId) => { - cy.task('createSubmissionBoxWithEmail', { submissionBoxTitle: submissionBoxTitle1, email: invitedEmail, userId, submissionBoxDescription}) - cy.task('createSubmissionBoxForSubmissions', { submissionBoxTitle: submissionBoxTitle2, submissionBoxDescription, userId, closesAt: submissionBoxTime }) - }) - cy.reload() - cy.visit('/dashboard') - }) - - it('Should allow the user to view members if there are members', () => { - cy.get('[data-cy="Manage Boxes"]') - cy.wait(1000) - cy.get('[data-cy="Manage Boxes"]').click() - - cy.get(`[data-cy="${ submissionBoxTitle1 }"]`) - cy.wait(1000) // Waiting for it to be clickable - cy.get(`[data-cy="${ submissionBoxTitle1 }"]`).click() - - cy.get('[data-cy="submissionBoxMembersHeading"]').should('be.visible') - - cy.get('[data-cy="submissionBoxMembers"]').should('contain', invitedEmail) - }) - - it('Should not display members if there aren\'t any', () => { - cy.get('[data-cy="Manage Boxes"]') - cy.wait(1000) - cy.get('[data-cy="Manage Boxes"]').click() - - cy.get(`[data-cy="${ submissionBoxTitle2 }"]`) - cy.wait(1000) // Waiting for it to be clickable - cy.get(`[data-cy="${ submissionBoxTitle2 }"]`).click() - - cy.get('[data-cy="submissionBoxMembersHeading"]').should('not.exist') - - cy.get('[data-cy="submissionBoxMembers"]').should('not.exist') - }) -})