Mirror of https://github.com/roostorg/coop github.com/roostorg/coop
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at 557ff54b2b435e5f1e789c6a8a4e1bebf2d7deb6 232 lines 6.9 kB view raw
1import { uid } from 'uid'; 2 3import getBottle, { type Dependencies } from '../../iocContainer/index.js'; 4import { type UserStrikeService } from './index.js'; 5 6describe('Item Investigation Service', () => { 7 let container: Dependencies; 8 let userStrikeService: UserStrikeService; 9 10 beforeAll(async () => { 11 // The mutation should be ok here since this is initial setup in a 12 // beforeAll; it doesn't involve reset state for each test in the suite 13 /* eslint-disable better-mutation/no-mutation */ 14 ({ container } = await getBottle()); 15 userStrikeService = container.UserStrikeService; 16 /* eslint-enable better-mutation/no-mutation */ 17 }); 18 afterAll(async () => { 19 await container.closeSharedResourcesForShutdown(); 20 }); 21 22 test('Should properly calculate strike counts for a given user', async () => { 23 const fakeUserId = { id: uid(), typeId: uid() }; 24 const fakeOrgId = uid(); 25 await userStrikeService.applyUserStrike( 26 fakeOrgId, 27 fakeUserId, 28 'fakePolicyId', 29 1, 30 ); 31 const strikeCount1 = await userStrikeService.getUserStrikeValue( 32 fakeOrgId, 33 fakeUserId, 34 ); 35 expect(strikeCount1).toEqual(1); 36 await userStrikeService.applyUserStrike( 37 fakeOrgId, 38 fakeUserId, 39 'fakePolicyId1', 40 1, 41 ); 42 const strikeCount2 = await userStrikeService.getUserStrikeValue( 43 fakeOrgId, 44 fakeUserId, 45 ); 46 expect(strikeCount2).toEqual(2); 47 await userStrikeService.applyUserStrike( 48 fakeOrgId, 49 fakeUserId, 50 'fakePolicyId2', 51 10, 52 ); 53 const strikeCount3 = await userStrikeService.getUserStrikeValue( 54 fakeOrgId, 55 fakeUserId, 56 ); 57 expect(strikeCount3).toEqual(12); 58 }); 59 60 test('Should only apply strike for most severe policy violation', async () => { 61 const testActions = [ 62 { 63 orgId: 'fakeOrgId', 64 action: { 65 id: 'fakeActionId1', 66 name: 'testAction1', 67 applyUserStrikes: true, 68 orgId: 'fakeOrgId', 69 callbackUrl: 'fakeCallbackUrl1', 70 callbackUrlHeaders: null, 71 callbackUrlBody: null, 72 customMrtApiParams: null, 73 actionType: 'CUSTOM_ACTION' as const, 74 }, 75 targetItem: { itemId: 'fakeItemId1', itemType: 'fakeItemType1' }, 76 matchingRules: undefined, 77 ruleEnvironment: undefined, 78 policies: [ 79 { 80 id: 'fakePolicyId1', 81 name: 'testPolicy1', 82 userStrikeCount: 1, 83 penalty: 'LOW' as const, 84 }, 85 { 86 id: 'severePolicyId', 87 name: 'testPolicy2', 88 userStrikeCount: 2, 89 penalty: 'LOW' as const, 90 }, 91 ], 92 }, 93 ]; 94 const mostSeverePolicyViolation = 95 userStrikeService.findMostSeverePolicyViolationFromActions(testActions); 96 if (mostSeverePolicyViolation === undefined) { 97 throw new Error('mostSeverePolicyViolation is undefined'); 98 } 99 expect(mostSeverePolicyViolation.id).toEqual('severePolicyId'); 100 }); 101 test('findMostSeverePolicyViolationFromActions should return undefined if no actions apply user strikes', async () => { 102 const testActions = [ 103 { 104 orgId: 'fakeOrgId', 105 action: { 106 id: 'fakeActionId1', 107 name: 'testAction1', 108 applyUserStrikes: false, 109 orgId: 'fakeOrgId', 110 callbackUrl: 'fakeCallbackUrl1', 111 callbackUrlHeaders: null, 112 callbackUrlBody: null, 113 customMrtApiParams: null, 114 actionType: 'CUSTOM_ACTION' as const, 115 }, 116 targetItem: { itemId: 'fakeItemId1', itemType: 'fakeItemType1' }, 117 matchingRules: undefined, 118 ruleEnvironment: undefined, 119 policies: [ 120 { 121 id: 'fakePolicyId1', 122 name: 'testPolicy1', 123 userStrikeCount: 1, 124 penalty: 'LOW' as const, 125 }, 126 { 127 id: 'severePolicyId', 128 name: 'testPolicy2', 129 userStrikeCount: 2, 130 penalty: 'LOW' as const, 131 }, 132 ], 133 }, 134 { 135 orgId: 'fakeOrgId', 136 action: { 137 id: 'fakeActionId1', 138 name: 'testAction1', 139 applyUserStrikes: false, 140 orgId: 'fakeOrgId', 141 callbackUrl: 'fakeCallbackUrl1', 142 callbackUrlHeaders: null, 143 callbackUrlBody: null, 144 customMrtApiParams: null, 145 actionType: 'CUSTOM_ACTION' as const, 146 }, 147 targetItem: { itemId: 'fakeItemId1', itemType: 'fakeItemType1' }, 148 matchingRules: undefined, 149 ruleEnvironment: undefined, 150 policies: [ 151 { 152 id: 'fakePolicyId1', 153 name: 'testPolicy1', 154 userStrikeCount: 1, 155 penalty: 'LOW' as const, 156 }, 157 { 158 id: 'severePolicyId', 159 name: 'testPolicy2', 160 userStrikeCount: 2, 161 penalty: 'LOW' as const, 162 }, 163 ], 164 }, 165 ]; 166 const mostSeverePolicyViolation = 167 userStrikeService.findMostSeverePolicyViolationFromActions(testActions); 168 expect(mostSeverePolicyViolation).toBeUndefined(); 169 }); 170 171 test('Should properly calculate strike values using getAllUserStrikeCountsForOrg', async () => { 172 const fakeTypeId = uid(); 173 const fakeUserId1 = { id: uid(), typeId: fakeTypeId }; 174 const fakeUserId2 = { id: uid(), typeId: fakeTypeId }; 175 const fakeUserId3 = { id: uid(), typeId: fakeTypeId }; 176 const fakeOrgId = uid(); 177 // 1 strike for user 1 178 await userStrikeService.applyUserStrike( 179 fakeOrgId, 180 fakeUserId1, 181 'fakePolicyId', 182 1, 183 ); 184 // 2 strikes for user 2 185 await userStrikeService.applyUserStrike( 186 fakeOrgId, 187 fakeUserId2, 188 'fakePolicyId', 189 1, 190 ); 191 await userStrikeService.applyUserStrike( 192 fakeOrgId, 193 fakeUserId2, 194 'fakePolicyId1', 195 1, 196 ); 197 // 3 strikes for user 3 198 await userStrikeService.applyUserStrike( 199 fakeOrgId, 200 fakeUserId3, 201 'fakePolicyId1', 202 1, 203 ); 204 await userStrikeService.applyUserStrike( 205 fakeOrgId, 206 fakeUserId3, 207 'fakePolicyId2', 208 1, 209 ); 210 await userStrikeService.applyUserStrike( 211 fakeOrgId, 212 fakeUserId3, 213 'fakePolicyId3', 214 1, 215 ); 216 217 const userStrikesForOrg = 218 await userStrikeService.getAllUserStrikeCountsForOrg(fakeOrgId); 219 const user1 = userStrikesForOrg.find( 220 (it) => it.user_identifier.id === fakeUserId1.id, 221 ); 222 expect(user1?.strike_count).toEqual(1); 223 const user2 = userStrikesForOrg.find( 224 (it) => it.user_identifier.id === fakeUserId2.id, 225 ); 226 expect(user2?.strike_count).toEqual(2); 227 const user3 = userStrikesForOrg.find( 228 (it) => it.user_identifier.id === fakeUserId3.id, 229 ); 230 expect(user3?.strike_count).toEqual(3); 231 }); 232});