feat(tests): refactor

This commit is contained in:
2024-03-26 17:59:32 +03:00
parent f6ca446f92
commit 49626cb681
23 changed files with 128 additions and 136 deletions

View File

@@ -0,0 +1,8 @@
class AdapterOfPacks {
constructor(url) {
this.url = url
}
}
export default AdapterOfPacks

View File

@@ -1,109 +0,0 @@
<template>
<div class="flex border-8 w-1/2 flex-col py-1 gap-y-5">
<div class="flex flex-row gap-y-5 w-full justify-between">
<fwb-p
v-if="!isEdit"
class="self-center px-5"
>
{{ label }}
</fwb-p>
<div
class="flex flex-row gap-x-5 justify-between"
:class="{'w-full': isEdit}"
>
<fwb-input
v-if="isEdit"
class="w-full"
:model-value="realLink"
@update:model-value="args => {tempLink = args}"
/>
<ButtonEdit
v-if="!isEdit"
:on-click="() => {isEdit = true}"
/>
<ButtonSave
v-if="isEdit"
:on-click="() => {clickSave()}"
/>
<ButtonDiscard
v-if="isEdit"
:on-click="() => {clickDiscard()}"
/>
</div>
</div>
<YouTube
v-if="isLinkNormal && isReady"
ref="youtube"
:src="realLink"
width="100%"
/>
</div>
</template>
<script>
import ButtonSave from "@atoms/ButtonSave.vue";
import YouTube from "vue3-youtube";
import ButtonEdit from "@atoms/ButtonEdit.vue";
import ButtonDiscard from "@atoms/ButtonDiscard.vue";
import {FwbInput, FwbP} from "flowbite-vue";
export default {
components: {
FwbInput,
FwbP,
YouTube, ButtonDiscard, ButtonSave, ButtonEdit
},
props: {
videoLink: {
type: String,
default: '',
},
label: {
type: String,
default: ''
},
timeout: {
type: Number,
default: 0
},
},
data() {
return {
isEdit: false,
isReady: false,
tempLink: this.$props.videoLink,
realLink: this.$props.videoLink,
}
},
computed: {
isLinkNormal() {
return this.$data.realLink.toString().includes("https://www.youtube.com/watch?")
}
},
mounted() {
if (this.timeout) {
setTimeout(() => {
this.isReady = true
}, this.timeout);
} else {
this.isReady = true
}
},
methods: {
updateLink(newLink) {
console.log(newLink)
},
clickSave() {
this.$data.isEdit = false
let l = this.$data.tempLink
if (l.toString().includes("https://www.youtube.com/watch?")) {
this.$data.realLink = l
}
},
clickDiscard() {
this.$data.isEdit = false
console.log(`discard ${this.$data.tempLink}`)
}
}
}
</script>

View File

@@ -4,21 +4,21 @@
btnClass="col-span-4"
containerClass="pt-10 px-4 min-w-[80vw]"
>
<Tabulator v-bind="tabulatorOtps" />
<Tabulator v-bind="tabulatorOptions" />
</ButtonModal>
</template>
<script>
import ButtonModal from '@molecules/ButtonModal/index.vue'
import ButtonModal from '@molecules/ButtonModal/ButtonModal.vue'
import Tabulator from "@molecules/Tabulator/index.vue"
export default {
name: 'Name',
name: 'MachinesModal',
components: {ButtonModal, Tabulator},
data() {
},
computed: {
tabulatorOtps() {
tabulatorOptions() {
return {
dataSource: this.packsData,
columns: [

View File

@@ -71,7 +71,7 @@
<script>
import TaskModal from './TaskModal.vue'
import TaskHistory from './TaskHistory.vue'
import ButtonModal from '@molecules/ButtonModal/index.vue'
import ButtonModal from '@molecules/ButtonModal/ButtonModal.vue'
export default {
name: 'Task',

View File

@@ -14,7 +14,7 @@
</template>
<script>
import ButtonModal from '@molecules/ButtonModal/index.vue'
import ButtonModal from '@molecules/ButtonModal/ButtonModal.vue'
import {data} from './historyData'
export default {

View File

@@ -220,7 +220,7 @@
</template>
<script>
import ButtonModal from '@molecules/ButtonModal/index.vue'
import ButtonModal from '@molecules/ButtonModal/ButtonModal.vue'
import Datepicker from "@molecules/Datepicker/index.vue"
import { FwbTextarea } from 'flowbite-vue'

View File

@@ -101,12 +101,12 @@
</template>
<script>
import ButtonModal from '@molecules/ButtonModal/index.vue'
import ButtonModal from '@molecules/ButtonModal/ButtonModal.vue'
import Datepicker from "@molecules/Datepicker/index.vue"
import {mapGetters, mapMutations, mapActions} from 'vuex'
import Tabulator from "@molecules/Tabulator/index.vue"
import Spinner from "@molecules/Spinner/index.vue"
import MachinesModal from "@organisms/MachinesModal/index.vue"
import MachinesModal from "@molecules/MachinesModal/MachinesModal.vue"
export default {
name: 'LastPacks',

View File

@@ -78,7 +78,7 @@
</template>
<script>
import ButtonModal from '@molecules/ButtonModal/index.vue'
import ButtonModal from '@molecules/ButtonModal/ButtonModal.vue'
import {mapGetters, mapMutations, mapActions} from 'vuex'
import Tabulator from "@molecules/Tabulator/index.vue"
import Spinner from "@molecules/Spinner/index.vue"
@@ -98,8 +98,6 @@ export default {
computed: {
...mapGetters('last_packs_num', ['packNum', 'pageState', 'packsData']),
tabulatorOtps() {
console.log(this.packsData)
return {
dataSource: this.packsData,
columns: [

View File

@@ -1,74 +0,0 @@
import Services from './index.vue'
import { globalServices } from '@store/modules/services/StaticData'
import { shallowMount, mount } from '@vue/test-utils'
import {createStore} from 'vuex'
const store = createStore({
state() {
return {
services: globalServices,
}
},
getters: {
services: (state) => state.services,
},
mutations: {
setServices: (state, updval) => state.services = updval,
},
})
describe("Services", () => {
it("renders Services, with custom button title", () => {
const wrapper = mount(Services, {
global: {
plugins: [store],
},
data () {
return {
titleServicesButton: 'Показать больше сервисов',
}
},
})
expect(wrapper.text()).toContain('Показать больше сервисов')
})
})
describe("Services", () => {
it("renders after click button, open full Services", async () => {
const wrapper = mount(Services, {
global: {
plugins: [store],
},
})
await wrapper.find('button').trigger('click')
expect(wrapper.find('button').text()).toContain('Скрыть')
})
})
describe("Services", () => {
it("renders Services with exists data", async () => {
const wrapper = mount(Services, {
global: {
plugins: [store],
},
})
expect(store.state.services.length).toBeGreaterThan(0)
})
})
describe("Services", () => {
it("renders Services maked empty data", async () => {
const wrapper = mount(Services, {
global: {
plugins: [store],
},
})
store.commit('setServices', [])
expect(store.state.services.length).toBe(0)
})
})

View File

@@ -1,122 +0,0 @@
import Service from './Service.vue'
import { globalServices } from '@store/modules/services/StaticData'
import { shallowMount, mount } from '@vue/test-utils'
import {createStore} from 'vuex'
const store = createStore({
state() {
return {
services: globalServices,
}
},
getters: {
services: (state) => state.services,
},
mutations: {
setServices: (state, updval) => state.services = updval,
},
})
describe("Service", () => {
it("renders Service, with set props value", async () => {
const wrapper = mount(Service, {
global: {
plugins: [store],
},
props: {
idx: 1,
},
})
await wrapper.setProps({ idx: 3 })
expect(wrapper.html()).toContain(3)
})
})
describe("Service", () => {
it("renders Service with condition success", async () => {
const wrapper = mount(Service, {
global: {
plugins: [store],
},
props: {
name: '',
},
})
await wrapper.setProps({ name: 'глобальное хранилище' })
expect(wrapper.html()).toContain('доступен')
})
})
describe("Service", () => {
it("renders Service with condition not success", async () => {
const wrapper = mount(Service, {
global: {
plugins: [store],
},
props: {
name: '',
},
})
await wrapper.setProps({ name: 'Test service name' })
expect(wrapper.html()).toContain('отключен')
})
})
describe("Service", () => {
it("renders Service if not service details", async () => {
const wrapper = mount(Service, {
global: {
plugins: [store],
},
props: {
service: {},
},
})
expect(wrapper.html()).toContain('Сервис глобального хранилища применяется для условно постоянного хранения данных в кэше')
})
})
describe("Service", () => {
it("renders Service with set service details", async () => {
const wrapper = mount(Service, {
global: {
plugins: [store],
},
props: {
service: {serviceIp: '192.168.1.1', serviceCode: '1234567890', serviceLink: 'http://test.com', is_online: false,
},
},
})
await wrapper.setProps({ service: {serviceIp: '192.168.1.7', serviceCode: '1234567897', is_online: true} }) // 1 раз, далее новый тест
expect(wrapper.html()).toContain('192.168.1.7')
expect(wrapper.html()).toContain('1234567897')
expect(wrapper.html()).toContain('доступен')
expect(wrapper.html()).toContain('... нет описания')
})
})
describe("Service", () => {
it("renders Service with alert copyText success after click", async () => {
const wrapper = mount(Service, {
global: {
plugins: [store],
},
props: {
copyed: '',
service: {init_params: {service: 'Test service', machine_addr: 'Test machine_addr'}},
},
})
await wrapper.get('.copyText').trigger('click')
expect(wrapper.html()).toContain('copyed')
})
})

View File

@@ -1,7 +1,7 @@
import { createStore, createLogger } from 'vuex';
import { store as main } from '@/store/modules/main';
import { store as machines } from '@/store/modules/machines';
import { store as layoutMachines } from '@/store/modules/machines';
import { store as layoutMachines } from '@/store/modules/layoutMachines';
import { store as finder_packs } from '@/store/modules/finder_packs';
import { store as add_users } from '@/store/modules/add_users';
import { store as layout } from '@/store/modules/layout';