diff --git a/integration/test/ParseObjectTest.js b/integration/test/ParseObjectTest.js index 8bde7cdf9..03072ba1e 100644 --- a/integration/test/ParseObjectTest.js +++ b/integration/test/ParseObjectTest.js @@ -256,24 +256,30 @@ describe('Parse Object', () => { }); it('can increment nested field and retain full object', async () => { - const obj = new TestObject(); + const obj = new Parse.Object('TestIncrementObject'); obj.set('objectField', { number: 5, letter: 'a' }); assert.equal(obj.get('objectField').number, 5); assert.equal(obj.get('objectField').letter, 'a'); await obj.save(); + assert.deepStrictEqual(obj.attributes.objectField, { number: 5, letter: 'a' }); obj.increment('objectField.number', 15); + assert.deepStrictEqual(obj.attributes.objectField, { number: 20, letter: 'a' }); + assert.deepStrictEqual(obj.attributes.objectField, { number: 20, letter: 'a' }); + assert.equal(obj.get('objectField').number, 20); assert.equal(obj.get('objectField').letter, 'a'); await obj.save(); assert.equal(obj.get('objectField').number, 20); assert.equal(obj.get('objectField').letter, 'a'); + assert.deepStrictEqual(obj.attributes.objectField, { number: 20, letter: 'a' }); - const query = new Parse.Query(TestObject); + const query = new Parse.Query('TestIncrementObject'); const result = await query.get(obj.id); assert.equal(result.get('objectField').number, 20); assert.equal(result.get('objectField').letter, 'a'); + assert.deepStrictEqual(result.attributes.objectField, { number: 20, letter: 'a' }); }); it('can increment non existing field', async () => { @@ -321,7 +327,7 @@ describe('Parse Object', () => { await obj.save(); assert.equal(false, true); } catch(error) { - assert.equal(error.message, "Cannot create property 'dot' on string 'world'"); + assert.equal(error.message, 'schema mismatch for TestObject.hello; expected String but got Object'); } }); diff --git a/integration/test/helper.js b/integration/test/helper.js index df4355669..eea52a040 100644 --- a/integration/test/helper.js +++ b/integration/test/helper.js @@ -5,7 +5,7 @@ beforeAll((done) => { const { app } = require('../server'); const httpServer = require('http').createServer(app); - httpServer.listen(1337, () => { + httpServer.on('error', console.log).listen(1337, () => { console.log('parse-server running on port 1337.'); done(); }); diff --git a/src/ObjectStateMutations.js b/src/ObjectStateMutations.js index 4827449e8..a921b67df 100644 --- a/src/ObjectStateMutations.js +++ b/src/ObjectStateMutations.js @@ -126,8 +126,10 @@ export function estimateAttributes(serverData: AttributeMap, pendingOps: Array { expect(p.op('age')).toBe(undefined); }); + it('handle GeoPoint changes for server', () => { + const p = new ParseObject('Person'); + p.id = 'PPoint'; + const created = new Date(); + const geopoint = new ParseGeoPoint(0, 0); + p._handleSaveResponse({ + createdAt: created.toISOString(), + point: geopoint.toJSON(), + }); + expect(p._getServerData()).toEqual({ + updatedAt: created, + createdAt: created, + point: geopoint, + }); + expect(p._getServerData().point instanceof ParseGeoPoint).toBe(true); + }); + + it('handle Polygon changes for server', () => { + const p = new ParseObject('Person'); + p.id = 'PPolygon'; + const created = new Date(); + const polygon = new ParsePolygon([[0, 0], [0, 1], [1, 1], [1, 0], [0, 0]]); + p._handleSaveResponse({ + createdAt: created.toISOString(), + shape: polygon.toJSON(), + }); + expect(p._getServerData()).toEqual({ + updatedAt: created, + createdAt: created, + shape: polygon, + }); + expect(p._getServerData().shape instanceof ParsePolygon).toBe(true); + }); + it('handle createdAt string for server', () => { const p = new ParseObject('Person'); p.id = 'P9';