import {expect, test, describe, vi, beforeEach} from "vitest" import AdapterOfUsers from '@adapters/adapterOfUsers/Users' import ServiceOfUsers from '@services/serviceOfUsers/Users.js' import { addedUser, getUserById, usersWithThisService, usersWithoutThisService, addServiceIdToUser, deleteServiceIdFromUser, updatedUser, removedNewUser, deletedUser } from '@services/serviceOfUsers/helpers.js' import { createStore } from 'vuex' import {store as users} from "@/store/modules/users" import axios from "axios"; vi.mock('axios') const defaultUsers = [ { "id": 1, "serviceId": [1, 3], "firstName": "Leanne 1", "lastName": "Graham", "email": "test@mail.ru", "role": "admin", }, { "id": 2, "serviceId": [1], "firstName": "Leanne 2", "lastName": "Graham", "email": "test@mail.ru", "role": "admin", }, { "id": 3, "serviceId": [2, 3], "firstName": "Leanne 3", "lastName": "Graham", "email": "test@mail.ru", "role": "admin", }, { "id": 4, "serviceId": [3], "firstName": "Leanne 4", "lastName": "Graham", "email": "test@mail.ru", "role": "admin", }, { "id": 5, "serviceId": [4, 5], "firstName": "Leanne 5", "lastName": "Graham", "email": "test@mail.ru", "role": "admin", }, ] describe("tests services of users", () => { const store = createStore({ plugins: [], modules: { users }, }) beforeEach(() => { store.dispatch('users/resetStore') }) const adapterOfUsers = new AdapterOfUsers(import.meta.env.VITE_API_ADDR) const serviceOfUsers = new ServiceOfUsers(adapterOfUsers, store) axios.get.mockResolvedValue({ data: defaultUsers, }) test('Upload users by selected service', async () => { const uploadUsers = await serviceOfUsers.getUsersByService(1, 'dev') const expectedUsers = defaultUsers.filter(user => user.serviceId.includes(1)) expect(expectedUsers).toEqual(uploadUsers) // users array selected service }) test('Upload users without selected service', async () => { const uploadUsers = usersWithoutThisService(1, defaultUsers) const expectedUsers = defaultUsers.filter(user => !user.serviceId.includes(1)) expect(expectedUsers).toEqual(uploadUsers) // users array without selected service }) test('Added new user layout to user editor', async () => { const newUser = {id: -1, firstName: '',lastName: '', role: '', email: '', password: '', serviceId: []} const expectUser = await serviceOfUsers.createNewUser() expect({newUser: expectUser}).toEqual({newUser}) }) test('Added user to array users of selected service', async () => { const newUser = { "id": 6, "serviceId": [4, 5], "first_name": "Leanne 5", "last_name": "Graham", "email": "test@mail.ru", "role": "admin", } const updatedUsers = addedUser(newUser, defaultUsers) const addedNewUser = updatedUsers.find(user => user.id === 6) expect(addedNewUser).toEqual(newUser) }) test('Get user by id from array users', async () => { const selectedIdUser = 3 const selectedUser = getUserById(selectedIdUser, defaultUsers) expect(selectedUser.id).toEqual(selectedIdUser) }) test('Filtered users of selected service', async () => { const selectedIdService = 3 const usersWithSelectedService = usersWithThisService(selectedIdService, defaultUsers) expect(usersWithSelectedService).toHaveLength(3) usersWithSelectedService.map((user) => { return expect(user.serviceId.includes(selectedIdService)).toBe(true) }) }) test('Filtered users of not selected service', async () => { const selectedIdService = 3 const usersWithSelectedService = usersWithoutThisService(selectedIdService, defaultUsers) expect(usersWithSelectedService).toHaveLength(2) usersWithSelectedService.map((user) => { return expect(!user.serviceId.includes(selectedIdService)).toBe(true) }) }) test('Added selected service to user with func addServiceIdToUser', async () => { const updatedUsers = addServiceIdToUser(4, 2, defaultUsers) const selectedUserWithoutService = defaultUsers.find(user => user.id === 4).serviceId.includes(2) const selectedUserWithService = updatedUsers.find(user => user.id === 4).serviceId.includes(2) expect(selectedUserWithoutService).toBe(false) expect(selectedUserWithService).toBe(true) }) test('Deleted user from array users of selected service with func deleteServiceIdFromUser', async () => { const updatedUsers = deleteServiceIdFromUser(3, 2, defaultUsers) const selectedUserWithoutService = defaultUsers.find(user => user.id === 3).serviceId.includes(2) const selectedUserWithService = updatedUsers.find(user => user.id === 3).serviceId.includes(2) expect(selectedUserWithoutService).toBe(true) expect(selectedUserWithService).toBe(false) }) test('Edited user updated in array users', async () => { const editerUser = { "id": 3, "serviceId": [2, 3], "first_name": "Leanne 3 updated", // edited field "last_name": "Graham updated", // edited field "email": "test@mail.ru", "role": "admin", } const beforeEditUser = defaultUsers.find(user => user.id === 3) expect(beforeEditUser.first_name).not.toEqual('Leanne 3 updated') // check that user was not edited expect(beforeEditUser.last_name).not.toEqual('Graham updated') // check that user was not edited const updatedUsers = updatedUser(editerUser, defaultUsers) const getEditedUser = updatedUsers.find(user => user.id === 3) expect(getEditedUser.first_name).toEqual('Leanne 3 updated') // check that user was edited expect(getEditedUser.last_name).toEqual('Graham updated') // check that user was edited }) test('Removed new user layout from array users', async () => { const newUser = {id: -1, first_name: '',last_name: '', role: '', email: '', password: '', serviceId: []} const updatedUsers = addedUser(newUser, defaultUsers) const beforeDeleteUser = updatedUsers.find(user => user.id === -1) expect(beforeDeleteUser).toBeDefined() // before delete user const afterDeleteUser = removedNewUser(updatedUsers) const deletedServiceStore = afterDeleteUser.find(service => service.id === -1) expect(deletedServiceStore).toBeUndefined() // after delete user }) test('Updated users after deleting selected user with func deletedUser', async () => { const deleteUserId = 3 const forDeleteUser = defaultUsers.find(user => user.id === 3) expect(forDeleteUser).toBeDefined() // before delete user const updatedUsers = deletedUser(deleteUserId, defaultUsers) const afterDeletingUser = updatedUsers.find(user => user.id === 3) expect(afterDeletingUser).toBeUndefined() // after delete user }) })