Skip to content

Commit bd89824

Browse files
authored
Merge pull request #176 from gregolsky/v4.1
add missing counter changes exports; wait a little for changes to sho…
2 parents 964e4d5 + f8063e1 commit bd89824

File tree

2 files changed

+96
-91
lines changed

2 files changed

+96
-91
lines changed

src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,8 @@ export * from "./Documents/Operations/Attachments/GetAttachmentOperation";
252252
// CHANGES
253253
export * from "./Documents/Changes/IndexChange";
254254
export * from "./Documents/Changes/DocumentChange";
255+
export * from "./Documents/Changes/CounterChange";
256+
export * from "./Documents/Changes/IDatabaseChanges";
255257
export * from "./Documents/Changes/DatabaseChange";
256258
export * from "./Documents/Changes/OperationStatusChange";
257259
export * from "./Documents/Changes/IDatabaseChanges";

test/Issues/RavenDB_11703.ts

Lines changed: 94 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,13 @@
1-
import * as mocha from "mocha";
2-
import * as BluebirdPromise from "bluebird";
31
import * as assert from "assert";
42
import { testContext, disposeTestDocumentStore } from "../Utils/TestUtil";
53

64
import {
7-
RavenErrorType,
8-
GetNextOperationIdCommand,
95
IDocumentStore,
10-
DatabaseChange,
6+
CounterChange,
7+
IChangesObservable,
118
} from "../../src";
129
import { User } from "../Assets/Entities";
1310
import { timeout, delay } from "../../src/Utility/PromiseUtil";
14-
import { CounterChange, CounterChangeTypes } from "../../src/Documents/Changes/CounterChange";
15-
import { IChangesObservable } from "../../src/Documents/Changes/IChangesObservable";
1611

1712
describe("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

Comments
 (0)