limbo_spec_test.json 23 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150
  1. {
  2. "Limbo documents are deleted without an existence filter": {
  3. "describeName": "Limbo Documents:",
  4. "itName": "Limbo documents are deleted without an existence filter",
  5. "tags": [],
  6. "config": {
  7. "useGarbageCollection": true
  8. },
  9. "steps": [
  10. {
  11. "userListen": [
  12. 2,
  13. {
  14. "path": "collection",
  15. "filters": [],
  16. "orderBys": []
  17. }
  18. ],
  19. "stateExpect": {
  20. "activeTargets": {
  21. "2": {
  22. "query": {
  23. "path": "collection",
  24. "filters": [],
  25. "orderBys": []
  26. },
  27. "resumeToken": ""
  28. }
  29. }
  30. }
  31. },
  32. {
  33. "watchAck": [
  34. 2
  35. ]
  36. },
  37. {
  38. "watchEntity": {
  39. "docs": [
  40. [
  41. "collection/a",
  42. 1000,
  43. {
  44. "key": "a"
  45. }
  46. ]
  47. ],
  48. "targets": [
  49. 2
  50. ]
  51. }
  52. },
  53. {
  54. "watchCurrent": [
  55. [
  56. 2
  57. ],
  58. "resume-token-1000"
  59. ],
  60. "watchSnapshot": 1000,
  61. "expect": [
  62. {
  63. "query": {
  64. "path": "collection",
  65. "filters": [],
  66. "orderBys": []
  67. },
  68. "added": [
  69. [
  70. "collection/a",
  71. 1000,
  72. {
  73. "key": "a"
  74. }
  75. ]
  76. ],
  77. "errorCode": 0,
  78. "fromCache": false,
  79. "hasPendingWrites": false
  80. }
  81. ]
  82. },
  83. {
  84. "watchReset": [
  85. 2
  86. ]
  87. },
  88. {
  89. "watchCurrent": [
  90. [
  91. 2
  92. ],
  93. "resume-token-1001"
  94. ],
  95. "watchSnapshot": 1001,
  96. "stateExpect": {
  97. "limboDocs": [
  98. "collection/a"
  99. ],
  100. "activeTargets": {
  101. "1": {
  102. "query": {
  103. "path": "collection/a",
  104. "filters": [],
  105. "orderBys": []
  106. },
  107. "resumeToken": ""
  108. },
  109. "2": {
  110. "query": {
  111. "path": "collection",
  112. "filters": [],
  113. "orderBys": []
  114. },
  115. "resumeToken": ""
  116. }
  117. }
  118. },
  119. "expect": [
  120. {
  121. "query": {
  122. "path": "collection",
  123. "filters": [],
  124. "orderBys": []
  125. },
  126. "errorCode": 0,
  127. "fromCache": true,
  128. "hasPendingWrites": false
  129. }
  130. ]
  131. },
  132. {
  133. "watchAck": [
  134. 1
  135. ]
  136. },
  137. {
  138. "watchCurrent": [
  139. [
  140. 1
  141. ],
  142. "resume-token-2"
  143. ],
  144. "watchSnapshot": 1002,
  145. "stateExpect": {
  146. "limboDocs": [],
  147. "activeTargets": {
  148. "2": {
  149. "query": {
  150. "path": "collection",
  151. "filters": [],
  152. "orderBys": []
  153. },
  154. "resumeToken": ""
  155. }
  156. }
  157. },
  158. "expect": [
  159. {
  160. "query": {
  161. "path": "collection",
  162. "filters": [],
  163. "orderBys": []
  164. },
  165. "removed": [
  166. [
  167. "collection/a",
  168. 1000,
  169. {
  170. "key": "a"
  171. }
  172. ]
  173. ],
  174. "errorCode": 0,
  175. "fromCache": false,
  176. "hasPendingWrites": false
  177. }
  178. ]
  179. }
  180. ]
  181. },
  182. "Limbo documents are deleted with an existence filter": {
  183. "describeName": "Limbo Documents:",
  184. "itName": "Limbo documents are deleted with an existence filter",
  185. "tags": [],
  186. "config": {
  187. "useGarbageCollection": true
  188. },
  189. "steps": [
  190. {
  191. "userListen": [
  192. 2,
  193. {
  194. "path": "collection",
  195. "filters": [],
  196. "orderBys": []
  197. }
  198. ],
  199. "stateExpect": {
  200. "activeTargets": {
  201. "2": {
  202. "query": {
  203. "path": "collection",
  204. "filters": [],
  205. "orderBys": []
  206. },
  207. "resumeToken": ""
  208. }
  209. }
  210. }
  211. },
  212. {
  213. "watchAck": [
  214. 2
  215. ]
  216. },
  217. {
  218. "watchEntity": {
  219. "docs": [
  220. [
  221. "collection/a",
  222. 1000,
  223. {
  224. "key": "a"
  225. }
  226. ]
  227. ],
  228. "targets": [
  229. 2
  230. ]
  231. }
  232. },
  233. {
  234. "watchCurrent": [
  235. [
  236. 2
  237. ],
  238. "resume-token-1000"
  239. ],
  240. "watchSnapshot": 1000,
  241. "expect": [
  242. {
  243. "query": {
  244. "path": "collection",
  245. "filters": [],
  246. "orderBys": []
  247. },
  248. "added": [
  249. [
  250. "collection/a",
  251. 1000,
  252. {
  253. "key": "a"
  254. }
  255. ]
  256. ],
  257. "errorCode": 0,
  258. "fromCache": false,
  259. "hasPendingWrites": false
  260. }
  261. ]
  262. },
  263. {
  264. "watchReset": [
  265. 2
  266. ]
  267. },
  268. {
  269. "watchCurrent": [
  270. [
  271. 2
  272. ],
  273. "resume-token-1001"
  274. ],
  275. "watchSnapshot": 1001,
  276. "stateExpect": {
  277. "limboDocs": [
  278. "collection/a"
  279. ],
  280. "activeTargets": {
  281. "1": {
  282. "query": {
  283. "path": "collection/a",
  284. "filters": [],
  285. "orderBys": []
  286. },
  287. "resumeToken": ""
  288. },
  289. "2": {
  290. "query": {
  291. "path": "collection",
  292. "filters": [],
  293. "orderBys": []
  294. },
  295. "resumeToken": ""
  296. }
  297. }
  298. },
  299. "expect": [
  300. {
  301. "query": {
  302. "path": "collection",
  303. "filters": [],
  304. "orderBys": []
  305. },
  306. "errorCode": 0,
  307. "fromCache": true,
  308. "hasPendingWrites": false
  309. }
  310. ]
  311. },
  312. {
  313. "watchAck": [
  314. 1
  315. ]
  316. },
  317. {
  318. "watchFilter": [
  319. [
  320. 1
  321. ]
  322. ]
  323. },
  324. {
  325. "watchCurrent": [
  326. [
  327. 1
  328. ],
  329. "resume-token-1002"
  330. ],
  331. "watchSnapshot": 1002,
  332. "stateExpect": {
  333. "limboDocs": [],
  334. "activeTargets": {
  335. "2": {
  336. "query": {
  337. "path": "collection",
  338. "filters": [],
  339. "orderBys": []
  340. },
  341. "resumeToken": ""
  342. }
  343. }
  344. },
  345. "expect": [
  346. {
  347. "query": {
  348. "path": "collection",
  349. "filters": [],
  350. "orderBys": []
  351. },
  352. "removed": [
  353. [
  354. "collection/a",
  355. 1000,
  356. {
  357. "key": "a"
  358. }
  359. ]
  360. ],
  361. "errorCode": 0,
  362. "fromCache": false,
  363. "hasPendingWrites": false
  364. }
  365. ]
  366. }
  367. ]
  368. },
  369. "Limbo documents are resolved with updates": {
  370. "describeName": "Limbo Documents:",
  371. "itName": "Limbo documents are resolved with updates",
  372. "tags": [],
  373. "config": {
  374. "useGarbageCollection": true
  375. },
  376. "steps": [
  377. {
  378. "userListen": [
  379. 2,
  380. {
  381. "path": "collection",
  382. "filters": [
  383. [
  384. "key",
  385. "==",
  386. "a"
  387. ]
  388. ],
  389. "orderBys": []
  390. }
  391. ],
  392. "stateExpect": {
  393. "activeTargets": {
  394. "2": {
  395. "query": {
  396. "path": "collection",
  397. "filters": [
  398. [
  399. "key",
  400. "==",
  401. "a"
  402. ]
  403. ],
  404. "orderBys": []
  405. },
  406. "resumeToken": ""
  407. }
  408. }
  409. }
  410. },
  411. {
  412. "watchAck": [
  413. 2
  414. ]
  415. },
  416. {
  417. "watchEntity": {
  418. "docs": [
  419. [
  420. "collection/a",
  421. 1000,
  422. {
  423. "key": "a"
  424. }
  425. ]
  426. ],
  427. "targets": [
  428. 2
  429. ]
  430. }
  431. },
  432. {
  433. "watchCurrent": [
  434. [
  435. 2
  436. ],
  437. "resume-token-1000"
  438. ],
  439. "watchSnapshot": 1000,
  440. "expect": [
  441. {
  442. "query": {
  443. "path": "collection",
  444. "filters": [
  445. [
  446. "key",
  447. "==",
  448. "a"
  449. ]
  450. ],
  451. "orderBys": []
  452. },
  453. "added": [
  454. [
  455. "collection/a",
  456. 1000,
  457. {
  458. "key": "a"
  459. }
  460. ]
  461. ],
  462. "errorCode": 0,
  463. "fromCache": false,
  464. "hasPendingWrites": false
  465. }
  466. ]
  467. },
  468. {
  469. "watchReset": [
  470. 2
  471. ]
  472. },
  473. {
  474. "watchCurrent": [
  475. [
  476. 2
  477. ],
  478. "resume-token-1001"
  479. ],
  480. "watchSnapshot": 1001,
  481. "stateExpect": {
  482. "limboDocs": [
  483. "collection/a"
  484. ],
  485. "activeTargets": {
  486. "1": {
  487. "query": {
  488. "path": "collection/a",
  489. "filters": [],
  490. "orderBys": []
  491. },
  492. "resumeToken": ""
  493. },
  494. "2": {
  495. "query": {
  496. "path": "collection",
  497. "filters": [
  498. [
  499. "key",
  500. "==",
  501. "a"
  502. ]
  503. ],
  504. "orderBys": []
  505. },
  506. "resumeToken": ""
  507. }
  508. }
  509. },
  510. "expect": [
  511. {
  512. "query": {
  513. "path": "collection",
  514. "filters": [
  515. [
  516. "key",
  517. "==",
  518. "a"
  519. ]
  520. ],
  521. "orderBys": []
  522. },
  523. "errorCode": 0,
  524. "fromCache": true,
  525. "hasPendingWrites": false
  526. }
  527. ]
  528. },
  529. {
  530. "watchAck": [
  531. 1
  532. ]
  533. },
  534. {
  535. "watchEntity": {
  536. "docs": [
  537. [
  538. "collection/a",
  539. 1000,
  540. {
  541. "key": "b"
  542. }
  543. ]
  544. ],
  545. "targets": [
  546. 1
  547. ]
  548. }
  549. },
  550. {
  551. "watchCurrent": [
  552. [
  553. 1
  554. ],
  555. "resume-token-1002"
  556. ],
  557. "watchSnapshot": 1002,
  558. "stateExpect": {
  559. "limboDocs": [],
  560. "activeTargets": {
  561. "2": {
  562. "query": {
  563. "path": "collection",
  564. "filters": [
  565. [
  566. "key",
  567. "==",
  568. "a"
  569. ]
  570. ],
  571. "orderBys": []
  572. },
  573. "resumeToken": ""
  574. }
  575. }
  576. },
  577. "expect": [
  578. {
  579. "query": {
  580. "path": "collection",
  581. "filters": [
  582. [
  583. "key",
  584. "==",
  585. "a"
  586. ]
  587. ],
  588. "orderBys": []
  589. },
  590. "removed": [
  591. [
  592. "collection/a",
  593. 1000,
  594. {
  595. "key": "a"
  596. }
  597. ]
  598. ],
  599. "errorCode": 0,
  600. "fromCache": false,
  601. "hasPendingWrites": false
  602. }
  603. ]
  604. }
  605. ]
  606. },
  607. "Limbo documents are resolved with updates in different snapshot than \"current\"": {
  608. "describeName": "Limbo Documents:",
  609. "itName": "Limbo documents are resolved with updates in different snapshot than \"current\"",
  610. "tags": [],
  611. "config": {
  612. "useGarbageCollection": true
  613. },
  614. "steps": [
  615. {
  616. "userListen": [
  617. 2,
  618. {
  619. "path": "collection",
  620. "filters": [
  621. [
  622. "key",
  623. "==",
  624. "a"
  625. ]
  626. ],
  627. "orderBys": []
  628. }
  629. ],
  630. "stateExpect": {
  631. "activeTargets": {
  632. "2": {
  633. "query": {
  634. "path": "collection",
  635. "filters": [
  636. [
  637. "key",
  638. "==",
  639. "a"
  640. ]
  641. ],
  642. "orderBys": []
  643. },
  644. "resumeToken": ""
  645. }
  646. }
  647. }
  648. },
  649. {
  650. "watchAck": [
  651. 2
  652. ]
  653. },
  654. {
  655. "watchEntity": {
  656. "docs": [
  657. [
  658. "collection/a",
  659. 1000,
  660. {
  661. "key": "a"
  662. }
  663. ]
  664. ],
  665. "targets": [
  666. 2
  667. ]
  668. }
  669. },
  670. {
  671. "watchCurrent": [
  672. [
  673. 2
  674. ],
  675. "resume-token-1000"
  676. ],
  677. "watchSnapshot": 1000,
  678. "expect": [
  679. {
  680. "query": {
  681. "path": "collection",
  682. "filters": [
  683. [
  684. "key",
  685. "==",
  686. "a"
  687. ]
  688. ],
  689. "orderBys": []
  690. },
  691. "added": [
  692. [
  693. "collection/a",
  694. 1000,
  695. {
  696. "key": "a"
  697. }
  698. ]
  699. ],
  700. "errorCode": 0,
  701. "fromCache": false,
  702. "hasPendingWrites": false
  703. }
  704. ]
  705. },
  706. {
  707. "userListen": [
  708. 4,
  709. {
  710. "path": "collection",
  711. "filters": [
  712. [
  713. "key",
  714. "==",
  715. "b"
  716. ]
  717. ],
  718. "orderBys": []
  719. }
  720. ],
  721. "stateExpect": {
  722. "activeTargets": {
  723. "2": {
  724. "query": {
  725. "path": "collection",
  726. "filters": [
  727. [
  728. "key",
  729. "==",
  730. "a"
  731. ]
  732. ],
  733. "orderBys": []
  734. },
  735. "resumeToken": ""
  736. },
  737. "4": {
  738. "query": {
  739. "path": "collection",
  740. "filters": [
  741. [
  742. "key",
  743. "==",
  744. "b"
  745. ]
  746. ],
  747. "orderBys": []
  748. },
  749. "resumeToken": ""
  750. }
  751. }
  752. }
  753. },
  754. {
  755. "watchReset": [
  756. 2
  757. ]
  758. },
  759. {
  760. "watchCurrent": [
  761. [
  762. 2
  763. ],
  764. "resume-token-1001"
  765. ],
  766. "watchSnapshot": 1001,
  767. "stateExpect": {
  768. "limboDocs": [
  769. "collection/a"
  770. ],
  771. "activeTargets": {
  772. "1": {
  773. "query": {
  774. "path": "collection/a",
  775. "filters": [],
  776. "orderBys": []
  777. },
  778. "resumeToken": ""
  779. },
  780. "2": {
  781. "query": {
  782. "path": "collection",
  783. "filters": [
  784. [
  785. "key",
  786. "==",
  787. "a"
  788. ]
  789. ],
  790. "orderBys": []
  791. },
  792. "resumeToken": ""
  793. },
  794. "4": {
  795. "query": {
  796. "path": "collection",
  797. "filters": [
  798. [
  799. "key",
  800. "==",
  801. "b"
  802. ]
  803. ],
  804. "orderBys": []
  805. },
  806. "resumeToken": ""
  807. }
  808. }
  809. },
  810. "expect": [
  811. {
  812. "query": {
  813. "path": "collection",
  814. "filters": [
  815. [
  816. "key",
  817. "==",
  818. "a"
  819. ]
  820. ],
  821. "orderBys": []
  822. },
  823. "errorCode": 0,
  824. "fromCache": true,
  825. "hasPendingWrites": false
  826. }
  827. ]
  828. },
  829. {
  830. "watchAck": [
  831. 4
  832. ]
  833. },
  834. {
  835. "watchAck": [
  836. 1
  837. ]
  838. },
  839. {
  840. "watchEntity": {
  841. "docs": [
  842. [
  843. "collection/a",
  844. 1000,
  845. {
  846. "key": "b"
  847. }
  848. ]
  849. ],
  850. "targets": [
  851. 1,
  852. 4
  853. ]
  854. }
  855. },
  856. {
  857. "watchCurrent": [
  858. [
  859. 4
  860. ],
  861. "resume-token-1002"
  862. ],
  863. "watchSnapshot": 1002,
  864. "stateExpect": {
  865. "limboDocs": [],
  866. "activeTargets": {
  867. "2": {
  868. "query": {
  869. "path": "collection",
  870. "filters": [
  871. [
  872. "key",
  873. "==",
  874. "a"
  875. ]
  876. ],
  877. "orderBys": []
  878. },
  879. "resumeToken": ""
  880. },
  881. "4": {
  882. "query": {
  883. "path": "collection",
  884. "filters": [
  885. [
  886. "key",
  887. "==",
  888. "b"
  889. ]
  890. ],
  891. "orderBys": []
  892. },
  893. "resumeToken": ""
  894. }
  895. }
  896. },
  897. "expect": [
  898. {
  899. "query": {
  900. "path": "collection",
  901. "filters": [
  902. [
  903. "key",
  904. "==",
  905. "a"
  906. ]
  907. ],
  908. "orderBys": []
  909. },
  910. "removed": [
  911. [
  912. "collection/a",
  913. 1000,
  914. {
  915. "key": "a"
  916. }
  917. ]
  918. ],
  919. "errorCode": 0,
  920. "fromCache": false,
  921. "hasPendingWrites": false
  922. },
  923. {
  924. "query": {
  925. "path": "collection",
  926. "filters": [
  927. [
  928. "key",
  929. "==",
  930. "b"
  931. ]
  932. ],
  933. "orderBys": []
  934. },
  935. "added": [
  936. [
  937. "collection/a",
  938. 1000,
  939. {
  940. "key": "b"
  941. }
  942. ]
  943. ],
  944. "errorCode": 0,
  945. "fromCache": false,
  946. "hasPendingWrites": false
  947. }
  948. ]
  949. },
  950. {
  951. "watchCurrent": [
  952. [
  953. 1
  954. ],
  955. "resume-token-1003"
  956. ],
  957. "watchSnapshot": 1003
  958. }
  959. ]
  960. },
  961. "Document remove message will cause docs to go in limbo": {
  962. "describeName": "Limbo Documents:",
  963. "itName": "Document remove message will cause docs to go in limbo",
  964. "tags": [],
  965. "config": {
  966. "useGarbageCollection": true
  967. },
  968. "steps": [
  969. {
  970. "userListen": [
  971. 2,
  972. {
  973. "path": "collection",
  974. "filters": [],
  975. "orderBys": []
  976. }
  977. ],
  978. "stateExpect": {
  979. "activeTargets": {
  980. "2": {
  981. "query": {
  982. "path": "collection",
  983. "filters": [],
  984. "orderBys": []
  985. },
  986. "resumeToken": ""
  987. }
  988. }
  989. }
  990. },
  991. {
  992. "watchAck": [
  993. 2
  994. ]
  995. },
  996. {
  997. "watchEntity": {
  998. "docs": [
  999. [
  1000. "collection/a",
  1001. 1000,
  1002. {
  1003. "key": "a"
  1004. }
  1005. ],
  1006. [
  1007. "collection/b",
  1008. 1001,
  1009. {
  1010. "key": "b"
  1011. }
  1012. ]
  1013. ],
  1014. "targets": [
  1015. 2
  1016. ]
  1017. }
  1018. },
  1019. {
  1020. "watchCurrent": [
  1021. [
  1022. 2
  1023. ],
  1024. "resume-token-1002"
  1025. ],
  1026. "watchSnapshot": 1002,
  1027. "expect": [
  1028. {
  1029. "query": {
  1030. "path": "collection",
  1031. "filters": [],
  1032. "orderBys": []
  1033. },
  1034. "added": [
  1035. [
  1036. "collection/a",
  1037. 1000,
  1038. {
  1039. "key": "a"
  1040. }
  1041. ],
  1042. [
  1043. "collection/b",
  1044. 1001,
  1045. {
  1046. "key": "b"
  1047. }
  1048. ]
  1049. ],
  1050. "errorCode": 0,
  1051. "fromCache": false,
  1052. "hasPendingWrites": false
  1053. }
  1054. ]
  1055. },
  1056. {
  1057. "watchEntity": {
  1058. "key": "collection/b",
  1059. "removedTargets": [
  1060. 2
  1061. ]
  1062. },
  1063. "watchSnapshot": 1003,
  1064. "stateExpect": {
  1065. "limboDocs": [
  1066. "collection/b"
  1067. ],
  1068. "activeTargets": {
  1069. "1": {
  1070. "query": {
  1071. "path": "collection/b",
  1072. "filters": [],
  1073. "orderBys": []
  1074. },
  1075. "resumeToken": ""
  1076. },
  1077. "2": {
  1078. "query": {
  1079. "path": "collection",
  1080. "filters": [],
  1081. "orderBys": []
  1082. },
  1083. "resumeToken": ""
  1084. }
  1085. }
  1086. },
  1087. "expect": [
  1088. {
  1089. "query": {
  1090. "path": "collection",
  1091. "filters": [],
  1092. "orderBys": []
  1093. },
  1094. "errorCode": 0,
  1095. "fromCache": true,
  1096. "hasPendingWrites": false
  1097. }
  1098. ]
  1099. },
  1100. {
  1101. "watchAck": [
  1102. 1
  1103. ]
  1104. },
  1105. {
  1106. "watchCurrent": [
  1107. [
  1108. 1
  1109. ],
  1110. "resume-token-1004"
  1111. ],
  1112. "watchSnapshot": 1004,
  1113. "stateExpect": {
  1114. "limboDocs": [],
  1115. "activeTargets": {
  1116. "2": {
  1117. "query": {
  1118. "path": "collection",
  1119. "filters": [],
  1120. "orderBys": []
  1121. },
  1122. "resumeToken": ""
  1123. }
  1124. }
  1125. },
  1126. "expect": [
  1127. {
  1128. "query": {
  1129. "path": "collection",
  1130. "filters": [],
  1131. "orderBys": []
  1132. },
  1133. "removed": [
  1134. [
  1135. "collection/b",
  1136. 1001,
  1137. {
  1138. "key": "b"
  1139. }
  1140. ]
  1141. ],
  1142. "errorCode": 0,
  1143. "fromCache": false,
  1144. "hasPendingWrites": false
  1145. }
  1146. ]
  1147. }
  1148. ]
  1149. }
  1150. }