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  }