github.com/altipla-consulting/ravendb-go-client@v0.1.3/tests/revisions_test.go (about) 1 package tests 2 3 import ( 4 "math" 5 "sort" 6 "strconv" 7 "testing" 8 9 "github.com/altipla-consulting/ravendb-go-client" 10 "github.com/stretchr/testify/assert" 11 ) 12 13 func collectUserNamesSorted(a []*User) []string { 14 var names []string 15 for _, user := range a { 16 names = append(names, *user.Name) 17 } 18 sort.Strings(names) 19 return names 20 } 21 22 func createRevisions(t *testing.T, store *ravendb.DocumentStore) { 23 for i := 0; i < 4; i++ { 24 session := openSessionMust(t, store) 25 user := &User{} 26 user.setName("user" + strconv.Itoa(i+1)) 27 err := session.StoreWithID(user, "users/1") 28 assert.NoError(t, err) 29 err = session.SaveChanges() 30 assert.NoError(t, err) 31 session.Close() 32 } 33 } 34 35 func revisionsTestRevisions(t *testing.T, driver *RavenTestDriver) { 36 37 var err error 38 store := driver.getDocumentStoreMust(t) 39 defer store.Close() 40 41 _, err = setupRevisions(store, false, 4) 42 assert.NoError(t, err) 43 44 createRevisions(t, store) 45 46 { 47 session := openSessionMust(t, store) 48 49 var allRevisions []*User 50 err = session.Advanced().Revisions().GetFor(&allRevisions, "users/1") 51 assert.NoError(t, err) 52 assert.Equal(t, len(allRevisions), 4) 53 54 names := collectUserNamesSorted(allRevisions) 55 assert.Equal(t, names, []string{"user1", "user2", "user3", "user4"}) 56 57 var revisionsSkipFirst []*User 58 err = session.Advanced().Revisions().GetForStartAt(&revisionsSkipFirst, "users/1", 1) 59 assert.NoError(t, err) 60 assert.Equal(t, len(revisionsSkipFirst), 3) 61 names = collectUserNamesSorted(revisionsSkipFirst) 62 assert.Equal(t, names, []string{"user1", "user2", "user3"}) 63 64 var revisionsSkipFirstTakeTwo []*User 65 err = session.Advanced().Revisions().GetForPaged(&revisionsSkipFirstTakeTwo, "users/1", 1, 2) 66 assert.NoError(t, err) 67 assert.Equal(t, len(revisionsSkipFirstTakeTwo), 2) 68 names = collectUserNamesSorted(revisionsSkipFirstTakeTwo) 69 assert.Equal(t, names, []string{"user2", "user3"}) 70 71 allMetadata, err := session.Advanced().Revisions().GetMetadataFor("users/1") 72 assert.NoError(t, err) 73 assert.Equal(t, len(allMetadata), 4) 74 75 metadataSkipFirst, err := session.Advanced().Revisions().GetMetadataForStartAt("users/1", 1) 76 assert.NoError(t, err) 77 assert.Equal(t, len(metadataSkipFirst), 3) 78 79 metadataSkipFirstTakeTwo, err := session.Advanced().Revisions().GetMetadataForPaged("users/1", 1, 2) 80 assert.NoError(t, err) 81 assert.Equal(t, len(metadataSkipFirstTakeTwo), 2) 82 83 dict := metadataSkipFirst[0] 84 var changeVector string 85 chvi, ok := dict.Get(ravendb.MetadataChangeVector) 86 if ok { 87 changeVector = chvi.(string) 88 } 89 var user *User 90 err = session.Advanced().Revisions().Get(&user, changeVector) 91 assert.NoError(t, err) 92 assert.Equal(t, *user.Name, "user3") 93 session.Close() 94 } 95 } 96 97 func revisionsTestCanListRevisionsBin(t *testing.T, driver *RavenTestDriver) { 98 99 var err error 100 store := driver.getDocumentStoreMust(t) 101 defer store.Close() 102 103 _, err = setupRevisions(store, false, 4) 104 assert.NoError(t, err) 105 106 createRevisions(t, store) 107 108 { 109 session := openSessionMust(t, store) 110 111 user := &User{} 112 user.setName("user1") 113 err = session.StoreWithID(user, "users/1") 114 assert.NoError(t, err) 115 err = session.SaveChanges() 116 assert.NoError(t, err) 117 118 session.Close() 119 } 120 121 { 122 session := openSessionMust(t, store) 123 124 err = session.DeleteByID("users/1", "") 125 assert.NoError(t, err) 126 err = session.SaveChanges() 127 assert.NoError(t, err) 128 129 session.Close() 130 } 131 revisionsBinEntryCommand := ravendb.NewGetRevisionsBinEntryCommand(math.MaxInt64, 20) 132 err = store.GetRequestExecutor("").ExecuteCommand(revisionsBinEntryCommand, nil) 133 assert.NoError(t, err) 134 result := revisionsBinEntryCommand.Result 135 assert.Equal(t, len(result.Results), 1) 136 metaI := result.Results[0]["@metadata"] 137 meta := metaI.(map[string]interface{}) 138 id, _ := jsonGetAsText(meta, "@id") 139 assert.Equal(t, id, "users/1") 140 } 141 142 // for better code coverage 143 func goRevisionsTest(t *testing.T, driver *RavenTestDriver) { 144 145 var err error 146 store := driver.getDocumentStoreMust(t) 147 defer store.Close() 148 149 _, err = setupRevisions(store, false, 4) 150 assert.NoError(t, err) 151 152 createRevisions(t, store) 153 154 { 155 session := openSessionMust(t, store) 156 157 allMetadata, err := session.Advanced().Revisions().GetMetadataFor("users/1") 158 assert.NoError(t, err) 159 assert.Equal(t, len(allMetadata), 4) 160 161 var changeVectors []string 162 for _, dict := range allMetadata { 163 var changeVector string 164 chvi, ok := dict.Get(ravendb.MetadataChangeVector) 165 if ok { 166 changeVector = chvi.(string) 167 changeVectors = append(changeVectors, changeVector) 168 } 169 } 170 assert.Equal(t, len(changeVectors), 4) 171 172 revisions := map[string]*User{} 173 err = session.Advanced().Revisions().GetRevisions(revisions, changeVectors) 174 assert.NoError(t, err) 175 assert.Equal(t, len(revisions), 4) 176 session.Close() 177 } 178 } 179 180 func TestRevisions(t *testing.T) { 181 driver := createTestDriver(t) 182 destroy := func() { destroyDriver(t, driver) } 183 defer recoverTest(t, destroy) 184 185 revisionsTestRevisions(t, driver) 186 // TODO: order might be different than Java 187 revisionsTestCanListRevisionsBin(t, driver) 188 189 goRevisionsTest(t, driver) 190 }