store - search_test.go
1 package store
2
3 import (
4 "reflect"
5 "testing"
6 )
7
8 type match struct {
9 col string
10 num *int64
11 }
12
13 func (m match) SQL() string {
14 return "[" + m.col + "] = ?"
15 }
16
17 func (m match) Vars() []interface{} {
18 return []interface{}{m.num}
19 }
20
21 func TestSearch(t *testing.T) {
22 s, err := newTestStore()
23 defer s.Close()
24 if err != nil {
25 t.Error(err)
26 return
27 }
28 err = s.Register(new(testType))
29 if err != nil {
30 t.Error(err)
31 return
32 }
33 values := []*testType{
34 &testType{0, "One", 45},
35 &testType{0, "Two", 657},
36 &testType{0, "Three", 43},
37 &testType{0, "Four", 3},
38 &testType{0, "Five", 83},
39 &testType{0, "Six", 214},
40 &testType{0, "Seven", 1784},
41 &testType{0, "Eight", 90},
42 &testType{0, "Nine", 214},
43 &testType{0, "Ten", 45},
44 &testType{0, "Eleven", 45},
45 &testType{0, "Twelve", 77},
46 }
47 for _, value := range values {
48 if err = s.Set(value); err != nil {
49 t.Error(err)
50 return
51 }
52 }
53
54 var number int64
55
56 matchNumber := s.NewSearch(new(testType))
57 matchNumber.Sort = []SortBy{{"ID", true}}
58 matchNumber.Filter = match{"Number", &number}
59 matchNumberPrepared, err := matchNumber.Prepare()
60 if err != nil {
61 t.Error(err)
62 return
63 }
64
65 tests := []struct {
66 number int64
67 results []*testType
68 }{
69 {657, []*testType{values[1]}},
70 {45, []*testType{values[0], values[9], values[10]}},
71 {123, []*testType{}},
72 }
73
74 for n, test := range tests {
75 number = test.number
76 tts := make([]testType, 10)
77 vars := make([]interface{}, 10)
78 for i := 0; i < 10; i++ {
79 vars[i] = &tts[i]
80 }
81 found, err := matchNumberPrepared.GetPage(vars, 0)
82 if err != nil {
83 t.Error(err)
84 return
85 }
86 vars = vars[:found]
87 if len(vars) != len(test.results) {
88 t.Errorf("test 1-%d: expecting %d results, got %d", n+1, len(test.results), len(vars))
89 } else {
90 for num, tt := range test.results {
91 if !reflect.DeepEqual(tt, &tts[num]) {
92 t.Errorf("test 1-%d-%d: expecting %v, got %v", n+1, num+1, tt, &tts[num])
93 }
94 }
95 }
96 }
97 }