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 }