Skip to content

Commit c3d8137

Browse files
Merge 4c374de into 490c8c1
2 parents 490c8c1 + 4c374de commit c3d8137

File tree

4 files changed

+85
-6
lines changed

4 files changed

+85
-6
lines changed

integration/test/ParseObjectTest.js

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -304,10 +304,7 @@ describe('Parse Object', () => {
304304
});
305305

306306
obj.increment('objectField.number', 15);
307-
assert.deepStrictEqual(obj.attributes.objectField, {
308-
number: 20,
309-
letter: 'a',
310-
});
307+
await obj.save();
311308
assert.deepStrictEqual(obj.attributes.objectField, {
312309
number: 20,
313310
letter: 'a',
@@ -381,7 +378,7 @@ describe('Parse Object', () => {
381378
} catch (error) {
382379
assert.equal(
383380
error.message,
384-
'schema mismatch for TestObject.hello; expected String but got Object'
381+
`Cannot create property 'dot' on string 'world'`
385382
);
386383
}
387384
});

src/ObjectStateMutations.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,8 @@ export function estimateAttributes(
135135
const fields = attr.split('.');
136136
const first = fields[0];
137137
const last = fields[fields.length - 1];
138-
data[first] = { ...serverData[first] };
138+
// data[first] = { ...serverData[first] };
139+
data[first] = (serverData[first] === undefined) ? {} : serverData[first];
139140
let object = { ...data };
140141
for (let i = 0; i < fields.length - 1; i++) {
141142
const key = fields[i];

src/__tests__/ObjectStateMutations-test.js

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,77 @@ describe('ObjectStateMutations', () => {
195195
},
196196
},
197197
});
198+
serverData = {
199+
_id: 'someId',
200+
items: [
201+
{
202+
value: 'a',
203+
count: 5
204+
},
205+
{
206+
value: 'b',
207+
count: 1
208+
}
209+
],
210+
className: 'bug',
211+
number: 2
212+
}
213+
pendingOps = [{ 'items.0.count': new ParseOps.IncrementOp(1) }];
214+
expect(
215+
ObjectStateMutations.estimateAttributes(serverData, pendingOps, 'someClass', 'someId')
216+
).toEqual({
217+
_id: 'someId',
218+
items: [
219+
{
220+
value: 'a',
221+
count: 6
222+
},
223+
{
224+
value: 'b',
225+
count: 1
226+
}
227+
],
228+
className: 'bug',
229+
number: 2
230+
});
231+
232+
serverData = {
233+
_id: 'someId',
234+
items: [
235+
{
236+
value: {
237+
count: 54
238+
},
239+
count: 5
240+
},
241+
{
242+
value: 'b',
243+
count: 1
244+
}
245+
],
246+
className: 'bug',
247+
number: 2
248+
}
249+
pendingOps = [{ 'items.0.value.count': new ParseOps.IncrementOp(6) }];
250+
expect(
251+
ObjectStateMutations.estimateAttributes(serverData, pendingOps, 'someClass', 'someId')
252+
).toEqual({
253+
_id: 'someId',
254+
items: [
255+
{
256+
value: {
257+
count: 60
258+
},
259+
count: 5
260+
},
261+
{
262+
value: 'b',
263+
count: 1
264+
}
265+
],
266+
className: 'bug',
267+
number: 2
268+
})
198269
});
199270

200271
it('can commit changes from the server', () => {

src/__tests__/ParseObject-test.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -590,6 +590,16 @@ describe('ParseObject', () => {
590590
expect(o2.attributes).toEqual({ age: 40 });
591591
o2.increment('age');
592592
expect(o2.attributes).toEqual({ age: 41 });
593+
594+
const obj = ParseObject.fromJSON({
595+
_id: 'someId',
596+
items: [ { value: 'a', count: 5 }, { value: 'b', count: 1 } ],
597+
className: 'bug'
598+
})
599+
obj.increment('items.0.count')
600+
expect(obj.get('items')).toEqual([
601+
{ value: 'a', count: 6 }, { value: 'b', count: 1 }
602+
])
593603
});
594604

595605
it('can decrement a field', () => {

0 commit comments

Comments
 (0)