From c28673b2f0b3f92b0865ca317ce6a4dc1eee7168 Mon Sep 17 00:00:00 2001 From: zackrossman <117101895+zackrossman@users.noreply.github.com> Date: Wed, 26 Apr 2023 13:06:06 -0700 Subject: [PATCH] Helper method to expose internal errors associated with a public error category (#3233) Helper method to expose internal errors associated with a public error category, useful for testing `errs.Is` scenarios. The internal error needs to be used because `errs.Is` checks if the error chain contains a ref to the internal error. #### Does this PR need a docs update or release note? - [ ] :white_check_mark: Yes, it's included - [ ] :clock1: Yes, but in a later PR - [x] :no_entry: No #### Type of change - [ ] :sunflower: Feature - [ ] :bug: Bugfix - [ ] :world_map: Documentation - [ ] :robot: Supportability/Tests - [ ] :computer: CI/Deployment - [x] :broom: Tech Debt/Cleanup #### Issue(s) * #COR-77 #### Test Plan - [x] :muscle: Manual - [x] :zap: Unit test - [x] :green_heart: E2E --- src/pkg/errs/err.go | 5 +++++ src/pkg/errs/errs_test.go | 17 +++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/pkg/errs/err.go b/src/pkg/errs/err.go index fe53a218c..e00ef8abf 100644 --- a/src/pkg/errs/err.go +++ b/src/pkg/errs/err.go @@ -29,6 +29,11 @@ var internalToExternal = map[errEnum][]error{ ResourceOwnerNotFound: {graph.ErrResourceOwnerNotFound}, } +// Internal returns the internal errors which match to the public error category. +func Internal(enum errEnum) []error { + return internalToExternal[enum] +} + // Is checks if the provided error contains an internal error that matches // the public error category. func Is(err error, enum errEnum) bool { diff --git a/src/pkg/errs/errs_test.go b/src/pkg/errs/errs_test.go index 43d718f7c..1ec787efd 100644 --- a/src/pkg/errs/errs_test.go +++ b/src/pkg/errs/errs_test.go @@ -19,6 +19,23 @@ func TestErrUnitSuite(t *testing.T) { suite.Run(t, &ErrUnitSuite{Suite: tester.NewUnitSuite(t)}) } +func (suite *ErrUnitSuite) TestInternal() { + table := []struct { + get errEnum + expect []error + }{ + {RepoAlreadyExists, []error{repository.ErrorRepoAlreadyExists}}, + {BackupNotFound, []error{repository.ErrorBackupNotFound}}, + {ServiceNotEnabled, []error{graph.ErrServiceNotEnabled}}, + {ResourceOwnerNotFound, []error{graph.ErrResourceOwnerNotFound}}, + } + for _, test := range table { + suite.Run(string(test.get), func() { + assert.ElementsMatch(suite.T(), test.expect, Internal(test.get)) + }) + } +} + func (suite *ErrUnitSuite) TestIs() { table := []struct { is errEnum