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  }