From 16ca881361708be8c9c0f749ed108846e6b6a280 Mon Sep 17 00:00:00 2001 From: Maciej Matuszczak Date: Wed, 12 Feb 2020 23:00:55 +0100 Subject: [PATCH 01/12] [#121] POC School model --- package.json | 6 ++--- src/alinka.db | Bin 0 -> 20480 bytes src/db/api.js | 25 +++++++++++++++++-- src/db/apply_fixture.js | 11 ++++++--- src/db/models.js | 52 ++++++++++++++++++++++++++++++++++++++-- src/db/ttt.js | 18 ++++++++++++++ 6 files changed, 102 insertions(+), 10 deletions(-) create mode 100644 src/alinka.db create mode 100644 src/db/ttt.js diff --git a/package.json b/package.json index 252238e..c2f0d2d 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,8 @@ "build": "webpack --mode production && electron-builder --windows --linux", "test": "jest", "rebuild": "electron-rebuild -f -w sqlite3", - "apply_fixture": "node src/db/apply_fixture.js" + "apply_fixture": "node src/db/apply_fixture.js", + "apply_fixture2": "node src/db/ttt.js" }, "dependencies": { "@babel/runtime": "^7.8.3", @@ -39,7 +40,7 @@ "react-final-form": "^6.3.3", "react-final-form-arrays": "^3.1.1", "sequelize": "5.21.2", - "sqlite3": "4.1.0" + "sqlite3": "^4.1.0" }, "devDependencies": { "@babel/cli": "^7.5.5", @@ -78,7 +79,6 @@ "prettier": "1.17.1", "react-test-renderer": "16.8.0", "sass-loader": "^7.1.0", - "sqlite3": "4.1.0", "style-loader": "^0.23.1", "url-loader": "^2.3.0", "wait-on": "^3.2.0", diff --git a/src/alinka.db b/src/alinka.db new file mode 100644 index 0000000000000000000000000000000000000000..317006bd335ad230a65e9edafa5af83c4de3e45c GIT binary patch literal 20480 zcmeI)%}>){90%~0mX~2hz34)g=#%Wi0wa4Z3K#2m)P`-0uG3&*wz^eq80%QOAiIg- zPw>p$D|Zv4{1g5cCLBEabYoD^?Z5>>zRj9GPk(*hKF@aO(`KcOoaLJ2o!#CxT$1AM zay-vHA%x>Ni|ylVA8ay9h=U9}^1k%2q{S_!Nl^O3iNO>XOi6d7@4ZfdqaaQ+i|mY-B((^ zP}p(Xrs)nXUTd3%Yt|KZ#VTXa)jah#-D%ZFg`FOQyVo-NW7b*fys2a+6D1mbMm1W< z(h{kjU+#D~{cNvHl&lxXD$P+g6D8Uoxp%5u^m;|IN-3+X(&(qu)MO|U;rC`PSH$YBBVxm&T7`pkEh=-qvP7We8tzl zO2U`%?&GJt-&K(9;>=f0I+7~V1WRCp00bZa0SG_<0uX=z1Rwwb2wbbcYf)5GwPDrF z&Ni{%|2S$i?JcM48pr#!p9eKF8BfMz@nkHKB+0~bCb67OEG{iQCiC(5a-79RMPCWx zimE!@E&F)iAT7IT)LVAlagAMj*Z6-8Ji8 zj~o9Vxjb^@XHoC|pO?OH?BlHo_@D1z>ujTO2tWV=5P$##AOHafKmY;|fWWO6u=oIX zZ+7;fsz!8L(u;PtX*A_TOqS(5dn1FbNs#ovs}k~JQce$DLGVX?YX{Q|Q { SchoolType.sync({ force: true }).then(() => { @@ -12,4 +12,25 @@ const getSchoolTypeList = () => { return SchoolType.findAll(); }; -module.exports = { createSchoolType, getSchoolTypeList }; +const createSchool = type => { + School.sync({ force: true }).then(() => + School.create({ + name: "TEST", + city: "Poznan", + postCode: "61-666", + street: "Mostowa 4", + schooltypeSchoolType: type || "przedszkole" + }) + ); +}; + +const getSchoolList = () => { + return School.findAll(); +}; + +module.exports = { + createSchoolType, + getSchoolTypeList, + createSchool, + getSchoolList +}; diff --git a/src/db/apply_fixture.js b/src/db/apply_fixture.js index 234a182..7a5f6b3 100644 --- a/src/db/apply_fixture.js +++ b/src/db/apply_fixture.js @@ -1,4 +1,4 @@ -const { createSchoolType } = require("./api"); +const { createSchoolType, createSchool } = require("./api"); const schoolTypeList = [ "przedszkole", "szkoła podstawowa", @@ -6,8 +6,13 @@ const schoolTypeList = [ "liceum ogólnokształcące" ]; -const instertSchoolTypes = schoolTypeList => { +const insertSchoolTypes = schoolTypeList => { schoolTypeList.map(schoolType => createSchoolType(schoolType)); }; -instertSchoolTypes(schoolTypeList); +const insertSchool = () => { + createSchool(); +}; + +insertSchoolTypes(schoolTypeList); +// insertSchool(); diff --git a/src/db/models.js b/src/db/models.js index 846457b..e975ffc 100644 --- a/src/db/models.js +++ b/src/db/models.js @@ -5,10 +5,16 @@ const sequelize = require("./db_config").sequelize; const SchoolType = sequelize.define( "schooltype", { + // id: { + // type: Sequelize.INTEGER, + // autoIncrement: true, + // primaryKey: true + // }, schoolType: { type: Sequelize.STRING, allowNull: false, - unique: true + unique: true, + primaryKey: true } }, { @@ -16,4 +22,46 @@ const SchoolType = sequelize.define( } ); -module.exports = SchoolType; +const School = sequelize.define( + "School", + { + id: { + type: Sequelize.INTEGER, + unique: true, + autoIncrement: true, + primaryKey: true + }, + name: { + type: Sequelize.STRING(80), + allowNull: false + }, + city: { + type: Sequelize.STRING(80), + allowNull: false + }, + postCode: { + type: Sequelize.STRING(6), + allowNull: false, + validation: { + postCodeFormatValidation: value => {} + } + }, + street: { + type: Sequelize.STRING(80), + allowNull: false + }, + address: { + type: Sequelize.VIRTUAL, + get: () => { + return this.get("street"); + } + } + }, + { + // options + } +); + +SchoolType.hasMany(School); + +module.exports = { SchoolType, School }; diff --git a/src/db/ttt.js b/src/db/ttt.js new file mode 100644 index 0000000..93d8a86 --- /dev/null +++ b/src/db/ttt.js @@ -0,0 +1,18 @@ +const { createSchoolType, createSchool } = require("./api"); +const schoolTypeList = [ + "przedszkole", + "szkoła podstawowa", + "szkoła ponadpodstawowa", + "liceum ogólnokształcące" +]; + +const insertSchoolTypes = schoolTypeList => { + schoolTypeList.map(schoolType => createSchoolType(schoolType)); +}; + +const insertSchool = () => { + createSchool(); +}; + +// insertSchoolTypes(schoolTypeList); +insertSchool(); From 754a96aaaba8ac8a09467cd7b7b675148b08ea3b Mon Sep 17 00:00:00 2001 From: Maciej Matuszczak Date: Thu, 13 Feb 2020 09:29:00 +0100 Subject: [PATCH 02/12] [#121] Remove db file --- src/alinka.db | Bin 20480 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/alinka.db diff --git a/src/alinka.db b/src/alinka.db deleted file mode 100644 index 317006bd335ad230a65e9edafa5af83c4de3e45c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20480 zcmeI)%}>){90%~0mX~2hz34)g=#%Wi0wa4Z3K#2m)P`-0uG3&*wz^eq80%QOAiIg- zPw>p$D|Zv4{1g5cCLBEabYoD^?Z5>>zRj9GPk(*hKF@aO(`KcOoaLJ2o!#CxT$1AM zay-vHA%x>Ni|ylVA8ay9h=U9}^1k%2q{S_!Nl^O3iNO>XOi6d7@4ZfdqaaQ+i|mY-B((^ zP}p(Xrs)nXUTd3%Yt|KZ#VTXa)jah#-D%ZFg`FOQyVo-NW7b*fys2a+6D1mbMm1W< z(h{kjU+#D~{cNvHl&lxXD$P+g6D8Uoxp%5u^m;|IN-3+X(&(qu)MO|U;rC`PSH$YBBVxm&T7`pkEh=-qvP7We8tzl zO2U`%?&GJt-&K(9;>=f0I+7~V1WRCp00bZa0SG_<0uX=z1Rwwb2wbbcYf)5GwPDrF z&Ni{%|2S$i?JcM48pr#!p9eKF8BfMz@nkHKB+0~bCb67OEG{iQCiC(5a-79RMPCWx zimE!@E&F)iAT7IT)LVAlagAMj*Z6-8Ji8 zj~o9Vxjb^@XHoC|pO?OH?BlHo_@D1z>ujTO2tWV=5P$##AOHafKmY;|fWWO6u=oIX zZ+7;fsz!8L(u;PtX*A_TOqS(5dn1FbNs#ovs}k~JQce$DLGVX?YX{Q|Q Date: Thu, 13 Feb 2020 15:30:28 +0100 Subject: [PATCH 03/12] [#121] Added school model, refactor code, fixtures and simple test --- package.json | 7 ++--- src/db/api.js | 14 +++++----- src/db/apply_fixture.js | 18 ------------- src/db/models.js | 16 +++--------- src/db/school_types.js | 6 +++++ src/db/ttt.js | 18 ------------- src/test/factories/schoolFactory.js | 22 ++++++++++++++++ src/test/factories/schoolTypeFactory.js | 26 ++++++------------- src/test/fixtures/apply_school_types.js | 8 ++++++ src/test/fixtures/apply_schools.js | 10 +++++++ src/test/models/test_school_model.js | 23 ++++++++++++++++ .../{test.js => test_school_type_model.js} | 8 +++--- src/test/truncate.js | 6 ++--- 13 files changed, 99 insertions(+), 83 deletions(-) delete mode 100644 src/db/apply_fixture.js create mode 100644 src/db/school_types.js delete mode 100644 src/db/ttt.js create mode 100644 src/test/factories/schoolFactory.js create mode 100644 src/test/fixtures/apply_school_types.js create mode 100644 src/test/fixtures/apply_schools.js create mode 100644 src/test/models/test_school_model.js rename src/test/models/{test.js => test_school_type_model.js} (72%) diff --git a/package.json b/package.json index c2f0d2d..88a1fb5 100644 --- a/package.json +++ b/package.json @@ -23,8 +23,9 @@ "build": "webpack --mode production && electron-builder --windows --linux", "test": "jest", "rebuild": "electron-rebuild -f -w sqlite3", - "apply_fixture": "node src/db/apply_fixture.js", - "apply_fixture2": "node src/db/ttt.js" + "apply_school_types": "node src/test/fixtures/apply_school_types.js", + "apply_schools": "node src/test/fixtures/apply_schools.js", + "apply_fixtures": "npm run apply_school_types && npm run apply_schools" }, "dependencies": { "@babel/runtime": "^7.8.3", @@ -50,8 +51,8 @@ "@babel/plugin-transform-runtime": "^7.5.5", "@babel/preset-env": "^7.5.5", "@babel/preset-react": "^7.0.0", - "@testing-library/react": "^9.3.2", "@svgr/webpack": "^4.3.3", + "@testing-library/react": "^9.3.2", "babel-core": "^7.0.0-bridge.0", "babel-eslint": "10.0.1", "babel-jest": "^24.9.0", diff --git a/src/db/api.js b/src/db/api.js index 91c234b..a09da89 100644 --- a/src/db/api.js +++ b/src/db/api.js @@ -3,7 +3,7 @@ const { SchoolType, School } = require("./models"); const createSchoolType = schoolType => { SchoolType.sync({ force: true }).then(() => { return SchoolType.create({ - schoolType: schoolType + name: schoolType }); }); }; @@ -12,14 +12,14 @@ const getSchoolTypeList = () => { return SchoolType.findAll(); }; -const createSchool = type => { +const createSchool = ({ name, city, postCode, street, type }) => { School.sync({ force: true }).then(() => School.create({ - name: "TEST", - city: "Poznan", - postCode: "61-666", - street: "Mostowa 4", - schooltypeSchoolType: type || "przedszkole" + name: name, + city: city, + postCode: postCode, + street: street, + SchoolTypeName: type }) ); }; diff --git a/src/db/apply_fixture.js b/src/db/apply_fixture.js deleted file mode 100644 index 7a5f6b3..0000000 --- a/src/db/apply_fixture.js +++ /dev/null @@ -1,18 +0,0 @@ -const { createSchoolType, createSchool } = require("./api"); -const schoolTypeList = [ - "przedszkole", - "szkoła podstawowa", - "szkoła ponadpodstawowa", - "liceum ogólnokształcące" -]; - -const insertSchoolTypes = schoolTypeList => { - schoolTypeList.map(schoolType => createSchoolType(schoolType)); -}; - -const insertSchool = () => { - createSchool(); -}; - -insertSchoolTypes(schoolTypeList); -// insertSchool(); diff --git a/src/db/models.js b/src/db/models.js index e975ffc..2018f52 100644 --- a/src/db/models.js +++ b/src/db/models.js @@ -3,15 +3,10 @@ const Sequelize = require("sequelize"); const sequelize = require("./db_config").sequelize; const SchoolType = sequelize.define( - "schooltype", + "SchoolType", { - // id: { - // type: Sequelize.INTEGER, - // autoIncrement: true, - // primaryKey: true - // }, - schoolType: { - type: Sequelize.STRING, + name: { + type: Sequelize.STRING(80), allowNull: false, unique: true, primaryKey: true @@ -41,10 +36,7 @@ const School = sequelize.define( }, postCode: { type: Sequelize.STRING(6), - allowNull: false, - validation: { - postCodeFormatValidation: value => {} - } + allowNull: false }, street: { type: Sequelize.STRING(80), diff --git a/src/db/school_types.js b/src/db/school_types.js new file mode 100644 index 0000000..0fd1bf8 --- /dev/null +++ b/src/db/school_types.js @@ -0,0 +1,6 @@ +module.exports = [ + "przedszkole", + "szkoła podstawowa", + "szkoła zawodowa", + "liceum ogólnokształcące" +]; diff --git a/src/db/ttt.js b/src/db/ttt.js deleted file mode 100644 index 93d8a86..0000000 --- a/src/db/ttt.js +++ /dev/null @@ -1,18 +0,0 @@ -const { createSchoolType, createSchool } = require("./api"); -const schoolTypeList = [ - "przedszkole", - "szkoła podstawowa", - "szkoła ponadpodstawowa", - "liceum ogólnokształcące" -]; - -const insertSchoolTypes = schoolTypeList => { - schoolTypeList.map(schoolType => createSchoolType(schoolType)); -}; - -const insertSchool = () => { - createSchool(); -}; - -// insertSchoolTypes(schoolTypeList); -insertSchool(); diff --git a/src/test/factories/schoolFactory.js b/src/test/factories/schoolFactory.js new file mode 100644 index 0000000..1be931e --- /dev/null +++ b/src/test/factories/schoolFactory.js @@ -0,0 +1,22 @@ +const { School } = require("../../db/models"); +const schoolTypeList = require("../../db/school_types"); +const faker = require("faker/locale/pl"); + +const schoolData = () => { + const schoolType = faker.random.arrayElement(schoolTypeList); + return { + type: schoolType, + name: `${schoolType} nr. ${faker.random.number(200)}`, + city: faker.address.city(), + postCode: faker.address.zipCode(), + street: faker.address.streetAddress() + }; +}; + +const schoolFixture = async (props = {}) => { + const schoolData = schoolData(); + return await School.create({ schoolData, ...props }); +}; + +module.exports = schoolFixture; +module.exports.schoolData = schoolData; diff --git a/src/test/factories/schoolTypeFactory.js b/src/test/factories/schoolTypeFactory.js index 456f302..510cbd8 100644 --- a/src/test/factories/schoolTypeFactory.js +++ b/src/test/factories/schoolTypeFactory.js @@ -1,23 +1,13 @@ -const SchoolType = require("../../db/models"); +const { SchoolType } = require("../../db/models"); +const schoolTypeList = require("../../db/school_types"); +const faker = require("faker/locale/pl"); -const schoolTypeData = (props = {}) => { - const schoolTypeList = [ - "przedszkole", - "szkoła podstawowa", - "szkoła zawodowa", - "liceum ogólnokształcące" - ]; - - const getSchoolType = array => { - const randomArrayItemNumber = Math.floor(Math.random() * array.length); - const school_type = schoolTypeList[randomArrayItemNumber]; - return school_type; - }; - - return { schoolType: props || getSchoolType(schoolTypeList) }; +const schoolTypeData = () => { + return faker.random.arrayElement(schoolTypeList); }; -const schoolTypeFixture = async (props = {}) => - await SchoolType.create(schoolTypeData(props)); +const schoolTypeFixture = async name => + await SchoolType.create({ name: name || schoolTypeData() }); module.exports = schoolTypeFixture; +module.exports.schoolTypeData = schoolTypeData; diff --git a/src/test/fixtures/apply_school_types.js b/src/test/fixtures/apply_school_types.js new file mode 100644 index 0000000..007e09d --- /dev/null +++ b/src/test/fixtures/apply_school_types.js @@ -0,0 +1,8 @@ +const { createSchoolType } = require("../../db/api"); +const schoolTypeList = require("../../db/school_types"); + +const insertSchoolTypes = schoolTypeList => { + schoolTypeList.map(schoolType => createSchoolType(schoolType)); +}; + +insertSchoolTypes(schoolTypeList); diff --git a/src/test/fixtures/apply_schools.js b/src/test/fixtures/apply_schools.js new file mode 100644 index 0000000..dff943b --- /dev/null +++ b/src/test/fixtures/apply_schools.js @@ -0,0 +1,10 @@ +const { createSchool } = require("../../db/api"); +const { schoolData } = require("../factories/schoolFactory"); + +const insertSchool = () => { + Array(10) + .fill(0) + .forEach(() => createSchool(schoolData())); +}; + +insertSchool(); diff --git a/src/test/models/test_school_model.js b/src/test/models/test_school_model.js new file mode 100644 index 0000000..723287d --- /dev/null +++ b/src/test/models/test_school_model.js @@ -0,0 +1,23 @@ +const { sequelize } = require("../../db/db_config"); +const schoolFactory = require("../factories/schoolFactory"); +const truncate = require("../truncate"); +const { School } = require("../../db/models"); + +describe("School model", () => { + beforeEach(async () => { + await truncate(School); + }); + + afterEach(async () => { + await truncate(School); + }); + + it("should be created", async () => { + const school = await sequelize + .sync({ force: true }) + .then(() => schoolFactory({ name: "TEST" })); + + expect(school).toBeTruthy(); + expect(school.dataValues.name).toBe("TEST"); + }); +}); diff --git a/src/test/models/test.js b/src/test/models/test_school_type_model.js similarity index 72% rename from src/test/models/test.js rename to src/test/models/test_school_type_model.js index 3bb8027..5f143d8 100644 --- a/src/test/models/test.js +++ b/src/test/models/test_school_type_model.js @@ -1,21 +1,23 @@ const { sequelize } = require("../../db/db_config"); const schoolTypeFactory = require("../factories/schoolTypeFactory"); const truncate = require("../truncate"); +const { SchoolType } = require("../../db/models"); describe("SchoolType model", () => { beforeEach(async () => { - await truncate(); + await truncate(SchoolType); }); afterEach(async () => { - await truncate(); + await truncate(SchoolType); }); it("should be created", async () => { const schoolType = await sequelize .sync({ force: true }) .then(() => schoolTypeFactory("mock school type")); + expect(schoolType).toBeTruthy(); - expect(schoolType.dataValues.schoolType).toBe("mock school type"); + expect(schoolType.dataValues.name).toBe("mock school type"); }); }); diff --git a/src/test/truncate.js b/src/test/truncate.js index a3bedb1..0c6723c 100644 --- a/src/test/truncate.js +++ b/src/test/truncate.js @@ -1,5 +1,3 @@ -const SchoolType = require("../db/models"); - -module.exports = async function truncate() { - SchoolType.destroy({ where: {}, force: true }); +module.exports = async function truncate(model) { + model.destroy({ where: {}, force: true }); }; From e5d3548f4f89c4395870bfcd40c6b11287bd1b9f Mon Sep 17 00:00:00 2001 From: Maciej Matuszczak Date: Thu, 13 Feb 2020 18:01:34 +0100 Subject: [PATCH 04/12] [#121] Virtual field [WiP] --- src/test/factories/schoolFactory.js | 8 ++--- src/test/models/school_model.test.js | 36 +++++++++++++++++++ ...ype_model.js => school_type_model.test.js} | 0 src/test/models/test_school_model.js | 23 ------------ src/test/truncate.js | 11 ++++-- 5 files changed, 49 insertions(+), 29 deletions(-) create mode 100644 src/test/models/school_model.test.js rename src/test/models/{test_school_type_model.js => school_type_model.test.js} (100%) delete mode 100644 src/test/models/test_school_model.js diff --git a/src/test/factories/schoolFactory.js b/src/test/factories/schoolFactory.js index 1be931e..996e701 100644 --- a/src/test/factories/schoolFactory.js +++ b/src/test/factories/schoolFactory.js @@ -2,8 +2,8 @@ const { School } = require("../../db/models"); const schoolTypeList = require("../../db/school_types"); const faker = require("faker/locale/pl"); -const schoolData = () => { - const schoolType = faker.random.arrayElement(schoolTypeList); +const schoolData = type => { + const schoolType = type || faker.random.arrayElement(schoolTypeList); return { type: schoolType, name: `${schoolType} nr. ${faker.random.number(200)}`, @@ -14,8 +14,8 @@ const schoolData = () => { }; const schoolFixture = async (props = {}) => { - const schoolData = schoolData(); - return await School.create({ schoolData, ...props }); + const data = schoolData(props.type); + return await School.create({ ...data, ...props }); }; module.exports = schoolFixture; diff --git a/src/test/models/school_model.test.js b/src/test/models/school_model.test.js new file mode 100644 index 0000000..5b4802d --- /dev/null +++ b/src/test/models/school_model.test.js @@ -0,0 +1,36 @@ +const { sequelize } = require("../../db/db_config"); +const schoolFactory = require("../factories/schoolFactory"); +const {schoolData} = require("../factories/schoolFactory"); +const schoolTypeFactory = require("../factories/schoolTypeFactory"); +const truncate = require("../truncate"); +const { School, SchoolType } = require("../../db/models"); + +describe("School model", () => { + + beforeEach(async () => { + await truncate([School, SchoolType]); + await schoolTypeFactory("przedszkole") + }); + + afterEach(async () => { + await truncate([School, SchoolType]); + }); + + it("should be created", async () => { + const school = await sequelize + .sync({ force: true }) + .then(() => schoolFactory({ name: "TEST", type: "przedszkole" })); + + expect(school).toBeTruthy(); + expect(school.dataValues.name).toBe("TEST"); + }); + + it("should return concatenated data by calling `address`", async () => { + const school = await sequelize + .sync({ force: true }) + .then(() => schoolFactory({ street: "TEST STREET", type: "przedszkole" })); + + expect(school).toBeTruthy(); + expect(school.dataValues.address).toBe("TEST STREET"); + }); +}); diff --git a/src/test/models/test_school_type_model.js b/src/test/models/school_type_model.test.js similarity index 100% rename from src/test/models/test_school_type_model.js rename to src/test/models/school_type_model.test.js diff --git a/src/test/models/test_school_model.js b/src/test/models/test_school_model.js deleted file mode 100644 index 723287d..0000000 --- a/src/test/models/test_school_model.js +++ /dev/null @@ -1,23 +0,0 @@ -const { sequelize } = require("../../db/db_config"); -const schoolFactory = require("../factories/schoolFactory"); -const truncate = require("../truncate"); -const { School } = require("../../db/models"); - -describe("School model", () => { - beforeEach(async () => { - await truncate(School); - }); - - afterEach(async () => { - await truncate(School); - }); - - it("should be created", async () => { - const school = await sequelize - .sync({ force: true }) - .then(() => schoolFactory({ name: "TEST" })); - - expect(school).toBeTruthy(); - expect(school.dataValues.name).toBe("TEST"); - }); -}); diff --git a/src/test/truncate.js b/src/test/truncate.js index 0c6723c..3dd1f93 100644 --- a/src/test/truncate.js +++ b/src/test/truncate.js @@ -1,3 +1,10 @@ -module.exports = async function truncate(model) { - model.destroy({ where: {}, force: true }); +module.exports = async function truncate(models) { + if (models instanceof Array){ + models.map( + model => model.destroy({ where: {}, force: true }) + ); + } + else { + models.destroy({ where: {}, force: true }); + } }; From 1ce1e3036555747be10a315b62ab3d4a2e02ce7f Mon Sep 17 00:00:00 2001 From: Maciej Matuszczak Date: Fri, 14 Feb 2020 14:10:14 +0100 Subject: [PATCH 05/12] [#121] Added more tests --- src/db/api.js | 5 +-- src/db/db_config.js | 3 +- src/db/models.js | 23 ++++++++++--- src/test/factories/schoolFactory.js | 6 ++-- src/test/models/school_model.test.js | 48 +++++++++++++++++++++------- 5 files changed, 64 insertions(+), 21 deletions(-) diff --git a/src/db/api.js b/src/db/api.js index a09da89..e518cce 100644 --- a/src/db/api.js +++ b/src/db/api.js @@ -12,14 +12,15 @@ const getSchoolTypeList = () => { return SchoolType.findAll(); }; -const createSchool = ({ name, city, postCode, street, type }) => { +const createSchool = ({ name, city, postCode, street, type, postOffice }) => { School.sync({ force: true }).then(() => School.create({ name: name, city: city, postCode: postCode, street: street, - SchoolTypeName: type + SchoolTypeName: type, + postOffice: postOffice, }) ); }; diff --git a/src/db/db_config.js b/src/db/db_config.js index 65c2f24..0b24ac8 100644 --- a/src/db/db_config.js +++ b/src/db/db_config.js @@ -6,7 +6,8 @@ const sequelize = new Sequelize({ storage: path.resolve(__dirname, "../alinka.db"), dialectOptions: { requestTimeout: 300000 - } + }, + logging: false }); sequelize diff --git a/src/db/models.js b/src/db/models.js index 2018f52..fe71b27 100644 --- a/src/db/models.js +++ b/src/db/models.js @@ -1,4 +1,5 @@ const Sequelize = require("sequelize"); +const { DataTypes } = require("sequelize"); const sequelize = require("./db_config").sequelize; @@ -38,22 +39,34 @@ const School = sequelize.define( type: Sequelize.STRING(6), allowNull: false }, + postOffice: { + type: Sequelize.STRING(80), + allowNull: false + }, street: { type: Sequelize.STRING(80), allowNull: false }, address: { - type: Sequelize.VIRTUAL, - get: () => { - return this.get("street"); + type: Sequelize.VIRTUAL(DataTypes.STRING, ["city", "street"]), + get() { + return `${this.getDataValue('city')}, ${this.getDataValue("street")}`; } - } + }, + post: { + type: Sequelize.VIRTUAL(DataTypes.STRING, ["postCode", "postOffice"]), + get() { + const {postOffice, city, postCode} = this; + const postLocation = postOffice === city ? city : postOffice; + return `${postCode} ${postLocation}`; + } + }, }, { // options } ); -SchoolType.hasMany(School); +SchoolType.hasMany(School, { allowNull: false }); module.exports = { SchoolType, School }; diff --git a/src/test/factories/schoolFactory.js b/src/test/factories/schoolFactory.js index 996e701..582e11d 100644 --- a/src/test/factories/schoolFactory.js +++ b/src/test/factories/schoolFactory.js @@ -4,12 +4,14 @@ const faker = require("faker/locale/pl"); const schoolData = type => { const schoolType = type || faker.random.arrayElement(schoolTypeList); + const city = faker.address.city(); return { type: schoolType, name: `${schoolType} nr. ${faker.random.number(200)}`, - city: faker.address.city(), + city: city, postCode: faker.address.zipCode(), - street: faker.address.streetAddress() + street: faker.address.streetAddress(), + postOffice: city }; }; diff --git a/src/test/models/school_model.test.js b/src/test/models/school_model.test.js index 5b4802d..5c1471b 100644 --- a/src/test/models/school_model.test.js +++ b/src/test/models/school_model.test.js @@ -1,17 +1,16 @@ const { sequelize } = require("../../db/db_config"); const schoolFactory = require("../factories/schoolFactory"); -const {schoolData} = require("../factories/schoolFactory"); const schoolTypeFactory = require("../factories/schoolTypeFactory"); const truncate = require("../truncate"); const { School, SchoolType } = require("../../db/models"); describe("School model", () => { - beforeEach(async () => { await truncate([School, SchoolType]); + await SchoolType.sync({ force: true }); await schoolTypeFactory("przedszkole") }); - + afterEach(async () => { await truncate([School, SchoolType]); }); @@ -22,15 +21,42 @@ describe("School model", () => { .then(() => schoolFactory({ name: "TEST", type: "przedszkole" })); expect(school).toBeTruthy(); - expect(school.dataValues.name).toBe("TEST"); + expect(school.name).toEqual("TEST"); }); - it("should return concatenated data by calling `address`", async () => { - const school = await sequelize - .sync({ force: true }) - .then(() => schoolFactory({ street: "TEST STREET", type: "przedszkole" })); - - expect(school).toBeTruthy(); - expect(school.dataValues.address).toBe("TEST STREET"); + // it("should validate `postCode`", () => { + // const school = await sequelize + // .sync({ force: true }) + // .then(() => schoolFactory({ name: "TEST", type: "przedszkole" })); + // }) + + describe("schould has virtual methods which", () => { + it("return concatenated address data by calling `address`", async () => { + const school = await sequelize + .sync({ force: true }) + .then(() => + schoolFactory({ + street: "Testowa 2", + city: "Poznan", + type: "przedszkole" + }) + ); + + expect(school.address).toEqual("Poznan, Testowa 2"); + }); + + it("return concatenated post data by calling `post`", async () => { + const school = await sequelize + .sync({ force: true }) + .then(() => + schoolFactory({ + postCode: "12-345", + postOffice: "Poznan", + type: "przedszkole" + }) + ); + + expect(school.post).toEqual("12-345 Poznan"); + }); }); }); From 878703a28cfea46187f396b576a1ca656e54f15c Mon Sep 17 00:00:00 2001 From: Maciej Matuszczak Date: Fri, 14 Feb 2020 19:21:13 +0100 Subject: [PATCH 06/12] [#121] Tests --- package.json | 2 +- src/db/api.js | 14 ++--- src/db/models.js | 72 ----------------------- src/db/models/index.js | 7 +++ src/db/models/school.js | 55 +++++++++++++++++ src/db/models/school_type.js | 22 +++++++ src/test/factories/schoolFactory.js | 6 +- src/test/factories/schoolTypeFactory.js | 7 ++- src/test/models/school_model.test.js | 50 +++++++--------- src/test/models/school_type_model.test.js | 4 ++ 10 files changed, 123 insertions(+), 116 deletions(-) delete mode 100644 src/db/models.js create mode 100644 src/db/models/index.js create mode 100644 src/db/models/school.js create mode 100644 src/db/models/school_type.js diff --git a/package.json b/package.json index 88a1fb5..67edef8 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "electron:dev": "MODE=dev electron .", "start": "concurrently \"cross-env BROWSER=none npm run webpack:dev\" \"wait-on http://localhost:9000 && npm run electron:dev\"", "build": "webpack --mode production && electron-builder --windows --linux", - "test": "jest", + "test": "MODE=dev jest", "rebuild": "electron-rebuild -f -w sqlite3", "apply_school_types": "node src/test/fixtures/apply_school_types.js", "apply_schools": "node src/test/fixtures/apply_schools.js", diff --git a/src/db/api.js b/src/db/api.js index e518cce..050d91c 100644 --- a/src/db/api.js +++ b/src/db/api.js @@ -12,15 +12,15 @@ const getSchoolTypeList = () => { return SchoolType.findAll(); }; -const createSchool = ({ name, city, postCode, street, type, postOffice }) => { +const createSchool = ({ name, city, postCode, street, SchoolTypeName, postOffice }) => { School.sync({ force: true }).then(() => School.create({ - name: name, - city: city, - postCode: postCode, - street: street, - SchoolTypeName: type, - postOffice: postOffice, + name, + city, + postCode, + street, + SchoolTypeName, + postOffice }) ); }; diff --git a/src/db/models.js b/src/db/models.js deleted file mode 100644 index fe71b27..0000000 --- a/src/db/models.js +++ /dev/null @@ -1,72 +0,0 @@ -const Sequelize = require("sequelize"); -const { DataTypes } = require("sequelize"); - -const sequelize = require("./db_config").sequelize; - -const SchoolType = sequelize.define( - "SchoolType", - { - name: { - type: Sequelize.STRING(80), - allowNull: false, - unique: true, - primaryKey: true - } - }, - { - // options - } -); - -const School = sequelize.define( - "School", - { - id: { - type: Sequelize.INTEGER, - unique: true, - autoIncrement: true, - primaryKey: true - }, - name: { - type: Sequelize.STRING(80), - allowNull: false - }, - city: { - type: Sequelize.STRING(80), - allowNull: false - }, - postCode: { - type: Sequelize.STRING(6), - allowNull: false - }, - postOffice: { - type: Sequelize.STRING(80), - allowNull: false - }, - street: { - type: Sequelize.STRING(80), - allowNull: false - }, - address: { - type: Sequelize.VIRTUAL(DataTypes.STRING, ["city", "street"]), - get() { - return `${this.getDataValue('city')}, ${this.getDataValue("street")}`; - } - }, - post: { - type: Sequelize.VIRTUAL(DataTypes.STRING, ["postCode", "postOffice"]), - get() { - const {postOffice, city, postCode} = this; - const postLocation = postOffice === city ? city : postOffice; - return `${postCode} ${postLocation}`; - } - }, - }, - { - // options - } -); - -SchoolType.hasMany(School, { allowNull: false }); - -module.exports = { SchoolType, School }; diff --git a/src/db/models/index.js b/src/db/models/index.js new file mode 100644 index 0000000..8e518b0 --- /dev/null +++ b/src/db/models/index.js @@ -0,0 +1,7 @@ +const SchoolType = require("./school_type"); +const School = require("./school"); + +module.exports = { + SchoolType, + School +} \ No newline at end of file diff --git a/src/db/models/school.js b/src/db/models/school.js new file mode 100644 index 0000000..3fd03ea --- /dev/null +++ b/src/db/models/school.js @@ -0,0 +1,55 @@ +const Sequelize = require("sequelize"); +const { DataTypes } = require("sequelize"); + +const sequelize = require("../db_config").sequelize; + +const School = sequelize.define( + "School", + { + id: { + type: Sequelize.INTEGER, + unique: true, + autoIncrement: true, + primaryKey: true + }, + name: { + type: Sequelize.STRING(80), + allowNull: false + }, + city: { + type: Sequelize.STRING(80), + allowNull: false + }, + postCode: { + type: Sequelize.STRING(6), + allowNull: false + }, + postOffice: { + type: Sequelize.STRING(80), + allowNull: false + }, + street: { + type: Sequelize.STRING(80), + allowNull: false + }, + address: { + type: Sequelize.VIRTUAL(DataTypes.STRING, ["city", "street"]), + get() { + return `${this.getDataValue("city")}, ${this.getDataValue("street")}`; + } + }, + post: { + type: Sequelize.VIRTUAL(DataTypes.STRING, ["postCode", "postOffice"]), + get() { + const { postOffice, city, postCode } = this; + const postLocation = postOffice === city ? city : postOffice; + return `${postCode} ${postLocation}`; + } + } + }, + { + // options + } + ); + +module.exports = School; \ No newline at end of file diff --git a/src/db/models/school_type.js b/src/db/models/school_type.js new file mode 100644 index 0000000..e8a6c49 --- /dev/null +++ b/src/db/models/school_type.js @@ -0,0 +1,22 @@ +const Sequelize = require("sequelize"); +const sequelize = require("../db_config").sequelize; +const School = require("./school"); + +const SchoolType = sequelize.define( + "SchoolType", + { + name: { + type: Sequelize.STRING(80), + allowNull: false, + unique: true, + primaryKey: true + } + }, + { + // options + } +); + +SchoolType.hasMany(School, { foreignKey: { allowNull: false } }); + +module.exports = SchoolType; diff --git a/src/test/factories/schoolFactory.js b/src/test/factories/schoolFactory.js index 582e11d..4151d05 100644 --- a/src/test/factories/schoolFactory.js +++ b/src/test/factories/schoolFactory.js @@ -1,4 +1,4 @@ -const { School } = require("../../db/models"); +const School = require("../../db/models/school"); const schoolTypeList = require("../../db/school_types"); const faker = require("faker/locale/pl"); @@ -6,7 +6,7 @@ const schoolData = type => { const schoolType = type || faker.random.arrayElement(schoolTypeList); const city = faker.address.city(); return { - type: schoolType, + SchoolTypeName: schoolType, name: `${schoolType} nr. ${faker.random.number(200)}`, city: city, postCode: faker.address.zipCode(), @@ -16,7 +16,7 @@ const schoolData = type => { }; const schoolFixture = async (props = {}) => { - const data = schoolData(props.type); + const data = schoolData(props.SchoolTypeName); return await School.create({ ...data, ...props }); }; diff --git a/src/test/factories/schoolTypeFactory.js b/src/test/factories/schoolTypeFactory.js index 510cbd8..8466e15 100644 --- a/src/test/factories/schoolTypeFactory.js +++ b/src/test/factories/schoolTypeFactory.js @@ -1,4 +1,4 @@ -const { SchoolType } = require("../../db/models"); +const SchoolType = require("../../db/models/school_type"); const schoolTypeList = require("../../db/school_types"); const faker = require("faker/locale/pl"); @@ -6,8 +6,9 @@ const schoolTypeData = () => { return faker.random.arrayElement(schoolTypeList); }; -const schoolTypeFixture = async name => - await SchoolType.create({ name: name || schoolTypeData() }); +const schoolTypeFixture = async name =>{ + return await SchoolType.create({ name: name || schoolTypeData() }); +} module.exports = schoolTypeFixture; module.exports.schoolTypeData = schoolTypeData; diff --git a/src/test/models/school_model.test.js b/src/test/models/school_model.test.js index 5c1471b..bc99ccf 100644 --- a/src/test/models/school_model.test.js +++ b/src/test/models/school_model.test.js @@ -1,24 +1,22 @@ const { sequelize } = require("../../db/db_config"); const schoolFactory = require("../factories/schoolFactory"); const schoolTypeFactory = require("../factories/schoolTypeFactory"); -const truncate = require("../truncate"); -const { School, SchoolType } = require("../../db/models"); +const { schoolData } = require("../factories/schoolFactory"); +const { School } = require("../../db/models"); describe("School model", () => { - beforeEach(async () => { - await truncate([School, SchoolType]); - await SchoolType.sync({ force: true }); - await schoolTypeFactory("przedszkole") + beforeAll(() => { + return sequelize + .sync({ force: true }) + .then(() => schoolTypeFactory("mock")); }); - afterEach(async () => { - await truncate([School, SchoolType]); + afterAll(async () => { + await sequelize.drop(); }); it("should be created", async () => { - const school = await sequelize - .sync({ force: true }) - .then(() => schoolFactory({ name: "TEST", type: "przedszkole" })); + const school = await School.create({ ...schoolData("mock"), name: "TEST" }); expect(school).toBeTruthy(); expect(school.name).toEqual("TEST"); @@ -30,31 +28,23 @@ describe("School model", () => { // .then(() => schoolFactory({ name: "TEST", type: "przedszkole" })); // }) - describe("schould has virtual methods which", () => { + describe("has virtual methods which", () => { it("return concatenated address data by calling `address`", async () => { - const school = await sequelize - .sync({ force: true }) - .then(() => - schoolFactory({ - street: "Testowa 2", - city: "Poznan", - type: "przedszkole" - }) - ); + const school = await schoolFactory({ + street: "Testowa 2", + city: "Poznan", + SchoolTypeName: "mock" + }); expect(school.address).toEqual("Poznan, Testowa 2"); }); it("return concatenated post data by calling `post`", async () => { - const school = await sequelize - .sync({ force: true }) - .then(() => - schoolFactory({ - postCode: "12-345", - postOffice: "Poznan", - type: "przedszkole" - }) - ); + const school = await schoolFactory({ + postCode: "12-345", + postOffice: "Poznan", + SchoolTypeName: "mock" + }); expect(school.post).toEqual("12-345 Poznan"); }); diff --git a/src/test/models/school_type_model.test.js b/src/test/models/school_type_model.test.js index 5f143d8..c6a397b 100644 --- a/src/test/models/school_type_model.test.js +++ b/src/test/models/school_type_model.test.js @@ -12,6 +12,10 @@ describe("SchoolType model", () => { await truncate(SchoolType); }); + afterAll(async () => { + await SchoolType.drop() + }) + it("should be created", async () => { const schoolType = await sequelize .sync({ force: true }) From 9b0a16e19850359240c7ded852a756dfcbb1380d Mon Sep 17 00:00:00 2001 From: Maciej Matuszczak Date: Fri, 14 Feb 2020 19:23:59 +0100 Subject: [PATCH 07/12] [#121] Lint --- src/db/api.js | 9 ++- src/db/models/index.js | 6 +- src/db/models/school.js | 90 +++++++++++------------ src/test/factories/schoolTypeFactory.js | 4 +- src/test/models/school_type_model.test.js | 4 +- src/test/truncate.js | 9 +-- 6 files changed, 63 insertions(+), 59 deletions(-) diff --git a/src/db/api.js b/src/db/api.js index 050d91c..f1c320d 100644 --- a/src/db/api.js +++ b/src/db/api.js @@ -12,7 +12,14 @@ const getSchoolTypeList = () => { return SchoolType.findAll(); }; -const createSchool = ({ name, city, postCode, street, SchoolTypeName, postOffice }) => { +const createSchool = ({ + name, + city, + postCode, + street, + SchoolTypeName, + postOffice +}) => { School.sync({ force: true }).then(() => School.create({ name, diff --git a/src/db/models/index.js b/src/db/models/index.js index 8e518b0..b3e7f28 100644 --- a/src/db/models/index.js +++ b/src/db/models/index.js @@ -2,6 +2,6 @@ const SchoolType = require("./school_type"); const School = require("./school"); module.exports = { - SchoolType, - School -} \ No newline at end of file + SchoolType, + School +}; diff --git a/src/db/models/school.js b/src/db/models/school.js index 3fd03ea..caee5fc 100644 --- a/src/db/models/school.js +++ b/src/db/models/school.js @@ -4,52 +4,52 @@ const { DataTypes } = require("sequelize"); const sequelize = require("../db_config").sequelize; const School = sequelize.define( - "School", - { - id: { - type: Sequelize.INTEGER, - unique: true, - autoIncrement: true, - primaryKey: true - }, - name: { - type: Sequelize.STRING(80), - allowNull: false - }, - city: { - type: Sequelize.STRING(80), - allowNull: false - }, - postCode: { - type: Sequelize.STRING(6), - allowNull: false - }, - postOffice: { - type: Sequelize.STRING(80), - allowNull: false - }, - street: { - type: Sequelize.STRING(80), - allowNull: false - }, - address: { - type: Sequelize.VIRTUAL(DataTypes.STRING, ["city", "street"]), - get() { - return `${this.getDataValue("city")}, ${this.getDataValue("street")}`; - } - }, - post: { - type: Sequelize.VIRTUAL(DataTypes.STRING, ["postCode", "postOffice"]), - get() { - const { postOffice, city, postCode } = this; - const postLocation = postOffice === city ? city : postOffice; - return `${postCode} ${postLocation}`; - } + "School", + { + id: { + type: Sequelize.INTEGER, + unique: true, + autoIncrement: true, + primaryKey: true + }, + name: { + type: Sequelize.STRING(80), + allowNull: false + }, + city: { + type: Sequelize.STRING(80), + allowNull: false + }, + postCode: { + type: Sequelize.STRING(6), + allowNull: false + }, + postOffice: { + type: Sequelize.STRING(80), + allowNull: false + }, + street: { + type: Sequelize.STRING(80), + allowNull: false + }, + address: { + type: Sequelize.VIRTUAL(DataTypes.STRING, ["city", "street"]), + get() { + return `${this.getDataValue("city")}, ${this.getDataValue("street")}`; } }, - { - // options + post: { + type: Sequelize.VIRTUAL(DataTypes.STRING, ["postCode", "postOffice"]), + get() { + const { postOffice, city, postCode } = this; + const postLocation = postOffice === city ? city : postOffice; + return `${postCode} ${postLocation}`; + } } - ); + }, + { + // options + } +); -module.exports = School; \ No newline at end of file +module.exports = School; diff --git a/src/test/factories/schoolTypeFactory.js b/src/test/factories/schoolTypeFactory.js index 8466e15..6d9b20e 100644 --- a/src/test/factories/schoolTypeFactory.js +++ b/src/test/factories/schoolTypeFactory.js @@ -6,9 +6,9 @@ const schoolTypeData = () => { return faker.random.arrayElement(schoolTypeList); }; -const schoolTypeFixture = async name =>{ +const schoolTypeFixture = async name => { return await SchoolType.create({ name: name || schoolTypeData() }); -} +}; module.exports = schoolTypeFixture; module.exports.schoolTypeData = schoolTypeData; diff --git a/src/test/models/school_type_model.test.js b/src/test/models/school_type_model.test.js index c6a397b..d5e8a27 100644 --- a/src/test/models/school_type_model.test.js +++ b/src/test/models/school_type_model.test.js @@ -13,8 +13,8 @@ describe("SchoolType model", () => { }); afterAll(async () => { - await SchoolType.drop() - }) + await SchoolType.drop(); + }); it("should be created", async () => { const schoolType = await sequelize diff --git a/src/test/truncate.js b/src/test/truncate.js index 3dd1f93..d2d366e 100644 --- a/src/test/truncate.js +++ b/src/test/truncate.js @@ -1,10 +1,7 @@ module.exports = async function truncate(models) { - if (models instanceof Array){ - models.map( - model => model.destroy({ where: {}, force: true }) - ); - } - else { + if (models instanceof Array) { + models.map(model => model.destroy({ where: {}, force: true })); + } else { models.destroy({ where: {}, force: true }); } }; From d07986fdab7ac14286251d68e15e22c530447a74 Mon Sep 17 00:00:00 2001 From: Maciej Matuszczak Date: Fri, 14 Feb 2020 19:29:08 +0100 Subject: [PATCH 08/12] [#121] cross-env for jest --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 67edef8..958f54e 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "electron:dev": "MODE=dev electron .", "start": "concurrently \"cross-env BROWSER=none npm run webpack:dev\" \"wait-on http://localhost:9000 && npm run electron:dev\"", "build": "webpack --mode production && electron-builder --windows --linux", - "test": "MODE=dev jest", + "test": "cross-env MODE=dev jest", "rebuild": "electron-rebuild -f -w sqlite3", "apply_school_types": "node src/test/fixtures/apply_school_types.js", "apply_schools": "node src/test/fixtures/apply_schools.js", From cac2bd30e23d2f2d4835802afc120e4b70ca7a15 Mon Sep 17 00:00:00 2001 From: Maciej Matuszczak Date: Mon, 17 Feb 2020 09:50:18 +0100 Subject: [PATCH 09/12] [#121] Added validation of postCode --- src/db/models/school.js | 8 +++++++- src/test/models/school_model.test.js | 21 +++++++++++++++------ 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/db/models/school.js b/src/db/models/school.js index caee5fc..3beaf86 100644 --- a/src/db/models/school.js +++ b/src/db/models/school.js @@ -22,7 +22,13 @@ const School = sequelize.define( }, postCode: { type: Sequelize.STRING(6), - allowNull: false + allowNull: false, + validate: { + isValidaPolishPostCode(value) { + const regex = /^[0-9]{2}-[0-9]{3}$/; + if (!regex.test(value)) throw new Error("Invalid polish postal code"); + } + } }, postOffice: { type: Sequelize.STRING(80), diff --git a/src/test/models/school_model.test.js b/src/test/models/school_model.test.js index bc99ccf..63dd2bf 100644 --- a/src/test/models/school_model.test.js +++ b/src/test/models/school_model.test.js @@ -5,7 +5,7 @@ const { schoolData } = require("../factories/schoolFactory"); const { School } = require("../../db/models"); describe("School model", () => { - beforeAll(() => { + beforeEach(() => { return sequelize .sync({ force: true }) .then(() => schoolTypeFactory("mock")); @@ -22,11 +22,20 @@ describe("School model", () => { expect(school.name).toEqual("TEST"); }); - // it("should validate `postCode`", () => { - // const school = await sequelize - // .sync({ force: true }) - // .then(() => schoolFactory({ name: "TEST", type: "przedszkole" })); - // }) + it("should validate `postCode`", async () => { + const school = await sequelize + .sync({ force: true }) + .then(() => + schoolFactory({ + type: "mock", + postCode: "invalid code", + SchoolTypeName: "mock" + }) + ) + .catch(err => err.message); + + expect(school).toEqual("Validation error: Invalid polish postal code"); + }); describe("has virtual methods which", () => { it("return concatenated address data by calling `address`", async () => { From 5146bba21d46cbcc4787fe21ca822406aad997f4 Mon Sep 17 00:00:00 2001 From: Maciej Matuszczak Date: Wed, 4 Mar 2020 18:57:14 +0100 Subject: [PATCH 10/12] [#121] Temporary test solution --- src/test/fixtures/apply_schools.js | 4 ++-- src/test/models/school_model.test.js | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/test/fixtures/apply_schools.js b/src/test/fixtures/apply_schools.js index dff943b..9643da7 100644 --- a/src/test/fixtures/apply_schools.js +++ b/src/test/fixtures/apply_schools.js @@ -1,8 +1,8 @@ const { createSchool } = require("../../db/api"); const { schoolData } = require("../factories/schoolFactory"); -const insertSchool = () => { - Array(10) +const insertSchool = numberOfSchools => { + Array(numberOfSchools || 10) .fill(0) .forEach(() => createSchool(schoolData())); }; diff --git a/src/test/models/school_model.test.js b/src/test/models/school_model.test.js index 63dd2bf..f8fd4a3 100644 --- a/src/test/models/school_model.test.js +++ b/src/test/models/school_model.test.js @@ -5,7 +5,15 @@ const { schoolData } = require("../factories/schoolFactory"); const { School } = require("../../db/models"); describe("School model", () => { + beforeAll(() => { + return sequelize + .sync({ force: true }) + .then(() => schoolTypeFactory("mock")); + }); + beforeEach(() => { + // I know, this is the same as code in `beforeAll` but + // this is temporary solution until problem with creating DB in tests should be resolved return sequelize .sync({ force: true }) .then(() => schoolTypeFactory("mock")); From e0b02f99318f696298baaf6472b02eae2e466f45 Mon Sep 17 00:00:00 2001 From: Maciej Matuszczak Date: Wed, 4 Mar 2020 19:01:46 +0100 Subject: [PATCH 11/12] Fixed typo --- src/db/models/school.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/db/models/school.js b/src/db/models/school.js index 3beaf86..a18ca7d 100644 --- a/src/db/models/school.js +++ b/src/db/models/school.js @@ -24,7 +24,7 @@ const School = sequelize.define( type: Sequelize.STRING(6), allowNull: false, validate: { - isValidaPolishPostCode(value) { + isValidPolishPostCode(value) { const regex = /^[0-9]{2}-[0-9]{3}$/; if (!regex.test(value)) throw new Error("Invalid polish postal code"); } From d99e915b5d5830fc228a61abaef01d004ff619e2 Mon Sep 17 00:00:00 2001 From: Maciej Matuszczak Date: Wed, 4 Mar 2020 19:55:23 +0100 Subject: [PATCH 12/12] Post review changes --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b37b76a..a4521e4 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "react-final-form": "^6.3.3", "react-final-form-arrays": "^3.1.1", "sequelize": "5.21.2", - "sqlite3": "^4.1.0" + "sqlite3": "4.1.0" }, "devDependencies": { "@babel/cli": "^7.5.5",