github.com/altipla-consulting/ravendb-go-client@v0.1.3/tests/contains_test.go (about)

     1  package tests
     2  
     3  import (
     4  	"reflect"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/assert"
     8  )
     9  
    10  type UserWithFavs struct {
    11  	ID         string
    12  	Name       string
    13  	Favourites []string
    14  }
    15  
    16  func NewUserWithFavs() *UserWithFavs {
    17  	return &UserWithFavs{}
    18  }
    19  
    20  func containsTestcontainsTest(t *testing.T, driver *RavenTestDriver) {
    21  	var err error
    22  	store := driver.getDocumentStoreMust(t)
    23  	defer store.Close()
    24  
    25  	{
    26  		session := openSessionMust(t, store)
    27  		userCreator := func(name string, favs []string) {
    28  			user := NewUserWithFavs()
    29  			user.Name = name
    30  			user.Favourites = favs
    31  
    32  			err = session.Store(user)
    33  			assert.NoError(t, err)
    34  		}
    35  
    36  		userCreator("John", []string{"java", "c#"})
    37  		userCreator("Tarzan", []string{"java", "go"})
    38  		userCreator("Jane", []string{"pascal"})
    39  
    40  		err = session.SaveChanges()
    41  		assert.NoError(t, err)
    42  
    43  		session.Close()
    44  	}
    45  
    46  	{
    47  		session := openSessionMust(t, store)
    48  
    49  		q := session.QueryCollectionForType(reflect.TypeOf(&UserWithFavs{}))
    50  		q = q.ContainsAny("Favourites", []interface{}{"pascal", "go"})
    51  		projType := reflect.TypeOf("")
    52  		q = q.SelectFields(projType, "Name")
    53  		var pascalOrGoDeveloperNames []string
    54  		err = q.GetResults(&pascalOrGoDeveloperNames)
    55  		assert.NoError(t, err)
    56  		assert.Equal(t, 2, len(pascalOrGoDeveloperNames))
    57  		assert.Equal(t, pascalOrGoDeveloperNames[0], "Tarzan")
    58  		assert.Equal(t, pascalOrGoDeveloperNames[1], "Jane")
    59  
    60  		session.Close()
    61  	}
    62  
    63  	{
    64  		session := openSessionMust(t, store)
    65  
    66  		q := session.QueryCollectionForType(reflect.TypeOf(&UserWithFavs{}))
    67  		q = q.ContainsAll("Favourites", []interface{}{"java"})
    68  		projType := reflect.TypeOf("")
    69  		q = q.SelectFields(projType, "Name")
    70  		var javaDevelopers []string
    71  		err = q.GetResults(&javaDevelopers)
    72  		assert.NoError(t, err)
    73  		assert.Equal(t, 2, len(javaDevelopers))
    74  		assert.Equal(t, javaDevelopers[0], "John")
    75  		assert.Equal(t, javaDevelopers[1], "Tarzan")
    76  
    77  		session.Close()
    78  	}
    79  
    80  }
    81  
    82  func TestContains(t *testing.T) {
    83  	driver := createTestDriver(t)
    84  	destroy := func() { destroyDriver(t, driver) }
    85  	defer recoverTest(t, destroy)
    86  
    87  	containsTestcontainsTest(t, driver)
    88  }