Skip to content

Commit 596eedf

Browse files
committed
RDBC-735 Subscription batches do not return mapped entities
1 parent c14b904 commit 596eedf

File tree

2 files changed

+49
-5
lines changed

2 files changed

+49
-5
lines changed

src/Documents/Subscriptions/SubscriptionBatch.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { InMemoryDocumentSessionOperations } from "../Session/InMemoryDocumentSe
1414
import { DocumentInfo } from "../Session/DocumentInfo";
1515
import { BatchFromServer, CounterIncludeItem } from "./BatchFromServer";
1616
import { IMetadataDictionary } from "../Session/IMetadataDictionary";
17+
import { EntityToJson } from "../Session/EntityToJson";
1718

1819
export class SubscriptionBatch<T extends object> {
1920

@@ -88,7 +89,7 @@ export class SubscriptionBatch<T extends object> {
8889

8990
if (options.transactionMode !== "SingleNode") {
9091
throwError(
91-
"InvalidOperationException",
92+
"InvalidOperationException",
9293
"Cannot set TransactionMode when session is opened in subscription. Only 'SingleNode' is supported.");
9394
}
9495
}
@@ -165,7 +166,7 @@ export class SubscriptionBatch<T extends object> {
165166
let instance: T = null;
166167

167168
if (!item.exception) {
168-
instance = curDoc;
169+
instance = EntityToJson.convertToEntity(this._documentType, id, curDoc, this._requestExecutor.conventions);
169170

170171
if (!StringUtil.isNullOrEmpty(id)) {
171172
this._generateEntityIdOnTheClient.trySetIdentity(instance, id);

test/Ported/Subscriptions/SubscriptionsBasicTest.ts

Lines changed: 46 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Company, User } from "../../Assets/Entities";
1+
import { Company, Order, User } from "../../Assets/Entities";
22
import * as assert from "assert";
33
import { testContext, disposeTestDocumentStore } from "../../Utils/TestUtil";
44

@@ -199,6 +199,49 @@ describe("SubscriptionsBasicTest", function () {
199199
}
200200
});
201201

202+
it("can handle nested object types correctly", async function() {
203+
const id = await store.subscriptions.create(Order);
204+
205+
const subscription = store.subscriptions.getSubscriptionWorker<Order>({
206+
subscriptionName: id,
207+
documentType: Order,
208+
maxErroneousPeriod: 0,
209+
timeToWaitBeforeConnectionRetry: 0
210+
});
211+
212+
const orders = new AsyncQueue<Order>();
213+
214+
{
215+
const session = store.openSession();
216+
const order = new Order();
217+
order.company = "company/1";
218+
order.orderedAt = new Date();
219+
await session.store(order, "orders/1");
220+
await session.saveChanges();
221+
}
222+
223+
subscription.on("batch", (batch, callback) => {
224+
batch.items.forEach(x => {
225+
orders.push(x.result);
226+
});
227+
callback();
228+
});
229+
230+
try {
231+
await Promise.race([ subscriptionFailed(subscription), assertResults() ]);
232+
} finally {
233+
subscription.dispose();
234+
}
235+
236+
async function assertResults() {
237+
const firstOrder = await orders.poll(_reasonableWaitTime);
238+
assertThat(firstOrder instanceof Order)
239+
.isTrue();
240+
assertThat(firstOrder.orderedAt instanceof Date)
241+
.isTrue();
242+
}
243+
})
244+
202245
it("should send all new and modified docs", async function() {
203246
const id = await store.subscriptions.create(User);
204247

@@ -427,7 +470,7 @@ describe("SubscriptionsBasicTest", function () {
427470
subscriptionFailed(allSubscription),
428471
subscriptionFailed(filteredUsersSubscription)
429472
]);
430-
473+
431474
assert.ok(!usersDocs);
432475
} finally {
433476
filteredUsersSubscription.dispose();
@@ -822,7 +865,7 @@ describe("SubscriptionsBasicTest", function () {
822865

823866
await session.saveChanges();
824867
}
825-
868+
826869
const id = await store2.subscriptions.create({
827870
query: "from test"
828871
});

0 commit comments

Comments
 (0)