diff --git a/packages-api/webiny-entity/src/entity.js b/packages-api/webiny-entity/src/entity.js index 6438a5d6e0c..e717e257f95 100644 --- a/packages-api/webiny-entity/src/entity.js +++ b/packages-api/webiny-entity/src/entity.js @@ -8,6 +8,7 @@ import EntityCollection from "./entityCollection"; import EntityModel from "./entityModel"; import EntityAttributesContainer from "./entityAttributesContainer"; import QueryResult from "./queryResult"; +import { EntityError } from "./index"; declare type EntitySaveParams = { validation?: boolean, @@ -69,12 +70,12 @@ class Entity { }); const modelClass = this.getDriver().getModelClass(); - this.model = new modelClass().setParentEntity(proxy); - - if (!this.model) { - throw Error("Entity model is missing."); + if (!modelClass) { + throw new EntityError("Entity model is missing.", EntityError.MODEL_MISSING); } + this.model = new modelClass().setParentEntity(proxy); + this.listeners = {}; this.existing = false; this.processing = null; @@ -87,7 +88,10 @@ class Entity { this.on("delete", () => { if (this.getAttribute("id").isEmpty()) { - throw Error("Entity cannot be deleted because it was not previously saved."); + throw new EntityError( + "Entity cannot be deleted because it was not previously saved.", + EntityError.CANNOT_DELETE_NO_ID + ); } }); diff --git a/packages-api/webiny-entity/src/entityCollection.js b/packages-api/webiny-entity/src/entityCollection.js index 5fbec7b77e4..0ef14b1101d 100644 --- a/packages-api/webiny-entity/src/entityCollection.js +++ b/packages-api/webiny-entity/src/entityCollection.js @@ -1,5 +1,6 @@ // @flow import { Entity } from "."; +import EntityCollectionError from "./entityCollectionError"; class EntityCollection extends Array { entityCollection: { params: ?Object, meta: ?Object }; @@ -13,7 +14,7 @@ class EntityCollection extends Array { this.push(item); return true; } - throw Error( + throw new EntityCollectionError( "EntityCollection cannot accept a value that is not an instance of Entity." ); }); @@ -42,7 +43,9 @@ class EntityCollection extends Array { return super.push(value); } - throw Error("EntityCollection cannot accept a value that is not an instance of Entity."); + throw new EntityCollectionError( + "EntityCollection cannot accept a value that is not an instance of Entity." + ); } } diff --git a/packages-api/webiny-entity/src/entityCollectionError.js b/packages-api/webiny-entity/src/entityCollectionError.js new file mode 100644 index 00000000000..d459a6dab95 --- /dev/null +++ b/packages-api/webiny-entity/src/entityCollectionError.js @@ -0,0 +1,4 @@ +// @flow +class EntityCollectionError extends Error {} + +export default EntityCollectionError; diff --git a/packages-api/webiny-entity/src/entityError.js b/packages-api/webiny-entity/src/entityError.js index 2d7fac664c9..82f94e7e1f8 100644 --- a/packages-api/webiny-entity/src/entityError.js +++ b/packages-api/webiny-entity/src/entityError.js @@ -1,6 +1,9 @@ // @flow class EntityError extends Error { static ATTRIBUTE_NOT_FOUND: string; + static CANNOT_DELETE_NO_ID: string; + static MODEL_MISSING: string; + message: string; data: ?Object; type: ?string; @@ -41,5 +44,7 @@ class EntityError extends Error { } EntityError.ATTRIBUTE_NOT_FOUND = "attributeNotFound"; +EntityError.CANNOT_DELETE_NO_ID = "cannotDeleteNoId"; +EntityError.MODEL_MISSING = "modelMissing"; export default EntityError; diff --git a/packages-api/webiny-entity/tests/driver.test.js b/packages-api/webiny-entity/tests/driver.test.js index 32abd1fc56a..604fdacfed3 100644 --- a/packages-api/webiny-entity/tests/driver.test.js +++ b/packages-api/webiny-entity/tests/driver.test.js @@ -1,5 +1,6 @@ import { assert } from "chai"; import User from "./entities/user"; +import { EntityError } from "../src"; describe("default driver test", function() { it("save method should return the same user instance", async () => { @@ -18,7 +19,8 @@ describe("default driver test", function() { error = e; } - assert.instanceOf(error, Error); + assert.instanceOf(error, EntityError); + assert.equal(error.getType(), EntityError.CANNOT_DELETE_NO_ID); user.id = "ABC"; assert.isUndefined(await user.delete()); diff --git a/packages-api/webiny-entity/tests/entityModelMissing.test.js b/packages-api/webiny-entity/tests/entityModelMissing.test.js index c3e7bbdfb0e..80803c8dc05 100644 --- a/packages-api/webiny-entity/tests/entityModelMissing.test.js +++ b/packages-api/webiny-entity/tests/entityModelMissing.test.js @@ -1,5 +1,6 @@ import { Entity, Driver } from "./../src"; import { assert } from "chai"; +import { EntityError } from "../src"; class ExtendedEntityDriver extends Driver { constructor() { @@ -24,6 +25,7 @@ describe("entity model missing test", function() { error = e; } - assert.instanceOf(error, Error); + assert.instanceOf(error, EntityError); + assert.equal(error.getType(), EntityError.MODEL_MISSING); }); });