github.com/altipla-consulting/ravendb-go-client@v0.1.3/tests/delete_by_query_test.go (about) 1 package tests 2 3 import ( 4 "reflect" 5 "testing" 6 "time" 7 8 "github.com/stretchr/testify/require" 9 10 ravendb "github.com/altipla-consulting/ravendb-go-client" 11 "github.com/stretchr/testify/assert" 12 ) 13 14 func deleteByQueryCanDeleteByQuery(t *testing.T, driver *RavenTestDriver) { 15 var err error 16 store := driver.getDocumentStoreMust(t) 17 defer store.Close() 18 19 { 20 session := openSessionMust(t, store) 21 user1 := &User{ 22 Age: 5, 23 } 24 err = session.Store(user1) 25 assert.NoError(t, err) 26 27 user2 := &User{ 28 Age: 10, 29 } 30 err = session.Store(user2) 31 assert.NoError(t, err) 32 33 err = session.SaveChanges() 34 assert.NoError(t, err) 35 session.Close() 36 } 37 38 { 39 indexQuery := ravendb.NewIndexQuery("from users where age == 5") 40 operation, err := ravendb.NewDeleteByQueryOperation(indexQuery, nil) 41 assert.NoError(t, err) 42 asyncOp, err := store.Operations().SendAsync(operation, nil) 43 assert.NoError(t, err) 44 45 err = asyncOp.WaitForCompletion() 46 assert.NoError(t, err) 47 48 { 49 session := openSessionMust(t, store) 50 q := session.QueryCollectionForType(reflect.TypeOf(&User{})) 51 count, err := q.Count() 52 assert.NoError(t, err) 53 assert.Equal(t, count, 1) 54 session.Close() 55 } 56 } 57 } 58 59 func deleteByQueryCanDeleteByQueryWaitUsingChanges(t *testing.T, driver *RavenTestDriver) { 60 var err error 61 store := driver.getDocumentStoreMust(t) 62 defer store.Close() 63 64 { 65 session := openSessionMust(t, store) 66 user1 := &User{ 67 Age: 5, 68 } 69 err = session.Store(user1) 70 assert.NoError(t, err) 71 72 user2 := &User{ 73 Age: 10, 74 } 75 err = session.Store(user2) 76 assert.NoError(t, err) 77 78 err = session.SaveChanges() 79 assert.NoError(t, err) 80 session.Close() 81 } 82 83 var cancel ravendb.CancelFunc 84 85 { 86 changesList := make(chan *ravendb.OperationStatusChange, 1) 87 changes := store.Changes("") 88 err = changes.EnsureConnectedNow() 89 require.NoError(t, err) 90 91 cb := func(change *ravendb.OperationStatusChange) { 92 changesList <- change 93 } 94 cancel, err = changes.ForAllOperations(cb) 95 require.NoError(t, err) 96 97 indexQuery := ravendb.NewIndexQuery("from users where age == 5") 98 operation, err := ravendb.NewDeleteByQueryOperation(indexQuery, nil) 99 assert.NoError(t, err) 100 _, err = store.Operations().SendAsync(operation, nil) 101 assert.NoError(t, err) 102 103 select { 104 case change := <-changesList: 105 // ok, got a change 106 expID := operation.Command.Result.OperationID 107 assert.Equal(t, change.OperationID, expID) 108 case <-time.After(15 * time.Second): 109 assert.Fail(t, "timed out waiting for operation change notification") 110 } 111 112 cancel() 113 changes.Close() 114 } 115 } 116 117 func TestDeleteByQuery(t *testing.T) { 118 driver := createTestDriver(t) 119 destroy := func() { destroyDriver(t, driver) } 120 defer recoverTest(t, destroy) 121 122 // matches order of Java tests 123 //TODO: match order of Java tests 124 deleteByQueryCanDeleteByQuery(t, driver) 125 126 deleteByQueryCanDeleteByQueryWaitUsingChanges(t, driver) 127 }