@@ -81,10 +81,17 @@ describe('challenge phase service unit tests', () => {
8181 "reviewItemCommentId" varchar(14) NOT NULL
8282 )
8383 ` )
84+ await reviewClient . $executeRawUnsafe ( `
85+ CREATE TABLE IF NOT EXISTS "${ reviewSchema } "."appealResponse" (
86+ "id" varchar(14) PRIMARY KEY,
87+ "appealId" varchar(14) UNIQUE NOT NULL
88+ )
89+ ` )
8490 } )
8591
8692 after ( async ( ) => {
8793 if ( reviewClient ) {
94+ await reviewClient . $executeRawUnsafe ( `TRUNCATE TABLE "${ reviewSchema } "."appealResponse"` )
8895 await reviewClient . $executeRawUnsafe ( `TRUNCATE TABLE "${ reviewSchema } "."appeal"` )
8996 await reviewClient . $executeRawUnsafe ( `TRUNCATE TABLE "${ reviewSchema } "."reviewItemComment"` )
9097 await reviewClient . $executeRawUnsafe ( `TRUNCATE TABLE "${ reviewSchema } "."reviewItem"` )
@@ -696,6 +703,126 @@ describe('challenge phase service unit tests', () => {
696703 }
697704 } )
698705
706+ it ( 'partially update challenge phase - cannot close Appeals Response when appeals lack responses' , async function ( ) {
707+ this . timeout ( 50000 )
708+ const appealsPhaseId = uuid ( )
709+ const appealsChallengePhaseId = uuid ( )
710+ const submissionId = shortId ( )
711+ const reviewId = uuid ( )
712+ const reviewItemId = shortId ( )
713+ const reviewItemCommentId = shortId ( )
714+ const appealId = shortId ( )
715+
716+ await prisma . phase . create ( {
717+ data : {
718+ id : appealsPhaseId ,
719+ name : 'Appeals Response' ,
720+ description : 'Appeals Response phase' ,
721+ isOpen : true ,
722+ duration : 123 ,
723+ createdBy : 'testuser' ,
724+ updatedBy : 'testuser'
725+ }
726+ } )
727+
728+ await prisma . challengePhase . create ( {
729+ data : {
730+ id : appealsChallengePhaseId ,
731+ challengeId : data . challenge . id ,
732+ phaseId : appealsPhaseId ,
733+ name : 'Appeals Response' ,
734+ isOpen : true ,
735+ duration : 1000 ,
736+ actualStartDate : new Date ( ) ,
737+ createdBy : 'testuser' ,
738+ updatedBy : 'testuser'
739+ }
740+ } )
741+
742+ try {
743+ await reviewClient . $executeRaw (
744+ Prisma . sql `
745+ INSERT INTO ${ submissionTable } ("id", "challengeId")
746+ VALUES (${ submissionId } , ${ data . challenge . id } )
747+ ON CONFLICT ("id") DO NOTHING
748+ `
749+ )
750+
751+ await reviewClient . $executeRaw (
752+ Prisma . sql `
753+ INSERT INTO ${ reviewTable } ("id", "phaseId", "submissionId", "status")
754+ VALUES (${ reviewId } , ${ appealsChallengePhaseId } , ${ submissionId } , ${ 'COMPLETED' } )
755+ ON CONFLICT ("id") DO NOTHING
756+ `
757+ )
758+
759+ await reviewClient . $executeRaw (
760+ Prisma . sql `
761+ INSERT INTO ${ reviewItemTable } ("id", "reviewId")
762+ VALUES (${ reviewItemId } , ${ reviewId } )
763+ ON CONFLICT ("id") DO NOTHING
764+ `
765+ )
766+
767+ await reviewClient . $executeRaw (
768+ Prisma . sql `
769+ INSERT INTO ${ reviewItemCommentTable } ("id", "reviewItemId")
770+ VALUES (${ reviewItemCommentId } , ${ reviewItemId } )
771+ ON CONFLICT ("id") DO NOTHING
772+ `
773+ )
774+
775+ await reviewClient . $executeRaw (
776+ Prisma . sql `
777+ INSERT INTO ${ appealTable } ("id", "reviewItemCommentId")
778+ VALUES (${ appealId } , ${ reviewItemCommentId } )
779+ ON CONFLICT ("id") DO NOTHING
780+ `
781+ )
782+
783+ let caughtError
784+ try {
785+ await service . partiallyUpdateChallengePhase (
786+ authUser ,
787+ data . challenge . id ,
788+ appealsChallengePhaseId ,
789+ { isOpen : false }
790+ )
791+ } catch ( e ) {
792+ caughtError = e
793+ }
794+
795+ should . exist ( caughtError )
796+ should . equal ( caughtError . httpStatus || caughtError . statusCode , 400 )
797+ should . equal (
798+ caughtError . message ,
799+ "Appeals Response phase can't be closed because there are still appeals that haven't been responded to"
800+ )
801+ } finally {
802+ await reviewClient . $executeRaw (
803+ Prisma . sql `DELETE FROM ${ appealTable } WHERE "id" = ${ appealId } `
804+ )
805+ await reviewClient . $executeRaw (
806+ Prisma . sql `DELETE FROM ${ reviewItemCommentTable } WHERE "id" = ${ reviewItemCommentId } `
807+ )
808+ await reviewClient . $executeRaw (
809+ Prisma . sql `DELETE FROM ${ reviewItemTable } WHERE "id" = ${ reviewItemId } `
810+ )
811+ await reviewClient . $executeRaw (
812+ Prisma . sql `DELETE FROM ${ reviewTable } WHERE "id" = ${ reviewId } `
813+ )
814+ await reviewClient . $executeRaw (
815+ Prisma . sql `DELETE FROM ${ submissionTable } WHERE "id" = ${ submissionId } `
816+ )
817+ await prisma . challengePhase . delete ( {
818+ where : { id : appealsChallengePhaseId }
819+ } )
820+ await prisma . phase . delete ( {
821+ where : { id : appealsPhaseId }
822+ } )
823+ }
824+ } )
825+
699826 it ( 'partially update challenge phase - unexpected field' , async ( ) => {
700827 try {
701828 await service . partiallyUpdateChallengePhase ( authUser , data . challenge . id , data . challengePhase1Id , { name : 'xx' , other : 'xx' } )
0 commit comments