Skip to content

Commit bdbc3cd

Browse files
committed
using promises and more tests
1 parent 872b41a commit bdbc3cd

File tree

5 files changed

+102
-99
lines changed

5 files changed

+102
-99
lines changed

src/main.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ response text: "${xhr.responseText}"`)
134134
},
135135
get_details: function (url, link) {
136136
if (this.contractors_extra[link] !== undefined) {
137-
return
137+
return false
138138
}
139139
let xhr = new window.XMLHttpRequest()
140140
xhr.open('GET', url)
@@ -147,6 +147,7 @@ response text: "${xhr.responseText}"`)
147147
}
148148
}
149149
xhr.send()
150+
return true
150151
},
151152
get_enquiry: function () {
152153
if (this.enquiry_form_info !== null) {

test/unit/specs/_shared.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,4 +70,8 @@ const generate_vm = (router, vm_data_) => {
7070
})
7171
}
7272

73-
export {dft_response, TestConsole, enquiry_options, vm_data, generate_vm}
73+
function tick () {
74+
return new Promise((resolve, reject) => Vue.nextTick(resolve))
75+
}
76+
77+
export {dft_response, TestConsole, enquiry_options, vm_data, generate_vm, tick}

test/unit/specs/con-details.js

Lines changed: 34 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,35 @@
1-
import Vue from 'vue'
2-
import {generate_vm} from './_shared'
1+
import {generate_vm, tick} from './_shared'
32

43
describe('modal.vue', () => {
5-
it('should close on tcs-modal-mask', done => {
4+
it('should close on tcs-modal-mask', async function () {
65
const vm = generate_vm()
76
vm.$router.push({name: 'modal', params: {link: 'fred-bloggs'}})
8-
Vue.nextTick(() => {
9-
expect(vm.$el.attributes['class'].value).to.contain('tcs-modal-mask')
10-
// this is clicking the background
11-
vm.$el.click()
12-
Vue.nextTick(() => {
13-
expect(vm.$el.attributes['class'].value).to.equal('index')
14-
done()
15-
})
16-
})
7+
8+
await tick()
9+
expect(vm.$el.attributes['class'].value).to.contain('tcs-modal-mask')
10+
// this is clicking the background
11+
vm.$el.click()
12+
13+
await tick()
14+
expect(vm.$el.attributes['class'].value).to.equal('index')
1715
})
1816
})
1917

2018
describe('con-details.vue', () => {
21-
it('should render contractor details', done => {
19+
it('should render contractor details', async function () {
2220
const vm = generate_vm()
2321
vm.$router.push({name: 'modal', params: {link: 'fred-bloggs'}})
24-
Vue.nextTick(() => {
25-
expect(vm.$el.querySelector('h2').textContent).to.equal('Fred Bloggs')
26-
expect(vm.$el.querySelector('.tcs-aside').textContent).to.equal('hello')
27-
expect(vm.$el.querySelector('.tcs-attr h3').textContent).to.equal('Bio')
28-
expect(vm.$el.querySelector('.tcs-attr p').textContent).to.equal('I am great')
29-
done()
30-
})
22+
23+
await tick()
24+
expect(vm.$el.querySelector('h2').textContent).to.equal('Fred Bloggs')
25+
expect(vm.$el.querySelector('.tcs-aside').textContent).to.equal('hello')
26+
expect(vm.$el.querySelector('.tcs-attr h3').textContent).to.equal('Bio')
27+
expect(vm.$el.querySelector('.tcs-attr p').textContent).to.equal('I am great')
3128
})
3229
})
3330

3431
describe('con-details.vue', () => {
35-
it('should render only five qual levels', done => {
32+
it('should render only five qual levels', async function () {
3633
const _vm_data = {
3734
contractors: [{name: 'Fred Bloggs', link: 'fred-bloggs', tag_line: 'hello'}],
3835
config: {},
@@ -57,23 +54,22 @@ describe('con-details.vue', () => {
5754

5855
const vm = generate_vm(null, _vm_data)
5956
vm.$router.push({name: 'modal', params: {link: 'fred-bloggs'}})
60-
Vue.nextTick(() => {
61-
expect(vm.$el.querySelector('h2').textContent).to.equal('Fred Bloggs')
62-
expect(vm.$el.querySelector('.tcs-skills').textContent).to.include('GCSE')
63-
expect(vm.$el.querySelector('.tcs-skills').textContent).to.include('AS Level')
64-
expect(vm.$el.querySelector('.tcs-skills').textContent).to.include('QL1')
65-
expect(vm.$el.querySelector('.tcs-skills').textContent).to.include('QL2')
66-
expect(vm.$el.querySelector('.tcs-skills').textContent).to.not.include('QL3')
67-
expect(vm.$el.querySelector('.tcs-skills').textContent).to.not.include('QL4')
68-
expect(vm.$el.querySelector('.tcs-skills').textContent).to.include('QL5')
69-
expect(vm.$el.querySelector('.tcs-skills').textContent).to.include('QL6')
70-
done()
71-
})
57+
58+
await tick()
59+
expect(vm.$el.querySelector('h2').textContent).to.equal('Fred Bloggs')
60+
expect(vm.$el.querySelector('.tcs-skills').textContent).to.include('GCSE')
61+
expect(vm.$el.querySelector('.tcs-skills').textContent).to.include('AS Level')
62+
expect(vm.$el.querySelector('.tcs-skills').textContent).to.include('QL1')
63+
expect(vm.$el.querySelector('.tcs-skills').textContent).to.include('QL2')
64+
expect(vm.$el.querySelector('.tcs-skills').textContent).to.not.include('QL3')
65+
expect(vm.$el.querySelector('.tcs-skills').textContent).to.not.include('QL4')
66+
expect(vm.$el.querySelector('.tcs-skills').textContent).to.include('QL5')
67+
expect(vm.$el.querySelector('.tcs-skills').textContent).to.include('QL6')
7268
})
7369
})
7470

7571
describe('con-details.vue', () => {
76-
it('should render markdown', done => {
72+
it('should render markdown', async function () {
7773
const _vm_data = {
7874
contractors: [{name: 'Fred Bloggs', link: 'fred-bloggs', tag_line: 'hello'}],
7975
config: {},
@@ -86,10 +82,9 @@ describe('con-details.vue', () => {
8682

8783
const vm = generate_vm(null, _vm_data)
8884
vm.$router.push({name: 'modal', params: {link: 'fred-bloggs'}})
89-
Vue.nextTick(() => {
90-
expect(vm.$el.querySelector('h2').textContent).to.equal('Fred Bloggs')
91-
expect(vm.$el.querySelector('.tcs-attr').innerHTML).to.include('I am <strong>great</strong>')
92-
done()
93-
})
85+
86+
await tick()
87+
expect(vm.$el.querySelector('h2').textContent).to.equal('Fred Bloggs')
88+
expect(vm.$el.querySelector('.tcs-attr').innerHTML).to.include('I am <strong>great</strong>')
9489
})
9590
})

test/unit/specs/enquiry.js

Lines changed: 37 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,50 @@
1-
import Vue from 'vue'
2-
import {generate_vm} from './_shared'
1+
import {generate_vm, tick} from './_shared'
32

43
describe('enquiry.vue', () => {
5-
it('should render contractor details then form', done => {
4+
it('should render contractor details then form', async function () {
65
const vm = generate_vm()
76
vm.$router.push({name: 'modal', params: {link: 'fred-bloggs'}})
8-
Vue.nextTick(() => {
9-
expect(vm.$el.querySelector('h2').textContent).to.equal('Fred Bloggs')
10-
expect(vm.$el.querySelector('.tcs-aside').textContent).to.equal('hello')
11-
vm.$el.querySelector('.tcs-extra button').click()
12-
Vue.nextTick(() => {
13-
expect(vm.$el.querySelector('input').attributes['placeholder'].value).to.equal('Foobar')
14-
expect(vm.$el.querySelector('input').attributes['name'].value).to.equal('.first_field')
15-
expect(vm.$el.querySelector('textarea').attributes['placeholder'].value).to.equal('Custom Field')
16-
expect(vm.$el.querySelector('textarea').attributes['name'].value).to.equal('attributes.custom_field')
17-
done()
18-
})
19-
})
7+
await tick()
8+
expect(vm.$el.querySelector('h2').textContent).to.equal('Fred Bloggs')
9+
expect(vm.$el.querySelector('.tcs-aside').textContent).to.equal('hello')
10+
vm.$el.querySelector('.tcs-extra button').click()
11+
await tick()
12+
expect(vm.$el.querySelector('input').attributes['placeholder'].value).to.equal('Foobar')
13+
expect(vm.$el.querySelector('input').attributes['name'].value).to.equal('.first_field')
14+
expect(vm.$el.querySelector('textarea').attributes['placeholder'].value).to.equal('Custom Field')
15+
expect(vm.$el.querySelector('textarea').attributes['name'].value).to.equal('attributes.custom_field')
2016
})
2117
})
2218

2319
describe('enquiry.vue', () => {
24-
it('should submit form', done => {
20+
it('should submit form', async function () {
2521
const vm = generate_vm()
2622
vm.$router.push({name: 'modal', params: {link: 'fred-bloggs'}})
27-
Vue.nextTick(() => {
28-
expect(vm.$el.querySelector('h2').textContent).to.equal('Fred Bloggs')
29-
vm.$el.querySelector('.tcs-extra button').click()
30-
Vue.nextTick(() => {
31-
expect(vm.$el.querySelector('input').attributes['placeholder'].value).to.equal('Foobar')
32-
expect(vm.$el.querySelector('input').value).to.equal('')
33-
expect(vm.enquiry_data).to.deep.equal({})
34-
vm.$el.querySelector('input').value = 'the new value'
35-
vm.$el.querySelector('input').dispatchEvent(new window.Event('input'))
36-
37-
vm.$el.querySelector('textarea').value = 'X'
38-
vm.$el.querySelector('textarea').dispatchEvent(new window.Event('input'))
39-
40-
Vue.nextTick(() => {
41-
expect(vm.$el.querySelector('input').value).to.equal('the new value')
42-
expect(vm.enquiry_data).to.deep.equal({first_field: 'the new value', attributes: {custom_field: 'X'}})
43-
44-
expect(vm.method_calls['submit_enquiry']).to.equal(undefined)
45-
vm.$el.querySelector('form').dispatchEvent(new window.Event('submit'))
46-
Vue.nextTick(() => {
47-
expect(vm.method_calls['submit_enquiry']).to.equal(1)
48-
expect(vm.enquiry_data).to.deep.equal({})
49-
done()
50-
})
51-
})
52-
})
53-
})
23+
24+
await tick()
25+
expect(vm.$el.querySelector('h2').textContent).to.equal('Fred Bloggs')
26+
vm.$el.querySelector('.tcs-extra button').click()
27+
28+
await tick()
29+
expect(vm.$el.querySelector('input').attributes['placeholder'].value).to.equal('Foobar')
30+
expect(vm.$el.querySelector('input').value).to.equal('')
31+
expect(vm.enquiry_data).to.deep.equal({})
32+
vm.$el.querySelector('input').value = 'the new value'
33+
vm.$el.querySelector('input').dispatchEvent(new window.Event('input'))
34+
35+
vm.$el.querySelector('textarea').value = 'X'
36+
vm.$el.querySelector('textarea').dispatchEvent(new window.Event('input'))
37+
38+
await tick()
39+
expect(vm.$el.querySelector('input').value).to.equal('the new value')
40+
expect(vm.enquiry_data).to.deep.equal({first_field: 'the new value', attributes: {custom_field: 'X'}})
41+
42+
expect(vm.method_calls['submit_enquiry']).to.equal(undefined)
43+
vm.$el.querySelector('form').dispatchEvent(new window.Event('submit'))
44+
45+
await tick()
46+
expect(vm.method_calls['submit_enquiry']).to.equal(1)
47+
expect(vm.enquiry_data).to.deep.equal({})
5448
})
5549
})
5650

test/unit/specs/main.js

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -113,10 +113,26 @@ describe('main.js', () => {
113113
before(() => {
114114
server = sinon.fakeServer.create()
115115
server.autoRespond = true
116-
server.respondWith(dft_response)
116+
server.respondWith('/public-key/contractors', dft_response)
117+
server.respondWith('/public-key/enquiry', [200, {'Content-Type': 'application/json'}, '{"response": "ok"}'])
118+
server.respondWith('/foobar', [200, {'Content-Type': 'application/json'}, '{"the": "response"}'])
117119
})
118120
after(() => { server.restore() })
119121

122+
it('should get enquiry info', done => {
123+
let el = document.createElement('div')
124+
el.setAttribute('id', 'socket')
125+
document.body.appendChild(el)
126+
127+
const vm = socket('public-key')
128+
vm.get_enquiry()
129+
130+
setTimeout(() => {
131+
expect(vm.enquiry_form_info).to.deep.equal({response: 'ok'})
132+
done()
133+
}, 50)
134+
})
135+
120136
it('should convert text', () => {
121137
let el = document.createElement('div')
122138
el.setAttribute('id', 'socket')
@@ -129,28 +145,21 @@ describe('main.js', () => {
129145
text = vm.get_text('contractor_enquiry_button', {'contractor_name': 'foobar'})
130146
expect(text).to.equal('Speak to foobar')
131147
})
132-
})
133148

134-
describe('main.js', () => {
135-
let server
136-
before(() => {
137-
server = sinon.fakeServer.create()
138-
server.autoRespond = true
139-
server.respondWith('/public-key/contractors', dft_response)
140-
server.respondWith('/public-key/enquiry', [200, {'Content-Type': 'application/json'}, '{"response": "ok"}'])
141-
})
142-
after(() => { server.restore() })
143-
144-
it('should get enquiry info', done => {
149+
it('should get contractor details', done => {
145150
let el = document.createElement('div')
146151
el.setAttribute('id', 'socket')
147152
document.body.appendChild(el)
148153

149154
const vm = socket('public-key')
150-
vm.get_enquiry()
155+
expect(vm.contractors_extra).to.deep.equal({})
156+
let v = vm.get_details('/foobar', 'key')
157+
expect(v).to.equal(true)
151158

152159
setTimeout(() => {
153-
expect(vm.enquiry_form_info).to.deep.equal({response: 'ok'})
160+
expect(vm.contractors_extra).to.deep.equal({key: {the: 'response'}})
161+
v = vm.get_details('/foobar', 'key')
162+
expect(v).to.equal(false)
154163
done()
155164
}, 50)
156165
})

0 commit comments

Comments
 (0)