summaryrefslogtreecommitdiffstats
path: root/pkg/utils/search_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/utils/search_test.go')
-rw-r--r--pkg/utils/search_test.go80
1 files changed, 80 insertions, 0 deletions
diff --git a/pkg/utils/search_test.go b/pkg/utils/search_test.go
new file mode 100644
index 000000000..79668c0f5
--- /dev/null
+++ b/pkg/utils/search_test.go
@@ -0,0 +1,80 @@
+package utils
+
+import (
+ "fmt"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+)
+
+// TestFuzzySearch is a function.
+func TestFuzzySearch(t *testing.T) {
+ type scenario struct {
+ needle string
+ haystack []string
+ expected []string
+ }
+
+ scenarios := []scenario{
+ {
+ needle: "",
+ haystack: []string{"test"},
+ expected: []string{},
+ },
+ {
+ needle: "test",
+ haystack: []string{"test"},
+ expected: []string{"test"},
+ },
+ {
+ needle: "o",
+ haystack: []string{"a", "o", "e"},
+ expected: []string{"o"},
+ },
+ {
+ needle: "mybranch",
+ haystack: []string{"my_branch", "mybranch", "branch", "this is my branch"},
+ expected: []string{"mybranch", "my_branch", "this is my branch"},
+ },
+ {
+ needle: "test",
+ haystack: []string{"not a good match", "this 'test' is a good match", "test"},
+ expected: []string{"test", "this 'test' is a good match"},
+ },
+ {
+ needle: "test",
+ haystack: []string{"Test"},
+ expected: []string{"Test"},
+ },
+ }
+
+ for _, s := range scenarios {
+ assert.EqualValues(t, s.expected, FuzzySearch(s.needle, s.haystack))
+ }
+}
+
+func TestCaseInsensitiveContains(t *testing.T) {
+ testCases := []struct {
+ haystack string
+ needle string
+ expected bool
+ }{
+ {"Hello, World!", "world", true}, // Case-insensitive match
+ {"Hello, World!", "WORLD", true}, // Case-insensitive match
+ {"Hello, World!", "orl", true}, // Case-insensitive match
+ {"Hello, World!", "o, W", true}, // Case-insensitive match
+ {"Hello, World!", "hello", true}, // Case-insensitive match
+ {"Hello, World!", "Foo", false}, // No match
+ {"Hello, World!", "Hello, World!!", false}, // No match
+ {"Hello, World!", "", true}, // Empty needle matches
+ {"", "Hello", false}, // Empty haystack doesn't match
+ {"", "", true}, // Empty strings match
+ {"", " ", false}, // Empty haystack, non-empty needle
+ {" ", "", true}, // Non-empty haystack, empty needle
+ }
+
+ for i, testCase := range testCases {
+ result := CaseInsensitiveContains(testCase.haystack, testCase.needle)
+ assert.Equal(t, testCase.expected, result, fmt.Sprintf("Test case %d failed. Expected '%v', got '%v' for '%s' in '%s'", i, testCase.expected, result, testCase.needle, testCase.haystack))
+ }
+}