Skip to content

Commit

Permalink
Merge pull request #521 from COSC-499-W2023/514-ui-fixes-on-submissio…
Browse files Browse the repository at this point in the history
…n-box-page

UI Fixes on Submission Box Page
  • Loading branch information
te-sa authored Mar 27, 2024
2 parents 511dac9 + 3f2991e commit 3a9123c
Show file tree
Hide file tree
Showing 7 changed files with 87 additions and 9 deletions.
3 changes: 2 additions & 1 deletion cypress/e2e/app/submission-box/detail/editBoxDetail.cy.ts
Original file line number Diff line number Diff line change
@@ -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'
Expand All @@ -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
Expand Down
50 changes: 50 additions & 0 deletions cypress/e2e/app/submission-box/detail/myBoxesDetails.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -242,4 +243,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')
})
})
4 changes: 4 additions & 0 deletions cypress/e2e/app/submission-box/detail/requestedDetail.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
1 change: 1 addition & 0 deletions src/app/api/submission-box/[id]/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ export async function GET(req: NextRequest): Promise<NextResponse> {
select: {
id: true,
userId: true,
email: true,
},
},
},
Expand Down
8 changes: 8 additions & 0 deletions src/app/api/submission-box/update/[id]/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,12 +78,20 @@ export async function PUT(req: NextRequest): Promise<NextResponse> {
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 })
Expand Down
10 changes: 5 additions & 5 deletions src/app/submission-box/[boxId]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down Expand Up @@ -32,7 +32,7 @@ export default function SubmissionBoxDetailPage({ params }: SubmissionBoxDetailP
const [isFetchingSubmissionBox, setIsFetchingSubmissionBox] = useState(true)
const [boxType, setBoxType] = useState<BoxStatus>('requested')
const [videos, setVideos] = useState<(Video & VideoSubmission)[]>([])
const [boxInfo, setBoxInfo] = useState<SubmissionBox | null>(null)
const [boxInfo, setBoxInfo] = useState<SubmissionBox & { requestedSubmissions: RequestedSubmission[]} | null>(null)
const [isEditing, setIsEditing] = useState(false)
const [isFormSubmitted, setIsFormSubmitted] = useState(false)

Expand Down Expand Up @@ -140,7 +140,7 @@ export default function SubmissionBoxDetailPage({ params }: SubmissionBoxDetailP
emptyMessage={'No Videos Have Been Submitted to Your Box'}
/>
</Box>
<Box paddingLeft='2rem'>
<Box pr='1rem' pl='2rem'>
{!isEditing && (
<Box
top='2rem'
Expand All @@ -159,7 +159,7 @@ export default function SubmissionBoxDetailPage({ params }: SubmissionBoxDetailP
</Box>
)}
{!isEditing ? (
<SubmissionBoxDetails submissionBox={boxInfo} />
<SubmissionBoxDetails submissionBox={boxInfo} isOwned={true}/>
) : (
<>
<form onSubmit={formik.handleSubmit} noValidate>
Expand Down Expand Up @@ -335,7 +335,7 @@ export default function SubmissionBoxDetailPage({ params }: SubmissionBoxDetailP
<Box sx={{
pr: '2rem',
}}>
<SubmissionBoxDetails submissionBox={boxInfo} onUnsubmit={videos?.length !== 0 ? () => setUnsubmitDialogOpen(true) : undefined}/>
<SubmissionBoxDetails submissionBox={boxInfo} onUnsubmit={videos?.length !== 0 ? () => setUnsubmitDialogOpen(true) : undefined} isOwned={false}/>
<Dialog
open={unsubmitDialogOpen}
onClose={() => setUnsubmitDialogOpen(false)}
Expand Down
20 changes: 17 additions & 3 deletions src/components/SubmissionBoxDetails/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@

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
isOwned: boolean
}
export default function SubmissionBoxDetails(props: SubmissionBoxInfoProps) {
return (
Expand Down Expand Up @@ -61,6 +62,19 @@ export default function SubmissionBoxDetails(props: SubmissionBoxInfoProps) {
</Typography>
</Box>
)}
{props.isOwned && props.submissionBox && props.submissionBox.requestedSubmissions && props.submissionBox.requestedSubmissions.length > 0 && (
<Box>
<Typography data-cy='submissionBoxMembersHeading' color={'textSecondary'} sx={{ fontWeight: 'bold' }}>
Members
</Typography>
<Box data-cy='submissionBoxMembers'>
{props.submissionBox.requestedSubmissions.map((requestedSubmission: {id: string, email: string}) =>
<Chip sx={{ m: 0.5, ml: 0 }} key={`submission-box-chip-${ requestedSubmission.id }`} label={requestedSubmission.email} />
)
}
</Box>
</Box>
)}
{props.onUnsubmit && (
<Box
sx={{
Expand Down

0 comments on commit 3a9123c

Please sign in to comment.