Skip to content

Commit 1bccd70

Browse files
authored
Merge pull request #357 from ml054/v5.2
RDBC-681 @nested-object-types doesn’t store type information for newly added f…
2 parents 1a80d21 + 32c88d9 commit 1bccd70

File tree

2 files changed

+53
-2
lines changed

2 files changed

+53
-2
lines changed

src/Mapping/ObjectMapper.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -444,12 +444,13 @@ export class TypesAwareObjectMapper implements ITypesAwareObjectMapper {
444444
nestedTypeInfoKey = ObjectUtil[this._conventions.remoteEntityFieldNameConvention](key);
445445
}
446446

447+
let innerSkipTypes = skipTypes
447448
if (!skipTypes) {
448-
skipTypes = key === CONSTANTS.Documents.Metadata.KEY;
449+
innerSkipTypes = key === CONSTANTS.Documents.Metadata.KEY;
449450
}
450451

451452
const fullPath = objPathPrefix ? `${objPathPrefix}.${nestedTypeInfoKey}` : nestedTypeInfoKey;
452-
result[key] = this._makeObjectLiteral(obj[key], fullPath, typeInfoCallback, knownTypes, skipTypes);
453+
result[key] = this._makeObjectLiteral(obj[key], fullPath, typeInfoCallback, knownTypes, innerSkipTypes);
453454
return result;
454455
}, {});
455456
}

test/Issues/RDBC_681.ts

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import { IDocumentStore } from "../../src";
2+
import { disposeTestDocumentStore, testContext } from "../Utils/TestUtil";
3+
import * as assert from "assert";
4+
5+
6+
describe("[RDBC-681] @nested-object-types doesn’t store type information for newly added fields on update", function () {
7+
8+
let store: IDocumentStore;
9+
10+
beforeEach(async function () {
11+
store = await testContext.getDocumentStore();
12+
});
13+
14+
afterEach(async () =>
15+
await disposeTestDocumentStore(store));
16+
17+
it("sets correct nested-object-types", async () => {
18+
class DateDoc {
19+
public firstDate: Date
20+
public secondDate: Date
21+
}
22+
23+
{
24+
const session = store.openSession();
25+
const dateDoc = new DateDoc();
26+
dateDoc.firstDate = new Date();
27+
28+
await session.store(dateDoc, "date/1");
29+
await session.saveChanges();
30+
}
31+
const session = store.openSession()
32+
const doc = await session.load<DateDoc>("date/1")
33+
doc.secondDate = new Date()
34+
await session.saveChanges()
35+
const metadata = session.advanced.getMetadataFor(doc)
36+
assert.strictEqual(doc.firstDate instanceof Date, true)
37+
assert.strictEqual(doc.secondDate instanceof Date, true)
38+
assert.strictEqual(metadata["@nested-object-types"]["firstDate"], "date")
39+
assert.strictEqual(metadata["@nested-object-types"]["secondDate"], "date")
40+
41+
const session2 = store.openSession()
42+
const loaded = await session2.load<DateDoc>("date/1")
43+
const loadedMetadata = session2.advanced.getMetadataFor(loaded)
44+
assert.strictEqual(loaded.firstDate instanceof Date, true)
45+
assert.strictEqual(loaded.secondDate instanceof Date, true)
46+
assert.strictEqual(loadedMetadata["@nested-object-types"]["firstDate"], "date")
47+
assert.strictEqual(loadedMetadata["@nested-object-types"]["secondDate"], "date")
48+
})
49+
});
50+

0 commit comments

Comments
 (0)