From a87e4bb5e44cc2a257da00546ca91069f686aa98 Mon Sep 17 00:00:00 2001 From: Russia Madden Date: Wed, 21 Jan 2015 16:16:47 -0800 Subject: [PATCH 1/7] WIP create datasource, model, middleware and test --- neukinnis/package.json | 29 +++++++++++---------- neukinnis/server/datasources.json | 13 +++++++++ neukinnis/server/middleware.json | 8 ------ neukinnis/server/model-config.json | 4 +++ neukinnis/spec/api/contact.spec.js | 3 +++ neukinnis/spec/api/learningResource.spec.js | 17 ++++++++++++ 6 files changed, 52 insertions(+), 22 deletions(-) create mode 100644 neukinnis/spec/api/contact.spec.js create mode 100644 neukinnis/spec/api/learningResource.spec.js diff --git a/neukinnis/package.json b/neukinnis/package.json index 3aa3915..78f7e15 100644 --- a/neukinnis/package.json +++ b/neukinnis/package.json @@ -6,26 +6,27 @@ "pretest": "jshint ." }, "dependencies": { - "loopback": "^2.8.0", - "loopback-boot": "^2.4.0", - "loopback-datasource-juggler": "^2.7.0", - "compression": "^1.0.3", - "errorhandler": "^1.1.1", - "serve-favicon": "^2.2.0", "architect": "^0.1.11", - "morgan": "^1.5.0", "body-parser": "^1.10.0", - "cookie-parser": "^1.3.3", - "method-override": "^2.3.0", - "express-session": "^1.9.3", + "compression": "^1.0.3", "connect-timeout": "^1.4.0", - "csurf": "^1.6.3", + "cookie-parser": "^1.3.3", "cookie-session": "^1.1.0", - "response-time": "^2.2.0", - "vhost": "^3.0.0", + "csurf": "^1.6.3", + "debug": "^2.1.0", + "errorhandler": "^1.1.1", + "express-session": "^1.9.3", + "loopback": "^2.8.0", + "loopback-boot": "^2.4.0", + "loopback-connector-mongodb": "^1.5.0", + "loopback-datasource-juggler": "^2.7.0", + "method-override": "^2.3.0", + "morgan": "^1.5.0", "parted": "^0.1.1", + "response-time": "^2.2.0", + "serve-favicon": "^2.2.0", "serve-static": "^1.7.1", - "debug": "^2.1.0" + "vhost": "^3.0.0" }, "optionalDependencies": { "loopback-explorer": "^1.1.0" diff --git a/neukinnis/server/datasources.json b/neukinnis/server/datasources.json index d6caf56..a8c6e2f 100644 --- a/neukinnis/server/datasources.json +++ b/neukinnis/server/datasources.json @@ -2,5 +2,18 @@ "db": { "name": "db", "connector": "memory" + }, + "yes": { + "name": "yes", + "connector": "mongodb" + }, + "fullstack": { + "host": "localhost", + "port": 27017, + "database": "test", + "username": "tester", + "password": "tester", + "name": "fullstack", + "connector": "mongodb" } } diff --git a/neukinnis/server/middleware.json b/neukinnis/server/middleware.json index 88b67ae..7de76f4 100644 --- a/neukinnis/server/middleware.json +++ b/neukinnis/server/middleware.json @@ -30,14 +30,6 @@ "loopback#token": {} }, "parse": { - "parted": { - "params": { - "path": "$!../uploads", - "limit": 30720, - "diskLimit": 31457280, - "stream": false - } - } }, "routes": { "loopback#status": { diff --git a/neukinnis/server/model-config.json b/neukinnis/server/model-config.json index 6b39153..43c9f69 100644 --- a/neukinnis/server/model-config.json +++ b/neukinnis/server/model-config.json @@ -25,5 +25,9 @@ "Role": { "dataSource": "db", "public": false + }, + "learningResource": { + "dataSource": "fullstack", + "public": true } } diff --git a/neukinnis/spec/api/contact.spec.js b/neukinnis/spec/api/contact.spec.js new file mode 100644 index 0000000..10ac94a --- /dev/null +++ b/neukinnis/spec/api/contact.spec.js @@ -0,0 +1,3 @@ +/** + * Created by russia on 1/18/15. + */ diff --git a/neukinnis/spec/api/learningResource.spec.js b/neukinnis/spec/api/learningResource.spec.js new file mode 100644 index 0000000..c1e6724 --- /dev/null +++ b/neukinnis/spec/api/learningResource.spec.js @@ -0,0 +1,17 @@ +/** + * Created by russia on 1/18/15. + */ + +var frisby = require('frisby'); +frisby.create('Create learningResource with post') + .post('http://localhost:3000/api/learningResources', + { + "name": "test person" + }, + {json: true}) + .expectStatus(200) + .toss(); + +/* jshint quotmark:false */ + + From 1073a8cab4322394accc5a55d134dfd1ea95b4a8 Mon Sep 17 00:00:00 2001 From: Russia Madden Date: Fri, 23 Jan 2015 12:42:22 -0800 Subject: [PATCH 2/7] Update mode file names --- neukinnis/common/models/learningResource.js | 2 ++ neukinnis/common/models/learningResource.json | 24 +++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 neukinnis/common/models/learningResource.js create mode 100644 neukinnis/common/models/learningResource.json diff --git a/neukinnis/common/models/learningResource.js b/neukinnis/common/models/learningResource.js new file mode 100644 index 0000000..d6bad7f --- /dev/null +++ b/neukinnis/common/models/learningResource.js @@ -0,0 +1,2 @@ +module.exports = function(LearningResource) { +}; diff --git a/neukinnis/common/models/learningResource.json b/neukinnis/common/models/learningResource.json new file mode 100644 index 0000000..30b2b42 --- /dev/null +++ b/neukinnis/common/models/learningResource.json @@ -0,0 +1,24 @@ +{ + "name": "learningResource", + "base": "PersistedModel", + "idInjection": true, + "properties": { + "title": { + "type": "string", + "required": true + }, + "resourceType": { + "type":"string" + }, + "description": { + "type": "string" + }, + "authors":{ + "type": "string" + } +}, + "validations": [], + "relations": {}, + "acls": [], + "methods": [] +} From d89de1c05acbb8dd5235c9bdcc7c8baaeaa48274 Mon Sep 17 00:00:00 2001 From: Russia Madden Date: Fri, 23 Jan 2015 13:03:18 -0800 Subject: [PATCH 3/7] Moved folders from neukinnis dir up to top level --- {neukinnis/common => common}/models/learningResource.js | 0 {neukinnis/common => common}/models/learningResource.json | 0 {neukinnis/spec => spec}/api/contact.spec.js | 0 {neukinnis/spec => spec}/api/learningResource.spec.js | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename {neukinnis/common => common}/models/learningResource.js (100%) rename {neukinnis/common => common}/models/learningResource.json (100%) rename {neukinnis/spec => spec}/api/contact.spec.js (100%) rename {neukinnis/spec => spec}/api/learningResource.spec.js (100%) diff --git a/neukinnis/common/models/learningResource.js b/common/models/learningResource.js similarity index 100% rename from neukinnis/common/models/learningResource.js rename to common/models/learningResource.js diff --git a/neukinnis/common/models/learningResource.json b/common/models/learningResource.json similarity index 100% rename from neukinnis/common/models/learningResource.json rename to common/models/learningResource.json diff --git a/neukinnis/spec/api/contact.spec.js b/spec/api/contact.spec.js similarity index 100% rename from neukinnis/spec/api/contact.spec.js rename to spec/api/contact.spec.js diff --git a/neukinnis/spec/api/learningResource.spec.js b/spec/api/learningResource.spec.js similarity index 100% rename from neukinnis/spec/api/learningResource.spec.js rename to spec/api/learningResource.spec.js From eed3fabf523f078e76b5eccd3b9b155c270e0be6 Mon Sep 17 00:00:00 2001 From: Russia Madden Date: Fri, 23 Jan 2015 13:10:00 -0800 Subject: [PATCH 4/7] Exclude passwords from git --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 7a1537b..9774f0c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .idea node_modules +server/datasources.local.json From d6e1943288a76c628a85d83643d8f89079e1247d Mon Sep 17 00:00:00 2001 From: Russia Madden Date: Mon, 26 Jan 2015 13:26:43 -0800 Subject: [PATCH 5/7] Add Post, Get and Put tests to frisby spec --- spec/api/learningResource.spec.js | 67 +++++++++++++++++++++++++------ 1 file changed, 55 insertions(+), 12 deletions(-) diff --git a/spec/api/learningResource.spec.js b/spec/api/learningResource.spec.js index c1e6724..446af35 100644 --- a/spec/api/learningResource.spec.js +++ b/spec/api/learningResource.spec.js @@ -1,17 +1,60 @@ -/** - * Created by russia on 1/18/15. - */ -var frisby = require('frisby'); -frisby.create('Create learningResource with post') - .post('http://localhost:3000/api/learningResources', - { - "name": "test person" - }, - {json: true}) - .expectStatus(200) - .toss(); /* jshint quotmark:false */ +var frisby = require('frisby'); +var url = 'http://localhost:3000/api/learningResources/'; +var initialRecord = { + "title": "Javascript 101", + "resourceType": "Digital Textbook", + "description": "Interactive Textbook", + "authors": "John Doe" +}; + +var changedRecord = { + "title": "Mongo 101", + "resourceType": "Textbook", + "description": "Textbook", + "authors": "Jane Doe" +}; + +//Create a record with Post +function postRecord() { + frisby.create('Create learningResource with post') + .post(url, initialRecord, {json: true}) + //{"title": "Javascript 101"},{json: true}) + .expectStatus(200) + .expectHeaderContains('Content-Type', 'application/json') + .expectJSON(initialRecord) + .afterJSON(function(json) { + getRecord(json.id); + }) + .toss(); +} + +// Read Record with Get +function getRecord(id) { + frisby.create('Get learningResource using id') + .get(url + id) + .expectStatus(200) + .expectJSON(initialRecord) + .afterJSON(function(json) { + putRecord(json.id); + }) + .toss(); +} + +// Update Record with Put +function putRecord(id){ + frisby.create('Put learningResource using id') + .put(url + id, changedRecord, {json: true}) + .expectStatus(200) + .expectJSON(changedRecord) + .toss(); +} + +postRecord(); +//getRecord(); + + From 60268abf80dad055f749d426da09ef4ba7bf3f4e Mon Sep 17 00:00:00 2001 From: Russia Madden Date: Tue, 27 Jan 2015 13:21:16 -0800 Subject: [PATCH 6/7] Add validation to test and required fields to model --- common/models/learningResource.json | 9 +++++--- spec/api/learningResource.spec.js | 34 +++++++++++++++++++++++++++-- 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/common/models/learningResource.json b/common/models/learningResource.json index 30b2b42..02a7595 100644 --- a/common/models/learningResource.json +++ b/common/models/learningResource.json @@ -8,13 +8,16 @@ "required": true }, "resourceType": { - "type":"string" + "type":"string", + "required": true }, "description": { - "type": "string" + "type": "string", + "required": true }, "authors":{ - "type": "string" + "type": "string", + "required": true } }, "validations": [], diff --git a/spec/api/learningResource.spec.js b/spec/api/learningResource.spec.js index 446af35..cff2044 100644 --- a/spec/api/learningResource.spec.js +++ b/spec/api/learningResource.spec.js @@ -18,6 +18,10 @@ var changedRecord = { "authors": "Jane Doe" }; +var badRecord = { + // empty record +}; + //Create a record with Post function postRecord() { frisby.create('Create learningResource with post') @@ -53,8 +57,34 @@ function putRecord(id){ .toss(); } -postRecord(); -//getRecord(); +// Test Validation +function postBadRecord(){ + frisby.create('Enforce mandatory fields when creating') + .post(url, badRecord, {json: true}) + .expectStatus(422) + .expectHeaderContains('Content-Type', 'application/json') + .expectJSON({ + error: { + name: 'ValidationError', + details: { + codes: { + title: [ + 'presence' + ] + //, + //resourceType: [ + // 'presence' + //], + //description: [ + // 'presence' + //] + }}}}) + .toss(); +} +// Post a record that will return an error +postRecord(); +postBadRecord(badRecord); + From 0db9fe4c67c6f37b0e4e932a0da66bc49c2a718d Mon Sep 17 00:00:00 2001 From: Russia Madden Date: Tue, 27 Jan 2015 19:50:22 -0800 Subject: [PATCH 7/7] Add working validation section to test --- package.json | 13 +++++++------ server/datasources.json | 4 ++-- spec/api/learningResource.spec.js | 13 ++++++------- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index 38f1f8c..8fb7317 100644 --- a/package.json +++ b/package.json @@ -39,20 +39,21 @@ "loopback-explorer": "^1.1.0" }, "devDependencies": { + "casperjs": "^1.1.0-beta3", + "frisby": "^0.8.5", "gulp": "^3.8.10", - "jshint": "^2.5.6", - "strongloop": "^2.10.2", "gulp-develop-server": "^0.2.5", "gulp-jasmine": "^2.0.0", "gulp-jshint": "^1.9.0", "gulp-sequence": "^0.3.1", "gulp-util": "^3.0.2", + "jasmine-core": "^2.1.3", + "jasmine-jquery-matchers": "0.0.1", + "jshint": "^2.5.6", "karma": "^0.12.31", - "frisby": "git+https://github.com/vlucas/frisby.git", + "karma-browserify": "^2.0.0", "karma-chrome-launcher": "^0.1.7", "karma-jasmine": "^0.3.5", - "karma-browserify": "^2.0.0", - "jasmine-core": "^2.1.3", - "jasmine-jquery-matchers": "0.0.1" + "strongloop": "^2.10.2" } } diff --git a/server/datasources.json b/server/datasources.json index a8c6e2f..fd80320 100644 --- a/server/datasources.json +++ b/server/datasources.json @@ -5,7 +5,7 @@ }, "yes": { "name": "yes", - "connector": "mongodb" + "connector": "memory" }, "fullstack": { "host": "localhost", @@ -14,6 +14,6 @@ "username": "tester", "password": "tester", "name": "fullstack", - "connector": "mongodb" + "connector": "memory" } } diff --git a/spec/api/learningResource.spec.js b/spec/api/learningResource.spec.js index cff2044..481683c 100644 --- a/spec/api/learningResource.spec.js +++ b/spec/api/learningResource.spec.js @@ -70,14 +70,13 @@ function postBadRecord(){ codes: { title: [ 'presence' + ], + resourceType: [ + 'presence' + ], + description: [ + 'presence' ] - //, - //resourceType: [ - // 'presence' - //], - //description: [ - // 'presence' - //] }}}}) .toss(); }