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  }