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

     1  package tests
     2  
     3  import (
     4  	"reflect"
     5  	"testing"
     6  
     7  	ravendb "github.com/altipla-consulting/ravendb-go-client"
     8  	"github.com/stretchr/testify/assert"
     9  )
    10  
    11  // Note: renamed to Item2 to avoid conflicts
    12  type Item2 struct {
    13  	ID         string
    14  	Name       string  `json:"name"`
    15  	Latitude   float64 `json:"latitude"`
    16  	Longitude  float64 `json:"longitude"`
    17  	Latitude2  float64 `json:"latitude2"`
    18  	Longitude2 float64 `json:"longitude2"`
    19  	ShapeWkt   string  `json:"shapeWkt"`
    20  }
    21  
    22  func ravenDB8328_spatialOnAutoIndex(t *testing.T, driver *RavenTestDriver) {
    23  	var err error
    24  	store := driver.getDocumentStoreMust(t)
    25  	defer store.Close()
    26  
    27  	{
    28  		session := openSessionMust(t, store)
    29  
    30  		item := &Item2{
    31  			Latitude:   10,
    32  			Longitude:  20,
    33  			Latitude2:  10,
    34  			Longitude2: 20,
    35  			ShapeWkt:   "POINT(20 10)",
    36  			Name:       "Name1",
    37  		}
    38  
    39  		err = session.Store(item)
    40  		assert.NoError(t, err)
    41  
    42  		err = session.SaveChanges()
    43  		assert.NoError(t, err)
    44  
    45  		session.Close()
    46  	}
    47  
    48  	{
    49  		session := openSessionMust(t, store)
    50  
    51  		clazz := reflect.TypeOf(&Item2{})
    52  		q := session.QueryCollectionForType(clazz)
    53  		fieldName := ravendb.NewPointField("latitude", "longitude")
    54  		clause := func(f *ravendb.SpatialCriteriaFactory) ravendb.SpatialCriteria {
    55  			return f.WithinRadius(10, 10, 20)
    56  		}
    57  		q = q.Spatial2(fieldName, clause)
    58  
    59  		iq, err := q.GetIndexQuery()
    60  		assert.NoError(t, err)
    61  		assert.Equal(t, iq.GetQuery(), "from Item2s where spatial.within(spatial.point(latitude, longitude), spatial.circle($p0, $p1, $p2))")
    62  
    63  		q = session.QueryCollectionForType(clazz)
    64  		fieldName2 := ravendb.NewWktField("shapeWkt")
    65  		q = q.Spatial2(fieldName2, clause)
    66  
    67  		iq, err = q.GetIndexQuery()
    68  		assert.NoError(t, err)
    69  		assert.Equal(t, iq.GetQuery(), "from Item2s where spatial.within(spatial.wkt(shapeWkt), spatial.circle($p0, $p1, $p2))")
    70  
    71  		session.Close()
    72  	}
    73  
    74  	{
    75  		session := openSessionMust(t, store)
    76  
    77  		var statsRef *ravendb.QueryStatistics
    78  
    79  		var results []*Item2
    80  		q := session.QueryCollectionForType(reflect.TypeOf(&Item2{}))
    81  		q = q.Statistics(&statsRef)
    82  		fieldName := ravendb.NewPointField("latitude", "longitude")
    83  		clause := func(f *ravendb.SpatialCriteriaFactory) ravendb.SpatialCriteria {
    84  			return f.WithinRadius(10, 10, 20)
    85  		}
    86  		q = q.Spatial2(fieldName, clause)
    87  		err = q.GetResults(&results)
    88  		assert.NoError(t, err)
    89  
    90  		assert.Equal(t, len(results), 1)
    91  
    92  		assert.Equal(t, statsRef.IndexName, "Auto/Item2s/BySpatial.point(latitude|longitude)")
    93  
    94  		session.Close()
    95  
    96  		statsRef = nil
    97  		results = nil
    98  
    99  		q = session.QueryCollectionForType(reflect.TypeOf(&Item2{}))
   100  		q = q.Statistics(&statsRef)
   101  		fieldName = ravendb.NewPointField("latitude2", "longitude2")
   102  		q = q.Spatial2(fieldName, clause)
   103  		err = q.GetResults(&results)
   104  		assert.NoError(t, err)
   105  
   106  		assert.Equal(t, len(results), 1)
   107  
   108  		assert.Equal(t, statsRef.IndexName, "Auto/Item2s/BySpatial.point(latitude|longitude)AndSpatial.point(latitude2|longitude2)")
   109  
   110  		statsRef = nil
   111  		results = nil
   112  
   113  		q = session.QueryCollectionForType(reflect.TypeOf(&Item2{}))
   114  		q = q.Statistics(&statsRef)
   115  		fieldName2 := ravendb.NewWktField("shapeWkt")
   116  		q = q.Spatial2(fieldName2, clause)
   117  		err = q.GetResults(&results)
   118  		assert.NoError(t, err)
   119  
   120  		assert.Equal(t, len(results), 1)
   121  
   122  		assert.Equal(t, statsRef.IndexName, "Auto/Item2s/BySpatial.point(latitude|longitude)AndSpatial.point(latitude2|longitude2)AndSpatial.wkt(shapeWkt)")
   123  	}
   124  }
   125  
   126  func TestRavenDB8328(t *testing.T) {
   127  	driver := createTestDriver(t)
   128  	destroy := func() { destroyDriver(t, driver) }
   129  	defer recoverTest(t, destroy)
   130  
   131  	// matches order of Java tests
   132  	ravenDB8328_spatialOnAutoIndex(t, driver)
   133  }