diff --git a/client/src/actions/cities.ts b/client/src/actions/cities.ts index 381d0a04236ec630e4cc0242235bc490567bd5a2..a54475c7cbd69b06db3476cd7d6c08ebd7739070 100644 --- a/client/src/actions/cities.ts +++ b/client/src/actions/cities.ts @@ -8,7 +8,15 @@ export const getCities = () => async (dispatch: AppDispatch) => { .then((res) => { dispatch({ type: Types.SET_CITIES, - payload: res.data, + payload: res.data.items, + }) + dispatch({ + type: Types.SET_COMPETITIONS_TOTAL, + payload: res.data.total_count, + }) + dispatch({ + type: Types.SET_COMPETITIONS_COUNT, + payload: res.data.count, }) }) .catch((err) => console.log(err)) diff --git a/client/src/actions/competitions.ts b/client/src/actions/competitions.ts index 35f12d31f556bce9a08ad722c811a922f191717b..a758fd635550306eecb09e8100d5e17cb09a8ce1 100644 --- a/client/src/actions/competitions.ts +++ b/client/src/actions/competitions.ts @@ -19,11 +19,11 @@ export const getCompetitions = () => async (dispatch: AppDispatch, getState: () .then((res) => { dispatch({ type: Types.SET_COMPETITIONS, - payload: res.data.competitions, + payload: res.data.items, }) dispatch({ type: Types.SET_COMPETITIONS_TOTAL, - payload: res.data.total, + payload: res.data.total_count, }) dispatch({ type: Types.SET_COMPETITIONS_COUNT, diff --git a/client/src/actions/types.ts b/client/src/actions/types.ts index d265a692c8583eb8f7d419cb2a513f8fd554b2b6..40e9430369e7314b77e7dcc133132e98de1f67f6 100644 --- a/client/src/actions/types.ts +++ b/client/src/actions/types.ts @@ -11,6 +11,8 @@ export default { SET_COMPETITIONS_TOTAL: 'SET_COMPETITIONS_TOTAL', SET_COMPETITIONS_COUNT: 'SET_COMPETITIONS_COUNT', SET_CITIES: 'SET_CITIES', + SET_CITIES_TOTAL: 'SET_CITIES_TOTAL', + SET_CITIES_COUNT: 'SET_CITIES_COUNT', AXIOS_GET: 'AXIOS_GET', AXIOS_GET_SUCCESS: 'AXIOS_GET_SUCCESS', AXIOS_GET_ERROR: 'AXIOS_GET_ERROR', diff --git a/client/src/pages/admin/components/AddCompetition.test.tsx b/client/src/pages/admin/components/AddCompetition.test.tsx new file mode 100644 index 0000000000000000000000000000000000000000..3455447bc8a487f9f9f70502e21e868ddc4cdbc7 --- /dev/null +++ b/client/src/pages/admin/components/AddCompetition.test.tsx @@ -0,0 +1,52 @@ +import { fireEvent, render, screen } from '@testing-library/react' +import { mount } from 'enzyme' +import React from 'react' +import { Provider } from 'react-redux' +import { BrowserRouter } from 'react-router-dom' +import configureMockStore from 'redux-mock-store' +import thunk from 'redux-thunk' +import store from '../../../store' +import AddCompetition from './AddCompetition' + +const middlewares = [thunk] +const mockStore = configureMockStore(middlewares) + +fit('renders add competition', () => { + render( + <BrowserRouter> + <Provider store={store}> + <AddCompetition /> + </Provider> + </BrowserRouter> + ) +}) + +fit('it adds competitions', () => { + const cities = [ + { + id: 1, + name: 'Link\u00f6ping', + }, + { + id: 2, + name: 'Stockholm', + }, + ] + const store = mockStore({ cities }) + // console.log(store.getState()) + const wrapper = mount( + <Provider store={store}> + <AddCompetition /> + </Provider> + ) + const newCompetitionButton = wrapper.find('button') + newCompetitionButton.simulate('click') + const nameField = screen.getByRole('textbox') + // const nameField = textFields.children().first() + + // nameField.simulate('focus') + // nameField.simulate('change', { target: { value: 'Changed' } }) + console.log(nameField) + fireEvent.click(nameField) + expect(wrapper.text().includes('2')).toBe(true) //TODO: check that SlideSettings exists +}) diff --git a/client/src/pages/admin/components/AddCompetition.tsx b/client/src/pages/admin/components/AddCompetition.tsx index 3bb54db01f3935c4028548ccff0044cdda174adb..bc06fdb28528103aa3c1be842023296fe692b4ac 100644 --- a/client/src/pages/admin/components/AddCompetition.tsx +++ b/client/src/pages/admin/components/AddCompetition.tsx @@ -38,7 +38,7 @@ const competitionSchema: Yup.SchemaOf<AddCompetitionFormModel> = Yup.object({ const AddCompetition: React.FC = (props: any) => { const [anchorEl, setAnchorEl] = React.useState<HTMLButtonElement | null>(null) const [selectedCity, setSelectedCity] = React.useState<City | undefined>() - const cities = useAppSelector((state) => state.cities) + const cities = useAppSelector((state) => state.cities.cities) const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => { setAnchorEl(event.currentTarget) } diff --git a/client/src/pages/admin/components/CompetitionManager.tsx b/client/src/pages/admin/components/CompetitionManager.tsx index c6803b0327dc48f11338d2e5c157744b5ba836bf..2acce64b8b11b33e089f15f8d34b1472de2b8898 100644 --- a/client/src/pages/admin/components/CompetitionManager.tsx +++ b/client/src/pages/admin/components/CompetitionManager.tsx @@ -40,7 +40,7 @@ const CompetitionManager: React.FC = (props: any) => { const competitions = useAppSelector((state) => state.competitions.competitions) const filterParams = useAppSelector((state) => state.competitions.filterParams) const competitionTotal = useAppSelector((state) => state.competitions.total) - const cities = useAppSelector((state) => state.cities) + const cities = useAppSelector((state) => state.cities.cities) const classes = useStyles() const noFilterText = 'Alla' const dispatch = useAppDispatch() diff --git a/client/src/reducers/citiesReducer.ts b/client/src/reducers/citiesReducer.ts index 871123d82d03f6b8faf149d79f2cc1c67300098f..1c9542ff0c6ec2059a56f1ff5b5ac58c046114c6 100644 --- a/client/src/reducers/citiesReducer.ts +++ b/client/src/reducers/citiesReducer.ts @@ -2,12 +2,31 @@ import { AnyAction } from 'redux' import Types from '../actions/types' import { City } from '../interfaces/City' -const initialState: City[] = [] +interface CityState { + cities: City[] + total: number + count: number +} +const initialState: CityState = { + cities: [], + total: 0, + count: 0, +} export default function (state = initialState, action: AnyAction) { switch (action.type) { case Types.SET_CITIES: - return action.payload as City[] + return { ...state, cities: action.payload as City[] } + case Types.SET_CITIES_TOTAL: + return { + ...state, + total: action.payload as number, + } + case Types.SET_CITIES_COUNT: + return { + ...state, + count: action.payload as number, + } default: return state }