github.com/ravendb/ravendb-go-client@v0.0.0-20240229102137-4474ee7aa0fa/tests/basic_documents_test.go (about)

     1  package tests
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/ravendb/ravendb-go-client"
     7  	"github.com/stretchr/testify/assert"
     8  )
     9  
    10  func basicDocumentscanChangeDocumentCollectionWithDeleteAndSave(t *testing.T, driver *RavenTestDriver) {
    11  	var err error
    12  	store := driver.getDocumentStoreMust(t)
    13  	defer store.Close()
    14  
    15  	documentID := "users/1"
    16  	{
    17  		session := openSessionMust(t, store)
    18  		user := &User{}
    19  		user.setName("Grisha")
    20  
    21  		err = session.StoreWithID(user, documentID)
    22  		assert.NoError(t, err)
    23  		err = session.SaveChanges()
    24  		assert.NoError(t, err)
    25  		session.Close()
    26  	}
    27  
    28  	{
    29  		session := openSessionMust(t, store)
    30  		err = session.DeleteByID(documentID, "")
    31  		assert.NoError(t, err)
    32  		err = session.SaveChanges()
    33  		assert.NoError(t, err)
    34  		session.Close()
    35  	}
    36  
    37  	{
    38  		session := openSessionMust(t, store)
    39  		var user *User
    40  		err = session.Load(&user, documentID)
    41  		assert.NoError(t, err)
    42  		assert.Nil(t, user)
    43  		session.Close()
    44  	}
    45  
    46  	{
    47  		session := openSessionMust(t, store)
    48  		person := &Person{}
    49  		person.Name = "Grisha"
    50  		err = session.StoreWithID(person, documentID)
    51  		assert.NoError(t, err)
    52  		err = session.SaveChanges()
    53  		assert.NoError(t, err)
    54  		session.Close()
    55  	}
    56  }
    57  
    58  func basicDocumentsGet(t *testing.T, driver *RavenTestDriver) {
    59  	var err error
    60  	store := driver.getDocumentStoreMust(t)
    61  	defer store.Close()
    62  
    63  	dummy, err := entityToDocument(&User{})
    64  	assert.NoError(t, err)
    65  	delete(dummy, "ID")
    66  
    67  	{
    68  		session := openSessionMust(t, store)
    69  		user1 := &User{}
    70  		user1.setName("Fitzchak")
    71  
    72  		user2 := &User{}
    73  		user2.setName("Arek")
    74  
    75  		err = session.StoreWithID(user1, "users/1")
    76  		assert.NoError(t, err)
    77  		err = session.StoreWithID(user2, "users/2")
    78  		assert.NoError(t, err)
    79  
    80  		err = session.SaveChanges()
    81  		assert.NoError(t, err)
    82  		session.Close()
    83  	}
    84  	requestExecutor := store.GetRequestExecutor("")
    85  	getDocumentsCommand, err := ravendb.NewGetDocumentsCommand([]string{"users/1", "users/2"}, nil, false)
    86  	assert.NoError(t, err)
    87  	err = requestExecutor.ExecuteCommand(getDocumentsCommand, nil)
    88  	assert.NoError(t, err)
    89  	docs := getDocumentsCommand.Result
    90  	assert.Equal(t, len(docs.Results), 2)
    91  	doc1 := docs.Results[0]
    92  	doc2 := docs.Results[1]
    93  
    94  	assert.NotNil(t, doc1)
    95  	doc1Properties := objectNodeFieldNames(doc1)
    96  	assert.True(t, stringArrayContains(doc1Properties, "@metadata"))
    97  	assert.Equal(t, len(doc1Properties), len(dummy)+1) // +1 for @metadata
    98  
    99  	assert.NotNil(t, doc2)
   100  	doc2Properties := objectNodeFieldNames(doc2)
   101  	assert.True(t, stringArrayContains(doc2Properties, "@metadata"))
   102  	assert.Equal(t, len(doc2Properties), len(dummy)+1) // +1 for @metadata
   103  
   104  	// Note: we don't expose EntityToJSON in Go
   105  	/*
   106  		{
   107  			session := openSessionMust(t, store)
   108  			etojs := session.GetEntityToJSON()
   109  			user1I, err := etojs.ConvertToEntity(reflect.TypeOf(&User{}), "users/1", doc1)
   110  			assert.NoError(t, err)
   111  			user1 := user1I.(*User)
   112  
   113  			user2I, err := etojs.ConvertToEntity(reflect.TypeOf(&User{}), "users/2", doc2)
   114  			assert.NoError(t, err)
   115  			user2 := user2I.(*User)
   116  			assert.Equal(t, *user1.Name, "Fitzchak")
   117  			assert.Equal(t, *user2.Name, "Arek")
   118  			session.Close()
   119  		}
   120  	*/
   121  
   122  	getDocumentsCommand, err = ravendb.NewGetDocumentsCommand([]string{"users/1", "users/2"}, nil, true)
   123  	assert.NoError(t, err)
   124  	err = requestExecutor.ExecuteCommand(getDocumentsCommand, nil)
   125  	assert.NoError(t, err)
   126  	docs = getDocumentsCommand.Result
   127  	assert.Equal(t, len(docs.Results), 2)
   128  	doc1 = docs.Results[0]
   129  	doc2 = docs.Results[1]
   130  
   131  	assert.NotNil(t, doc1)
   132  	doc1Properties = objectNodeFieldNames(doc1)
   133  	assert.True(t, stringArrayContains(doc1Properties, "@metadata"))
   134  	assert.Equal(t, len(doc1Properties), 1)
   135  
   136  	assert.NotNil(t, doc1)
   137  	doc2Properties = objectNodeFieldNames(doc2)
   138  	assert.True(t, stringArrayContains(doc2Properties, "@metadata"))
   139  	assert.Equal(t, len(doc2Properties), 1)
   140  }
   141  
   142  func TestBasicDocuments(t *testing.T) {
   143  	driver := createTestDriver(t)
   144  	destroy := func() { destroyDriver(t, driver) }
   145  	defer recoverTest(t, destroy)
   146  
   147  	// matches order of Java tests
   148  	basicDocumentsGet(t, driver)
   149  	basicDocumentscanChangeDocumentCollectionWithDeleteAndSave(t, driver)
   150  }