@@ -1828,6 +1828,84 @@ func TestChannelView(t *testing.T) {
18281828 log .Printf ("View Query returned entry (%d): %v" , i , entry )
18291829 }
18301830 assert .Equal (t , 1 , len (entries ))
1831+ require .Equal (t , "doc1" , entries [0 ].DocID )
1832+ collection .RequireCurrentVersion (t , "doc1" , entries [0 ].SourceID , entries [0 ].Version )
1833+ }
1834+
1835+ func TestChannelQuery (t * testing.T ) {
1836+
1837+ db , ctx := setupTestDB (t )
1838+ defer db .Close (ctx )
1839+ collection := GetSingleDatabaseCollectionWithUser (t , db )
1840+ _ , err := collection .UpdateSyncFun (ctx , `function(doc, oldDoc) {
1841+ channel(doc.channels);
1842+ }` )
1843+ require .NoError (t , err )
1844+
1845+ // Create doc
1846+ body := Body {"key1" : "value1" , "key2" : 1234 , "channels" : "ABC" }
1847+ rev1ID , _ , err := collection .Put (ctx , "doc1" , body )
1848+ require .NoError (t , err , "Couldn't create doc1" )
1849+
1850+ // Create a doc to test removal handling. Needs three revisions so that the removal rev (2) isn't
1851+ // the current revision
1852+ removedDocID := "removed_doc"
1853+ removedDocRev1 , _ , err := collection .Put (ctx , removedDocID , body )
1854+ require .NoError (t , err , "Couldn't create removed_doc" )
1855+ removalSource , removalVersion := collection .GetDocumentCurrentVersion (t , removedDocID )
1856+
1857+ updatedChannelBody := Body {"_rev" : removedDocRev1 , "key1" : "value1" , "key2" : 1234 , "channels" : "DEF" }
1858+ removalRev , _ , err := collection .Put (ctx , removedDocID , updatedChannelBody )
1859+ require .NoError (t , err , "Couldn't update removed_doc" )
1860+
1861+ updatedChannelBody = Body {"_rev" : removalRev , "key1" : "value1" , "key2" : 2345 , "channels" : "DEF" }
1862+ removedDocRev3 , _ , err := collection .Put (ctx , removedDocID , updatedChannelBody )
1863+ require .NoError (t , err , "Couldn't update removed_doc" )
1864+
1865+ var entries LogEntries
1866+
1867+ // Test query retrieval via star channel and named channel (queries use different indexes)
1868+ testCases := []struct {
1869+ testName string
1870+ channelName string
1871+ }{
1872+ {
1873+ testName : "star channel" ,
1874+ channelName : "*" ,
1875+ },
1876+ {
1877+ testName : "named channel" ,
1878+ channelName : "ABC" ,
1879+ },
1880+ }
1881+
1882+ for _ , testCase := range testCases {
1883+ t .Run (testCase .testName , func (t * testing.T ) {
1884+ entries , err = collection .getChangesInChannelFromQuery (ctx , testCase .channelName , 0 , 100 , 0 , false )
1885+ require .NoError (t , err )
1886+
1887+ for i , entry := range entries {
1888+ log .Printf ("Channel Query returned entry (%d): %v" , i , entry )
1889+ }
1890+ require .Len (t , entries , 2 )
1891+ require .Equal (t , "doc1" , entries [0 ].DocID )
1892+ require .Equal (t , rev1ID , entries [0 ].RevID )
1893+ collection .RequireCurrentVersion (t , "doc1" , entries [0 ].SourceID , entries [0 ].Version )
1894+
1895+ removedDocEntry := entries [1 ]
1896+ require .Equal (t , removedDocID , removedDocEntry .DocID )
1897+ if testCase .channelName == "*" {
1898+ require .Equal (t , removedDocRev3 , removedDocEntry .RevID )
1899+ collection .RequireCurrentVersion (t , removedDocID , removedDocEntry .SourceID , removedDocEntry .Version )
1900+ } else {
1901+ require .Equal (t , removalRev , removedDocEntry .RevID )
1902+ // TODO: Pending channel removal rev handling, CBG-3213
1903+ log .Printf ("removal rev check of removal cv %s@%d is pending CBG-3213" , removalSource , removalVersion )
1904+ //require.Equal(t, removalSource, removedDocEntry.SourceID)
1905+ //require.Equal(t, removalVersion, removedDocEntry.Version)
1906+ }
1907+ })
1908+ }
18311909
18321910}
18331911
@@ -2451,7 +2529,7 @@ func TestDeleteWithNoTombstoneCreationSupport(t *testing.T) {
24512529 assert .NoError (t , err )
24522530
24532531 var doc Body
2454- var xattr Body
2532+ var xattr SyncData
24552533
24562534 // Ensure document has been added
24572535 waitAndAssertCondition (t , func () bool {
@@ -2462,8 +2540,8 @@ func TestDeleteWithNoTombstoneCreationSupport(t *testing.T) {
24622540 assert .Equal (t , int64 (1 ), db .DbStats .SharedBucketImport ().ImportCount .Value ())
24632541
24642542 assert .Nil (t , doc )
2465- assert .Equal (t , "1-2cac91faf7b3f5e5fd56ff377bdb5466" , xattr [ "rev" ] )
2466- assert .Equal (t , float64 (2 ), xattr [ "sequence" ] )
2543+ assert .Equal (t , "1-2cac91faf7b3f5e5fd56ff377bdb5466" , xattr . CurrentRev )
2544+ assert .Equal (t , uint64 (2 ), xattr . Sequence )
24672545}
24682546
24692547func TestResyncUpdateAllDocChannels (t * testing.T ) {
0 commit comments