github.com/ravendb/ravendb-go-client@v0.0.0-20240229102137-4474ee7aa0fa/tests/ravendb_9676_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 func ravendb9676canOrderByDistanceOnDynamicSpatialField(t *testing.T, driver *RavenTestDriver) { 12 var err error 13 store := driver.getDocumentStoreMust(t) 14 defer store.Close() 15 16 { 17 session := openSessionMust(t, store) 18 19 item := &Item{ 20 Name: "Item1", 21 Latitude: 10, 22 Longitude: 10, 23 } 24 25 err = session.Store(item) 26 assert.NoError(t, err) 27 28 item1 := &Item{ 29 Name: "Item2", 30 Latitude: 11, 31 Longitude: 11, 32 } 33 34 err = session.Store(item1) 35 assert.NoError(t, err) 36 37 err = session.SaveChanges() 38 assert.NoError(t, err) 39 40 session.Close() 41 } 42 43 { 44 session := openSessionMust(t, store) 45 46 var items []*Item 47 q := session.QueryCollectionForType(reflect.TypeOf(&Item{})) 48 q = q.WaitForNonStaleResults(0) 49 f := ravendb.NewPointField("latitude", "longitude") 50 fn := func(f *ravendb.SpatialCriteriaFactory) ravendb.SpatialCriteria { 51 return f.WithinRadius(1000, 10, 10) 52 } 53 54 q = q.Spatial2(f, fn) 55 q2 := q.OrderByDistanceLatLongDynamic(ravendb.NewPointField("latitude", "longitude"), 10, 10) 56 err = q2.GetResults(&items) 57 assert.NoError(t, err) 58 59 assert.Equal(t, len(items), 2) 60 session.Close() 61 62 item := items[0] 63 assert.Equal(t, item.Name, "Item1") 64 65 item = items[1] 66 assert.Equal(t, item.Name, "Item2") 67 68 items = nil 69 q = session.QueryCollectionForType(reflect.TypeOf(&Item{})) 70 q = q.WaitForNonStaleResults(0) 71 f = ravendb.NewPointField("latitude", "longitude") 72 q = q.Spatial2(f, fn) 73 q2 = q.OrderByDistanceDescendingLatLongDynamic(ravendb.NewPointField("latitude", "longitude"), 10, 10) 74 err = q2.GetResults(&items) 75 76 assert.NoError(t, err) 77 78 assert.Equal(t, len(items), 2) 79 session.Close() 80 81 item = items[0] 82 assert.Equal(t, item.Name, "Item2") 83 84 item = items[1] 85 assert.Equal(t, item.Name, "Item1") 86 } 87 } 88 89 type Item struct { 90 Name string `json:"name"` 91 Latitude float64 `json:"latitude"` 92 Longitude float64 `json:"longitude"` 93 } 94 95 func TestRavenDB9676(t *testing.T) { 96 driver := createTestDriver(t) 97 destroy := func() { destroyDriver(t, driver) } 98 defer recoverTest(t, destroy) 99 100 // matches the order of Java tests 101 ravendb9676canOrderByDistanceOnDynamicSpatialField(t, driver) 102 }