import { expect, test, describe, vi, beforeEach} from "vitest" import AdapterOfServices from '@adapters/adapterOfServices/Services' import ServiceOfServices from '@services/serviceOfServices/Services.js' import {addedService, updatedService, removedNewService, deletedService} from '@services/serviceOfServices/helpers.js' import { createStore } from 'vuex' import {store as services} from "@/store/modules/services" import axios from "axios"; vi.mock('axios') 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 }, { "id": 2, "created_at": "2024-03-07T11:43:51.026265459+03:00", "updated_at": "2024-03-07T13:35:12.506368972+03:00", "deleted_at": null, "name": "new 2", "port": 4548, "proxy_ip": "172.25.78.151", "site_ip": "172.25.78.151", "internet_uri": "", "description": "new site 2", "is_online": true }, { "id": 3, "created_at": "2024-03-07T11:43:51.027148541+03:00", "updated_at": "2024-03-07T13:35:24.919273428+03:00", "deleted_at": null, "name": "new 3", "port": 2527, "proxy_ip": "172.25.78.151", "site_ip": "172.25.78.151", "internet_uri": "", "description": "new site 3...", "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 }, { "id": 2, "created_at": "2024-03-07T11:43:51.026265459+03:00", "updated_at": "2024-03-07T13:35:12.506368972+03:00", "deleted_at": null, "name": "new 2", "port": 4548, "proxy_ip": "172.25.78.151", "device_ip": "172.25.78.151", "internet_uri": "", "description": "new site 2", "is_online": true }, { "id": 3, "created_at": "2024-03-07T11:43:51.027148541+03:00", "updated_at": "2024-03-07T13:35:24.919273428+03:00", "deleted_at": null, "name": "new 3", "port": 2527, "proxy_ip": "172.25.78.151", "device_ip": "172.25.78.151", "internet_uri": "", "description": "new site 3...", "is_online": true } ] describe("tests services of services", () => { const store = createStore({ plugins: [], modules: { services }, }) beforeEach(() => { store.dispatch('services/resetStore') }) const adapterOfServices = new AdapterOfServices(import.meta.env.VITE_API_ADDR) const serviceOfServices = new ServiceOfServices(adapterOfServices, store) axios.get.mockResolvedValue({ data: defaultServices, }) test('Upload services', async () => { const services = store.getters['services/services'] expect(services).toEqual([]) // empty services array of store const uploadServices = await serviceOfServices.fetchServices() expect(uploadServices).toEqual(resServices) // full services array of store }) test('Added new service layout to services', async () => { const expectedserviceData = {"port": "", "name": "", id: -1} const newService = await serviceOfServices.addNewServiceLayout() expect({newService}).toEqual({newService: expectedserviceData}) }) test('Added new service to array services of service with func addedService', async () => { const newService = { id: 4, created_at: "2024-03-07T11:43:51.027148541+03:00", updated_at: "2024-03-07T13:35:24.919273428+03:00", deleted_at: null, name: 'test add new service', port: 2534, device_ip: '172.25.78.151', proxy_ip: '172.25.78.151', internet_uri: '', description: 'test add new service description', is_online: true } const updatedServices = addedService(newService, resServices) expect(updatedServices[0].name).toEqual('test add new service') expect(updatedServices[0].description).toEqual('test add new service description') expect(updatedServices[0].port).toEqual(2534) }) test('Set isSaveData - if need save service', async () => { const isSaveData = false expect(isSaveData).toEqual(false) // default value is false const isSaveDataChanged = await serviceOfServices.setIsSaveServices(true) expect(isSaveDataChanged).toEqual(true) // if need save service - true }) test('Saving service after editing with func updateService', async () => { const selectedEditedService = { "id": 3, "created_at": "2024-03-07T11:43:51.027148541+03:00", "updated_at": "2024-03-07T13:35:24.919273428+03:00", "deleted_at": null, "name": "edited test name", "port": 5555, "proxy_ip": "172.25.78.151", "device_ip": "172.25.78.151", "internet_uri": "", "description": "edited description field", "is_online": true } const updatedServices = updatedService(selectedEditedService, resServices) const editedService = updatedServices.find(service => service.id === 3) expect(editedService.name).toEqual('edited test name') expect(editedService.port).toEqual(5555) expect(editedService.description).toEqual('edited description field') }) test('Updated services after deleting new service with only layout with func removedNewService', async () => { store.commit('services/setServices', resServices) const newService = await serviceOfServices.addNewServiceLayout() const servicesWithNewServiceLayout = addedService(newService, resServices) const forDeleteService = servicesWithNewServiceLayout.find(service => service.id === -1) expect(forDeleteService).toBeDefined() // before delete service const updatedServices = removedNewService(servicesWithNewServiceLayout) const deletedServiceStore = updatedServices.find(service => service.id === -1) expect(deletedServiceStore).toBeUndefined() // after delete service }) test('Updated services after deleting selected service with func deletedService', async () => { const deleteServiceId = 3 const forDeleteService = resServices.find(service => service.id === 3) expect(forDeleteService).toBeDefined() // before delete service const updatedServices = deletedService(deleteServiceId, resServices) const deletedServiceStore = updatedServices.find(service => service.id === 3) expect(deletedServiceStore).toBeUndefined() // after delete service }) })