github.com/altipla-consulting/ravendb-go-client@v0.1.3/tests/load_test.go (about)

     1  package tests
     2  
     3  import (
     4  	"sort"
     5  	"strconv"
     6  	"testing"
     7  
     8  	"github.com/altipla-consulting/ravendb-go-client"
     9  	"github.com/stretchr/testify/assert"
    10  )
    11  
    12  func loadTestLoadCanUseCache(t *testing.T, driver *RavenTestDriver) {
    13  	var err error
    14  	store := driver.getDocumentStoreMust(t)
    15  	defer store.Close()
    16  
    17  	{
    18  		session := openSessionMust(t, store)
    19  		user := &User{}
    20  		user.setName("RavenDB")
    21  
    22  		err = session.StoreWithID(user, "users/1")
    23  		assert.NoError(t, err)
    24  		err = session.SaveChanges()
    25  		assert.NoError(t, err)
    26  		session.Close()
    27  	}
    28  
    29  	{
    30  		newSession := openSessionMust(t, store)
    31  		var user *User
    32  		err = newSession.Load(&user, "users/1")
    33  		assert.NoError(t, err)
    34  		assert.NotNil(t, user)
    35  		newSession.Close()
    36  	}
    37  
    38  	{
    39  		newSession := openSessionMust(t, store)
    40  		var user *User
    41  		err = newSession.Load(&user, "users/1")
    42  		assert.NoError(t, err)
    43  		assert.NotNil(t, user)
    44  		newSession.Close()
    45  	}
    46  }
    47  
    48  func loadTestLoadDocumentById(t *testing.T, driver *RavenTestDriver) {
    49  	var err error
    50  	store := driver.getDocumentStoreMust(t)
    51  	defer store.Close()
    52  
    53  	{
    54  		session := openSessionMust(t, store)
    55  		user := &User{}
    56  		user.setName("RavenDB")
    57  
    58  		err = session.StoreWithID(user, "users/1")
    59  		assert.NoError(t, err)
    60  		err = session.SaveChanges()
    61  		assert.NoError(t, err)
    62  		session.Close()
    63  	}
    64  
    65  	{
    66  		newSession := openSessionMust(t, store)
    67  		var user *User
    68  		err = newSession.Load(&user, "users/1")
    69  		assert.NoError(t, err)
    70  		assert.NotNil(t, user)
    71  		assert.Equal(t, "RavenDB", *user.Name)
    72  		newSession.Close()
    73  	}
    74  }
    75  
    76  func loadTestLoaddocumentsByIDs(t *testing.T, driver *RavenTestDriver) {
    77  	var err error
    78  	store := driver.getDocumentStoreMust(t)
    79  	defer store.Close()
    80  
    81  	{
    82  		session := openSessionMust(t, store)
    83  		user1 := &User{}
    84  		user1.setName("RavenDB")
    85  
    86  		user2 := &User{}
    87  		user2.setName("Hibernating Rhinos")
    88  
    89  		err = session.StoreWithID(user1, "users/1")
    90  		assert.NoError(t, err)
    91  		err = session.StoreWithID(user2, "users/2")
    92  		assert.NoError(t, err)
    93  		err = session.SaveChanges()
    94  		assert.NoError(t, err)
    95  		session.Close()
    96  	}
    97  
    98  	{
    99  		newSession := openSessionMust(t, store)
   100  		users := map[string]*User{}
   101  		err = newSession.LoadMulti(users, []string{"users/1", "users/2"})
   102  		assert.NoError(t, err)
   103  		assert.Equal(t, 2, len(users))
   104  		newSession.Close()
   105  	}
   106  }
   107  
   108  func loadTestLoadNullShouldReturnNull(t *testing.T, driver *RavenTestDriver) {
   109  	var err error
   110  	store := driver.getDocumentStoreMust(t)
   111  	defer store.Close()
   112  
   113  	{
   114  		session := openSessionMust(t, store)
   115  		user1 := &User{}
   116  		user1.setName("Tony Montana")
   117  
   118  		user2 := &User{}
   119  		user2.setName("Tony Soprano")
   120  
   121  		err = session.Store(user1)
   122  		assert.NoError(t, err)
   123  		err = session.Store(user2)
   124  		assert.NoError(t, err)
   125  
   126  		err = session.SaveChanges()
   127  		assert.NoError(t, err)
   128  		session.Close()
   129  	}
   130  
   131  	{
   132  		newSession := openSessionMust(t, store)
   133  		var user1 *User
   134  		err = newSession.Load(&user1, "")
   135  		assert.Error(t, err)
   136  		assert.Nil(t, user1)
   137  		newSession.Close()
   138  	}
   139  }
   140  
   141  func loadTestLoadMultiIdsWithNullShouldReturnDictionaryWithoutNulls(t *testing.T, driver *RavenTestDriver) {
   142  	var err error
   143  	store := driver.getDocumentStoreMust(t)
   144  	defer store.Close()
   145  
   146  	{
   147  		session := openSessionMust(t, store)
   148  		user1 := &User{}
   149  		user1.setName("Tony Montana")
   150  
   151  		user2 := &User{}
   152  		user2.setName("Tony Soprano")
   153  
   154  		err = session.StoreWithID(user1, "users/1")
   155  		assert.NoError(t, err)
   156  		err = session.StoreWithID(user2, "users/2")
   157  		assert.NoError(t, err)
   158  		err = session.SaveChanges()
   159  		assert.NoError(t, err)
   160  		session.Close()
   161  	}
   162  	{
   163  		newSession := openSessionMust(t, store)
   164  		orderedArrayOfIdsWithNull := []string{"users/1", "", "users/2", ""}
   165  		users1 := map[string]*User{}
   166  		err = newSession.LoadMulti(users1, orderedArrayOfIdsWithNull)
   167  		assert.NoError(t, err)
   168  		assert.Equal(t, 2, len(users1))
   169  
   170  		user1 := users1["users/1"]
   171  		assert.NotNil(t, user1)
   172  
   173  		user2 := users1["users/2"]
   174  		assert.NotNil(t, user2)
   175  		newSession.Close()
   176  	}
   177  }
   178  
   179  func loadTestLoadDocumentWithIntArrayAndLongArray(t *testing.T, driver *RavenTestDriver) {
   180  	var err error
   181  	store := driver.getDocumentStoreMust(t)
   182  	defer store.Close()
   183  
   184  	{
   185  		session := openSessionMust(t, store)
   186  		geek1 := &GeekPerson{
   187  			Name:                    "Bebop",
   188  			FavoritePrimes:          []int{13, 43, 443, 997},
   189  			FavoriteVeryLargePrimes: []int64{5000000029, 5000000039},
   190  		}
   191  
   192  		err = session.StoreWithID(geek1, "geeks/1")
   193  		assert.NoError(t, err)
   194  
   195  		geek2 := &GeekPerson{
   196  			Name:                    "Rocksteady",
   197  			FavoritePrimes:          []int{2, 3, 5, 7},
   198  			FavoriteVeryLargePrimes: []int64{999999999989},
   199  		}
   200  
   201  		err = session.StoreWithID(geek2, "geeks/2")
   202  		assert.NoError(t, err)
   203  		err = session.SaveChanges()
   204  		assert.NoError(t, err)
   205  		session.Close()
   206  	}
   207  
   208  	{
   209  		newSession := openSessionMust(t, store)
   210  		var geek1 *GeekPerson
   211  		err = newSession.Load(&geek1, "geeks/1")
   212  		assert.NoError(t, err)
   213  
   214  		var geek2 *GeekPerson
   215  		err = newSession.Load(&geek2, "geeks/2")
   216  		assert.NoError(t, err)
   217  
   218  		assert.Equal(t, 43, geek1.FavoritePrimes[1])
   219  		assert.Equal(t, int64(5000000039), geek1.FavoriteVeryLargePrimes[1])
   220  
   221  		assert.Equal(t, 7, geek2.FavoritePrimes[3])
   222  		assert.Equal(t, int64(999999999989), geek2.FavoriteVeryLargePrimes[0])
   223  		newSession.Close()
   224  	}
   225  }
   226  
   227  func loadTestShouldLoadManyIdsAsPostRequest(t *testing.T, driver *RavenTestDriver) {
   228  	var err error
   229  	store := driver.getDocumentStoreMust(t)
   230  	defer store.Close()
   231  
   232  	var ids []string
   233  
   234  	{
   235  		session := openSessionMust(t, store)
   236  		// Length of all the ids together should be larger than 1024 for POST request
   237  		for i := 0; i < 200; i++ {
   238  			id := "users/" + strconv.Itoa(i)
   239  			ids = append(ids, id)
   240  
   241  			user := &User{}
   242  			user.setName("Person " + strconv.Itoa(i))
   243  			err = session.StoreWithID(user, id)
   244  			assert.NoError(t, err)
   245  		}
   246  
   247  		err = session.SaveChanges()
   248  		assert.NoError(t, err)
   249  		session.Close()
   250  	}
   251  
   252  	{
   253  		session := openSessionMust(t, store)
   254  		users := map[string]*User{}
   255  		err = session.LoadMulti(users, ids)
   256  		assert.NoError(t, err)
   257  		assert.NotNil(t, users)
   258  		user := users["users/77"]
   259  		assert.NotNil(t, user)
   260  		name := *user.Name
   261  		assert.Equal(t, "Person 77", name)
   262  		assert.Equal(t, "users/77", user.ID)
   263  		session.Close()
   264  	}
   265  }
   266  
   267  func loadTestLoadStartsWith(t *testing.T, driver *RavenTestDriver) {
   268  	var err error
   269  	store := driver.getDocumentStoreMust(t)
   270  	defer store.Close()
   271  
   272  	{
   273  		session := openSessionMust(t, store)
   274  		createUser := func(id string) *User {
   275  			u := &User{}
   276  			u.ID = id
   277  			err = session.Store(u)
   278  			assert.NoError(t, err)
   279  			return u
   280  		}
   281  
   282  		createUser("Aaa")
   283  		createUser("Abc")
   284  		createUser("Afa")
   285  		createUser("Ala")
   286  		createUser("Baa")
   287  
   288  		err = session.SaveChanges()
   289  		assert.NoError(t, err)
   290  		session.Close()
   291  	}
   292  
   293  	{
   294  		newSession := openSessionMust(t, store)
   295  		var users []*User
   296  		args := &ravendb.StartsWithArgs{
   297  			StartsWith: "A",
   298  		}
   299  		err = newSession.Advanced().LoadStartingWith(&users, args)
   300  		assert.NoError(t, err)
   301  
   302  		sort.Slice(users, func(i, j int) bool {
   303  			return users[i].ID < users[j].ID
   304  		})
   305  		userIDs := []string{"Aaa", "Abc", "Afa", "Ala"}
   306  		for i := range users {
   307  			assert.Equal(t, userIDs[i], users[i].ID)
   308  		}
   309  
   310  		users = nil
   311  		args = &ravendb.StartsWithArgs{
   312  			StartsWith: "A",
   313  			Start:      1,
   314  			PageSize:   2,
   315  		}
   316  		err = newSession.Advanced().LoadStartingWith(&users, args)
   317  
   318  		userIDs = []string{"Abc", "Afa"}
   319  		for _, user := range users {
   320  			assert.True(t, stringArrayContains(userIDs, user.ID))
   321  		}
   322  		newSession.Close()
   323  	}
   324  }
   325  
   326  func TestLoad(t *testing.T) {
   327  	driver := createTestDriver(t)
   328  	destroy := func() { destroyDriver(t, driver) }
   329  	defer recoverTest(t, destroy)
   330  
   331  	// matches order of Java tests
   332  	loadTestLoadDocumentById(t, driver)
   333  	loadTestLoadNullShouldReturnNull(t, driver)
   334  	loadTestLoaddocumentsByIDs(t, driver)
   335  	loadTestShouldLoadManyIdsAsPostRequest(t, driver)
   336  	loadTestLoadStartsWith(t, driver)
   337  	loadTestLoadMultiIdsWithNullShouldReturnDictionaryWithoutNulls(t, driver)
   338  	loadTestLoadDocumentWithIntArrayAndLongArray(t, driver)
   339  	loadTestLoadCanUseCache(t, driver)
   340  }