Skip to content

Commit ebd025e

Browse files
authored
Merge pull request #351 from armd-pro/#137-unit-tests
#137 unit tests
2 parents f6e9123 + 85cbd5e commit ebd025e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+415
-152
lines changed

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
"devDependencies": {
4848
"@vue/test-utils": "^1.0.0-beta.28",
4949
"autoprefixer": "^7.2.6",
50+
"axios-mock-adapter": "^1.16.0",
5051
"babel-core": "^6.26.3",
5152
"babel-eslint": "^7.1.1",
5253
"babel-loader": "^7.1.5",

src/components/Filters.vue

+19-13
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,15 @@
99
<b-input-group>
1010
<b-form-input v-model.number.trim="filters.mag_min" placeholder="2.5" :state="modelState('mag_min')"
1111
@input.native="onFiltersChange($event, 'mag_min')" autocomplete="off"
12-
:disabled="disabled" />
12+
:disabled="disabled" name="mag_min" />
1313
</b-input-group>
1414
</b-col>
1515
<b-col class="text-center middle-col"><i class="fa fa-arrows-h" aria-hidden="true"></i></b-col>
1616
<b-col cols="5">
1717
<b-input-group>
1818
<b-form-input v-model.number.trim="filters.mag_max" placeholder="10.0" :state="modelState('mag_max')"
1919
@input.native="onFiltersChange($event, 'mag_max')" autocomplete="off"
20-
:disabled="disabled"/>
20+
:disabled="disabled" name="mag_max"/>
2121
</b-input-group>
2222
</b-col>
2323
</b-row>
@@ -33,15 +33,15 @@
3333
<b-input-group>
3434
<b-form-input v-model.number.trim="filters.lat_min" placeholder="51.1" :state="modelState('lat_min')"
3535
@input.native="onFiltersChange($event, 'lat_min')" autocomplete="off"
36-
:disabled="disabled"/>
36+
:disabled="disabled" name="lat_min"/>
3737
</b-input-group>
3838
</b-col>
3939
<b-col class="text-center middle-col"><i class="fa fa-arrows-h" aria-hidden="true"></i></b-col>
4040
<b-col cols="5">
4141
<b-input-group>
4242
<b-form-input v-model.number.trim="filters.lat_max" placeholder="70.1" :state="modelState('lat_max')"
4343
@input.native="onFiltersChange($event, 'lat_max')" autocomplete="off"
44-
:disabled="disabled"/>
44+
:disabled="disabled" name="lat_max"/>
4545
</b-input-group>
4646
</b-col>
4747
</b-row>
@@ -57,15 +57,15 @@
5757
<b-input-group>
5858
<b-form-input v-model.number.trim="filters.lon_min" placeholder="130.0" :state="modelState('lon_min')"
5959
@input.native="onFiltersChange($event, 'lon_min')" autocomplete="off"
60-
:disabled="disabled"/>
60+
:disabled="disabled" name="lon_min"/>
6161
</b-input-group>
6262
</b-col>
6363
<b-col class="text-center middle-col"><i class="fa fa-arrows-h" aria-hidden="true"></i></b-col>
6464
<b-col cols="5">
6565
<b-input-group>
6666
<b-form-input v-model.number.trim="filters.lon_max" placeholder="160.9" :state="modelState('lon_max')"
6767
@input.native="onFiltersChange($event, 'lon_max')" autocomplete="off"
68-
:disabled="disabled"/>
68+
:disabled="disabled" name="lon_max"/>
6969
</b-input-group>
7070
</b-col>
7171
</b-row>
@@ -81,7 +81,7 @@
8181
<b-input-group prepend="Минимум">
8282
<b-form-input v-model.number.trim="filters.sta_num_min" placeholder="1" :state="modelState('sta_num_min')"
8383
@input.native="onFiltersChange($event, 'sta_num_min')" autocomplete="off"
84-
:disabled="disabled"/>
84+
:disabled="disabled" name="sta_num_min"/>
8585
</b-input-group>
8686
</b-col>
8787
</b-row>
@@ -96,15 +96,15 @@
9696
<b-input-group>
9797
<b-form-input v-model.number.trim="filters.depth_min" placeholder="0" :state="modelState('depth_min')"
9898
@input.native="onFiltersChange($event, 'depth_min')" autocomplete="off"
99-
:disabled="disabled"/>
99+
:disabled="disabled" name="depth_min"/>
100100
</b-input-group>
101101
</b-col>
102102
<b-col class="text-center middle-col"><i class="fa fa-arrows-h" aria-hidden="true"></i></b-col>
103103
<b-col cols="5">
104104
<b-input-group>
105105
<b-form-input v-model.number.trim="filters.depth_max" placeholder="10" :state="modelState('depth_max')"
106106
@input.native="onFiltersChange($event, 'depth_max')" autocomplete="off"
107-
:disabled="disabled"/>
107+
:disabled="disabled" name="depth_max"/>
108108
</b-input-group>
109109
</b-col>
110110
</b-row>
@@ -130,6 +130,7 @@
130130
@input.native="onFiltersChange($event, 'datetime_min')"
131131
:state="modelState('datetime_min')"
132132
:disabled="disabled"
133+
name="datetime_min"
133134
/>
134135
</b-input-group>
135136
</b-col>
@@ -146,6 +147,7 @@
146147
@input.native="onFiltersChange($event, 'datetime_max')"
147148
:state="modelState('datetime_max')"
148149
:disabled="disabled"
150+
name="datetime_max"
149151
/>
150152
</b-input-group>
151153
</b-col>
@@ -160,7 +162,8 @@
160162
<b-row no-gutters class="filter-inputs" align-v="center">
161163
<b-col>
162164
<b-input-group prepend="Максимум">
163-
<b-form-input v-model.number.trim="filters.rms_max" placeholder="0.9" :state="modelState('rms_max')" />
165+
<b-form-input v-model.number.trim="filters.rms_max" placeholder="0.9"
166+
:state="modelState('rms_max')" name="rms_max" />
164167
</b-input-group>
165168
</b-col>
166169
</b-row>
@@ -171,8 +174,7 @@
171174
<b-col>
172175
<b-row no-gutters class="filter-inputs">
173176
<b-col>
174-
<b-form-checkbox
175-
@change.native="onFiltersChange($event)"
177+
<b-form-checkbox name="has_mt" @change.native="onFiltersChange($event)"
176178
v-model="filters.has_mt" :disabled="disabled">Только с тензором момента</b-form-checkbox>
177179
</b-col>
178180
</b-row>
@@ -366,10 +368,14 @@
366368
if (prop in this.filters) {
367369
this.errorMessages[prop] = `<p>${errorList.join('</p><p>')}</p>`
368370
} else {
369-
otherErrors.push(`${prop}: ${errorList.join(', ')}`)
371+
otherErrors.push(`${prop}:\n\t${errorList.join(', ')}`)
370372
}
371373
372374
})
375+
376+
if (otherErrors.length > 0) {
377+
window.alert(otherErrors.join('\n\n'))
378+
}
373379
},
374380
375381
filtersUpdated: function(delay = 500)

src/components/StaticPage.vue

+2-2
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ export default {
2323
}
2424
},
2525
methods: {
26-
getContent: function(page = this.page) {
27-
this.$http.get(`/static/markdown/${this.page}.md`)
26+
getContent: async function() {
27+
return await this.$http.get(`/static/markdown/${this.page}.md`)
2828
.then(response => {
2929
this.content = response.data
3030
})

src/components/users/Authentication.vue

+2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
maxlength="150"
2222
pattern="[^@\s]+@[^@\s]+\.[^@\s]+"
2323
placeholder="Электронная почта"
24+
name="email"
2425
required>
2526
</b-form-input>
2627
<b-form-invalid-feedback>{{ form.messages.email }}</b-form-invalid-feedback>
@@ -34,6 +35,7 @@
3435
placeholder="Пароль"
3536
minlength="6"
3637
maxlength="150"
38+
name="password"
3739
required>
3840
</b-form-input>
3941
<b-form-invalid-feedback>{{ form.messages.password }}</b-form-invalid-feedback>

src/components/users/ConfirmPassword.vue

+2-1
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,9 @@
3232
:state="form.fields.password.state"
3333
v-model="form.fields.password.value"
3434
placeholder="Новый пароль"
35-
minlength="6"
35+
name="password"
3636
maxlength="150"
37+
minlength="6"
3738
required>
3839
</b-form-input>
3940
<b-form-invalid-feedback>{{ form.messages.password }}</b-form-invalid-feedback>

src/components/users/Registration.vue

+8-2
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,10 @@
3939
:disabled="form.fields.email.disabled"
4040
:state="form.fields.email.state"
4141
v-model="form.fields.email.value"
42-
maxlength="150"
4342
pattern="[^@\s]+@[^@\s]+\.[^@\s]+"
4443
placeholder="Электронная почта"
44+
maxlength="150"
45+
name="email"
4546
required>
4647
</b-form-input>
4748
<b-form-invalid-feedback>{{ form.messages.email }}</b-form-invalid-feedback>
@@ -53,8 +54,9 @@
5354
:state="form.fields.password.state"
5455
v-model="form.fields.password.value"
5556
placeholder="Пароль"
56-
minlength="6"
5757
maxlength="150"
58+
name="password"
59+
minlength="6"
5860
required>
5961
</b-form-input>
6062
<b-form-invalid-feedback>{{ form.messages.password }}</b-form-invalid-feedback>
@@ -67,6 +69,7 @@
6769
v-model="form.fields.company.value"
6870
placeholder="Организация"
6971
maxlength="150"
72+
name="company"
7073
required>
7174
</b-form-input>
7275
<b-form-invalid-feedback>{{ form.messages.company }}</b-form-invalid-feedback>
@@ -78,6 +81,7 @@
7881
:disabled="form.fields.purpose.disabled"
7982
:options="form.purposes.values"
8083
placeholder="Цель использования расширенных данных"
84+
name="purpose"
8185
required />
8286
<b-form-invalid-feedback>{{ form.messages.purpose }}</b-form-invalid-feedback>
8387
</b-form-group>
@@ -88,6 +92,7 @@
8892
:state="form.fields.fullname.state"
8993
v-model="form.fields.fullname.value"
9094
placeholder="Фамилия, имя и отчество"
95+
name="fullname"
9196
maxlength="150"
9297
required>
9398
</b-form-input>
@@ -107,6 +112,7 @@
107112
class="additional-info"
108113
placeholder="Дополнительная информация"
109114
maxlength="2000"
115+
name="additionalInfo"
110116
v-show="form.showAdditionalInfo">
111117
</b-form-textarea>
112118
</b-form-group>

src/components/users/ResetPassword.vue

+1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
maxlength="150"
3131
pattern="[^@\s]+@[^@\s]+\.[^@\s]+"
3232
placeholder="Электронная почта"
33+
name="email"
3334
required>
3435
</b-form-input>
3536
<b-form-invalid-feedback>{{ form.messages.email }}</b-form-invalid-feedback>

test/e2e/custom-assertions/elementCount.js

+9-7
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,22 @@
66
//
77
// for how to write custom assertions see
88
// http://nightwatchjs.org/guide#writing-custom-assertions
9-
exports.assertion = function (selector, count) {
9+
exports.assertion = function(selector, count)
10+
{
1011
this.message = 'Testing if element <' + selector + '> has count: ' + count
1112
this.expected = count
12-
this.pass = function (val) {
13+
this.pass = function(val) {
1314
return val === this.expected
1415
}
15-
this.value = function (res) {
16+
this.value = function(res) {
1617
return res.value
1718
}
18-
this.command = function (cb) {
19-
var self = this
20-
return this.api.execute(function (selector) {
19+
this.command = function(cb)
20+
{
21+
const self = this
22+
return this.api.execute(function(selector) {
2123
return document.querySelectorAll(selector).length
22-
}, [selector], function (res) {
24+
}, [selector], function(res) {
2325
cb.call(self, res)
2426
})
2527
}

test/unit/specs/Analytics.spec.js

+7-4
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
1-
import { shallowMount } from '@vue/test-utils'
1+
import { shallowMount, createLocalVue } from '@vue/test-utils'
22
import Analytics from '@/components/Analytics'
3+
import BootstrapVue from 'bootstrap-vue'
34
import $moment from 'moment'
45
import $http from 'axios'
56

7+
const localVue = createLocalVue()
8+
localVue.use(BootstrapVue)
9+
610
describe('Analytics.vue', () => {
711

812
const wrapper = shallowMount(Analytics, {
9-
mocks: {
10-
$http, $moment
11-
}
13+
mocks: { $http, $moment },
14+
localVue
1215
})
1316

1417
it('Check component Analytics', () => {

test/unit/specs/AppFooter.spec.js

+8-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
1-
import { shallowMount } from '@vue/test-utils'
1+
import { shallowMount, createLocalVue } from '@vue/test-utils'
22
import AppFooter from '@/components/AppFooter'
3+
import BootstrapVue from 'bootstrap-vue'
34
import AppSettings from '@/settings/app'
45

6+
const localVue = createLocalVue()
7+
localVue.use(BootstrapVue)
8+
59
describe('AppFooter.vue', () => {
610

7-
const wrapper = shallowMount(AppFooter)
11+
const wrapper = shallowMount(AppFooter, {
12+
localVue
13+
})
814

915
it('renders copyright', () => {
1016
const copyright = wrapper.find('#copyright').text()

test/unit/specs/AppHeader.spec.js

+8-12
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
import { shallowMount, createLocalVue } from '@vue/test-utils'
2-
32
import AppHeader from '@/components/AppHeader'
3+
import BootstrapVue from 'bootstrap-vue'
44
import VueRouter from 'vue-router'
5+
import { RouterLink } from '../utils'
56

6-
const RouterLink = {
7-
name: 'router-link',
8-
render: function(h) {
9-
return h('a', this.$slots.default)
10-
},
11-
props: ['to']
12-
}
7+
const localVue = createLocalVue()
8+
const router = new VueRouter()
9+
localVue.use(BootstrapVue)
10+
localVue.use(VueRouter)
1311

1412
describe('AppHeader.vue', () => {
1513

@@ -21,10 +19,6 @@ describe('AppHeader.vue', () => {
2119
}
2220
}
2321

24-
const localVue = createLocalVue()
25-
localVue.use(VueRouter)
26-
27-
const router = new VueRouter()
2822
const wrapper = shallowMount(AppHeader, {
2923
localVue,
3024
router,
@@ -78,6 +72,7 @@ describe('AppHeader.vue', () => {
7872
}
7973

8074
const wrapper = shallowMount(AppHeader, {
75+
localVue,
8176
router,
8277
mocks: {
8378
$store
@@ -119,6 +114,7 @@ describe('AppHeader.vue', () => {
119114
}
120115

121116
const wrapper = shallowMount(AppHeader, {
117+
localVue,
122118
router,
123119
mocks: {
124120
$store

test/unit/specs/AppNavbar.spec.js

+7-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
1-
import { shallowMount } from '@vue/test-utils'
1+
import { shallowMount, createLocalVue } from '@vue/test-utils'
22
import AppNavbar from '@/components/AppNavbar'
3+
import BootstrapVue from 'bootstrap-vue'
34
import $moment from 'moment'
45
import $http from 'axios'
56

7+
const localVue = createLocalVue()
8+
localVue.use(BootstrapVue)
9+
610
describe('AppNavbar.vue', () => {
711

812
const wrapper = shallowMount(AppNavbar, {
9-
mocks: { $http, $moment }
13+
mocks: { $http, $moment },
14+
localVue
1015
})
1116

1217
it('Check component AppNavbar', () => {

0 commit comments

Comments
 (0)