github.com/ravendb/ravendb-go-client@v0.0.0-20240229102137-4474ee7aa0fa/tests/store_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 storeTestRefreshTest(t *testing.T, driver *RavenTestDriver) { 11 var err error 12 store := driver.getDocumentStoreMust(t) 13 defer store.Close() 14 15 { 16 session := openSessionMust(t, store) 17 user := &User{} 18 user.setName("RavenDB") 19 err = session.StoreWithID(user, "users/1") 20 assert.NoError(t, err) 21 err = session.SaveChanges() 22 assert.NoError(t, err) 23 24 { 25 innerSession := openSessionMust(t, store) 26 var innerUser *User 27 err = innerSession.Load(&innerUser, "users/1") 28 assert.NoError(t, err) 29 30 innerUser.setName("RavenDB 4.0") 31 err = innerSession.SaveChanges() 32 assert.NoError(t, err) 33 } 34 35 err = session.Advanced().Refresh(user) 36 assert.NoError(t, err) 37 38 name := *user.Name 39 assert.Equal(t, name, "RavenDB 4.0") 40 session.Close() 41 } 42 } 43 44 func storeTestStoreDocument(t *testing.T, driver *RavenTestDriver) { 45 var err error 46 store := driver.getDocumentStoreMust(t) 47 defer store.Close() 48 49 { 50 session := openSessionMust(t, store) 51 52 user := &User{} 53 user.setName("RavenDB") 54 err = session.StoreWithID(user, "users/1") 55 assert.NoError(t, err) 56 err = session.SaveChanges() 57 assert.NoError(t, err) 58 59 user = nil 60 err = session.Load(&user, "users/1") 61 assert.NoError(t, err) 62 assert.NotNil(t, user) 63 name := *user.Name 64 assert.Equal(t, name, "RavenDB") 65 session.Close() 66 } 67 } 68 69 func storeTestStoreDocuments(t *testing.T, driver *RavenTestDriver) { 70 var err error 71 store := driver.getDocumentStoreMust(t) 72 defer store.Close() 73 74 { 75 session := openSessionMust(t, store) 76 user1 := &User{} 77 user1.setName("RavenDB") 78 err = session.StoreWithID(user1, "users/1") 79 assert.NoError(t, err) 80 81 user2 := &User{} 82 user2.setName("Hibernating Rhinos") 83 err = session.StoreWithID(user2, "users/2") 84 assert.NoError(t, err) 85 86 err = session.SaveChanges() 87 assert.NoError(t, err) 88 89 users := map[string]*User{} 90 err = session.LoadMulti(users, []string{"users/1", "users/2"}) 91 assert.NoError(t, err) 92 assert.Equal(t, len(users), 2) 93 session.Close() 94 } 95 } 96 97 func storeTestNotifyAfterStore(t *testing.T, driver *RavenTestDriver) { 98 var err error 99 store := driver.getDocumentStoreMust(t) 100 defer store.Close() 101 102 storeLevelCallBack := []*ravendb.MetadataAsDictionary{nil} 103 sessionLevelCallback := []*ravendb.MetadataAsDictionary{nil} 104 105 fn := func(event *ravendb.AfterSaveChangesEventArgs) { 106 storeLevelCallBack[0] = event.GetDocumentMetadata() 107 } 108 store.AddAfterSaveChangesListener(fn) 109 110 { 111 session := openSessionMust(t, store) 112 fn := func(event *ravendb.AfterSaveChangesEventArgs) { 113 sessionLevelCallback[0] = event.GetDocumentMetadata() 114 } 115 session.Advanced().AddAfterSaveChangesListener(fn) 116 117 user1 := &User{} 118 user1.setName("RavenDB") 119 err = session.StoreWithID(user1, "users/1") 120 assert.NoError(t, err) 121 err = session.SaveChanges() 122 assert.NoError(t, err) 123 124 isLoaded := session.Advanced().IsLoaded("users/1") 125 assert.True(t, isLoaded) 126 127 changeVector, err := session.Advanced().GetChangeVectorFor(user1) 128 assert.NoError(t, err) 129 assert.NotNil(t, changeVector) 130 131 lastModified, err := session.Advanced().GetLastModifiedFor(user1) 132 assert.NoError(t, err) 133 assert.NotNil(t, lastModified) 134 135 session.Close() 136 } 137 138 assert.NotNil(t, storeLevelCallBack[0]) 139 assert.Equal(t, storeLevelCallBack[0], sessionLevelCallback[0]) 140 assert.NotNil(t, sessionLevelCallback[0]) 141 142 iMetadataDictionary := sessionLevelCallback[0] 143 entrySet := iMetadataDictionary.EntrySet() 144 for key, value := range entrySet { 145 assert.NotEqual(t, key, "") 146 assert.NotNil(t, value) 147 } 148 } 149 150 func TestStore(t *testing.T) { 151 driver := createTestDriver(t) 152 destroy := func() { destroyDriver(t, driver) } 153 defer recoverTest(t, destroy) 154 155 // matches order of java tests 156 storeTestRefreshTest(t, driver) 157 storeTestStoreDocument(t, driver) 158 storeTestStoreDocuments(t, driver) 159 storeTestNotifyAfterStore(t, driver) 160 }