mirror of
https://github.com/Paris-est-Ludique/intranet.git
synced 2025-09-11 22:06:29 +02:00
Adds gSheet specific entity read
This commit is contained in:
@@ -13,7 +13,7 @@ jest.mock("axios")
|
||||
|
||||
const mockData = {
|
||||
"5": {
|
||||
jeuId: 5,
|
||||
id: 5,
|
||||
titre: "6 qui prend!",
|
||||
auteur: "Wolfgang Kramer",
|
||||
editeur: "(uncredited) , Design Edge , B",
|
||||
|
@@ -1,41 +1,49 @@
|
||||
import axios from "axios"
|
||||
|
||||
import mockStore from "../../utils/mockStore"
|
||||
import userData, {
|
||||
import membre, {
|
||||
getRequesting,
|
||||
getSuccess,
|
||||
getFailure,
|
||||
fetchUserData,
|
||||
fetchMembreData,
|
||||
initialState,
|
||||
} from "../userData"
|
||||
} from "../membre"
|
||||
|
||||
jest.mock("axios")
|
||||
|
||||
const mockData = {
|
||||
membreId: 1,
|
||||
name: "PeL",
|
||||
phone: "+886 0970...",
|
||||
email: "forceoranj@gmail.com",
|
||||
website: "https://www.parisestludique.fr",
|
||||
id: 1,
|
||||
nom: "Aupeix",
|
||||
prenom: "Amélie",
|
||||
mail: "pakouille.lakouille@yahoo.fr",
|
||||
telephone: "0675650392",
|
||||
photo: "images/membres/$taille/amélie_aupeix.jpg",
|
||||
alimentation: "Végétarien",
|
||||
majeur: 1,
|
||||
privilege: 0,
|
||||
actif: 0,
|
||||
commentaire: "",
|
||||
horodatage: "0000-00-00",
|
||||
passe: "$2y$10$fSxY9AIuxSiEjwF.J3eXGubIxUPlobkyRrNIal8ASimSjNj4SR.9O",
|
||||
}
|
||||
const { membreId } = mockData
|
||||
const { id } = mockData
|
||||
const mockError = "Oops! Something went wrong."
|
||||
|
||||
describe("userData reducer", () => {
|
||||
describe("membre reducer", () => {
|
||||
it("should handle initial state correctly", () => {
|
||||
// @ts-expect-error
|
||||
expect(userData(undefined, {})).toEqual(initialState)
|
||||
expect(membre(undefined, {})).toEqual(initialState)
|
||||
})
|
||||
|
||||
it("should handle requesting correctly", () => {
|
||||
expect(userData(undefined, { type: getRequesting.type, payload: membreId })).toEqual({
|
||||
expect(membre(undefined, { type: getRequesting.type, payload: id })).toEqual({
|
||||
readyStatus: "request",
|
||||
})
|
||||
})
|
||||
|
||||
it("should handle success correctly", () => {
|
||||
expect(
|
||||
userData(undefined, {
|
||||
membre(undefined, {
|
||||
type: getSuccess.type,
|
||||
payload: mockData,
|
||||
})
|
||||
@@ -44,7 +52,7 @@ describe("userData reducer", () => {
|
||||
|
||||
it("should handle failure correctly", () => {
|
||||
expect(
|
||||
userData(undefined, {
|
||||
membre(undefined, {
|
||||
type: getFailure.type,
|
||||
payload: mockError,
|
||||
})
|
||||
@@ -52,8 +60,8 @@ describe("userData reducer", () => {
|
||||
})
|
||||
})
|
||||
|
||||
describe("userData action", () => {
|
||||
it("fetches user data successful", async () => {
|
||||
describe("membre action", () => {
|
||||
it("fetches membre data successful", async () => {
|
||||
const { dispatch, getActions } = mockStore()
|
||||
const expectedActions = [
|
||||
{ type: getRequesting.type },
|
||||
@@ -63,11 +71,11 @@ describe("userData action", () => {
|
||||
// @ts-expect-error
|
||||
axios.get.mockResolvedValue({ data: mockData })
|
||||
|
||||
await dispatch(fetchUserData(membreId))
|
||||
await dispatch(fetchMembreData(id))
|
||||
expect(getActions()).toEqual(expectedActions)
|
||||
})
|
||||
|
||||
it("fetches user data failed", async () => {
|
||||
it("fetches membre data failed", async () => {
|
||||
const { dispatch, getActions } = mockStore()
|
||||
const expectedActions = [
|
||||
{ type: getRequesting.type },
|
||||
@@ -77,7 +85,7 @@ describe("userData action", () => {
|
||||
// @ts-expect-error
|
||||
axios.get.mockRejectedValue({ message: mockError })
|
||||
|
||||
await dispatch(fetchUserData(membreId))
|
||||
await dispatch(fetchMembreData(id))
|
||||
expect(getActions()).toEqual(expectedActions)
|
||||
})
|
||||
})
|
@@ -1,35 +1,43 @@
|
||||
import axios from "axios"
|
||||
|
||||
import mockStore from "../../utils/mockStore"
|
||||
import userList, {
|
||||
import membreList, {
|
||||
initialState,
|
||||
getRequesting,
|
||||
getSuccess,
|
||||
getFailure,
|
||||
fetchUserList,
|
||||
} from "../userList"
|
||||
fetchMembreList,
|
||||
} from "../membreList"
|
||||
|
||||
jest.mock("axios")
|
||||
|
||||
const mockData = {
|
||||
"1": {
|
||||
membreId: 1,
|
||||
name: "PeL",
|
||||
phone: "+886 0970...",
|
||||
email: "forceoranj@gmail.com",
|
||||
website: "https://www.parisestludique.fr",
|
||||
id: 1,
|
||||
nom: "Aupeix",
|
||||
prenom: "Amélie",
|
||||
mail: "pakouille.lakouille@yahoo.fr",
|
||||
telephone: "0675650392",
|
||||
photo: "images/membres/$taille/amélie_aupeix.jpg",
|
||||
alimentation: "Végétarien",
|
||||
majeur: 1,
|
||||
privilege: 0,
|
||||
actif: 0,
|
||||
commentaire: "",
|
||||
horodatage: "0000-00-00",
|
||||
passe: "$2y$10$fSxY9AIuxSiEjwF.J3eXGubIxUPlobkyRrNIal8ASimSjNj4SR.9O",
|
||||
},
|
||||
}
|
||||
const mockError = "Oops! Something went wrong."
|
||||
|
||||
describe("userList reducer", () => {
|
||||
describe("membreList reducer", () => {
|
||||
it("should handle initial state", () => {
|
||||
// @ts-expect-error
|
||||
expect(userList(undefined, {})).toEqual(initialState)
|
||||
expect(membreList(undefined, {})).toEqual(initialState)
|
||||
})
|
||||
|
||||
it("should handle requesting correctly", () => {
|
||||
expect(userList(undefined, { type: getRequesting.type })).toEqual({
|
||||
expect(membreList(undefined, { type: getRequesting.type })).toEqual({
|
||||
readyStatus: "request",
|
||||
ids: [],
|
||||
entities: {},
|
||||
@@ -37,7 +45,7 @@ describe("userList reducer", () => {
|
||||
})
|
||||
|
||||
it("should handle success correctly", () => {
|
||||
expect(userList(undefined, { type: getSuccess.type, payload: mockData })).toEqual({
|
||||
expect(membreList(undefined, { type: getSuccess.type, payload: mockData })).toEqual({
|
||||
...initialState,
|
||||
readyStatus: "success",
|
||||
ids: [1],
|
||||
@@ -46,7 +54,7 @@ describe("userList reducer", () => {
|
||||
})
|
||||
|
||||
it("should handle failure correctly", () => {
|
||||
expect(userList(undefined, { type: getFailure.type, payload: mockError })).toEqual({
|
||||
expect(membreList(undefined, { type: getFailure.type, payload: mockError })).toEqual({
|
||||
...initialState,
|
||||
readyStatus: "failure",
|
||||
error: mockError,
|
||||
@@ -54,8 +62,8 @@ describe("userList reducer", () => {
|
||||
})
|
||||
})
|
||||
|
||||
describe("userList action", () => {
|
||||
it("fetches user list successful", async () => {
|
||||
describe("membreList action", () => {
|
||||
it("fetches membre list successful", async () => {
|
||||
const { dispatch, getActions } = mockStore()
|
||||
const expectedActions = [
|
||||
{ type: getRequesting.type },
|
||||
@@ -65,11 +73,11 @@ describe("userList action", () => {
|
||||
// @ts-expect-error
|
||||
axios.get.mockResolvedValue({ data: mockData })
|
||||
|
||||
await dispatch(fetchUserList())
|
||||
await dispatch(fetchMembreList())
|
||||
expect(getActions()).toEqual(expectedActions)
|
||||
})
|
||||
|
||||
it("fetches user list failed", async () => {
|
||||
it("fetches membre list failed", async () => {
|
||||
const { dispatch, getActions } = mockStore()
|
||||
const expectedActions = [
|
||||
{ type: getRequesting.type },
|
||||
@@ -79,7 +87,7 @@ describe("userList action", () => {
|
||||
// @ts-expect-error
|
||||
axios.get.mockRejectedValue({ message: mockError })
|
||||
|
||||
await dispatch(fetchUserList())
|
||||
await dispatch(fetchMembreList())
|
||||
expect(getActions()).toEqual(expectedActions)
|
||||
})
|
||||
})
|
@@ -6,7 +6,7 @@ import { Envie, EnvieWithoutId, addEnvie } from "../services/envies"
|
||||
import { AppThunk } from "."
|
||||
|
||||
const envieAdapter = createEntityAdapter<Envie>({
|
||||
selectId: (envie) => envie.envieId,
|
||||
selectId: (envie) => envie.id,
|
||||
})
|
||||
|
||||
const envieAdd = createSlice({
|
||||
|
@@ -6,7 +6,7 @@ import { Envie, getEnvieList } from "../services/envies"
|
||||
import { AppThunk, AppState } from "."
|
||||
|
||||
const envieAdapter = createEntityAdapter<Envie>({
|
||||
selectId: (envie) => envie.envieId,
|
||||
selectId: (envie) => envie.id,
|
||||
})
|
||||
|
||||
const envieList = createSlice({
|
||||
|
@@ -6,7 +6,7 @@ import { JeuJav, getJeuJavList } from "../services/jeuJav"
|
||||
import { AppThunk, AppState } from "."
|
||||
|
||||
const jeuJavAdapter = createEntityAdapter<JeuJav>({
|
||||
selectId: (jeuJav) => jeuJav.jeuId,
|
||||
selectId: (jeuJav) => jeuJav.id,
|
||||
})
|
||||
|
||||
export const initialState = jeuJavAdapter.getInitialState({
|
||||
|
@@ -2,23 +2,23 @@ import { PayloadAction, createSlice } from "@reduxjs/toolkit"
|
||||
import { toast } from "react-toastify"
|
||||
|
||||
import { StateRequest } from "./utils"
|
||||
import { User, getUserData } from "../services/jsonPlaceholder"
|
||||
import { Membre, getMembre } from "../services/membres"
|
||||
import { AppThunk, AppState } from "."
|
||||
|
||||
type StateUser = { entity?: User } & StateRequest
|
||||
type StateMembre = { entity?: Membre } & StateRequest
|
||||
|
||||
export const initialState: StateUser = {
|
||||
export const initialState: StateMembre = {
|
||||
readyStatus: "idle",
|
||||
}
|
||||
|
||||
const userData = createSlice({
|
||||
name: "userData",
|
||||
const membre = createSlice({
|
||||
name: "membre",
|
||||
initialState,
|
||||
reducers: {
|
||||
getRequesting: (_) => ({
|
||||
readyStatus: "request",
|
||||
}),
|
||||
getSuccess: (_, { payload }: PayloadAction<User>) => ({
|
||||
getSuccess: (_, { payload }: PayloadAction<Membre>) => ({
|
||||
readyStatus: "success",
|
||||
entity: payload,
|
||||
}),
|
||||
@@ -29,19 +29,19 @@ const userData = createSlice({
|
||||
},
|
||||
})
|
||||
|
||||
export default userData.reducer
|
||||
export const { getRequesting, getSuccess, getFailure } = userData.actions
|
||||
export default membre.reducer
|
||||
export const { getRequesting, getSuccess, getFailure } = membre.actions
|
||||
|
||||
export const fetchUserData =
|
||||
export const fetchMembreData =
|
||||
(id: number): AppThunk =>
|
||||
async (dispatch) => {
|
||||
dispatch(getRequesting())
|
||||
|
||||
const { error, data } = await getUserData(id)
|
||||
const { error, data } = await getMembre(id)
|
||||
|
||||
if (error) {
|
||||
dispatch(getFailure(error.message))
|
||||
toast.error(`Erreur lors du chargement de l'utilisateur ${id}: ${error.message}`, {
|
||||
toast.error(`Erreur lors du chargement du membre ${id}: ${error.message}`, {
|
||||
position: "top-center",
|
||||
autoClose: 6000,
|
||||
hideProgressBar: true,
|
||||
@@ -51,18 +51,17 @@ export const fetchUserData =
|
||||
progress: undefined,
|
||||
})
|
||||
} else {
|
||||
dispatch(getSuccess(data as User))
|
||||
dispatch(getSuccess(data as Membre))
|
||||
}
|
||||
}
|
||||
|
||||
const shouldFetchUserData = (state: AppState, id: number) =>
|
||||
state.userData.readyStatus !== "success" ||
|
||||
(state.userData.entity && state.userData.entity.membreId !== id)
|
||||
const shouldFetchMembreData = (state: AppState, id: number) =>
|
||||
state.membre.readyStatus !== "success" || (state.membre.entity && state.membre.entity.id !== id)
|
||||
|
||||
export const fetchUserDataIfNeed =
|
||||
export const fetchMembreDataIfNeed =
|
||||
(id: number): AppThunk =>
|
||||
(dispatch, getState) => {
|
||||
if (shouldFetchUserData(getState(), id)) return dispatch(fetchUserData(id))
|
||||
if (shouldFetchMembreData(getState(), id)) return dispatch(fetchMembreData(id))
|
||||
|
||||
return null
|
||||
}
|
@@ -2,27 +2,25 @@ import { PayloadAction, createSlice, createEntityAdapter } from "@reduxjs/toolki
|
||||
import { toast } from "react-toastify"
|
||||
|
||||
import { StateRequest } from "./utils"
|
||||
import { User, getUserList } from "../services/jsonPlaceholder"
|
||||
import { Membre, getMembreList } from "../services/membres"
|
||||
import { AppThunk, AppState } from "."
|
||||
|
||||
const userAdapter = createEntityAdapter<User>({
|
||||
selectId: (user) => user.membreId,
|
||||
})
|
||||
const membreAdapter = createEntityAdapter<Membre>()
|
||||
|
||||
export const initialState = userAdapter.getInitialState({
|
||||
export const initialState = membreAdapter.getInitialState({
|
||||
readyStatus: "idle",
|
||||
} as StateRequest)
|
||||
|
||||
const userList = createSlice({
|
||||
name: "userList",
|
||||
const membreList = createSlice({
|
||||
name: "membreList",
|
||||
initialState,
|
||||
reducers: {
|
||||
getRequesting: (state) => {
|
||||
state.readyStatus = "request"
|
||||
},
|
||||
getSuccess: (state, { payload }: PayloadAction<User[]>) => {
|
||||
getSuccess: (state, { payload }: PayloadAction<Membre[]>) => {
|
||||
state.readyStatus = "success"
|
||||
userAdapter.setAll(state, payload)
|
||||
membreAdapter.setAll(state, payload)
|
||||
},
|
||||
getFailure: (state, { payload }: PayloadAction<string>) => {
|
||||
state.readyStatus = "failure"
|
||||
@@ -31,13 +29,13 @@ const userList = createSlice({
|
||||
},
|
||||
})
|
||||
|
||||
export default userList.reducer
|
||||
export const { getRequesting, getSuccess, getFailure } = userList.actions
|
||||
export default membreList.reducer
|
||||
export const { getRequesting, getSuccess, getFailure } = membreList.actions
|
||||
|
||||
export const fetchUserList = (): AppThunk => async (dispatch) => {
|
||||
export const fetchMembreList = (): AppThunk => async (dispatch) => {
|
||||
dispatch(getRequesting())
|
||||
|
||||
const { error, data } = await getUserList()
|
||||
const { error, data } = await getMembreList()
|
||||
|
||||
if (error) {
|
||||
dispatch(getFailure(error.message))
|
||||
@@ -51,14 +49,14 @@ export const fetchUserList = (): AppThunk => async (dispatch) => {
|
||||
progress: undefined,
|
||||
})
|
||||
} else {
|
||||
dispatch(getSuccess(data as User[]))
|
||||
dispatch(getSuccess(data as Membre[]))
|
||||
}
|
||||
}
|
||||
|
||||
const shouldFetchUserList = (state: AppState) => state.userList.readyStatus !== "success"
|
||||
const shouldFetchMembreList = (state: AppState) => state.membreList.readyStatus !== "success"
|
||||
|
||||
export const fetchUserListIfNeed = (): AppThunk => (dispatch, getState) => {
|
||||
if (shouldFetchUserList(getState())) return dispatch(fetchUserList())
|
||||
export const fetchMembreListIfNeed = (): AppThunk => (dispatch, getState) => {
|
||||
if (shouldFetchMembreList(getState())) return dispatch(fetchMembreList())
|
||||
|
||||
return null
|
||||
}
|
@@ -1,16 +1,16 @@
|
||||
import { History } from "history"
|
||||
import { connectRouter } from "connected-react-router"
|
||||
|
||||
import userList from "./userList"
|
||||
import userData from "./userData"
|
||||
import membreList from "./membreList"
|
||||
import membre from "./membre"
|
||||
import jeuJavList from "./jeuJavList"
|
||||
import envieList from "./envieList"
|
||||
|
||||
// Use inferred return type for making correctly Redux types
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
||||
export default (history: History) => ({
|
||||
userList,
|
||||
userData,
|
||||
membreList,
|
||||
membre,
|
||||
jeuJavList,
|
||||
envieList,
|
||||
router: connectRouter(history) as any,
|
||||
|
Reference in New Issue
Block a user