github.com/ravendb/ravendb-go-client@v0.0.0-20240229102137-4474ee7aa0fa/tests/ravendb_8328_test.go (about) 1 package tests 2 3 import ( 4 "reflect" 5 "testing" 6 7 ravendb "github.com/ravendb/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 }