import { mount} from '@vue/test-utils'
import { expect, test, describe, vi } from 'vitest'
import Sites from '@pages/SitesManagerPage/SitesManagerPage.vue';
import { createStore } from 'vuex'
import {store as services} from '@/store/modules/services';
import {store as users} from '@/store/modules/users';
import axios from "axios";

vi.mock('axios')


describe("tests App mounted with vuex", () => {
  const store = createStore({
    plugins: [],
    modules: {
      services,
      users
    },
  })

  const mockData = [
    {
      "id": 1,
      "first_name": "Leanne",
      "last_name": "Graham",
      "email": "test@mail.ru",
      "role": "admin",
      "is_active": true
    }
  ]

  axios.get.mockResolvedValue({
    data: mockData,
  })

  test('tests App mounted with vuex', async () => {
    const wrapper = mount(Sites, {
      shallow: true,
      global: {
        plugins: [store]
      }
    })

    const siteId = 1
    const answer = await wrapper.vm.selectSite(siteId, "production")

    const usersList = store.getters['users/usersList']
    const componentState = store.getters['users/componentState']
    const selectedService = store.getters['services/selectedService']

    expect(usersList).toEqual([{
      "id": 1,
      "first_name": "Leanne",
      "last_name": "Graham",
      "email": "test@mail.ru",
      "role": "admin",
      "is_active": true
    }])
    expect(componentState).toEqual('active')
    expect(selectedService).toBe(null)
    expect(answer).toBe("ok")
  })
})


