github.com/altipla-consulting/ravendb-go-client@v0.1.3/tests/go_northwind_test.go (about) 1 package tests 2 3 import ( 4 "github.com/altipla-consulting/ravendb-go-client" 5 "github.com/altipla-consulting/ravendb-go-client/examples/northwind" 6 "github.com/stretchr/testify/assert" 7 "reflect" 8 "testing" 9 ) 10 11 func createNorthwindDatabase(t *testing.T, driver *RavenTestDriver, store *ravendb.DocumentStore) { 12 sampleData := ravendb.NewCreateSampleDataOperation() 13 err := store.Maintenance().Send(sampleData) 14 must(err) 15 16 err = driver.waitForIndexing(store, store.GetDatabase(), 0) 17 must(err) 18 } 19 20 func goNorthwindEmployeeLoad(t *testing.T, driver *RavenTestDriver) { 21 var err error 22 store := driver.getDocumentStoreMust(t) 23 defer store.Close() 24 25 createNorthwindDatabase(t, driver, store) 26 27 session, err := store.OpenSession("") 28 assert.NoError(t, err) 29 defer session.Close() 30 31 var e *northwind.Employee 32 err = session.Load(&e, "employees/7-A") 33 assert.NoError(t, err) 34 35 var results []*northwind.Employee 36 args := &ravendb.StartsWithArgs{ 37 StartsWith: "employees/", 38 } 39 err = session.LoadStartingWith(&results, args) 40 assert.NoError(t, err) 41 assert.True(t, len(results) > 5) // it's 9 currently 42 } 43 44 func goNorthwindWhereBetween(t *testing.T, driver *RavenTestDriver) { 45 var err error 46 store := driver.getDocumentStoreMust(t) 47 defer store.Close() 48 49 createNorthwindDatabase(t, driver, store) 50 51 session, err := store.OpenSession("") 52 assert.NoError(t, err) 53 defer session.Close() 54 55 tp := reflect.TypeOf(&northwind.Order{}) 56 q := session.QueryCollectionForType(tp) 57 q = q.WhereBetween("Freight", 11, 13) 58 59 var results []*northwind.Order 60 err = q.GetResults(&results) 61 assert.NoError(t, err) 62 63 assert.True(t, len(results) > 5) // it's 35 currently 64 } 65 66 // First() should allow zero results 67 // https://github.com/altipla-consulting/ravendb-go-client/issues/148 68 func goNorthwindIssue148(t *testing.T, driver *RavenTestDriver) { 69 var err error 70 store := driver.getDocumentStoreMust(t) 71 defer store.Close() 72 73 createNorthwindDatabase(t, driver, store) 74 session, err := store.OpenSession("") 75 assert.NoError(t, err) 76 defer session.Close() 77 78 queriedType := reflect.TypeOf(&northwind.Employee{}) 79 query := session.QueryCollectionForType(queriedType) 80 query = query.Where("FirstName", "==", "name-that-doesn't exists") 81 var result *northwind.Employee 82 err = query.First(&result) 83 // no error, result not set 84 assert.NoError(t, err) 85 assert.Nil(t, result) 86 87 } 88 89 // test that Single()/First()/GetResults() validate early type of result 90 // https://github.com/altipla-consulting/ravendb-go-client/issues/146 91 func goNorthwindIssue146(t *testing.T, driver *RavenTestDriver) { 92 var err error 93 store := driver.getDocumentStoreMust(t) 94 defer store.Close() 95 96 createNorthwindDatabase(t, driver, store) 97 98 session, err := store.OpenSession("") 99 assert.NoError(t, err) 100 defer session.Close() 101 102 { 103 tp := reflect.TypeOf(&northwind.Employee{}) 104 q := session.QueryCollectionForType(tp) 105 q = q.Where("ID", "=", "employees/1-A") 106 err = q.Single(nil) 107 _, ok := err.(*ravendb.IllegalArgumentError) 108 assert.True(t, ok) 109 } 110 111 { 112 tp := reflect.TypeOf(&northwind.Employee{}) 113 q := session.QueryCollectionForType(tp) 114 q = q.Where("ID", "=", "employees/1-A") 115 var results []*northwind.Employee 116 err = q.Single(&results) 117 _, ok := err.(*ravendb.IllegalArgumentError) 118 assert.True(t, ok) 119 } 120 121 { 122 tp := reflect.TypeOf(&northwind.Employee{}) 123 q := session.QueryCollectionForType(tp) 124 q = q.Where("ID", "=", "employees/1-A") 125 err = q.First(nil) 126 _, ok := err.(*ravendb.IllegalArgumentError) 127 assert.True(t, ok) 128 } 129 130 { 131 tp := reflect.TypeOf(&northwind.Employee{}) 132 q := session.QueryCollectionForType(tp) 133 q = q.Where("ID", "=", "employees/1-A") 134 var results []*northwind.Employee 135 err = q.First(&results) 136 _, ok := err.(*ravendb.IllegalArgumentError) 137 assert.True(t, ok) 138 } 139 140 { 141 tp := reflect.TypeOf(&northwind.Employee{}) 142 q := session.QueryCollectionForType(tp) 143 err = q.GetResults(nil) 144 _, ok := err.(*ravendb.IllegalArgumentError) 145 assert.True(t, ok) 146 } 147 148 { 149 tp := reflect.TypeOf(&northwind.Employee{}) 150 q := session.QueryCollectionForType(tp) 151 152 var results *northwind.Employee 153 err = q.GetResults(results) 154 err = q.GetResults(&results) 155 _, ok := err.(*ravendb.IllegalArgumentError) 156 assert.True(t, ok) 157 } 158 159 { 160 tp := reflect.TypeOf(&northwind.Employee{}) 161 q := session.QueryCollectionForType(tp) 162 strType := reflect.TypeOf("") 163 q = q.SelectFields(strType, "FirstName") 164 165 var results []string 166 err = q.GetResults(&results) 167 assert.NoError(t, err) 168 } 169 170 { 171 tp := reflect.TypeOf(&northwind.Employee{}) 172 q := session.QueryCollectionForType(tp) 173 174 var results []*northwind.Employee 175 err = q.GetResults(results) 176 _, ok := err.(*ravendb.IllegalArgumentError) 177 assert.True(t, ok) 178 assert.Equal(t, "results can't be of type []*northwind.Employee, try *[]*northwind.Employee", err.Error()) 179 } 180 181 } 182 183 func TestGoNorthwind(t *testing.T) { 184 driver := createTestDriver(t) 185 destroy := func() { destroyDriver(t, driver) } 186 defer recoverTest(t, destroy) 187 188 goNorthwindEmployeeLoad(t, driver) 189 goNorthwindWhereBetween(t, driver) 190 goNorthwindIssue146(t, driver) 191 goNorthwindIssue148(t, driver) 192 }