import { mount } from '@vue/test-utils'
import VueRouter from 'vue-router'
import AuthNavbar from './Navbar.vue'

const localVue = global.localVue
localVue.use(VueRouter)

const router = new VueRouter()

const propsData = {
  balance: 1234,
}

const mocks = {
  $i18n: {
    locale: 'en',
  },
  $t: jest.fn((t) => t),
  $store: {
    state: {
      firstName: 'Testy',
      lastName: 'User',
      email: 'testy.user@example.com',
    },
  },
}

describe('AuthNavbar', () => {
  let wrapper

  const Wrapper = () => {
    return mount(AuthNavbar, { localVue, router, propsData, mocks })
  }

  describe('mount', () => {
    beforeEach(() => {
      wrapper = Wrapper()
    })

    it('renders the component', () => {
      expect(wrapper.find('div.navbar-component').exists()).toBeTruthy()
    })

    it('has a .navbar-brand element', () => {
      expect(wrapper.find('div.navbar-brand').exists()).toBeTruthy()
    })

    describe('.avatar element', () => {
      it('is rendered', () => {
        expect(wrapper.find('div.vue-avatar--wrapper').exists()).toBeTruthy()
      })

      it("has the user's initials", () => {
        expect(wrapper.find('.vue-avatar--wrapper').text()).toBe(
          `${wrapper.vm.$store.state.firstName[0]}${wrapper.vm.$store.state.lastName[0]}`,
        )
      })
    })

    describe('user info', () => {
      it('has the full name', () => {
        expect(wrapper.find('div[data-test="navbar-item-username"]').text()).toBe(
          `${wrapper.vm.$store.state.firstName} ${wrapper.vm.$store.state.lastName}`,
        )
      })

      it('has the email address', () => {
        // expect(wrapper.find('div.small:nth-child(2)').text()).toBe(wrapper.vm.$store.state.email)
        expect(wrapper.find('div[data-test="navbar-item-email"]').text()).toBe(
          wrapper.vm.$store.state.email,
        )
      })
    })
  })
})
