1- import * as mocha from "mocha" ;
2- import * as BluebirdPromise from "bluebird" ;
31import * as assert from "assert" ;
42import { testContext , disposeTestDocumentStore } from "../Utils/TestUtil" ;
53
64import {
7- RavenErrorType ,
8- GetNextOperationIdCommand ,
95 IDocumentStore ,
10- DatabaseChange ,
6+ CounterChange ,
7+ IChangesObservable ,
118} from "../../src" ;
129import { User } from "../Assets/Entities" ;
1310import { timeout , delay } from "../../src/Utility/PromiseUtil" ;
14- import { CounterChange , CounterChangeTypes } from "../../src/Documents/Changes/CounterChange" ;
15- import { IChangesObservable } from "../../src/Documents/Changes/IChangesObservable" ;
1611
1712describe ( "RavenDB-11703" , function ( ) {
1813
@@ -22,109 +17,117 @@ describe("RavenDB-11703", function () {
2217 store = await testContext . getDocumentStore ( ) ;
2318 } ) ;
2419
25- afterEach ( async ( ) =>
20+ afterEach ( async ( ) =>
2621 await disposeTestDocumentStore ( store ) ) ;
2722
2823 it ( "canGetNotificationAboutCounterIncrement" , async ( ) => {
29- const changes = store . changes ( ) ;
30- await changes . ensureConnectedNow ( ) ;
31- const observable = changes . forCountersOfDocument ( "users/1" ) ;
32-
33- const changesList : CounterChange [ ] = [ ] ;
34- observable . on ( "data" , d => changesList . unshift ( d ) ) ;
35- const errored = new Promise ( ( _ , reject ) => observable . on ( "error" , reject ) ) ;
36-
37- async function act ( ) {
38- {
39- const session = store . openSession ( ) ;
40- const user = new User ( ) ;
41- await session . store ( user , "users/1" ) ;
42- await session . saveChanges ( ) ;
43- }
44- {
45- const session = store . openSession ( ) ;
46- session . countersFor ( "users/1" ) . increment ( "likes" ) ;
47- await session . saveChanges ( ) ;
48- }
49- {
50- const session = store . openSession ( ) ;
51- session . countersFor ( "users/1" ) . increment ( "likes" ) ;
52- await session . saveChanges ( ) ;
53- }
24+ const changes = store . changes ( ) ;
25+ await changes . ensureConnectedNow ( ) ;
26+ const observable = changes . forCountersOfDocument ( "users/1" ) ;
27+
28+ const changesList : CounterChange [ ] = [ ] ;
29+ observable . on ( "data" , d => changesList . unshift ( d ) ) ;
30+ const errored = new Promise ( ( _ , reject ) => observable . on ( "error" , reject ) ) ;
31+
32+ async function act ( ) {
33+ {
34+ const session = store . openSession ( ) ;
35+ const user = new User ( ) ;
36+ await session . store ( user , "users/1" ) ;
37+ await session . saveChanges ( ) ;
38+ }
39+ {
40+ const session = store . openSession ( ) ;
41+ session . countersFor ( "users/1" ) . increment ( "likes" ) ;
42+ await session . saveChanges ( ) ;
43+ }
44+ {
45+ const session = store . openSession ( ) ;
46+ session . countersFor ( "users/1" ) . increment ( "likes" ) ;
47+ await session . saveChanges ( ) ;
5448 }
49+
50+ await delay ( 100 ) ;
51+ }
52+
53+ await Promise . race ( [ errored , timeout ( 2000 ) , act ( ) ] ) ;
54+
55+ assert . strictEqual ( changesList . length , 2 , "Expected exactly 2 changes to show up." ) ;
56+
57+ let counterChange = changesList . pop ( ) ;
58+ assert . ok ( counterChange ) ;
59+ assert . strictEqual ( counterChange . documentId , "users/1" ) ;
60+ assert . strictEqual ( counterChange . type , "Put" ) ;
61+ assert . strictEqual ( counterChange . name , "likes" ) ;
62+ assert . strictEqual ( counterChange . value , 1 ) ;
63+ assert . ok ( counterChange . changeVector ) ;
5564
56- await Promise . race ( [ errored , timeout ( 2000 ) , act ( ) ] ) ;
57-
58- let counterChange = changesList . pop ( ) ;
59- assert . ok ( counterChange ) ;
60- assert . strictEqual ( counterChange . documentId , "users/1" ) ;
61- assert . strictEqual ( counterChange . type , "Put" ) ;
62- assert . strictEqual ( counterChange . name , "likes" ) ;
63- assert . strictEqual ( counterChange . value , 1 ) ;
64- assert . ok ( counterChange . changeVector ) ;
65-
66- counterChange = changesList . pop ( ) ;
67- assert . ok ( counterChange ) ;
68- assert . strictEqual ( counterChange . documentId , "users/1" ) ;
69- assert . strictEqual ( counterChange . type , "Increment" ) ;
70- assert . strictEqual ( counterChange . name , "likes" ) ;
71- assert . strictEqual ( counterChange . value , 2 ) ;
72- assert . ok ( counterChange . changeVector ) ;
65+ counterChange = changesList . pop ( ) ;
66+ assert . ok ( counterChange ) ;
67+ assert . strictEqual ( counterChange . documentId , "users/1" ) ;
68+ assert . strictEqual ( counterChange . type , "Increment" ) ;
69+ assert . strictEqual ( counterChange . name , "likes" ) ;
70+ assert . strictEqual ( counterChange . value , 2 ) ;
71+ assert . ok ( counterChange . changeVector ) ;
7372 } ) ;
7473
7574 it ( "canGetNotificationAboutCounterDelete" , async function ( ) {
76- const changes = store . changes ( ) ;
77- await changes . ensureConnectedNow ( ) ;
78- const observable = changes . forCountersOfDocument ( "users/1" ) ;
79-
80- const changesList : CounterChange [ ] = [ ] ;
81- observable . on ( "data" , d => changesList . unshift ( d ) ) ;
82- const errored = new Promise ( ( _ , reject ) => observable . on ( "error" , reject ) ) ;
83-
84- async function act ( ) {
85- {
86- const session = store . openSession ( ) ;
87- const user = new User ( ) ;
88- await session . store ( user , "users/1" ) ;
89- await session . saveChanges ( ) ;
90- }
91- {
92- const session = store . openSession ( ) ;
93- session . countersFor ( "users/1" ) . increment ( "likes" ) ;
94- await session . saveChanges ( ) ;
95- }
96- {
97- const session = store . openSession ( ) ;
98- session . countersFor ( "users/1" ) . delete ( "likes" ) ;
99- await session . saveChanges ( ) ;
100- }
75+ const changes = store . changes ( ) ;
76+ await changes . ensureConnectedNow ( ) ;
77+ const observable = changes . forCountersOfDocument ( "users/1" ) ;
78+
79+ const changesList : CounterChange [ ] = [ ] ;
80+ observable . on ( "data" , d => changesList . unshift ( d ) ) ;
81+ const errored = new Promise ( ( _ , reject ) => observable . on ( "error" , reject ) ) ;
82+
83+ async function act ( ) {
84+ {
85+ const session = store . openSession ( ) ;
86+ const user = new User ( ) ;
87+ await session . store ( user , "users/1" ) ;
88+ await session . saveChanges ( ) ;
89+ }
90+ {
91+ const session = store . openSession ( ) ;
92+ session . countersFor ( "users/1" ) . increment ( "likes" ) ;
93+ await session . saveChanges ( ) ;
10194 }
95+ {
96+ const session = store . openSession ( ) ;
97+ session . countersFor ( "users/1" ) . delete ( "likes" ) ;
98+ await session . saveChanges ( ) ;
99+ }
100+
101+ await delay ( 100 ) ;
102+ }
102103
103- await Promise . race ( [ errored , timeout ( 1000 ) , act ( ) ] ) ;
104+ await Promise . race ( [ errored , timeout ( 2000 ) , act ( ) ] ) ;
105+
106+ assert . strictEqual ( changesList . length , 2 , "Expected exactly 2 changes to show up." ) ;
104107
105- let counterChange = changesList . pop ( ) ;
106- assert . ok ( counterChange ) ;
107- assert . strictEqual ( counterChange . documentId , "users/1" ) ;
108- assert . strictEqual ( counterChange . type , "Put" ) ;
109- assert . strictEqual ( counterChange . name , "likes" ) ;
110- assert . strictEqual ( counterChange . value , 1 ) ;
111- assert . ok ( counterChange . changeVector ) ;
108+ let counterChange = changesList . pop ( ) ;
109+ assert . ok ( counterChange ) ;
110+ assert . strictEqual ( counterChange . documentId , "users/1" ) ;
111+ assert . strictEqual ( counterChange . type , "Put" ) ;
112+ assert . strictEqual ( counterChange . name , "likes" ) ;
113+ assert . strictEqual ( counterChange . value , 1 ) ;
114+ assert . ok ( counterChange . changeVector ) ;
112115
113- counterChange = changesList . pop ( ) ;
114- assert . ok ( counterChange ) ;
115- assert . strictEqual ( counterChange . documentId , "users/1" ) ;
116- assert . strictEqual ( counterChange . type , "Delete" ) ;
117- assert . strictEqual ( counterChange . name , "likes" ) ;
118- assert . strictEqual ( counterChange . value , 0 ) ;
119- assert . ok ( counterChange . changeVector ) ;
116+ counterChange = changesList . pop ( ) ;
117+ assert . ok ( counterChange ) ;
118+ assert . strictEqual ( counterChange . documentId , "users/1" ) ;
119+ assert . strictEqual ( counterChange . type , "Delete" ) ;
120+ assert . strictEqual ( counterChange . name , "likes" ) ;
121+ assert . strictEqual ( counterChange . value , 0 ) ;
122+ assert . ok ( counterChange . changeVector ) ;
120123
121124 } ) ;
122125
123126 async function gatherChangesFor < T > ( observable : IChangesObservable < T > , ms : number ) {
124127 const changesList : T [ ] = [ ] ;
125128 observable . on ( "data" , d => changesList . unshift ( d ) ) ;
126129 const errored = new Promise ( ( _ , reject ) => observable . on ( "error" , reject ) ) ;
127- await Promise . race ( [ errored , delay ( ms ) ] ) ;
130+ await Promise . race ( [ errored , delay ( ms ) ] ) ;
128131 return changesList ;
129132 }
130133
0 commit comments