@@ -500,6 +500,35 @@ func TestAccountHandlerNotSync(t *testing.T) {
500500 tearDown ()
501501 })
502502
503+ t .Run ("Should not sync when comparatorService panics" , func (t * testing.T ) {
504+ // Given
505+ fakeGitService := NewFakeGitService ()
506+ fakeApiService := NewFakeApiService ()
507+ fakeComparatorService := NewFakeComparatorService ()
508+ fakeComparatorService .throwPanicCheckDiff = true
509+
510+ coreHandler = NewCoreHandler (coreHandler .accountRepository , fakeApiService , fakeComparatorService )
511+ account := givenAccount ()
512+ account .Domain .ID = "123-comparator-panic"
513+ accountCreated , _ := coreHandler .accountRepository .Create (& account )
514+
515+ // Test
516+ go coreHandler .StartAccountHandler (accountCreated .ID .Hex (), fakeGitService )
517+
518+ // Wait for goroutine to process
519+ time .Sleep (1 * time .Second )
520+
521+ // Assert
522+ accountFromDb , _ := coreHandler .accountRepository .FetchByDomainIdEnvironment (accountCreated .Domain .ID , accountCreated .Environment )
523+ assert .Equal (t , model .StatusError , accountFromDb .Domain .Status )
524+ assert .Contains (t , accountFromDb .Domain .Message , "Panic occurred in CheckSnapshotDiff" )
525+ assert .Equal (t , "123" , accountFromDb .Domain .LastCommit )
526+ assert .NotEqual (t , "" , accountFromDb .Domain .LastDate )
527+ assert .Equal (t , 0 , accountFromDb .Domain .Version )
528+
529+ tearDown ()
530+ })
531+
503532 t .Run ("Should not sync when git token has no permission to push changes" , func (t * testing.T ) {
504533 // Given
505534 fakeGitService := NewFakeGitService ()
@@ -738,3 +767,32 @@ func (f *FakeApiService) NewDataFromJson(jsonData []byte) model.Data {
738767 json .Unmarshal (jsonData , & data )
739768 return data
740769}
770+
771+ type FakeComparatorService struct {
772+ throwPanicCheckDiff bool
773+ }
774+
775+ func NewFakeComparatorService () * FakeComparatorService {
776+ return & FakeComparatorService {}
777+ }
778+
779+ func (f * FakeComparatorService ) CheckSnapshotDiff (left model.Snapshot , right model.Snapshot , diffType DiffType ) model.DiffResult {
780+ if f .throwPanicCheckDiff {
781+ panic ("Panic occurred in CheckSnapshotDiff" )
782+ }
783+ return model.DiffResult {}
784+ }
785+
786+ func (f * FakeComparatorService ) MergeResults (diffResults []model.DiffResult ) model.DiffResult {
787+ return model.DiffResult {}
788+ }
789+
790+ func (f * FakeComparatorService ) NewSnapshotFromJson (jsonData []byte ) model.Snapshot {
791+ var snapshot model.Snapshot
792+ json .Unmarshal (jsonData , & snapshot )
793+ return snapshot
794+ }
795+
796+ func (f * FakeComparatorService ) RemoveDeleted (diffResult model.DiffResult ) model.DiffResult {
797+ return diffResult
798+ }
0 commit comments