Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

UI Fixes on Submission Box Page #521

Merged
merged 7 commits into from
Mar 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 @@ -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')
})
})
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 @@ -139,7 +139,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 @@ -158,7 +158,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 @@ -334,7 +334,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
Loading