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

     1  package tests
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  
     7  	ravendb "github.com/ravendb/ravendb-go-client"
     8  	"github.com/stretchr/testify/assert"
     9  )
    10  
    11  func simpleMultiMap_canCreateMultiMapIndex(t *testing.T, driver *RavenTestDriver) {
    12  	var err error
    13  	store := driver.getDocumentStoreMust(t)
    14  	defer store.Close()
    15  
    16  	index := NewCatsAndDogs()
    17  	err = index.Execute(store, nil, "")
    18  	assert.NoError(t, err)
    19  
    20  	op := ravendb.NewGetIndexOperation("CatsAndDogs")
    21  	err = store.Maintenance().Send(op)
    22  	indexDefinition := op.Command.Result
    23  	assert.Equal(t, len(indexDefinition.Maps), 2)
    24  }
    25  
    26  func simpleMultiMap_canQueryUsingMultiMap(t *testing.T, driver *RavenTestDriver) {
    27  	var err error
    28  	store := driver.getDocumentStoreMust(t)
    29  	defer store.Close()
    30  
    31  	index := NewCatsAndDogs()
    32  	err = index.Execute(store, nil, "")
    33  	assert.NoError(t, err)
    34  
    35  	{
    36  		session := openSessionMust(t, store)
    37  
    38  		cat := &Cat{Name: "Tom"}
    39  		dog := &Dog{Name: "Oscar"}
    40  
    41  		err = session.Store(cat)
    42  		assert.NoError(t, err)
    43  		err = session.Store(dog)
    44  		assert.NoError(t, err)
    45  
    46  		err = session.SaveChanges()
    47  		assert.NoError(t, err)
    48  
    49  		session.Close()
    50  	}
    51  
    52  	{
    53  		session := openSessionMust(t, store)
    54  
    55  		// Note: Go doesn't support interfaces like Java. We can only
    56  		// query a single type, not an interface
    57  		var haveNames []*Dog
    58  		q := session.QueryIndex(index.IndexName)
    59  		q = q.WaitForNonStaleResults(time.Second * 10)
    60  		q = q.OrderBy("name")
    61  		err = q.GetResults(&haveNames)
    62  		assert.NoError(t, err)
    63  
    64  		assert.Equal(t, len(haveNames), 2)
    65  
    66  		assert.Equal(t, haveNames[0].Name, "Oscar")
    67  		assert.Equal(t, haveNames[1].Name, "Tom")
    68  
    69  		session.Close()
    70  	}
    71  }
    72  
    73  // Note: in Go IndexCreationTask covers functionality of
    74  // AbstractMultiMapIndexCreationTask
    75  func NewCatsAndDogs() *ravendb.IndexCreationTask {
    76  	res := ravendb.NewIndexCreationTask("CatsAndDogs")
    77  	res.Maps = []string{
    78  		"from cat in docs.Cats select new { cat.name }",
    79  		"from dog in docs.Dogs select new { dog.name }",
    80  	}
    81  	return res
    82  }
    83  
    84  type Cat struct {
    85  	Name string `json:"name"`
    86  }
    87  
    88  // Note: re-using a Dog structure from other test, which also has Name field
    89  
    90  func TestSimpleMultiMap(t *testing.T) {
    91  	driver := createTestDriver(t)
    92  	destroy := func() { destroyDriver(t, driver) }
    93  	defer recoverTest(t, destroy)
    94  
    95  	// matches order of Java tests
    96  	simpleMultiMap_canCreateMultiMapIndex(t, driver)
    97  	simpleMultiMap_canQueryUsingMultiMap(t, driver)
    98  }