github.com/ravendb/ravendb-go-client@v0.0.0-20240229102137-4474ee7aa0fa/tests/ravendb_5669_test.go (about)

     1  package tests
     2  
     3  import (
     4  	"testing"
     5  
     6  	ravendb "github.com/ravendb/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  }