github.com/ravendb/ravendb-go-client@v0.0.0-20240229102137-4474ee7aa0fa/tests/lazy_aggregation_embedded_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 lazyAggregationEmbeddedLazyTest(t *testing.T, driver *RavenTestDriver) {
    11  	var err error
    12  	store := driver.getDocumentStoreMust(t)
    13  	defer store.Close()
    14  
    15  	{
    16  		index := NewTaskIndex()
    17  
    18  		session := openSessionMust(t, store)
    19  
    20  		task1 := &Task{
    21  			AssigneeID: "users/1",
    22  			ID:         "tasks/1",
    23  		}
    24  
    25  		task2 := &Task{
    26  			AssigneeID: "users/1",
    27  			ID:         "tasks/2",
    28  		}
    29  
    30  		task3 := &Task{
    31  			AssigneeID: "users/2",
    32  			ID:         "tasks/3",
    33  		}
    34  
    35  		err = session.Store(task1)
    36  		assert.NoError(t, err)
    37  		err = session.Store(task2)
    38  		assert.NoError(t, err)
    39  		err = session.Store(task3)
    40  		assert.NoError(t, err)
    41  		err = session.SaveChanges()
    42  		assert.NoError(t, err)
    43  
    44  		err = index.Execute(store, nil, "")
    45  		assert.NoError(t, err)
    46  		err = driver.waitForIndexing(store, "", 0)
    47  		assert.NoError(t, err)
    48  
    49  		q := session.QueryIndex(index.IndexName)
    50  		f := ravendb.NewFacetBuilder()
    51  		f.ByField("AssigneeID").WithDisplayName("AssigneeID")
    52  		query := q.AggregateByFacet(f.GetFacet())
    53  		lazyOperation, err := query.ExecuteLazy()
    54  		assert.NoError(t, err)
    55  		facetValue := map[string]*ravendb.FacetResult{}
    56  		err = lazyOperation.GetValue(&facetValue)
    57  		assert.NoError(t, err)
    58  		values := facetValue["AssigneeID"].Values
    59  		userStats := map[string]int{}
    60  		for _, value := range values {
    61  			r := value.Range
    62  			c := value.Count
    63  			userStats[r] = c
    64  		}
    65  		assert.Equal(t, userStats["users/1"], 2)
    66  		assert.Equal(t, userStats["users/2"], 1)
    67  
    68  		session.Close()
    69  	}
    70  
    71  }
    72  
    73  func NewTaskIndex() *ravendb.IndexCreationTask {
    74  	res := ravendb.NewIndexCreationTask("TaskIndex")
    75  	res.Map = "from task in docs.Tasks select new { task.AssigneeID } "
    76  	return res
    77  }
    78  
    79  type Task struct {
    80  	ID         string
    81  	AssigneeID string
    82  }
    83  
    84  func TestLazyAggregationEmbeddedLazy(t *testing.T) {
    85  	driver := createTestDriver(t)
    86  	destroy := func() { destroyDriver(t, driver) }
    87  	defer recoverTest(t, destroy)
    88  
    89  	// matches order of Java tests
    90  	lazyAggregationEmbeddedLazyTest(t, driver)
    91  }