github.com/ravendb/ravendb-go-client@v0.0.0-20240229102137-4474ee7aa0fa/tests/ravendb_10641_test.go (about) 1 package tests 2 3 import ( 4 "testing" 5 6 "github.com/ravendb/ravendb-go-client" 7 8 "github.com/stretchr/testify/assert" 9 ) 10 11 func ravendb10641canEditObjectsInMetadata(t *testing.T, driver *RavenTestDriver) { 12 var err error 13 store := driver.getDocumentStoreMust(t) 14 defer store.Close() 15 16 { 17 session := openSessionMust(t, store) 18 19 v := &Document{} 20 err = session.StoreWithID(v, "items/first") 21 assert.NoError(t, err) 22 23 items := map[string]string{ 24 "lang": "en", 25 } 26 var meta *ravendb.MetadataAsDictionary 27 meta, err = session.Advanced().GetMetadataFor(v) 28 assert.NoError(t, err) 29 meta.Put("Items", items) 30 err = session.SaveChanges() 31 assert.NoError(t, err) 32 33 session.Close() 34 } 35 36 { 37 session := openSessionMust(t, store) 38 39 var v *Document 40 err = session.Load(&v, "items/first") 41 assert.NoError(t, err) 42 43 var m *ravendb.MetadataAsDictionary 44 m, err = session.Advanced().GetMetadataFor(v) 45 assert.NoError(t, err) 46 metadataI, ok := m.Get("Items") 47 assert.True(t, ok) 48 metadata := metadataI.(map[string]interface{}) 49 metadata["lang"] = "sv" 50 // Note: unlike Java we can't intercept modifications so we have to 51 // manually mark as dirty 52 m.MarkDirty() 53 54 err = session.SaveChanges() 55 assert.NoError(t, err) 56 57 session.Close() 58 } 59 60 { 61 session := openSessionMust(t, store) 62 63 var v *Document 64 err = session.Load(&v, "items/first") 65 assert.NoError(t, err) 66 var metadata *ravendb.MetadataAsDictionary 67 metadata, err = session.Advanced().GetMetadataFor(v) 68 assert.NoError(t, err) 69 metadata.Put("test", "123") 70 71 err = session.SaveChanges() 72 assert.NoError(t, err) 73 74 session.Close() 75 } 76 77 { 78 session := openSessionMust(t, store) 79 80 var v *Document 81 err = session.Load(&v, "items/first") 82 assert.NoError(t, err) 83 _, err = session.Advanced().GetMetadataFor(v) 84 assert.NoError(t, err) 85 86 err = session.SaveChanges() 87 assert.NoError(t, err) 88 89 session.Close() 90 } 91 92 { 93 session := openSessionMust(t, store) 94 95 var v *Document 96 err = session.Load(&v, "items/first") 97 assert.NoError(t, err) 98 metadata, err := session.Advanced().GetMetadataFor(v) 99 assert.NoError(t, err) 100 mI, ok := metadata.Get("Items") 101 assert.True(t, ok) 102 m := mI.(map[string]interface{}) 103 val := m["lang"] 104 assert.Equal(t, val, "sv") 105 106 val, ok = metadata.Get("test") 107 assert.True(t, ok) 108 assert.Equal(t, val, "123") 109 110 session.Close() 111 } 112 } 113 114 type Document struct { 115 ID string `json:"ID"` 116 Name string `json:"Name"` 117 } 118 119 func TestRavenDB10641(t *testing.T) { 120 driver := createTestDriver(t) 121 destroy := func() { destroyDriver(t, driver) } 122 defer recoverTest(t, destroy) 123 124 // matches the order of Java tests 125 ravendb10641canEditObjectsInMetadata(t, driver) 126 }