| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- package cache
- import (
- "testing"
- )
- // TestIsNumericQuery tests the isNumericQuery function
- func TestIsNumericQuery(t *testing.T) {
- tests := []struct {
- name string
- query string
- expected bool
- }{
- {
- name: "Pure number",
- query: "9005",
- expected: true,
- },
- {
- name: "Port with colon",
- query: ":9005",
- expected: true, // 4/5 = 80% are digits
- },
- {
- name: "IP address",
- query: "192.168.1.1",
- expected: true, // 9/11 = 81% are digits
- },
- {
- name: "Pure text",
- query: "nginx",
- expected: false,
- },
- {
- name: "Mixed with mostly text",
- query: "server9005",
- expected: false, // 4/10 = 40% are digits
- },
- {
- name: "Mixed with mostly numbers",
- query: "9005server",
- expected: false, // 4/10 = 40% are digits
- },
- {
- name: "Port number",
- query: "8080",
- expected: true,
- },
- {
- name: "Version number",
- query: "v1.2.3",
- expected: false, // 3/6 = 50% exactly, not > 50%
- },
- {
- name: "Empty string",
- query: "",
- expected: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- result := isNumericQuery(tt.query)
- if result != tt.expected {
- t.Errorf("isNumericQuery(%q) = %v, want %v", tt.query, result, tt.expected)
- }
- })
- }
- }
- // TestBuildQuery tests the buildQuery function structure
- func TestBuildQuery(t *testing.T) {
- indexer := &SearchIndexer{}
- tests := []struct {
- name string
- query string
- docType string
- validate func(t *testing.T, query interface{})
- }{
- {
- name: "Numeric query",
- query: "9005",
- docType: "",
- validate: func(t *testing.T, query interface{}) {
- if query == nil {
- t.Error("Expected non-nil query")
- }
- // The query should be built with numeric strategy
- // which prioritizes exact matches
- },
- },
- {
- name: "Text query",
- query: "nginx",
- docType: "",
- validate: func(t *testing.T, query interface{}) {
- if query == nil {
- t.Error("Expected non-nil query")
- }
- // The query should be built with text strategy
- // which includes fuzzy matching
- },
- },
- {
- name: "Numeric query with type filter",
- query: "9005",
- docType: "site",
- validate: func(t *testing.T, query interface{}) {
- if query == nil {
- t.Error("Expected non-nil query")
- }
- // The query should include type filter
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- query := indexer.buildQuery(tt.query, tt.docType)
- tt.validate(t, query)
- })
- }
- }
- // TestSearchStrategyDifference ensures numeric and text queries use different strategies
- func TestSearchStrategyDifference(t *testing.T) {
- // Test that numeric queries don't use fuzzy matching
- numericQuery := "9005"
- if !isNumericQuery(numericQuery) {
- t.Error("Expected '9005' to be detected as numeric")
- }
- // Test that text queries do use fuzzy matching
- textQuery := "nginx"
- if isNumericQuery(textQuery) {
- t.Error("Expected 'nginx' to be detected as text")
- }
- }
|