295 lines
7.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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,
"createdAt": "2024-03-06T17:31:31.948355541+03:00",
"updatedAt": "2024-03-06T17:31:31.948355541+03:00",
"deletedAt": null,
"name": "jsonplaceholder.typicode.com",
"port": 9965,
"proxyIp": "172.25.78.153",
"deviceIp": "https://jsonplaceholder.typicode.com/",
"internetUri": "localhost",
"description": "localhost",
"isOnline": 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, {
global: {
plugins: [store]
},
props: {
serviceOfServices,
caseOfUsersInService,
},
})
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,
}
},
})
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'}
}
},
})
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,
}
},
})
const defaultIsDelete = wrapper.vm.isDelete
expect(defaultIsDelete).toBe(false)
await wrapper.get('.ri-close-line').trigger('click') // Рендер отрисовывает только с помощью триггером
const updatedIsDelete = wrapper.vm.isDelete
expect(updatedIsDelete).toBe(true)
expect(wrapper.html()).toContain('Отменить')
expect(wrapper.html()).toContain('Удалить')
})
})