import { mount, RouterLinkStub } from '@vue/test-utils'
import RegisterCommunity from './RegisterCommunity'

const localVue = global.localVue

const mockStoreCommit = jest.fn()

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

  const mocks = {
    $i18n: {
      locale: 'en',
    },
    $t: jest.fn((t) => t),
    $store: {
      commit: mockStoreCommit,
      state: {
        community: {
          name: '',
          description: '',
        },
      },
    },
  }

  const stubs = {
    RouterLink: RouterLinkStub,
  }

  const Wrapper = () => {
    return mount(RegisterCommunity, { localVue, mocks, stubs })
  }

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

    it('renders the Div Element "#register-community"', () => {
      expect(wrapper.find('div#register-community').exists()).toBeTruthy()
    })

    describe('Community data already loaded', () => {
      beforeEach(() => {
        jest.clearAllMocks()
        mocks.$store.state.community = {
          name: 'Gradido Entwicklung',
          url: 'http://localhost/',
          registerUrl: 'http://localhost/register',
          description: 'Die lokale Entwicklungsumgebung von Gradido.',
        }
        wrapper = Wrapper()
      })

      it('has a Community name', () => {
        expect(wrapper.find('.justify-content-center h1').text()).toBe('Gradido Entwicklung')
      })

      it('has a Community description', () => {
        expect(wrapper.find('.justify-content-center p').text()).toBe(
          'Die lokale Entwicklungsumgebung von Gradido.',
        )
      })
    })

    describe('buttons and links', () => {
      it('has a button "Continue to registration?"', () => {
        expect(wrapper.findAll('a').at(0).text()).toEqual('community.continue-to-registration')
      })
      it('button links to /register when clicking "Continue to registration"', () => {
        expect(wrapper.findAll('a').at(0).props().to).toBe('/register')
      })

      it('has a button "Choose another community?"', () => {
        expect(wrapper.findAll('a').at(1).text()).toEqual('community.choose-another-community')
      })
      it('button links to /select-community when clicking "Choose another community"', () => {
        expect(wrapper.findAll('a').at(1).props().to).toBe('/select-community')
      })

      it('has a button "Back to Login?"', () => {
        expect(wrapper.findAll('a').at(2).text()).toEqual('back')
      })
      it('button links to /login when clicking "Back to Login"', () => {
        expect(wrapper.findAll('a').at(2).props().to).toBe('/login')
      })
    })
  })
})
