github.com/altipla-consulting/ravendb-go-client@v0.1.3/tests/load_into_stream_test.go (about) 1 package tests 2 3 import ( 4 "bytes" 5 "encoding/json" 6 "io/ioutil" 7 "testing" 8 9 ravendb "github.com/altipla-consulting/ravendb-go-client" 10 "github.com/stretchr/testify/assert" 11 ) 12 13 func loadIntoStreamCanLoadByIdsIntoStream(t *testing.T, driver *RavenTestDriver) { 14 var err error 15 store := driver.getDocumentStoreMust(t) 16 defer store.Close() 17 18 insertData(t, store) 19 20 { 21 session := openSessionMust(t, store) 22 23 stream := bytes.NewBuffer(nil) 24 25 ids := []string{"employee2s/1-A", "employee2s/4-A", "employee2s/7-A"} 26 err = session.Advanced().LoadIntoStream(ids, stream) 27 assert.NoError(t, err) 28 29 d, err := ioutil.ReadAll(stream) 30 assert.NoError(t, err) 31 var jsonNode map[string]interface{} 32 err = json.Unmarshal(d, &jsonNode) 33 assert.NoError(t, err) 34 35 res := jsonNode["Results"] 36 a := res.([]interface{}) 37 assert.Equal(t, len(a), 3) 38 39 names := []string{"Aviv", "Maxim", "Michael"} 40 41 for _, v := range a { 42 v2 := v.(map[string]interface{}) 43 s, _ := jsonGetAsText(v2, "firstName") 44 assert.True(t, stringArrayContains(names, s)) 45 } 46 47 session.Close() 48 } 49 } 50 51 func loadIntoStreamCanLoadStartingWithIntoStream(t *testing.T, driver *RavenTestDriver) { 52 var err error 53 store := driver.getDocumentStoreMust(t) 54 defer store.Close() 55 56 insertData(t, store) 57 58 { 59 session := openSessionMust(t, store) 60 stream := bytes.NewBuffer(nil) 61 62 args := &ravendb.StartsWithArgs{ 63 StartsWith: "employee2s/", 64 } 65 err = session.Advanced().LoadStartingWithIntoStream(stream, args) 66 assert.NoError(t, err) 67 68 d, err := ioutil.ReadAll(stream) 69 assert.NoError(t, err) 70 var jsonNode map[string]interface{} 71 err = json.Unmarshal(d, &jsonNode) 72 assert.NoError(t, err) 73 74 res := jsonNode["Results"] 75 a := res.([]interface{}) 76 assert.Equal(t, len(a), 7) 77 78 names := []string{"Aviv", "Iftah", "Tal", "Maxim", "Karmel", "Grisha", "Michael"} 79 for _, v := range a { 80 v2 := v.(map[string]interface{}) 81 s, _ := jsonGetAsText(v2, "firstName") 82 assert.True(t, stringArrayContains(names, s)) 83 } 84 85 session.Close() 86 } 87 } 88 89 func insertData(t *testing.T, store *ravendb.DocumentStore) { 90 var err error 91 { 92 session := openSessionMust(t, store) 93 94 insertEmployee := func(name string) error { 95 employee := &Employee2{ 96 FirstName: name, 97 } 98 return session.Store(employee) 99 } 100 101 err = insertEmployee("Aviv") 102 assert.NoError(t, err) 103 err = insertEmployee("Iftah") 104 assert.NoError(t, err) 105 err = insertEmployee("Tal") 106 assert.NoError(t, err) 107 err = insertEmployee("Maxim") 108 assert.NoError(t, err) 109 err = insertEmployee("Karmel") 110 assert.NoError(t, err) 111 err = insertEmployee("Grisha") 112 assert.NoError(t, err) 113 err = insertEmployee("Michael") 114 assert.NoError(t, err) 115 err = session.SaveChanges() 116 assert.NoError(t, err) 117 118 session.Close() 119 } 120 } 121 122 // Note: conflicts with Employee in employee_test.go 123 type Employee2 struct { 124 FirstName string `json:"firstName"` 125 } 126 127 func TestLoadIntoStream(t *testing.T) { 128 driver := createTestDriver(t) 129 destroy := func() { destroyDriver(t, driver) } 130 defer recoverTest(t, destroy) 131 132 // matches order of Java tests 133 loadIntoStreamCanLoadStartingWithIntoStream(t, driver) 134 loadIntoStreamCanLoadByIdsIntoStream(t, driver) 135 }