github.com/altipla-consulting/ravendb-go-client@v0.1.3/tests/ravendb_903_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 // unique name that doesn't conflict with Product in hi_lo_test.go 11 type Product2 struct { 12 Name string `json:"name"` 13 Description string `json:"description"` 14 } 15 16 func ravendb903Test1(t *testing.T, driver *RavenTestDriver) { 17 18 fn := func(session *ravendb.DocumentSession, index *ravendb.IndexCreationTask) *ravendb.DocumentQuery { 19 q := session.Advanced().QueryIndex(index.IndexName) 20 q = q.Search("description", "Hello") 21 q = q.Intersect() 22 q = q.WhereEquals("name", "Bar") 23 return q 24 } 25 ravendb903DoTest(t, driver, fn) 26 } 27 28 func ravendb903Test2(t *testing.T, driver *RavenTestDriver) { 29 fn := func(session *ravendb.DocumentSession, index *ravendb.IndexCreationTask) *ravendb.DocumentQuery { 30 q := session.Advanced().QueryIndex(index.IndexName) 31 q = q.WhereEquals("name", "Bar") 32 q = q.Intersect() 33 q = q.Search("description", "Hello") 34 return q 35 } 36 ravendb903DoTest(t, driver, fn) 37 38 } 39 40 func ravendb903DoTest(t *testing.T, driver *RavenTestDriver, queryFunction func(*ravendb.DocumentSession, *ravendb.IndexCreationTask) *ravendb.DocumentQuery) { 41 var err error 42 store := driver.getDocumentStoreMust(t) 43 defer store.Close() 44 45 index := NewTestIndex() 46 err = store.ExecuteIndex(index, "") 47 assert.NoError(t, err) 48 49 { 50 session := openSessionMust(t, store) 51 52 product1 := &Product2{ 53 Name: "Foo", 54 Description: "Hello World", 55 } 56 57 product2 := &Product2{ 58 Name: "Bar", 59 Description: "Hello World", 60 } 61 62 product3 := &Product2{ 63 Name: "Bar", 64 Description: "Goodbye World", 65 } 66 67 err = session.Store(product1) 68 assert.NoError(t, err) 69 err = session.Store(product2) 70 assert.NoError(t, err) 71 err = session.Store(product3) 72 assert.NoError(t, err) 73 err = session.SaveChanges() 74 assert.NoError(t, err) 75 76 session.Close() 77 } 78 79 err = driver.waitForIndexing(store, "", 0) 80 assert.NoError(t, err) 81 82 { 83 var products []*Product2 84 session := openSessionMust(t, store) 85 query := queryFunction(session, index) 86 err = query.GetResults(&products) 87 assert.NoError(t, err) 88 assert.Equal(t, len(products), 1) 89 90 session.Close() 91 } 92 } 93 94 func NewTestIndex() *ravendb.IndexCreationTask { 95 res := ravendb.NewIndexCreationTask("TestIndex") 96 res.Map = "from product in docs.Product2s select new { product.name, product.description }" 97 res.Index("description", ravendb.FieldIndexingSearch) 98 return res 99 } 100 101 func TestRavenDB903(t *testing.T) { 102 driver := createTestDriver(t) 103 destroy := func() { destroyDriver(t, driver) } 104 defer recoverTest(t, destroy) 105 106 // matches the order of Java tests 107 ravendb903Test1(t, driver) 108 ravendb903Test2(t, driver) 109 }