import { createLocalVue } from '@vue/test-utils'
import Vuex from 'vuex'
import i18n from '~/src/config/i18n'
import router from '@/router'
import Jump, { JumpState, Channel } from '~/src/renderer/store/TimelineSpace/Modals/Jump'

const state = (): JumpState => {
  return {
    modalOpen: true,
    channel: '',
    defaultChannelList: [
      {
        name: i18n.t('side_menu.home'),
        path: 'home'
      },
      {
        name: i18n.t('side_menu.notification'),
        path: 'notifications'
      },
      {
        name: i18n.t('side_menu.favourite'),
        path: 'favourites'
      },
      {
        name: i18n.t('side_menu.local'),
        path: 'local'
      },
      {
        name: i18n.t('side_menu.public'),
        path: 'public'
      },
      {
        name: i18n.t('side_menu.hashtag'),
        path: 'hashtag'
      },
      {
        name: i18n.t('side_menu.search'),
        path: 'search'
      },
      {
        name: i18n.t('side_menu.direct'),
        path: 'direct-messages'
      }
    ],
    listChannelList: [],
    tagChannelList: [],
    selectedChannel: {
      name: i18n.t('side_menu.home'),
      path: 'home'
    }
  }
}
const initStore = () => {
  return {
    namespaced: true,
    state: state(),
    actions: Jump.actions,
    mutations: Jump.mutations
  }
}

const timelineState = {
  namespaced: true,
  state: {
    account: {
      _id: '0'
    }
  }
}

describe('Jump', () => {
  let store
  let localVue

  beforeEach(() => {
    localVue = createLocalVue()
    localVue.use(Vuex)
    store = new Vuex.Store({
      modules: {
        Jump: initStore(),
        TimelineSpace: timelineState
      }
    })
  })

  describe('jumpCurrentSelected', () => {
    it('should be changed', () => {
      store.dispatch('Jump/jumpCurrentSelected')
      expect(store.state.Jump.modalOpen).toEqual(false)
      expect(router.push).toHaveBeenCalledWith({ path: '/0/home' })
    })
  })

  describe('jump', () => {
    it('should be changed', () => {
      const channel: Channel = {
        name: 'public',
        path: 'public'
      }
      store.dispatch('Jump/jump', channel)
      expect(store.state.Jump.modalOpen).toEqual(false)
      expect(router.push).toHaveBeenCalledWith({ path: '/0/public' })
    })
  })
})
