github.com/altipla-consulting/ravendb-go-client@v0.1.3/tests/ravendb_5669_test.go (about) 1 package tests 2 3 import ( 4 "testing" 5 6 ravendb "github.com/altipla-consulting/ravendb-go-client" 7 "github.com/stretchr/testify/assert" 8 ) 9 10 func ravendb5669WorkingTestWithDifferentSearchTermOrder(t *testing.T, driver *RavenTestDriver) { 11 var err error 12 store := driver.getDocumentStoreMust(t) 13 defer store.Close() 14 15 index := NewAnimalIndex() 16 err = store.ExecuteIndex(index, "") 17 assert.NoError(t, err) 18 19 ravendb5669storeAnimals(t, store, driver) 20 21 { 22 session := openSessionMust(t, store) 23 24 var results []*Animal 25 query := session.Advanced().QueryIndex(index.IndexName) 26 27 query.OpenSubclause() 28 29 query = query.WhereEquals("type", "Cat") 30 query = query.OrElse() 31 query = query.Search("name", "Peter*") 32 query = query.AndAlso() 33 query = query.Search("name", "Pan*") 34 35 query.CloseSubclause() 36 37 err = query.GetResults(&results) 38 assert.NoError(t, err) 39 assert.Equal(t, len(results), 1) 40 41 session.Close() 42 } 43 } 44 45 func ravendb5669workingTestWithSubclause(t *testing.T, driver *RavenTestDriver) { 46 var err error 47 store := driver.getDocumentStoreMust(t) 48 defer store.Close() 49 50 index := NewAnimalIndex() 51 err = store.ExecuteIndex(index, "") 52 assert.NoError(t, err) 53 54 ravendb5669storeAnimals(t, store, driver) 55 56 { 57 session := openSessionMust(t, store) 58 59 query := session.Advanced().QueryIndex(index.IndexName) 60 61 query.OpenSubclause() 62 { 63 query = query.WhereEquals("type", "Cat") 64 query = query.OrElse() 65 query.OpenSubclause() 66 { 67 query = query.Search("name", "Pan*") 68 query = query.AndAlso() 69 query = query.Search("name", "Peter*") 70 } 71 query = query.CloseSubclause() 72 } 73 query.CloseSubclause() 74 75 var results []*Animal 76 err = query.GetResults(&results) 77 assert.NoError(t, err) 78 assert.Equal(t, len(results), 1) 79 80 session.Close() 81 } 82 } 83 84 func ravendb5669storeAnimals(t *testing.T, store *ravendb.DocumentStore, driver *RavenTestDriver) { 85 var err error 86 87 { 88 session := openSessionMust(t, store) 89 90 animal1 := &Animal{ 91 Name: "Peter Pan", 92 Type: "Dog", 93 } 94 95 animal2 := &Animal{ 96 Name: "Peter Poo", 97 Type: "Dog", 98 } 99 100 animal3 := &Animal{ 101 Name: "Peter Foo", 102 Type: "Dog", 103 } 104 105 err = session.Store(animal1) 106 assert.NoError(t, err) 107 err = session.Store(animal2) 108 assert.NoError(t, err) 109 err = session.Store(animal3) 110 assert.NoError(t, err) 111 err = session.SaveChanges() 112 assert.NoError(t, err) 113 114 session.Close() 115 } 116 117 driver.waitForIndexing(store, store.GetDatabase(), 0) 118 } 119 120 type Animal struct { 121 Type string `json:"type"` 122 Name string `json:"name"` 123 } 124 125 func NewAnimalIndex() *ravendb.IndexCreationTask { 126 res := ravendb.NewIndexCreationTask("Animal_Index") 127 res.Map = "from animal in docs.Animals select new { name = animal.name, type = animal.type }" 128 129 res.Analyze("name", "StandardAnalyzer") 130 res.Index("name", ravendb.FieldIndexingSearch) 131 return res 132 } 133 134 func TestRavenDB5669(t *testing.T) { 135 driver := createTestDriver(t) 136 destroy := func() { destroyDriver(t, driver) } 137 defer recoverTest(t, destroy) 138 139 // matches the order of Java tests 140 ravendb5669workingTestWithSubclause(t, driver) 141 ravendb5669WorkingTestWithDifferentSearchTermOrder(t, driver) 142 }