mirror of
https://github.com/Paris-est-Ludique/intranet.git
synced 2025-09-11 22:06:29 +02:00
Fix tests & improve pre-register
This commit is contained in:
@@ -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)
|
||||
|
@@ -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)
|
||||
|
@@ -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
38
src/store/preMemberAdd.ts
Normal 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
|
||||
)
|
@@ -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...
|
||||
})
|
||||
|
@@ -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,
|
||||
|
Reference in New Issue
Block a user