-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(fusager): hébergement desactivation et reactivation 663-837 (#744)
## Tickets liés Close # tickets liés : 663 et 837 ## Description côté FUsagers : Sur liste hébergement - Ajout du bouton désactiver un hébergement qui est actif dont on est le siège social (ou personne physique) - Ajout du bouton réactiver un hébergement qui est désactivé dont on est le siège social (ou personne physique) Idem sur la fiche hébergement avec les mêmes conditions. ### dont régressions potentielles à tester Création d'un hébergement - Depuis une DS ou depuis la liste des hébergements ## Screenshot / liens loom ## Check-list - [X] Ma branche est rebase sur main - [X] Des tests ont été écrits pour tous les endpoints créés ou modifiés - [X] Refacto "à la volée" des parties sur lesquelles j'ai codée - [X] Plus de `console.log`
- Loading branch information
Showing
17 changed files
with
529 additions
and
40 deletions.
There are no files selected for viewing
49 changes: 49 additions & 0 deletions
49
packages/backend/src/controllers/hebergement/desactivate.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
const logger = require("../../utils/logger"); | ||
const AppError = require("../../utils/error"); | ||
const Hebergement = require("../../services/hebergement/Hebergement"); | ||
const HebergementHelper = require("../../helpers/hebergement"); | ||
|
||
const log = logger(module.filename); | ||
|
||
module.exports = async function desactivate(req, res, next) { | ||
const hebergementId = req.params.id; | ||
const { decoded } = req; | ||
const userId = decoded.id; | ||
|
||
if (!hebergementId) { | ||
log.w("missing or invalid parameter"); | ||
|
||
return next( | ||
new AppError("Paramètre incorrect", { | ||
statusCode: 400, | ||
}), | ||
); | ||
} | ||
// On recharge l'hébergement tel qu'il était avant désactivation pour pouvoir historiser et désactiver | ||
const hebergement = await Hebergement.getById(hebergementId); | ||
if (!hebergement) { | ||
log.w("DONE with error"); | ||
return next( | ||
new AppError("Hébergement non trouvée", { | ||
statusCode: 404, | ||
}), | ||
); | ||
} | ||
try { | ||
await Hebergement.update( | ||
userId, | ||
hebergementId, | ||
hebergement, | ||
HebergementHelper.statuts.DESACTIVE, | ||
); | ||
|
||
log.i("DONE"); | ||
return res.sendStatus(200); | ||
} catch (error) { | ||
if (error.cause === "archive") { | ||
return next(new AppError(error)); | ||
} | ||
log.w("DONE with error"); | ||
return next(error); | ||
} | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
const logger = require("../../utils/logger"); | ||
const AppError = require("../../utils/error"); | ||
const Hebergement = require("../../services/hebergement/Hebergement"); | ||
const HebergementHelper = require("../../helpers/hebergement"); | ||
|
||
const log = logger(module.filename); | ||
|
||
module.exports = async function reactivate(req, res, next) { | ||
const hebergementId = req.params.id; | ||
const { decoded } = req; | ||
const userId = decoded.id; | ||
|
||
if (!hebergementId) { | ||
log.w("missing or invalid parameter"); | ||
|
||
return next( | ||
new AppError("Paramètre incorrect", { | ||
statusCode: 400, | ||
}), | ||
); | ||
} | ||
const statut = await Hebergement.getStatut(hebergementId); | ||
if (!statut) { | ||
log.w("DONE with error"); | ||
return next( | ||
new AppError("Hébergement non trouvée", { | ||
statusCode: 404, | ||
}), | ||
); | ||
} | ||
try { | ||
await Hebergement.updateStatut( | ||
userId, | ||
hebergementId, | ||
HebergementHelper.statuts.ACTIF, | ||
); | ||
|
||
log.i("DONE"); | ||
return res.sendStatus(200); | ||
} catch (error) { | ||
if (error.cause === "archive") { | ||
return next(new AppError(error)); | ||
} | ||
log.w("DONE with error"); | ||
return next(error); | ||
} | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
22 changes: 22 additions & 0 deletions
22
packages/backend/src/middlewares/checkPermissionHebergementSiegeSocial.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
const logger = require("../utils/logger"); | ||
const AppError = require("../utils/error"); | ||
const Organisme = require("../services/Organisme"); | ||
|
||
const log = logger(module.filename); | ||
|
||
async function checkPermissionHebergementSiegeSocial(req, _res, next) { | ||
const { id: userId } = req.decoded; | ||
log.i("IN", { userId }); | ||
const isSiegeSocial = await Organisme.getIsUserIdSiegeSocial(userId); | ||
if (!isSiegeSocial) { | ||
return next( | ||
new AppError("Utilisateur non autorisé à modifier cet hébergement", { | ||
statusCode: 403, | ||
}), | ||
); | ||
} | ||
log.i("DONE"); | ||
next(); | ||
} | ||
|
||
module.exports = checkPermissionHebergementSiegeSocial; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
55 changes: 55 additions & 0 deletions
55
packages/backend/src/routes/__tests__/hebergement/desactivate.test.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
const request = require("supertest"); | ||
const app = require("../../../app"); | ||
const Hebergement = require("../../../services/hebergement/Hebergement"); | ||
const checkJWT = require("../../../middlewares/checkJWT"); | ||
const checkPermissionHebergementSiegeSocial = require("../../../middlewares/checkPermissionHebergementSiegeSocial"); | ||
|
||
// Mock de la méthode Hebergement.update | ||
jest.mock("../../../services/hebergement/Hebergement"); | ||
jest.mock("../../../middlewares/checkJWT"); | ||
jest.mock("../../../middlewares/checkPermissionHebergementSiegeSocial"); | ||
jest.mock( | ||
"../../../middlewares/checkStatutHebergement", | ||
() => () => (req, res, next) => { | ||
next(); | ||
}, | ||
); | ||
jest.mock("../../../schemas/hebergement"); | ||
|
||
describe("PUT /:id/desactivate", () => { | ||
const user = { | ||
id: 1, | ||
}; | ||
beforeEach(() => { | ||
jest.clearAllMocks(); | ||
checkJWT.mockImplementation((req, res, next) => { | ||
req.decoded = { ...user }; | ||
next(); | ||
}); | ||
checkPermissionHebergementSiegeSocial.mockImplementation( | ||
(req, res, next) => { | ||
next(); | ||
}, | ||
); | ||
}); | ||
it("should return 404", async () => { | ||
Hebergement.update.mockResolvedValue(); | ||
const res = await request(app) | ||
.put("/hebergement/1/desactivate") | ||
.expect(404); | ||
expect(res.statusCode).toBe(404); | ||
expect(Hebergement.getById).toHaveBeenCalledWith("1"); | ||
}); | ||
|
||
it("should return 200", async () => { | ||
Hebergement.getById.mockResolvedValue({ id: 1 }); | ||
Hebergement.update.mockResolvedValue(); | ||
|
||
const res = await request(app) | ||
.put("/hebergement/1/desactivate") | ||
.expect(200); | ||
expect(res.statusCode).toBe(200); | ||
expect(Hebergement.getById).toHaveBeenCalledWith("1"); | ||
expect(Hebergement.update).toHaveBeenCalled(); | ||
}); | ||
}); |
48 changes: 48 additions & 0 deletions
48
packages/backend/src/routes/__tests__/hebergement/reactivate.test.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
const request = require("supertest"); | ||
const app = require("../../../app"); | ||
const Hebergement = require("../../../services/hebergement/Hebergement"); | ||
const checkJWT = require("../../../middlewares/checkJWT"); | ||
const checkPermissionHebergementSiegeSocial = require("../../../middlewares/checkPermissionHebergementSiegeSocial"); | ||
|
||
// Mock de la méthode Hebergement.update | ||
jest.mock("../../../services/hebergement/Hebergement"); | ||
jest.mock("../../../middlewares/checkJWT"); | ||
jest.mock("../../../middlewares/checkPermissionHebergementSiegeSocial"); | ||
jest.mock( | ||
"../../../middlewares/checkStatutHebergement", | ||
() => () => (req, res, next) => { | ||
next(); | ||
}, | ||
); | ||
jest.mock("../../../schemas/hebergement"); | ||
|
||
describe("PUT /:id/reactivate", () => { | ||
const user = { | ||
id: 1, | ||
}; | ||
beforeEach(() => { | ||
jest.clearAllMocks(); | ||
checkJWT.mockImplementation((req, res, next) => { | ||
req.decoded = { ...user }; | ||
next(); | ||
}); | ||
checkPermissionHebergementSiegeSocial.mockImplementation( | ||
(req, res, next) => { | ||
next(); | ||
}, | ||
); | ||
}); | ||
|
||
it("should return 404", async () => { | ||
const res = await request(app).put("/hebergement/1/reactivate").expect(404); | ||
expect(res.statusCode).toBe(404); | ||
}); | ||
|
||
it("should return 200", async () => { | ||
Hebergement.getStatut.mockResolvedValue({ id: 1 }); | ||
const res = await request(app).put("/hebergement/1/reactivate").expect(200); | ||
expect(res.statusCode).toBe(200); | ||
expect(Hebergement.getStatut).toHaveBeenCalled(); | ||
expect(Hebergement.updateStatut).toHaveBeenCalled(); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.