From ab480483e885308777bd6ff3c4387d96fbb1efc8 Mon Sep 17 00:00:00 2001
From: Samuel Colvin
Date: Fri, 3 Mar 2017 14:03:38 +0000
Subject: [PATCH 01/11] starting enquiry form
---
src/components/con-details.vue | 41 --------------------
src/components/enquiry.vue | 17 ++++++++
src/components/modal.vue | 71 +++++++++++++++++++++++++++-------
test/unit/specs/modal.js | 2 +-
4 files changed, 76 insertions(+), 55 deletions(-)
create mode 100644 src/components/enquiry.vue
diff --git a/src/components/con-details.vue b/src/components/con-details.vue
index 05e099f7..4dc7176e 100644
--- a/src/components/con-details.vue
+++ b/src/components/con-details.vue
@@ -1,20 +1,5 @@
-
-
+
+
-
-
+
+
Date: Mon, 6 Mar 2017 11:51:08 +0000
Subject: [PATCH 03/11] fixing tests
---
src/main.js | 6 ++---
test/unit/index.js | 2 +-
test/unit/specs/main.js | 2 ++
test/unit/specs/modal.js | 48 +++++++++++++++-------------------------
4 files changed, 24 insertions(+), 34 deletions(-)
diff --git a/src/main.js b/src/main.js
index 4b1e6706..6ec01aa2 100644
--- a/src/main.js
+++ b/src/main.js
@@ -160,9 +160,9 @@ response text: "${xhr.responseText}"`)
}
xhr.send()
},
- get_text: function (key, replace_with) {
- let s = this.config[key]
- for (let [k, v] of Object.entries(replace_with)) {
+ get_text: function (name, replacements) {
+ let s = this.config[name]
+ for (let [k, v] of Object.entries(replacements)) {
s = s.replace('{' + k + '}', v)
}
return s
diff --git a/test/unit/index.js b/test/unit/index.js
index 3584c4c5..2127fb17 100644
--- a/test/unit/index.js
+++ b/test/unit/index.js
@@ -2,7 +2,7 @@
/* eslint-disable no-extend-native */
Function.prototype.bind = require('function-bind')
-// require all test files (files that ends with .spec.js)
+// const testsContext = require.context('./specs', true, /main\.js$/)
const testsContext = require.context('./specs', true)
testsContext.keys().forEach(testsContext)
diff --git a/test/unit/specs/main.js b/test/unit/specs/main.js
index ecc51029..abab0c7e 100644
--- a/test/unit/specs/main.js
+++ b/test/unit/specs/main.js
@@ -1,6 +1,7 @@
import socket from 'src/main'
const dft_response = [200, {'Content-Type': 'application/json'}, '[{"name": "Foobars", "link": "foobar"}]']
+const blank_response = [200, {'Content-Type': 'application/json'}, '{}']
describe('main.js', done => {
let server
@@ -40,6 +41,7 @@ describe('main.js', () => {
server = sinon.fakeServer.create()
server.autoRespond = true
server.respondWith('/public_key/contractors', dft_response)
+ server.respondWith('/public_key/enquiry', blank_response)
})
after(() => { server.restore() })
diff --git a/test/unit/specs/modal.js b/test/unit/specs/modal.js
index 8e9b5dc0..2d6e1a71 100644
--- a/test/unit/specs/modal.js
+++ b/test/unit/specs/modal.js
@@ -8,6 +8,18 @@ const vm_data = {
contractors_extra: {'fred-bloggs': {'extra_attributes': [{'name': 'Bio', 'value': 'I am great'}]}},
}
+const generate_vm = (router, vm_data_) => new Vue({
+ el: document.createElement('div'),
+ router: router,
+ render: h => h('router-view'),
+ data: vm_data_ || vm_data,
+ methods: {
+ get_details: () => null,
+ get_enquiry: () => null,
+ get_text: (name, replacements) => null,
+ }
+})
+
describe('modal.vue', () => {
it('should render contractor details', done => {
Vue.use(VueRouter)
@@ -15,13 +27,7 @@ describe('modal.vue', () => {
{path: '/', name: 'index', component: {render: h => h('div')}},
{path: '/:link', name: 'modal', component: modal},
]})
- const vm = new Vue({
- el: document.createElement('div'),
- router: router,
- render: h => h('router-view'),
- data: vm_data,
- methods: {get_details: function (url, link) {}}
- })
+ const vm = generate_vm(router)
router.push({name: 'modal', params: {link: 'fred-bloggs'}})
Vue.nextTick(() => {
expect(vm.$el.querySelector('h2').textContent).to.equal('Fred Bloggs')
@@ -34,22 +40,16 @@ describe('modal.vue', () => {
})
describe('modal.vue', () => {
- it('should closes on tcs-modal-mask', done => {
+ it('should close on tcs-modal-mask', done => {
Vue.use(VueRouter)
const router = new VueRouter({routes: [
{path: '/', name: 'index', component: {render: h => h('div', {attrs: {'class': 'index'}})}},
{path: '/:link', name: 'modal', component: modal},
]})
- const vm = new Vue({
- el: document.createElement('div'),
- router: router,
- render: h => h('router-view'),
- data: vm_data,
- methods: {get_details: function (url, link) {}}
- })
+ const vm = generate_vm(router)
router.push({name: 'modal', params: {link: 'fred-bloggs'}})
Vue.nextTick(() => {
- expect(vm.$el.attributes['class'].value).to.equal('tcs-modal-mask')
+ expect(vm.$el.attributes['class'].value).to.contain('tcs-modal-mask')
// this is clicking the background
vm.$el.click()
Vue.nextTick(() => {
@@ -89,13 +89,7 @@ describe('modal.vue', () => {
}
}
- const vm = new Vue({
- el: document.createElement('div'),
- router: router,
- render: h => h('router-view'),
- data: _vm_data,
- methods: {get_details: function (url, link) {}}
- })
+ const vm = generate_vm(router, _vm_data)
router.push({name: 'modal', params: {link: 'fred-bloggs'}})
Vue.nextTick(() => {
expect(vm.$el.querySelector('h2').textContent).to.equal('Fred Bloggs')
@@ -129,13 +123,7 @@ describe('modal.vue', () => {
}
}
- const vm = new Vue({
- el: document.createElement('div'),
- router: router,
- render: h => h('router-view'),
- data: _vm_data,
- methods: {get_details: function (url, link) {}}
- })
+ const vm = generate_vm(router, _vm_data)
router.push({name: 'modal', params: {link: 'fred-bloggs'}})
Vue.nextTick(() => {
expect(vm.$el.querySelector('h2').textContent).to.equal('Fred Bloggs')
From be7eac36322c0afb83464741f981763ac2d27da2 Mon Sep 17 00:00:00 2001
From: Samuel Colvin
Date: Mon, 6 Mar 2017 12:30:40 +0000
Subject: [PATCH 04/11] cleanup tests
---
src/main.js | 6 +++++-
test/unit/specs/main.js | 35 +++++++++++++++++++++++++++++------
2 files changed, 34 insertions(+), 7 deletions(-)
diff --git a/src/main.js b/src/main.js
index 6ec01aa2..29388d06 100644
--- a/src/main.js
+++ b/src/main.js
@@ -64,6 +64,10 @@ module.exports = function (public_key, config) {
config.contact_link = '/contact'
}
+ if (config.console === undefined) {
+ config.console = console
+ }
+
for (let k of Object.keys(STRINGS)) {
if (config[k] === undefined) {
config[k] = STRINGS[k]
@@ -89,7 +93,7 @@ module.exports = function (public_key, config) {
// get_data is called by components, eg. grid
handle_error: function (error_message) {
this.error = error_message || 'unknown'
- console.error(this.error)
+ config.console.error(this.error)
Raven.captureException(new Error(this.error))
},
get_list: function () {
diff --git a/test/unit/specs/main.js b/test/unit/specs/main.js
index abab0c7e..a7e08a8f 100644
--- a/test/unit/specs/main.js
+++ b/test/unit/specs/main.js
@@ -1,7 +1,24 @@
import socket from 'src/main'
const dft_response = [200, {'Content-Type': 'application/json'}, '[{"name": "Foobars", "link": "foobar"}]']
-const blank_response = [200, {'Content-Type': 'application/json'}, '{}']
+
+class TestConsole {
+ log_ = []
+ warning_ = []
+ error_ = []
+
+ log () {
+ this.log_.push(Array.from(arguments).join())
+ }
+
+ warning () {
+ this.warning_.push(Array.from(arguments).join())
+ }
+
+ error () {
+ this.error_.push(Array.from(arguments).join())
+ }
+}
describe('main.js', done => {
let server
@@ -23,9 +40,9 @@ describe('main.js', done => {
const vm = socket('public_key', {
element: '#foobar'
})
-
+ vm.enquiry_info = 'foobar' // prevent get_enquiry making a GET request
expect(vm.$el.parentNode.attributes['id'].value).to.equal('outer')
- // no time for get_data to be called so wont fail
+ // no time for get_data to be called so should be empty
expect(vm.contractors).to.be.empty
setTimeout(() => {
@@ -41,7 +58,6 @@ describe('main.js', () => {
server = sinon.fakeServer.create()
server.autoRespond = true
server.respondWith('/public_key/contractors', dft_response)
- server.respondWith('/public_key/enquiry', blank_response)
})
after(() => { server.restore() })
@@ -51,6 +67,7 @@ describe('main.js', () => {
document.body.appendChild(el)
const vm = socket('public_key')
+ vm.enquiry_info = 'foobar' // prevent get_enquiry making a GET request
setTimeout(() => {
expect(vm.error).to.equal(null)
@@ -74,7 +91,8 @@ describe('main.js', () => {
el.setAttribute('id', 'socket')
document.body.appendChild(el)
- const vm = socket('public_key')
+ let test_console = new TestConsole()
+ const vm = socket('public_key', {console: test_console})
setTimeout(() => {
!expect(vm.error).to.not.equal(null)
@@ -82,6 +100,9 @@ describe('main.js', () => {
expect(vm.error).to.contain('response status: 404')
expect(vm.error).to.contain('response text:\nbadness')
expect(vm.error).to.not.contain('Connection error')
+ expect(test_console.log_).to.have.lengthOf(0)
+ expect(test_console.warning_).to.have.lengthOf(0)
+ expect(test_console.error_).to.have.lengthOf(1)
done()
}, 50)
})
@@ -93,11 +114,13 @@ describe('main.js', () => {
el.setAttribute('id', 'socket')
document.body.appendChild(el)
- const vm = socket('the-public-key', {api_root: 'http://localhost:12345678'})
+ let test_console = new TestConsole()
+ const vm = socket('the-public-key', {api_root: 'http://localhost:12345678', console: test_console})
setTimeout(() => {
expect(vm.error).to.contain('Connection error')
expect(vm.error).to.contain('response status: 0')
+ expect(test_console.error_).to.have.lengthOf(1)
done()
}, 50)
})
From 1a710af94b9422747e089884c4674b68ebba8908 Mon Sep 17 00:00:00 2001
From: Samuel Colvin
Date: Mon, 6 Mar 2017 13:01:42 +0000
Subject: [PATCH 05/11] adding tests for converting text and getting enquiry
info
---
src/main.js | 2 +-
test/unit/specs/main.js | 51 ++++++++++++++++++++++++++++++++++++++++-
2 files changed, 51 insertions(+), 2 deletions(-)
diff --git a/src/main.js b/src/main.js
index 29388d06..ffffa86c 100644
--- a/src/main.js
+++ b/src/main.js
@@ -166,7 +166,7 @@ response text: "${xhr.responseText}"`)
},
get_text: function (name, replacements) {
let s = this.config[name]
- for (let [k, v] of Object.entries(replacements)) {
+ for (let [k, v] of Object.entries(replacements || {})) {
s = s.replace('{' + k + '}', v)
}
return s
diff --git a/test/unit/specs/main.js b/test/unit/specs/main.js
index a7e08a8f..add856d0 100644
--- a/test/unit/specs/main.js
+++ b/test/unit/specs/main.js
@@ -95,7 +95,7 @@ describe('main.js', () => {
const vm = socket('public_key', {console: test_console})
setTimeout(() => {
- !expect(vm.error).to.not.equal(null)
+ expect(vm.error).to.not.equal(null)
expect(vm.error).to.contain('Error: bad response 404')
expect(vm.error).to.contain('response status: 404')
expect(vm.error).to.contain('response text:\nbadness')
@@ -125,3 +125,52 @@ describe('main.js', () => {
}, 50)
})
})
+
+describe('main.js', () => {
+ let server
+ before(() => {
+ server = sinon.fakeServer.create()
+ server.autoRespond = true
+ server.respondWith(dft_response)
+ })
+ after(() => { server.restore() })
+
+ it('should convert text', () => {
+ let el = document.createElement('div')
+ el.setAttribute('id', 'socket')
+ document.body.appendChild(el)
+
+ const vm = socket('public-key', {contractor_enquiry_button: 'Speak to {contractor_name}'})
+ vm.enquiry_info = 'x' // prevent get_enquiry making a GET request
+ let text = vm.get_text('skills_label')
+ expect(text).to.equal('Skills')
+ text = vm.get_text('contractor_enquiry_button', {'contractor_name': 'foobar'})
+ expect(text).to.equal('Speak to foobar')
+ })
+})
+
+
+describe('main.js', () => {
+ let server
+ before(() => {
+ server = sinon.fakeServer.create()
+ server.autoRespond = true
+ server.respondWith('/public-key/contractors', dft_response)
+ server.respondWith('/public-key/enquiry', [200, {'Content-Type': 'application/json'}, '{"response": "ok"}'])
+ })
+ after(() => { server.restore() })
+
+ it('should get enquiry info', done => {
+ let el = document.createElement('div')
+ el.setAttribute('id', 'socket')
+ document.body.appendChild(el)
+
+ const vm = socket('public-key', {contractor_enquiry_button: 'Speak to {contractor_name}'})
+ vm.get_enquiry()
+
+ setTimeout(() => {
+ expect(vm.enquiry_info).to.deep.equal({response: 'ok'})
+ done()
+ }, 50)
+ })
+})
From cdcc41c983aa28a79d31c2ea63458520a939bf50 Mon Sep 17 00:00:00 2001
From: Samuel Colvin
Date: Mon, 6 Mar 2017 13:07:28 +0000
Subject: [PATCH 06/11] fix linting
---
src/components/enquiry.vue | 17 ++++++++++++++---
test/unit/specs/main.js | 1 -
2 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/src/components/enquiry.vue b/src/components/enquiry.vue
index 377a0e32..1c7d9b5c 100644
--- a/src/components/enquiry.vue
+++ b/src/components/enquiry.vue
@@ -5,12 +5,23 @@