@@ -13,6 +13,7 @@ const uuid = require('uuid/v4')
1313const { getReviewClient } = require ( '../../src/common/review-prisma' )
1414const prisma = require ( '../../src/common/prisma' ) . getClient ( )
1515const service = require ( '../../src/services/ChallengePhaseService' )
16+ const helper = require ( '../../src/common/helper' )
1617const testHelper = require ( '../testHelper' )
1718
1819const should = chai . should ( )
@@ -802,6 +803,107 @@ describe('challenge phase service unit tests', () => {
802803 const challengePhase = await service . partiallyUpdateChallengePhase ( authUser , data . challenge . id , data . challengePhase1Id , { isOpen : true } )
803804 should . equal ( challengePhase . isOpen , true )
804805 } )
806+
807+ it ( 'partially update challenge phase - cannot open review phase without reviewer resource' , async ( ) => {
808+ const reviewPhase = await prisma . phase . create ( {
809+ data : {
810+ id : uuid ( ) ,
811+ name : 'Review' ,
812+ description : 'desc' ,
813+ isOpen : false ,
814+ duration : 86400 ,
815+ createdBy : 'admin' ,
816+ updatedBy : 'admin'
817+ }
818+ } )
819+ const reviewChallengePhaseId = uuid ( )
820+ await prisma . challengePhase . create ( {
821+ data : {
822+ id : reviewChallengePhaseId ,
823+ challengeId : data . challenge . id ,
824+ phaseId : reviewPhase . id ,
825+ name : 'Review' ,
826+ isOpen : false ,
827+ createdBy : 'admin' ,
828+ updatedBy : 'admin'
829+ }
830+ } )
831+
832+ const originalGetChallengeResources = helper . getChallengeResources
833+ const originalGetResourceRoles = helper . getResourceRoles
834+ helper . getChallengeResources = async ( ) => ( [
835+ { roleId : 'some-other-role-id' }
836+ ] )
837+ helper . getResourceRoles = async ( ) => ( [
838+ { id : 'reviewer-role-id' , name : 'Reviewer' }
839+ ] )
840+
841+ try {
842+ await service . partiallyUpdateChallengePhase ( authUser , data . challenge . id , reviewChallengePhaseId , { isOpen : true } )
843+ } catch ( e ) {
844+ should . equal ( e . httpStatus || e . statusCode , 400 )
845+ should . equal (
846+ e . message ,
847+ 'Cannot open Review phase because the challenge does not have any resource with the Reviewer role'
848+ )
849+ return
850+ } finally {
851+ helper . getChallengeResources = originalGetChallengeResources
852+ helper . getResourceRoles = originalGetResourceRoles
853+ await prisma . challengePhase . delete ( { where : { id : reviewChallengePhaseId } } )
854+ await prisma . phase . delete ( { where : { id : reviewPhase . id } } )
855+ }
856+
857+ throw new Error ( 'should not reach here' )
858+ } )
859+
860+ it ( 'partially update challenge phase - opens review phase when reviewer resource exists' , async ( ) => {
861+ const reviewPhase = await prisma . phase . create ( {
862+ data : {
863+ id : uuid ( ) ,
864+ name : 'Review' ,
865+ description : 'desc' ,
866+ isOpen : false ,
867+ duration : 86400 ,
868+ createdBy : 'admin' ,
869+ updatedBy : 'admin'
870+ }
871+ } )
872+ const reviewChallengePhaseId = uuid ( )
873+ await prisma . challengePhase . create ( {
874+ data : {
875+ id : reviewChallengePhaseId ,
876+ challengeId : data . challenge . id ,
877+ phaseId : reviewPhase . id ,
878+ name : 'Review' ,
879+ isOpen : false ,
880+ createdBy : 'admin' ,
881+ updatedBy : 'admin'
882+ }
883+ } )
884+
885+ const originalGetChallengeResources = helper . getChallengeResources
886+ const originalGetResourceRoles = helper . getResourceRoles
887+ helper . getChallengeResources = async ( ) => ( [
888+ {
889+ roleId : 'reviewer-role-id' ,
890+ resourceRole : { name : 'Reviewer' }
891+ }
892+ ] )
893+ helper . getResourceRoles = async ( ) => ( [
894+ { id : 'reviewer-role-id' , name : 'Reviewer' }
895+ ] )
896+
897+ try {
898+ const challengePhase = await service . partiallyUpdateChallengePhase ( authUser , data . challenge . id , reviewChallengePhaseId , { isOpen : true } )
899+ should . equal ( challengePhase . isOpen , true )
900+ } finally {
901+ helper . getChallengeResources = originalGetChallengeResources
902+ helper . getResourceRoles = originalGetResourceRoles
903+ await prisma . challengePhase . delete ( { where : { id : reviewChallengePhaseId } } )
904+ await prisma . phase . delete ( { where : { id : reviewPhase . id } } )
905+ }
906+ } )
805907 } )
806908
807909 describe ( 'delete challenge phase tests' , ( ) => {
0 commit comments