Skip to content

Commit

Permalink
feat(filtering): fail if filter definition is invalid (#205)
Browse files Browse the repository at this point in the history
  • Loading branch information
plastikfan committed Oct 8, 2024
1 parent 35f386f commit 64cc9f6
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 7 deletions.
8 changes: 8 additions & 0 deletions internal/filtering/builders.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,12 +73,20 @@ func buildPolyNodeFilter(definition *core.FilterDef,
polyDef.Folder.Scope.Set(enums.ScopeFolder)
polyDef.Folder.Scope.Clear(enums.ScopeFile)

if polyDef.File.Type == enums.FilterTypePoly {
return nil, locale.ErrPolyFilterIsInvalid
}

file, err := buildConstituent(&polyDef.File, fo, nativeFn, customFn)

if err != nil {
return nil, err
}

if polyDef.Folder.Type == enums.FilterTypePoly {
return nil, locale.ErrPolyFilterIsInvalid
}

folder, err := buildConstituent(&polyDef.Folder, fo, nativeFn, customFn)

if err != nil {
Expand Down
33 changes: 27 additions & 6 deletions internal/filtering/filter-poly_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import (
"github.com/snivilised/traverse/internal/services"
"github.com/snivilised/traverse/internal/third/lo"
"github.com/snivilised/traverse/lfs"
"github.com/snivilised/traverse/locale"
"github.com/snivilised/traverse/pref"
)

Expand Down Expand Up @@ -43,7 +44,7 @@ var _ = Describe("feature", Ordered, func() {

Context("comprehension", func() {
When("universal: filtering with poly-filter", func() {
It("should: invoke for filtered nodes only", Label("example"),
It("🧪 should: invoke for filtered nodes only", Label("example"),
func(ctx SpecContext) {
path := lab.Path(root, "RETRO-WAVE")
filterDefs := &pref.FilterOptions{
Expand Down Expand Up @@ -164,11 +165,12 @@ var _ = Describe("feature", Ordered, func() {
)).Navigate(ctx)

lab.AssertNavigation(&entry.NaviTE, &lab.TestOptions{
FS: FS,
Recording: recording,
Path: path,
Result: result,
Err: err,
FS: FS,
Recording: recording,
Path: path,
Result: result,
Err: err,
ExpectedErr: entry.ExpectedErr,
})
},
func(entry *lab.PolyTE) string {
Expand Down Expand Up @@ -360,5 +362,24 @@ var _ = Describe("feature", Ordered, func() {
Scope: enums.ScopeLeaf,
},
}),

// === errors ========================================================

Entry(nil, &lab.PolyTE{
NaviTE: lab.NaviTE{
Given: "invalid poly: constituent is also poly",
Relative: "RETRO-WAVE",
Subscription: enums.SubscribeFiles,
ExpectedErr: locale.ErrPolyFilterIsInvalid,
},
File: core.FilterDef{
Type: enums.FilterTypePoly,
Description: "files: constituent is poly",
},
Folder: core.FilterDef{
Type: enums.FilterTypePoly,
Description: "folders: constituent is poly",
},
}),
)
})
6 changes: 5 additions & 1 deletion internal/filtering/filtering-defs.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,11 @@ func OrFuncE[T comparable](funcs ...func() (T, error)) (T, error) {
var zero T
for _, fn := range funcs {
result, err := fn()
if result != zero && err == nil {
if err != nil {
return zero, err
}

if result != zero {
return result, err
}
}
Expand Down
26 changes: 26 additions & 0 deletions locale/messages-errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -346,6 +346,32 @@ var errInvalidExtGlobFilterMissingSeparator = InvalidExtGlobFilterMissingSeparat
},
}

// ❌ PolyFilterIsInvalid

// FilterIsNilTemplData
type PolyFilterIsInvalidTemplData struct {
traverseTemplData
}

// Message
func (td PolyFilterIsInvalidTemplData) Message() *i18n.Message {
return &i18n.Message{
ID: "poly-filter-is-invalid.error",
Description: "poly filter definition is invalid error",
Other: "poly filter definition is invalid",
}
}

type PolyFilterIsInvalidError struct {
li18ngo.LocalisableError
}

var ErrPolyFilterIsInvalid = PolyFilterIsInvalidError{
LocalisableError: li18ngo.LocalisableError{
Data: FilterIsNilErrorTemplData{},
},
}

// ❌ UsageMissingRootPath

// UsageMissingRootPathTemplData
Expand Down

0 comments on commit 64cc9f6

Please sign in to comment.