Skip to content

Commit

Permalink
Merge pull request #22 from abes-esr/ITEM-122-modification-ws-modific…
Browse files Browse the repository at this point in the history
…ation-utilisateur

Fix : modification ws modification utilisateurs :
  • Loading branch information
SamuelQuetin authored Jun 20, 2024
2 parents 08a76d5 + 42e4119 commit db863bc
Show file tree
Hide file tree
Showing 5 changed files with 132 additions and 23 deletions.
11 changes: 6 additions & 5 deletions web/src/main/java/fr/abes/item/dto/DtoBuilder.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
package fr.abes.item.dto;

import fr.abes.item.core.constant.TYPE_DEMANDE;
import fr.abes.item.core.entities.item.Demande;
import fr.abes.item.core.entities.item.DemandeExemp;
import fr.abes.item.core.entities.item.DemandeModif;
import fr.abes.item.core.entities.item.DemandeRecouv;
import fr.abes.item.core.entities.item.*;
import jakarta.annotation.PostConstruct;
import org.springframework.stereotype.Service;

Expand All @@ -25,11 +22,15 @@ void init() {
dtoList.add(DemandeRecouvWebDto.class);
}

public DemandeWebDto buildDto(Demande demande, TYPE_DEMANDE type) {
public DemandeWebDto buildDemandeDto(Demande demande, TYPE_DEMANDE type) {
return switch (type) {
case EXEMP -> new DemandeExempWebDto((DemandeExemp) demande);
case MODIF -> new DemandeModifWebDto((DemandeModif) demande);
case RECOUV -> new DemandeRecouvWebDto((DemandeRecouv) demande);
};
}

public UtilisateurWebDto buildUtilisateurDto(Utilisateur utilisateur) {
return new UtilisateurWebDto(utilisateur.getId(), utilisateur.getEmail());
}
}
18 changes: 18 additions & 0 deletions web/src/main/java/fr/abes/item/dto/UtilisateurWebDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package fr.abes.item.dto;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class UtilisateurWebDto {
@JsonProperty("userId")
private Integer userId;
@JsonProperty("email")
private String email;
}
24 changes: 12 additions & 12 deletions web/src/main/java/fr/abes/item/web/DemandeRestService.java
Original file line number Diff line number Diff line change
Expand Up @@ -65,14 +65,14 @@ public List<DemandeWebDto> getAllActiveDemandes(@RequestParam("type") TYPE_DEMAN
IDemandeService service = strategy.getStrategy(IDemandeService.class, type);
if (role.equals("ADMIN")) {
if (archive) {
return (!extension) ? service.getAllArchivedDemandes(iln).stream().map(element -> builder.buildDto(element, type)).collect(Collectors.toList()) : service.getAllArchivedDemandesAllIln().stream().map(element -> builder.buildDto(element, type)).collect(Collectors.toList());
return (!extension) ? service.getAllArchivedDemandes(iln).stream().map(element -> builder.buildDemandeDto(element, type)).collect(Collectors.toList()) : service.getAllArchivedDemandesAllIln().stream().map(element -> builder.buildDemandeDto(element, type)).collect(Collectors.toList());
}
else {
return (!extension) ? service.getAllActiveDemandesForAdmin(iln).stream().map(element -> builder.buildDto(element, type)).collect(Collectors.toList()) : service.getAllActiveDemandesForAdminExtended().stream().map(element -> builder.buildDto(element, type)).collect(Collectors.toList());
return (!extension) ? service.getAllActiveDemandesForAdmin(iln).stream().map(element -> builder.buildDemandeDto(element, type)).collect(Collectors.toList()) : service.getAllActiveDemandesForAdminExtended().stream().map(element -> builder.buildDemandeDto(element, type)).collect(Collectors.toList());
}
}
//role USER
return (archive) ? service.getAllArchivedDemandes(iln).stream().map(element -> builder.buildDto(element, type)).collect(Collectors.toList()) : service.getActiveDemandesForUser(iln).stream().map(element -> builder.buildDto(element, type)).collect(Collectors.toList());
return (archive) ? service.getAllArchivedDemandes(iln).stream().map(element -> builder.buildDemandeDto(element, type)).collect(Collectors.toList()) : service.getActiveDemandesForUser(iln).stream().map(element -> builder.buildDemandeDto(element, type)).collect(Collectors.toList());
}

/**
Expand All @@ -88,7 +88,7 @@ public List<DemandeWebDto> getAllActiveDemandes(@RequestParam("type") TYPE_DEMAN
public DemandeWebDto getDemande(@RequestParam("type") TYPE_DEMANDE type, @PathVariable("id") Integer id, HttpServletRequest request) throws UserExistException, ForbiddenException {
checkAccessToServices.autoriserAccesDemandeParIln(id, request.getAttribute(Constant.USER_NUM).toString(), type);
IDemandeService service = strategy.getStrategy(IDemandeService.class, type);
return builder.buildDto(service.findById(id), type);
return builder.buildDemandeDto(service.findById(id), type);
}

/**
Expand All @@ -106,7 +106,7 @@ public DemandeWebDto save(@RequestParam("type") TYPE_DEMANDE type, @RequestParam
IDemandeService service = strategy.getStrategy(IDemandeService.class, type);
Demande demande = service.creerDemande(rcr, Integer.parseInt(request.getAttribute(Constant.USER_NUM).toString()));
Demande demToReturn = service.save(demande);
return builder.buildDto(demToReturn, type);
return builder.buildDemandeDto(demToReturn, type);
}

/**
Expand All @@ -133,7 +133,7 @@ public DemandeWebDto supprimerAvecConservationEnBase(@RequestParam("type") TYPE_
ILigneFichierService ligneFichierService = strategy.getStrategy(ILigneFichierService.class, type);
Demande demande = service.findById(numDemande);
ligneFichierService.deleteByDemande(demande);
return builder.buildDto(service.changeStateCanceled(demande, Constant.ETATDEM_SUPPRIMEE), type);
return builder.buildDemandeDto(service.changeStateCanceled(demande, Constant.ETATDEM_SUPPRIMEE), type);
}


Expand All @@ -154,7 +154,7 @@ public DemandeWebDto save(@PathVariable("id") Integer id, @RequestParam("dem") D
checkAccessToServices.autoriserAccesDemandeParIln(id, request.getAttribute(Constant.USER_NUM).toString(), type);
dem.setNumDemande(id);
IDemandeService service = strategy.getStrategy(IDemandeService.class, type);
return builder.buildDto(service.save(dem), type);
return builder.buildDemandeDto(service.save(dem), type);
}


Expand All @@ -169,7 +169,7 @@ public String getTypeExemplarisationDemande(@PathVariable("id") Integer id, Http
@PostMapping(value = "/majTypeExemp/{id}")
public DemandeWebDto majTypeExemp(@PathVariable("id") Integer id, @RequestParam("type") Integer type, HttpServletRequest request) throws UserExistException, ForbiddenException {
checkAccessToServices.autoriserAccesDemandeParIln(id, request.getAttribute(Constant.USER_NUM).toString(), TYPE_DEMANDE.EXEMP);
return builder.buildDto(demandeExempService.majTypeExemp(id, type), TYPE_DEMANDE.EXEMP);
return builder.buildDemandeDto(demandeExempService.majTypeExemp(id, type), TYPE_DEMANDE.EXEMP);
}


Expand Down Expand Up @@ -248,7 +248,7 @@ public String[] simulerLigne(@RequestParam("type") TYPE_DEMANDE type, @RequestPa
public DemandeWebDto passerEnAttente(@RequestParam("type") TYPE_DEMANDE type, @RequestParam("numDemande") Integer numDemande, HttpServletRequest request) throws DemandeCheckingException, UserExistException, ForbiddenException {
checkAccessToServices.autoriserAccesDemandeParIln(numDemande, request.getAttribute(Constant.USER_NUM).toString(), type);
IDemandeService service = strategy.getStrategy(IDemandeService.class, type);
return builder.buildDto(service.changeState(service.findById(numDemande), Constant.ETATDEM_ATTENTE), type);
return builder.buildDemandeDto(service.changeState(service.findById(numDemande), Constant.ETATDEM_ATTENTE), type);
}

/**
Expand All @@ -269,7 +269,7 @@ public DemandeWebDto archiverDemande(@RequestParam("type") TYPE_DEMANDE type, @R
DemandeCheckingException, UserExistException, ForbiddenException {
checkAccessToServices.autoriserAccesDemandeParIln(numDemande, request.getAttribute(Constant.USER_NUM).toString(), type);
IDemandeService service = strategy.getStrategy(IDemandeService.class, type);
return builder.buildDto(service.archiverDemande(service.findById(numDemande)), type);
return builder.buildDemandeDto(service.archiverDemande(service.findById(numDemande)), type);
}

/**
Expand All @@ -291,7 +291,7 @@ public DemandeWebDto previousStep(@RequestParam("type") TYPE_DEMANDE type, @Path
DemandeCheckingException, IOException, UserExistException, ForbiddenException {
checkAccessToServices.autoriserAccesDemandeParIln(id, request.getAttribute(Constant.USER_NUM).toString(), type);
IDemandeService service = strategy.getStrategy(IDemandeService.class, type);
return builder.buildDto(service.previousState(service.findById(id)), type);
return builder.buildDemandeDto(service.previousState(service.findById(id)), type);
}

/**
Expand All @@ -310,7 +310,7 @@ public DemandeWebDto chosenStep(@RequestParam("type") TYPE_DEMANDE type, @PathVa
DemandeCheckingException, UserExistException, ForbiddenException {
checkAccessToServices.autoriserAccesDemandeParIln(id, request.getAttribute(Constant.USER_NUM).toString(), type);
IDemandeService service = strategy.getStrategy(IDemandeService.class, type);
return builder.buildDto(service.returnState(etape, service.findById(id)), type);
return builder.buildDemandeDto(service.returnState(etape, service.findById(id)), type);
}

/**
Expand Down
21 changes: 15 additions & 6 deletions web/src/main/java/fr/abes/item/web/UtilisateurRestService.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import fr.abes.item.core.entities.item.Utilisateur;
import fr.abes.item.core.exception.ForbiddenException;
import fr.abes.item.core.service.UtilisateurService;
import fr.abes.item.dto.DtoBuilder;
import fr.abes.item.dto.UtilisateurWebDto;
import fr.abes.item.security.CheckAccessToServices;
import io.swagger.v3.oas.annotations.Operation;
import jakarta.servlet.http.HttpServletRequest;
Expand All @@ -13,22 +15,29 @@ public class UtilisateurRestService {
private final UtilisateurService utilisateurService;
private final CheckAccessToServices checkAccessToServices;

public UtilisateurRestService(UtilisateurService utilisateurService, CheckAccessToServices checkAccessToServices) {
private final DtoBuilder builder;

public UtilisateurRestService(UtilisateurService utilisateurService, CheckAccessToServices checkAccessToServices, DtoBuilder builder) {
this.utilisateurService = utilisateurService;
this.checkAccessToServices = checkAccessToServices;
this.builder = builder;
}

/**
* Webservice de sauvegarde d'un utilisateur via méthode PUT
* @param id : identifiant de l'utilisateur à modifier
* @param util : utilisateur modifié
* @param email : adresse mail de l'utilisateur à modifier
* @return l'utilisateur sauvegardé
*/
@PutMapping(value="/utilisateurs/{id}")
@PostMapping(value="/utilisateurs/{id}")
@Operation(summary = "permet de mettre à jour les données de l'utilisateur (adresse mail)")
public Utilisateur save(@PathVariable Integer id, @RequestBody Utilisateur util, HttpServletRequest request) throws ForbiddenException {
public UtilisateurWebDto save(@PathVariable("id") Integer id, @RequestBody String email, HttpServletRequest request) throws ForbiddenException {
checkAccessToServices.autoriserMajUtilisateurParUserNum(id, request.getAttribute("userNum").toString());
util.setNumUser(id);
return utilisateurService.save(util);
Utilisateur utilisateur = utilisateurService.findById(id);
if (utilisateur != null) {
utilisateur.setEmail(email);
return builder.buildUtilisateurDto(utilisateurService.save(utilisateur));
}
throw new IllegalArgumentException("Utilisateur inexistant");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
package fr.abes.item.web.impl;

import com.fasterxml.jackson.databind.ObjectMapper;
import fr.abes.item.core.entities.item.Utilisateur;
import fr.abes.item.core.exception.ForbiddenException;
import fr.abes.item.core.service.UtilisateurService;
import fr.abes.item.dto.DtoBuilder;
import fr.abes.item.exception.RestResponseEntityExceptionHandler;
import fr.abes.item.security.CheckAccessToServices;
import fr.abes.item.web.UtilisateurRestService;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;

import java.nio.charset.StandardCharsets;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@SpringBootTest(classes = {UtilisateurRestService.class, DtoBuilder.class, ObjectMapper.class})
public class UtilisateurRestServiceTest {
@Autowired
WebApplicationContext context;
@InjectMocks
UtilisateurRestService controller;
@MockBean
UtilisateurService service;
@MockBean
CheckAccessToServices checkAccessToServices;
@Autowired
DtoBuilder builder;
@Autowired
ObjectMapper mapper;
MockMvc mockMvc;

@BeforeEach
void init() {
this.mockMvc = MockMvcBuilders.standaloneSetup(context.getBean(UtilisateurRestService.class)).setControllerAdvice(new RestResponseEntityExceptionHandler()).build();
}

@Test
void testSaveUtilisateur() throws Exception {
Mockito.doNothing().when(checkAccessToServices).autoriserMajUtilisateurParUserNum(1, "1");
Utilisateur utilisateur = new Utilisateur(1, "", "1");
Mockito.when(service.findById(1)).thenReturn(utilisateur);
Utilisateur utilisateurSaved = new Utilisateur(1, "test@test.com", "1");
Mockito.when(service.save(Mockito.any())).thenReturn(utilisateurSaved);

this.mockMvc.perform(post("/api/v1/utilisateurs/1").content("test@test.com").requestAttr("userNum", "1")
.contentType(MediaType.APPLICATION_JSON_VALUE).characterEncoding(StandardCharsets.UTF_8))
.andExpect(status().isOk())
.andExpect(jsonPath("$.userId").value("1"))
.andExpect(jsonPath("$.email").value("test@test.com"));
}

@Test
void testSaveUtilisateurForbidden() throws Exception {
Mockito.doThrow(ForbiddenException.class).when(checkAccessToServices).autoriserMajUtilisateurParUserNum(1, "1");
this.mockMvc.perform(post("/api/v1/utilisateurs/1").content("test@test.com").requestAttr("userNum", "1")
.contentType(MediaType.APPLICATION_JSON_VALUE).characterEncoding(StandardCharsets.UTF_8))
.andExpect(status().isForbidden());
}

@Test
void testSaveUtilisateurNoUser() throws Exception {
Mockito.doNothing().when(checkAccessToServices).autoriserMajUtilisateurParUserNum(1, "1");
Mockito.when(service.findById(1)).thenReturn(null);
this.mockMvc.perform(post("/api/v1/utilisateurs/1").content("test@test.com").requestAttr("userNum", "1")
.contentType(MediaType.APPLICATION_JSON_VALUE).characterEncoding(StandardCharsets.UTF_8))
.andExpect(status().isBadRequest());
}
}

0 comments on commit db863bc

Please sign in to comment.