307 lines
8.0 KiB
JavaScript
307 lines
8.0 KiB
JavaScript
import { mount} from '@vue/test-utils'
|
||
import { expect, test, describe, vi, beforeEach } from 'vitest'
|
||
import ServiceCard from "@organisms/ServicesList/ServiceCard.vue"
|
||
import { createStore} from 'vuex'
|
||
import axios from "axios";
|
||
import {store as services} from "@/store/modules/services"
|
||
import {store as users} from "@/store/modules/users"
|
||
import AdapterOfServices from '@adapters/adapterOfServices/Services'
|
||
import ServiceOfServices from '@services/serviceOfServices/Services.js'
|
||
import AdapterOfUsers from '@adapters/adapterOfUsers/Users'
|
||
import ServiceOfUsers from '@services/serviceOfUsers/Users.js'
|
||
import CaseOfUsersInService from '@useCases/CaseOfUsersInService.js'
|
||
|
||
vi.mock('axios')
|
||
|
||
|
||
describe("tests Service Card component", () => {
|
||
const store = createStore({
|
||
plugins: [],
|
||
modules: {
|
||
services,
|
||
users
|
||
},
|
||
})
|
||
|
||
const defaultServices = [
|
||
{
|
||
"id": 1,
|
||
"created_at": "2024-03-06T17:31:31.948355541+03:00",
|
||
"updated_at": "2024-03-06T17:31:31.948355541+03:00",
|
||
"deleted_at": null,
|
||
"name": "jsonplaceholder.typicode.com",
|
||
"port": 9965,
|
||
"proxy_ip": "172.25.78.153",
|
||
"site_ip": "https://jsonplaceholder.typicode.com/",
|
||
"internet_uri": "localhost",
|
||
"description": "localhost",
|
||
"is_online": true
|
||
},
|
||
]
|
||
|
||
const resServices = [
|
||
{
|
||
"id": 1,
|
||
"created_at": "2024-03-06T17:31:31.948355541+03:00",
|
||
"updated_at": "2024-03-06T17:31:31.948355541+03:00",
|
||
"deleted_at": null,
|
||
"name": "jsonplaceholder.typicode.com",
|
||
"port": 9965,
|
||
"proxy_ip": "172.25.78.153",
|
||
"device_ip": "https://jsonplaceholder.typicode.com/",
|
||
"internet_uri": "localhost",
|
||
"description": "localhost",
|
||
"is_online": true
|
||
},
|
||
]
|
||
|
||
axios.get.mockResolvedValue({
|
||
data: defaultServices,
|
||
})
|
||
|
||
const adapterOfServices = new AdapterOfServices(import.meta.env.VITE_API_ADDR)
|
||
const serviceOfServices = new ServiceOfServices(adapterOfServices, store)
|
||
|
||
const adapterOfUsers = new AdapterOfUsers(import.meta.env.VITE_API_ADDR)
|
||
const serviceOfUsers = new ServiceOfUsers(adapterOfUsers, store)
|
||
|
||
|
||
const caseOfUsersInService = new CaseOfUsersInService(serviceOfUsers, serviceOfServices)
|
||
|
||
beforeEach(() => {
|
||
store.dispatch('services/resetStore')
|
||
})
|
||
|
||
|
||
test('Service Card mounted with vuex', async () => {
|
||
const wrapper = mount(ServiceCard, {
|
||
// shallow: true,
|
||
global: {
|
||
plugins: [store]
|
||
},
|
||
props: {
|
||
serviceOfServices,
|
||
caseOfUsersInService,
|
||
},
|
||
})
|
||
|
||
// console.log('wrapper.html', wrapper.html())
|
||
|
||
await serviceOfServices.fetchServices()
|
||
|
||
store.commit('services/setServicesState', 'active')
|
||
|
||
const uploadServices = store.getters['services/services']
|
||
// const servicesState = store.getters['services/servicesState']
|
||
|
||
expect(uploadServices).toEqual(resServices) // full services array of store
|
||
|
||
expect(wrapper.html()).toContain('block w-full p-6 bg-white')
|
||
expect(wrapper.text()).toContain('статус')
|
||
expect(wrapper.text()).toContain('Порт')
|
||
})
|
||
|
||
test('View EditCard component after select service', async () => {
|
||
|
||
store.commit('services/setSelectedService', resServices[0])
|
||
const selectedService = store.getters['services/selectedService']
|
||
|
||
const wrapper = mount(ServiceCard, {
|
||
global: {
|
||
plugins: [store]
|
||
},
|
||
props: {
|
||
serviceOfServices,
|
||
caseOfUsersInService,
|
||
id: 1,
|
||
},
|
||
})
|
||
|
||
const wrapperHtml = wrapper.html()
|
||
|
||
expect(selectedService).not.toBeNull()
|
||
expect(selectedService.id).toBe(1)
|
||
expect(wrapperHtml).toContain('Сохранить')
|
||
expect(wrapper.find('textarea[name="description"]'))
|
||
})
|
||
|
||
test("Renders buttons - 'Отменить' and 'Удалить' in this service, after click to button delete service", async () => {
|
||
|
||
beforeEach(() => {
|
||
store.dispatch('services/resetStore')
|
||
})
|
||
|
||
const wrapper = mount(ServiceCard, {
|
||
global: {
|
||
plugins: [store]
|
||
},
|
||
props: {
|
||
serviceOfServices,
|
||
caseOfUsersInService,
|
||
id: 1,
|
||
},
|
||
data () {
|
||
return {
|
||
isDelete: false,
|
||
}
|
||
},
|
||
})
|
||
|
||
await wrapper.setData({ isDelete: true })
|
||
|
||
await wrapper.get('.ri-close-line').trigger('click')
|
||
|
||
expect(wrapper.html()).toContain('Отменить')
|
||
expect(wrapper.html()).toContain('Удалить')
|
||
})
|
||
|
||
test("Cancel Renders buttons - 'Отменить' and 'Удалить' in this service, after click to button cancel delete service", async () => {
|
||
|
||
beforeEach(() => {
|
||
store.dispatch('services/resetStore')
|
||
})
|
||
|
||
const wrapper = mount(ServiceCard, {
|
||
global: {
|
||
plugins: [store]
|
||
},
|
||
props: {
|
||
serviceOfServices,
|
||
caseOfUsersInService,
|
||
id: 1,
|
||
},
|
||
data () {
|
||
return {
|
||
isDelete: true,
|
||
}
|
||
},
|
||
})
|
||
|
||
// console.log('wrapper.html', wrapper.html())
|
||
|
||
await wrapper.get('[test-id="canelButton"]').trigger('click')
|
||
|
||
expect(wrapper.html()).not.toContain('Отменить')
|
||
expect(wrapper.html()).not.toContain('Удалить')
|
||
})
|
||
|
||
test('Set setStatus for prop isOnline in ServiceCard', async () => {
|
||
|
||
const wrapper = mount(ServiceCard, {
|
||
global: {
|
||
plugins: [store]
|
||
},
|
||
props: {
|
||
serviceOfServices,
|
||
isOnline: false
|
||
},
|
||
data () {
|
||
return {
|
||
status: {title: 'disable', color: 'bg-red-700'}
|
||
}
|
||
},
|
||
})
|
||
|
||
// console.log('wrapper.html', wrapper.vm.status)
|
||
|
||
const defaultStatus = wrapper.vm.status
|
||
|
||
expect(defaultStatus.title).toContain('disable')
|
||
expect(defaultStatus.color).toContain('bg-red-700')
|
||
|
||
wrapper.vm.setStatus(true)
|
||
|
||
expect(wrapper.vm.status.title).toBe('enable')
|
||
expect(wrapper.html()).toContain('bg-green-700')
|
||
|
||
})
|
||
|
||
test('For Editing selected user in ServiceCard', async () => {
|
||
|
||
const forEditService = {
|
||
"id": 1,
|
||
"created_at": "2024-03-06T17:31:31.948355541+03:00",
|
||
"updated_at": "2024-03-06T17:31:31.948355541+03:00",
|
||
"deleted_at": null,
|
||
"name": "jsonplaceholder.typicode.com",
|
||
"port": 9965,
|
||
"proxy_ip": "172.25.78.153",
|
||
"device_ip": "https://jsonplaceholder.typicode.com/",
|
||
"internet_uri": "localhost",
|
||
"description": "localhost",
|
||
"is_online": true
|
||
}
|
||
|
||
|
||
const wrapper = mount(ServiceCard, {
|
||
global: {
|
||
plugins: [store]
|
||
},
|
||
props: {
|
||
caseOfUsersInService
|
||
},
|
||
})
|
||
|
||
const selectedService = store.getters['services/selectedService']
|
||
|
||
expect(selectedService).toBeNull()
|
||
|
||
await wrapper.vm.editService(forEditService)
|
||
|
||
const selectedUserAfterEdit = store.getters['services/selectedService']
|
||
const usersWithService = store.getters['users/usersWithService']
|
||
|
||
expect(selectedUserAfterEdit).not.toBeNull()
|
||
expect(selectedUserAfterEdit.id).toBe(1)
|
||
|
||
usersWithService.map(user => {
|
||
expect(user.serviceId.include(1)).toBe(true)
|
||
})
|
||
|
||
})
|
||
|
||
test("View buttons - 'Отменить' and 'Удалить' after change isDelete for selected service in ServiceCard", async () => {
|
||
|
||
beforeEach(() => {
|
||
store.dispatch('services/resetStore')
|
||
})
|
||
|
||
const wrapper = mount(ServiceCard, {
|
||
global: {
|
||
plugins: [store]
|
||
},
|
||
props: {
|
||
serviceOfServices,
|
||
id: 1,
|
||
},
|
||
data () {
|
||
return {
|
||
isDelete: false,
|
||
}
|
||
},
|
||
})
|
||
|
||
// console.log('wrapper.html', wrapper.html())
|
||
|
||
const defaultIsDelete = wrapper.vm.isDelete
|
||
|
||
expect(defaultIsDelete).toBe(false)
|
||
|
||
await wrapper.get('.ri-close-line').trigger('click') // Рендер отрисовывает только с помощью триггером
|
||
// wrapper.vm.deleteService(true)
|
||
|
||
const updatedIsDelete = wrapper.vm.isDelete
|
||
|
||
// console.log('wrapper.html', wrapper.html())
|
||
|
||
expect(updatedIsDelete).toBe(true)
|
||
|
||
expect(wrapper.html()).toContain('Отменить')
|
||
expect(wrapper.html()).toContain('Удалить')
|
||
|
||
})
|
||
|
||
})
|
||
|
||
|