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  }