@@ -934,6 +934,137 @@ describe('Integration | Repository | Campaign Assessment Participation Result Li
934
934
} ) ;
935
935
} ) ;
936
936
937
+ context ( 'when there is a filter on unacquiredBadges' , function ( ) {
938
+ let badge1 , badge2 ;
939
+ let user1 , user2 ;
940
+ let participation1 , participation2 ;
941
+
942
+ beforeEach ( async function ( ) {
943
+ campaign = databaseBuilder . factory . buildAssessmentCampaignForSkills ( { } , [ { id : 'Skill1' } ] ) ;
944
+ badge1 = databaseBuilder . factory . buildBadge ( { key : 'badge1' , targetProfileId : campaign . targetProfileId } ) ;
945
+ badge2 = databaseBuilder . factory . buildBadge ( { key : 'badge2' , targetProfileId : campaign . targetProfileId } ) ;
946
+ user1 = databaseBuilder . factory . buildUser ( ) ;
947
+ user2 = databaseBuilder . factory . buildUser ( ) ;
948
+
949
+ participation1 = databaseBuilder . factory . buildCampaignParticipation ( {
950
+ campaignId : campaign . id ,
951
+ userId : user1 . id ,
952
+ } ) ;
953
+ participation2 = databaseBuilder . factory . buildCampaignParticipation ( {
954
+ campaignId : campaign . id ,
955
+ userId : user2 . id ,
956
+ } ) ;
957
+
958
+ await databaseBuilder . commit ( ) ;
959
+ } ) ;
960
+
961
+ it ( 'returns participants which does not have badge1' , async function ( ) {
962
+ databaseBuilder . factory . buildBadgeAcquisition ( {
963
+ badgeId : badge1 . id ,
964
+ userId : participation1 . userId ,
965
+ campaignParticipationId : participation1 . id ,
966
+ } ) ;
967
+ databaseBuilder . factory . buildBadgeAcquisition ( {
968
+ badgeId : badge2 . id ,
969
+ userId : participation2 . userId ,
970
+ campaignParticipationId : participation2 . id ,
971
+ } ) ;
972
+ await databaseBuilder . commit ( ) ;
973
+
974
+ // when
975
+ const { participations } = await campaignAssessmentParticipationResultListRepository . findPaginatedByCampaignId ( {
976
+ campaignId : campaign . id ,
977
+ filters : { unacquiredBadges : [ badge1 . id ] } ,
978
+ } ) ;
979
+
980
+ const participantExternalIds = participations . map ( ( result ) => result . campaignParticipationId ) ;
981
+
982
+ // then
983
+ expect ( participantExternalIds ) . to . exactlyContain ( [ participation2 . id ] ) ;
984
+ } ) ;
985
+
986
+ it ( 'returns participants which does not have badge1 nor badge2' , async function ( ) {
987
+ databaseBuilder . factory . buildBadgeAcquisition ( {
988
+ badgeId : badge1 . id ,
989
+ userId : participation1 . userId ,
990
+ campaignParticipationId : participation1 . id ,
991
+ } ) ;
992
+ await databaseBuilder . commit ( ) ;
993
+
994
+ // when
995
+ const { participations } = await campaignAssessmentParticipationResultListRepository . findPaginatedByCampaignId ( {
996
+ campaignId : campaign . id ,
997
+ filters : { unacquiredBadges : [ badge1 . id , badge2 . id ] } ,
998
+ } ) ;
999
+
1000
+ const participantExternalIds = participations . map ( ( result ) => result . campaignParticipationId ) ;
1001
+
1002
+ // then
1003
+ expect ( participantExternalIds ) . to . exactlyContain ( [ participation2 . id ] ) ;
1004
+ } ) ;
1005
+
1006
+ it ( 'returns no participant that have badge1 or badge2' , async function ( ) {
1007
+ databaseBuilder . factory . buildBadgeAcquisition ( {
1008
+ badgeId : badge1 . id ,
1009
+ userId : participation1 . userId ,
1010
+ campaignParticipationId : participation1 . id ,
1011
+ } ) ;
1012
+
1013
+ databaseBuilder . factory . buildBadgeAcquisition ( {
1014
+ badgeId : badge2 . id ,
1015
+ userId : participation2 . userId ,
1016
+ campaignParticipationId : participation2 . id ,
1017
+ } ) ;
1018
+ await databaseBuilder . commit ( ) ;
1019
+
1020
+ // when
1021
+ const { participations } = await campaignAssessmentParticipationResultListRepository . findPaginatedByCampaignId ( {
1022
+ campaignId : campaign . id ,
1023
+ filters : { unacquiredBadges : [ badge1 . id , badge2 . id ] } ,
1024
+ } ) ;
1025
+
1026
+ // then
1027
+ expect ( participations ) . to . be . empty ;
1028
+ } ) ;
1029
+ } ) ;
1030
+
1031
+ context ( 'when there is a filter on both unacquiredBadges and badges' , function ( ) {
1032
+ let badge1 ;
1033
+ let user1 ;
1034
+ let participation1 ;
1035
+
1036
+ beforeEach ( async function ( ) {
1037
+ campaign = databaseBuilder . factory . buildAssessmentCampaignForSkills ( { } , [ { id : 'Skill1' } ] ) ;
1038
+ badge1 = databaseBuilder . factory . buildBadge ( { key : 'badge1' , targetProfileId : campaign . targetProfileId } ) ;
1039
+ user1 = databaseBuilder . factory . buildUser ( ) ;
1040
+
1041
+ participation1 = databaseBuilder . factory . buildCampaignParticipation ( {
1042
+ campaignId : campaign . id ,
1043
+ userId : user1 . id ,
1044
+ } ) ;
1045
+ await databaseBuilder . commit ( ) ;
1046
+ } ) ;
1047
+
1048
+ it ( 'returns no participant if acquired and unacquired badge have an id in common' , async function ( ) {
1049
+ databaseBuilder . factory . buildBadgeAcquisition ( {
1050
+ badgeId : badge1 . id ,
1051
+ userId : participation1 . userId ,
1052
+ campaignParticipationId : participation1 . id ,
1053
+ } ) ;
1054
+
1055
+ await databaseBuilder . commit ( ) ;
1056
+
1057
+ // when
1058
+ const { participations } = await campaignAssessmentParticipationResultListRepository . findPaginatedByCampaignId ( {
1059
+ campaignId : campaign . id ,
1060
+ filters : { badges : [ badge1 . id ] , unacquiredBadges : [ badge1 . id ] } ,
1061
+ } ) ;
1062
+
1063
+ // then
1064
+ expect ( participations ) . to . be . empty ;
1065
+ } ) ;
1066
+ } ) ;
1067
+
937
1068
context ( 'when there is a filter on stage' , function ( ) {
938
1069
beforeEach ( async function ( ) {
939
1070
const learningContent = [
0 commit comments