import React from 'react'
import { render, screen } from '@testing-library/react'
import { MemoryRouter } from 'react-router-dom'
import { CitiesPresenterBuilder, CitiesPresenterFactory, CitiesPresenterVM } from '@grenoble-hands-on/web-adapters'
import { CityBuilder } from '@grenoble-hands-on/domain'
import { Cities } from '../src/modules/Cities'
describe('CitiesComponent', () => {
it('display cities', () => {
// Given
const vm = new CitiesPresenterVM()
vm.cities = [
CityBuilder.example().withName('Grenoble').build(),
CityBuilder.example().withName('Lyon').build()
]
const presenter = new CitiesPresenterBuilder(vm).build()
const presenterFactory = { build: () => presenter } as CitiesPresenterFactory
// When
render(, { wrapper: MemoryRouter });
// Then
const citiesName = screen.getAllByRole('link').map(el => el.textContent)
expect(citiesName).toEqual(['Grenoble', 'Lyon'])
})
it('fetch cities on init', async () => {
const hasFetch = await new Promise(resolve => {
// Given
const presenter = new CitiesPresenterBuilder()
.withFetchCities(() => {
resolve(true)
return Promise.resolve()
})
.build()
const presenterFactory = { build: () => presenter } as CitiesPresenterFactory
// When
render(, { wrapper: MemoryRouter });
})
// Then
expect(hasFetch).toBeTruthy()
})
})