From 9c719d9158ab059507aa7e4fbbd907325088c79f Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Sat, 18 Aug 2018 08:48:05 +0100 Subject: [PATCH] added some simple tests --- .eslintrc | 21 ------ .eslintrc.json | 53 +++++++++++++++ exercises/01_tdd_nodejs/books/package.json | 2 +- .../01_tdd_nodejs/todo/__tests__/todo.test.js | 68 +++++++++++++++++++ exercises/01_tdd_nodejs/todo/index.js | 30 ++++++++ exercises/01_tdd_nodejs/todo/modules/todo.js | 15 ++++ exercises/01_tdd_nodejs/todo/package.json | 25 +++++++ .../01_tdd_nodejs/todo/views/home.handlebars | 7 ++ .../todo/views/layouts/main.handlebars | 10 +++ 9 files changed, 209 insertions(+), 22 deletions(-) delete mode 100644 .eslintrc create mode 100644 .eslintrc.json create mode 100644 exercises/01_tdd_nodejs/todo/__tests__/todo.test.js create mode 100644 exercises/01_tdd_nodejs/todo/index.js create mode 100644 exercises/01_tdd_nodejs/todo/modules/todo.js create mode 100644 exercises/01_tdd_nodejs/todo/package.json create mode 100644 exercises/01_tdd_nodejs/todo/views/home.handlebars create mode 100644 exercises/01_tdd_nodejs/todo/views/layouts/main.handlebars diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index a13f05a..0000000 --- a/.eslintrc +++ /dev/null @@ -1,21 +0,0 @@ -{ - "parserOptions": { - "ecmaVersion": 6 - }, - "env": { - "browser": 1 - }, - - "globals": { - "angular": 1 - }, - - "rules": { - "indent": [2, "tab"], - "quotes": [2, "single"], - "semi": [1, "never"], - "camelcase": 1, - "comma-spacing": [1, {"before": false, "after": true}], - "no-mixed-spaces-and-tabs": [2, "smart-tabs"] - } -} diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..a8ca622 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,53 @@ + +{ + "env": { + "es6": true, + "jasmine": true, + "node": true, + "browser": true, + "jest": true + }, + "parserOptions": { + "ecmaVersion": 8 + }, + "rules": { + "arrow-body-style": 2, + "arrow-spacing": [1, {"before": true, "after": true}], + "brace-style": 2, + "camelcase": [2, {"properties": "never"}], + "eol-last": 1, + "eqeqeq": 2, + "global-require": 2, + "handle-callback-err": 2, + "indent": [1, "tab", {"SwitchCase": 1}], + "key-spacing": ["error", {"beforeColon": false, "afterColon": true}], + "linebreak-style": [2, "unix"], + "no-cond-assign": 2, + "no-dupe-args": 2, + "no-dupe-keys": 2, + "no-duplicate-case": 2, + "no-empty": 1, + "no-empty-function": 2, + "no-multiple-empty-lines": 1, + "no-extra-parens": 2, + "no-func-assign": 2, + "no-irregular-whitespace": 2, + "no-magic-numbers": [1, {"ignore": [-1, 0, 1]}], + "no-multi-spaces": 1, + "no-multi-str": 1, + "no-unexpected-multiline": 2, + "no-unreachable": 2, + "no-self-assign": 2, + "no-trailing-spaces": 1, + "no-undef": 2, + "no-unused-vars": 1, + "no-var": 2, + "prefer-arrow-callback": 1, + "prefer-const": 2, + "quotes": [1, "single"], + "semi": [1, "never"], + "space-before-function-paren": [2, "never"], + "strict": [2, "global"], + "yoda": 2 + } +} diff --git a/exercises/01_tdd_nodejs/books/package.json b/exercises/01_tdd_nodejs/books/package.json index 0f6255a..a6f78d7 100644 --- a/exercises/01_tdd_nodejs/books/package.json +++ b/exercises/01_tdd_nodejs/books/package.json @@ -4,7 +4,7 @@ "description": "Simple dynamic website that uses the Google Books API", "main": "index.js", "scripts": { - "tests": "jest", + "test": "jest", "watch": "node_modules/.bin/jest --coverage --watchAll", "coverage": "node_modules/.bin/jest --coverage", "jsdoc": "node_modules/.bin/jsdoc -d docs/jsdoc/ modules/" diff --git a/exercises/01_tdd_nodejs/todo/__tests__/todo.test.js b/exercises/01_tdd_nodejs/todo/__tests__/todo.test.js new file mode 100644 index 0000000..88edd6a --- /dev/null +++ b/exercises/01_tdd_nodejs/todo/__tests__/todo.test.js @@ -0,0 +1,68 @@ + +'use strict' + +/* eslint-disable no-magic-numbers */ + +const todo = require('../modules/todo') + +describe('add', () => { + + beforeEach( () => todo.add('bread', 1)) + afterEach( () => todo.clear()) + + test('check there is a single item', done => { + expect.assertions(1) + const items = todo.getAll() + expect(items.length).toBe(1) + done() + }) + +}) + +describe('clear', () => { + + test('clear list with items', done => { + expect.assertions(1) + todo.add('bread', 1) + todo.add('butter', 2) + todo.clear() + const items = todo.getAll() + expect(items.length).toBe(0) + done() + }) + + test('clearing empty list should throw error', () => { + expect.assertions(1) + try { + todo.clear() + } catch(err) { + expect(err.message).toBe('trying to clear empty list') + } + }) + +}) + +describe('add', () => { + + afterEach( () => todo.clear()) + + test('adding a single item', () => { + expect.assertions(1) + todo.add('bread', 1) + const items = todo.getAll() + expect(items.length).toBe(1) + }) + +}) + +describe('getAll', () => { + + test('retrieving a single item', () => { + expect.assertions(2) + todo.add('bread', 1) + const items = todo.getAll() + expect(Array.isArray(items)).toBeTruthy() + expect(items.length).toBe(1) + }) + +}) diff --git a/exercises/01_tdd_nodejs/todo/index.js b/exercises/01_tdd_nodejs/todo/index.js new file mode 100644 index 0000000..0943453 --- /dev/null +++ b/exercises/01_tdd_nodejs/todo/index.js @@ -0,0 +1,30 @@ +#!/usr/bin/env node + +'use strict' + +const express = require('express') + +const handlebars = require('express3-handlebars').create({defaultLayout: 'main'}) +const bodyParser = require('body-parser') +const app = express() +app.use(express.static('public')) +app.use(bodyParser.urlencoded({ extended: true })) + +app.engine('handlebars', handlebars.engine) +app.set('view engine', 'handlebars') + +const port = 8080 + +const todo = require('./modules/todo') + +app.get('/', async(req, res) => { + try { + todo.add('bread', 1) + const data = todo.getAll() + res.render('home', {items: data}) + } catch(err) { + console.log(err.message) + } +}) + +app.listen(port, () => console.log(`app listening on port ${port}`)) \ No newline at end of file diff --git a/exercises/01_tdd_nodejs/todo/modules/todo.js b/exercises/01_tdd_nodejs/todo/modules/todo.js new file mode 100644 index 0000000..ac572ce --- /dev/null +++ b/exercises/01_tdd_nodejs/todo/modules/todo.js @@ -0,0 +1,15 @@ + +'use strict' + +let data = [] + +module.exports.clear = () => { + if(data.length === 0) throw new Error('trying to clear empty list') + data = [] +} + +module.exports.add = (item, qty = 1) => { + data.push({item: item, qty: qty}) +} + +module.exports.getAll = () => data diff --git a/exercises/01_tdd_nodejs/todo/package.json b/exercises/01_tdd_nodejs/todo/package.json new file mode 100644 index 0000000..e9a3394 --- /dev/null +++ b/exercises/01_tdd_nodejs/todo/package.json @@ -0,0 +1,25 @@ +{ + "name": "todo", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "jest", + "watch": "node_modules/.bin/jest --coverage --watchAll", + "coverage": "node_modules/.bin/jest --coverage" + }, + "jest": { + "testEnvironment": "node", + "verbose": true + }, + "author": "", + "license": "ISC", + "devDependencies": { + "eslint": "^5.3.0", + "jest": "^23.5.0" + }, + "dependencies": { + "express": "^4.16.3", + "express3-handlebars": "^0.5.2" + } +} diff --git a/exercises/01_tdd_nodejs/todo/views/home.handlebars b/exercises/01_tdd_nodejs/todo/views/home.handlebars new file mode 100644 index 0000000..cd175cc --- /dev/null +++ b/exercises/01_tdd_nodejs/todo/views/home.handlebars @@ -0,0 +1,7 @@ + +

My List

+ + {{#each items}} + + {{/each}} +
{{this.item}}{{this.qty}}
diff --git a/exercises/01_tdd_nodejs/todo/views/layouts/main.handlebars b/exercises/01_tdd_nodejs/todo/views/layouts/main.handlebars new file mode 100644 index 0000000..59c5f32 --- /dev/null +++ b/exercises/01_tdd_nodejs/todo/views/layouts/main.handlebars @@ -0,0 +1,10 @@ + + + + + Onlne Bookshop + + + {{{body}}} + +