@@ -228,4 +228,168 @@ private with sharing class fflib_SObjectDomainTest
228
228
}
229
229
return testUser ;
230
230
}
231
+
232
+ /**
233
+ * The following tests that the ability to enable/disable all trigger events works as required
234
+ **/
235
+ @IsTest
236
+ private static void testDisableTriggerEventsBehaviour ()
237
+ {
238
+ boolean bError = false ;
239
+
240
+ String sErrorMessage = ' ' ;
241
+
242
+ Opportunity oldOpp = (Opportunity ) Opportunity .sObjectType .newSObject (' 006E0000006mkRQ' );
243
+ oldOpp .Name = ' Test' ;
244
+ oldOpp .Type = ' Existing' ;
245
+ Opportunity newOpp = (Opportunity ) Opportunity .sObjectType .newSObject (' 006E0000006mkRQ' );
246
+ newOpp .Name = ' Test' ;
247
+ newOpp .Type = ' New' ;
248
+
249
+
250
+
251
+ // these will be called multiple times making sure the correct error message comes back out
252
+ // so... there are alot of tests to do here sadly and remember everything is reversed and you need to run backwards!
253
+ // 1 - all disabled
254
+ try
255
+ {
256
+ fflib_SObjectDomain .getTriggerEvent (fflib_SObjectDomain .TestSObjectDisableBehaviourConstructor .class ).disableAll ();
257
+ fflib_SObjectDomain .Test .Database .onInsert (new Opportunity [] { newOpp } );
258
+ fflib_SObjectDomain .triggerHandler (fflib_SObjectDomain .TestSObjectDisableBehaviourConstructor .class );
259
+ }
260
+ catch (Exception e )
261
+ {
262
+ bError = true ;
263
+ }
264
+
265
+ System .AssertEquals (false , bError , ' Error - Trigger events have been fired when they are disabled' );
266
+
267
+ // //////////////////////////
268
+ // Insert!
269
+ try
270
+ {
271
+ // now lets go after insert and then before
272
+ fflib_SObjectDomain .getTriggerEvent (fflib_SObjectDomain .TestSObjectDisableBehaviourConstructor .class ).enableAfterInsert ();
273
+ fflib_SObjectDomain .Test .Database .onInsert (new Opportunity [] { newOpp } );
274
+ fflib_SObjectDomain .triggerHandler (fflib_SObjectDomain .TestSObjectDisableBehaviourConstructor .class );
275
+ }
276
+ catch (Exception e )
277
+ {
278
+ sErrorMessage = e .getMessage ();
279
+ System .Debug (' Exception Fired :' + e .getMEssage ());
280
+ }
281
+
282
+ System .AssertEquals (' onAfterInsert called' , sErrorMessage , ' Error - After Insert Event is enabled but did not run' );
283
+
284
+ try
285
+ {
286
+ // now lets go after insert and then before
287
+ fflib_SObjectDomain .getTriggerEvent (fflib_SObjectDomain .TestSObjectDisableBehaviourConstructor .class ).enableBeforeInsert ();
288
+ fflib_SObjectDomain .Test .Database .onInsert (new Opportunity [] { newOpp } );
289
+ fflib_SObjectDomain .triggerHandler (fflib_SObjectDomain .TestSObjectDisableBehaviourConstructor .class );
290
+ }
291
+ catch (Exception e )
292
+ {
293
+ sErrorMessage = e .getMessage ();
294
+ }
295
+
296
+ System .AssertEquals (' onBeforeInsert called' , sErrorMessage , ' Error - Before Insert Event is enabled but did not run' );
297
+
298
+ // //////////////////////////
299
+ // Update!
300
+ try
301
+ {
302
+ // now lets go after insert and then before
303
+ fflib_SObjectDomain .getTriggerEvent (fflib_SObjectDomain .TestSObjectDisableBehaviourConstructor .class ).enableAfterUpdate ();
304
+ fflib_SObjectDomain .Test .Database .onUpdate (new Opportunity [] { newOpp }, new Map <Id , SObject > { newOpp .Id = > oldOpp } );
305
+ fflib_SObjectDomain .triggerHandler (fflib_SObjectDomain .TestSObjectDisableBehaviourConstructor .class );
306
+ }
307
+ catch (Exception e )
308
+ {
309
+ sErrorMessage = e .getMessage ();
310
+ }
311
+
312
+ System .AssertEquals (' onAfterUpdate called' , sErrorMessage , ' Error - After Update Event is enabled but did not run' );
313
+
314
+ try
315
+ {
316
+ // now lets go after insert and then before
317
+ fflib_SObjectDomain .getTriggerEvent (fflib_SObjectDomain .TestSObjectDisableBehaviourConstructor .class ).enableBeforeUpdate ();
318
+ fflib_SObjectDomain .Test .Database .onUpdate (new Opportunity [] { newOpp }, new Map <Id , SObject > { newOpp .Id = > oldOpp } );
319
+ fflib_SObjectDomain .triggerHandler (fflib_SObjectDomain .TestSObjectDisableBehaviourConstructor .class );
320
+ }
321
+ catch (Exception e )
322
+ {
323
+ sErrorMessage = e .getMessage ();
324
+ }
325
+
326
+ System .AssertEquals (' onBeforeUpdate called' , sErrorMessage , ' Error - Before Update Event is enabled but did not run' );
327
+
328
+ // //////////////////////////
329
+ // Delete!
330
+ try
331
+ {
332
+ // now lets go after insert and then before
333
+ fflib_SObjectDomain .getTriggerEvent (fflib_SObjectDomain .TestSObjectDisableBehaviourConstructor .class ).enableAfterDelete ();
334
+ fflib_SObjectDomain .Test .Database .onDelete (new Map <Id , Opportunity > { newOpp .Id = > newOpp } );
335
+ fflib_SObjectDomain .triggerHandler (fflib_SObjectDomain .TestSObjectDisableBehaviourConstructor .class );
336
+ }
337
+ catch (Exception e )
338
+ {
339
+ sErrorMessage = e .getMessage ();
340
+ }
341
+
342
+ System .AssertEquals (' onAfterDelete called' , sErrorMessage , ' Error - After Delete Event is enabled but did not run' );
343
+
344
+ try
345
+ {
346
+ // now lets go after insert and then before
347
+ fflib_SObjectDomain .getTriggerEvent (fflib_SObjectDomain .TestSObjectDisableBehaviourConstructor .class ).enableBeforeDelete ();
348
+ fflib_SObjectDomain .Test .Database .onDelete (new Map <Id , Opportunity > { newOpp .Id = > newOpp } );
349
+ fflib_SObjectDomain .triggerHandler (fflib_SObjectDomain .TestSObjectDisableBehaviourConstructor .class );
350
+ }
351
+ catch (Exception e )
352
+ {
353
+ sErrorMessage = e .getMessage ();
354
+ }
355
+
356
+ System .AssertEquals (' onBeforeDelete called' , sErrorMessage , ' Error - Before Delete Event is enabled but did not run' );
357
+
358
+ // //////////////////////////
359
+ // Undelete!
360
+ try
361
+ {
362
+ // now lets go after insert and then before
363
+ fflib_SObjectDomain .getTriggerEvent (fflib_SObjectDomain .TestSObjectDisableBehaviourConstructor .class ).enableAfterUndelete ();
364
+ fflib_SObjectDomain .Test .Database .onUndelete (new Opportunity [] { newOpp });
365
+ fflib_SObjectDomain .triggerHandler (fflib_SObjectDomain .TestSObjectDisableBehaviourConstructor .class );
366
+ }
367
+ catch (Exception e )
368
+ {
369
+ sErrorMessage = e .getMessage ();
370
+ }
371
+
372
+ System .AssertEquals (' onAfterUndelete called' , sErrorMessage , ' Error - After Undelete Event is enabled but did not run' );
373
+
374
+ /*
375
+
376
+ fflib_SObjectDomain.Test.Database.onInsert(new Opportunity[] { opp } );
377
+
378
+
379
+
380
+ fflib_SObjectDomain.Test.Database.onUpdate(new Opportunity[] { newOpp }, new Map<Id, SObject> { newOpp.Id => oldOpp } );
381
+
382
+ fflib_SObjectDomain.Test.Database.onDelete(new Map<ID, Opportunity> { opp.Id => opp } );
383
+
384
+ fflib_SObjectDomain.Test.Database.onUndelete(new list<Opportunity> { opp } );
385
+
386
+
387
+ try {
388
+ fflib_SObjectDomain.triggerHandler(fflib_SObjectDomain.TestSObjectOnValidateBehaviourConstructor.class);
389
+ System.assert(false, 'Expected exception');
390
+ } catch (Exception e) {
391
+ System.assertEquals('onValidate called', e.getMessage());
392
+ }
393
+ */
394
+ }
231
395
}
0 commit comments