Fix tests & improve pre-register

This commit is contained in:
pikiou
2021-12-03 10:39:37 +01:00
parent fde48e6cbb
commit d63f906206
44 changed files with 739 additions and 899 deletions

View File

@@ -1,4 +1,5 @@
import axios from "axios"
import _ from "lodash"
import mockStore from "../../utils/mockStore"
import JeuJavList, {
@@ -8,11 +9,12 @@ import JeuJavList, {
getFailure,
fetchJeuJavList,
} from "../jeuJavList"
import { JeuJav } from "../../services/jeuxJav"
jest.mock("axios")
const mockData = {
"5": {
const mockFrenchData: any[] = [
{
id: 5,
titre: "6 qui prend!",
auteur: "Wolfgang Kramer",
@@ -22,16 +24,35 @@ const mockData = {
duree: 45,
type: "Ambiance",
poufpaf: "0-9-2/6-qui-prend-6-nimmt",
photo: "https://cf.geekdo-images.com/thumb/img/lzczxR5cw7an7tRWeHdOrRtLyes=/fit-in/200x150/pic772547.jpg",
bggPhoto: "",
bggPhoto:
"https://cf.geekdo-images.com/thumb/img/lzczxR5cw7an7tRWeHdOrRtLyes=/fit-in/200x150/pic772547.jpg",
bggId: 432,
exemplaires: 1,
dispoPret: 1,
nonRangee: 0,
horodatage: "0000-00-00",
ean: "3421272101313",
},
}
]
const mockEnglishData: JeuJav[] = [
{
id: 5,
title: "6 qui prend!",
author: "Wolfgang Kramer",
editor: "(uncredited) , Design Edge , B",
playersMin: 2,
playersMax: 10,
duration: 45,
type: "Ambiance",
poufpaf: "0-9-2/6-qui-prend-6-nimmt",
bggPhoto:
"https://cf.geekdo-images.com/thumb/img/lzczxR5cw7an7tRWeHdOrRtLyes=/fit-in/200x150/pic772547.jpg",
bggId: 432,
copies: 1,
lendAvailability: 1,
notStored: 0,
ean: "3421272101313",
},
]
const mockError = "Oops! Something went wrong."
describe("JeuJavList reducer", () => {
@@ -49,11 +70,11 @@ describe("JeuJavList reducer", () => {
})
it("should handle success correctly", () => {
expect(JeuJavList(undefined, { type: getSuccess.type, payload: mockData })).toEqual({
expect(JeuJavList(undefined, { type: getSuccess.type, payload: mockEnglishData })).toEqual({
...initialState,
readyStatus: "success",
ids: [5],
entities: mockData,
ids: _.map(mockEnglishData, "id"),
entities: _.keyBy(mockEnglishData, "id"),
})
})
@@ -70,12 +91,12 @@ describe("JeuJavList action", () => {
it("fetches JeuJav list successful", async () => {
const { dispatch, getActions } = mockStore()
const expectedActions = [
{ type: getRequesting.type },
{ type: getSuccess.type, payload: mockData },
{ type: getRequesting.type, payload: undefined },
{ type: getSuccess.type, payload: mockEnglishData },
]
// @ts-expect-error
axios.get.mockResolvedValue({ data: mockData })
axios.get.mockResolvedValue({ data: mockFrenchData })
await dispatch(fetchJeuJavList())
expect(getActions()).toEqual(expectedActions)

View File

@@ -2,10 +2,11 @@ import axios from "axios"
import mockStore from "../../utils/mockStore"
import membre, { getRequesting, getSuccess, getFailure, fetchMembre, initialState } from "../membre"
import { Membre } from "../../services/membres"
jest.mock("axios")
const mockData = {
const mockFrenchData: any = {
id: 1,
nom: "Aupeix",
prenom: "Amélie",
@@ -20,7 +21,23 @@ const mockData = {
horodatage: "0000-00-00",
passe: "$2y$10$fSxY9AIuxSiEjwF.J3eXGubIxUPlobkyRrNIal8ASimSjNj4SR.9O",
}
const { id } = mockData
const mockEnglishData: Membre = {
id: 1,
lastname: "Aupeix",
firstname: "Amélie",
email: "pakouille.lakouille@yahoo.fr",
mobile: "0675650392",
photo: "images/membres/$taille/amélie_aupeix.jpg",
food: "Végétarien",
adult: 1,
privileges: 0,
active: 0,
comment: "",
timestamp: "0000-00-00",
password: "$2y$10$fSxY9AIuxSiEjwF.J3eXGubIxUPlobkyRrNIal8ASimSjNj4SR.9O",
}
const { id } = mockEnglishData
const mockError = "Oops! Something went wrong."
describe("membre reducer", () => {
@@ -39,9 +56,9 @@ describe("membre reducer", () => {
expect(
membre(undefined, {
type: getSuccess.type,
payload: mockData,
payload: mockEnglishData,
})
).toEqual({ readyStatus: "success", entity: mockData })
).toEqual({ readyStatus: "success", entity: mockEnglishData })
})
it("should handle failure correctly", () => {
@@ -58,12 +75,12 @@ describe("membre action", () => {
it("fetches membre data successful", async () => {
const { dispatch, getActions } = mockStore()
const expectedActions = [
{ type: getRequesting.type },
{ type: getSuccess.type, payload: mockData },
{ type: getRequesting.type, payload: undefined },
{ type: getSuccess.type, payload: mockEnglishData },
]
// @ts-expect-error
axios.get.mockResolvedValue({ data: mockData })
axios.get.mockResolvedValue({ data: mockFrenchData })
await dispatch(fetchMembre(id))
expect(getActions()).toEqual(expectedActions)

View File

@@ -1,4 +1,5 @@
import axios from "axios"
import _ from "lodash"
import mockStore from "../../utils/mockStore"
import membreList, {
@@ -8,11 +9,12 @@ import membreList, {
getFailure,
fetchMembreList,
} from "../membreList"
import { Membre } from "../../services/membres"
jest.mock("axios")
const mockData = {
"1": {
const mockFrenchData: any[] = [
{
id: 1,
nom: "Aupeix",
prenom: "Amélie",
@@ -27,7 +29,25 @@ const mockData = {
horodatage: "0000-00-00",
passe: "$2y$10$fSxY9AIuxSiEjwF.J3eXGubIxUPlobkyRrNIal8ASimSjNj4SR.9O",
},
}
]
const mockEnglishData: Membre[] = [
{
id: 1,
lastname: "Aupeix",
firstname: "Amélie",
email: "pakouille.lakouille@yahoo.fr",
mobile: "0675650392",
photo: "images/membres/$taille/amélie_aupeix.jpg",
food: "Végétarien",
adult: 1,
privileges: 0,
active: 0,
comment: "",
timestamp: "0000-00-00",
password: "$2y$10$fSxY9AIuxSiEjwF.J3eXGubIxUPlobkyRrNIal8ASimSjNj4SR.9O",
},
]
const mockError = "Oops! Something went wrong."
describe("membreList reducer", () => {
@@ -45,11 +65,11 @@ describe("membreList reducer", () => {
})
it("should handle success correctly", () => {
expect(membreList(undefined, { type: getSuccess.type, payload: mockData })).toEqual({
expect(membreList(undefined, { type: getSuccess.type, payload: mockEnglishData })).toEqual({
...initialState,
readyStatus: "success",
ids: [1],
entities: mockData,
ids: _.map(mockEnglishData, "id"),
entities: _.keyBy(mockEnglishData, "id"),
})
})
@@ -66,12 +86,12 @@ describe("membreList action", () => {
it("fetches membre list successful", async () => {
const { dispatch, getActions } = mockStore()
const expectedActions = [
{ type: getRequesting.type },
{ type: getSuccess.type, payload: mockData },
{ type: getRequesting.type, payload: undefined },
{ type: getSuccess.type, payload: mockEnglishData },
]
// @ts-expect-error
axios.get.mockResolvedValue({ data: mockData })
axios.get.mockResolvedValue({ data: mockFrenchData })
await dispatch(fetchMembreList())
expect(getActions()).toEqual(expectedActions)

38
src/store/preMemberAdd.ts Normal file
View File

@@ -0,0 +1,38 @@
import { PayloadAction, createSlice, createEntityAdapter } from "@reduxjs/toolkit"
import { StateRequest, elementAddFetch } from "./utils"
import { PreMember, preMemberAdd } from "../services/preMembers"
const preMemberAdapter = createEntityAdapter<PreMember>()
const preMemberAddSlice = createSlice({
name: "addPreMember",
initialState: preMemberAdapter.getInitialState({
readyStatus: "idle",
} as StateRequest),
reducers: {
getRequesting: (state) => {
state.readyStatus = "request"
},
getSuccess: (state, { payload }: PayloadAction<PreMember>) => {
state.readyStatus = "success"
preMemberAdapter.addOne(state, payload)
},
getFailure: (state, { payload }: PayloadAction<string>) => {
state.readyStatus = "failure"
state.error = payload
},
},
})
export default preMemberAddSlice.reducer
export const { getRequesting, getSuccess, getFailure } = preMemberAddSlice.actions
export const fetchPreMemberAdd = elementAddFetch(
preMemberAdd,
getRequesting,
getSuccess,
getFailure,
() => null,
() => null
)

View File

@@ -8,6 +8,7 @@ import membre from "./membre"
import membreAdd from "./membreAdd"
import membreList from "./membreList"
import membreSet from "./membreSet"
import preMemberAdd from "./preMemberAdd"
// Use inferred return type for making correctly Redux types
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
@@ -19,6 +20,7 @@ export default (history: History) => ({
membreAdd,
membreList,
membreSet,
preMemberAdd,
router: connectRouter(history) as any,
// Register more reducers...
})

View File

@@ -23,7 +23,7 @@ export function toastError(message: string): void {
export function toastSuccess(message: string): void {
toast.success(message, {
position: "top-center",
autoClose: 3000,
autoClose: 5000,
hideProgressBar: true,
closeOnClick: true,
pauseOnHover: true,