From d47ce86309bd9a1ecafc2a74660dfff56f8c91c7 Mon Sep 17 00:00:00 2001 From: pierre-maraval Date: Fri, 29 Nov 2024 09:30:14 +0100 Subject: [PATCH] =?UTF-8?q?Refactor=20:=20changement=20appel=20pour=20r?= =?UTF-8?q?=C3=A9cup=C3=A9rer=20le=20provider=20des=20zones=20035.=20-=20R?= =?UTF-8?q?equete=20directe=20sur=20la=20table=20au=20lieu=20d'utiliser=20?= =?UTF-8?q?la=20fonction=20oracle=20-=20ajout=20dao=20+=20entity=20-=20ret?= =?UTF-8?q?our=20objet=20unique=20au=20lieu=20d'une=20liste?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 3 +- docker/docker-entrypoint.sh | 13 +- docker/jstatd.all.policy | 3 - .../component/BaseXmlFunctionsCaller.java | 8 - .../sudoc/controller/SudocController.java | 28 ++-- .../abes/sudoc/dto/provider035/BaconDto.java | 14 -- .../sudoc/dto/provider035/ElementDto.java | 14 -- .../abes/sudoc/dto/provider035/QueryDto.java | 16 -- .../abes/sudoc/dto/provider035/ResultDto.java | 14 -- .../dto/provider035/ResultProvider035Dto.java | 14 -- .../fr/abes/sudoc/entity/Provider035.java | 20 +++ .../repository/Provider035Repository.java | 9 ++ .../fr/abes/sudoc/service/DoiService.java | 4 +- .../abes/sudoc/service/ProviderService.java | 60 ++------ .../fr/abes/sudoc/service/SudocService.java | 8 +- .../abes/sudoc/service/IsbnServiceTest.java | 2 +- .../sudoc/service/ProviderServiceTest.java | 49 +++--- .../abes/sudoc/service/SudocServiceTest.java | 141 ------------------ 18 files changed, 82 insertions(+), 338 deletions(-) delete mode 100644 docker/jstatd.all.policy delete mode 100644 src/main/java/fr/abes/sudoc/dto/provider035/BaconDto.java delete mode 100644 src/main/java/fr/abes/sudoc/dto/provider035/ElementDto.java delete mode 100644 src/main/java/fr/abes/sudoc/dto/provider035/QueryDto.java delete mode 100644 src/main/java/fr/abes/sudoc/dto/provider035/ResultDto.java delete mode 100644 src/main/java/fr/abes/sudoc/dto/provider035/ResultProvider035Dto.java create mode 100644 src/main/java/fr/abes/sudoc/entity/Provider035.java create mode 100644 src/main/java/fr/abes/sudoc/repository/Provider035Repository.java delete mode 100644 src/test/java/fr/abes/sudoc/service/SudocServiceTest.java diff --git a/Dockerfile b/Dockerfile index d78fbf8..4bb4446 100644 --- a/Dockerfile +++ b/Dockerfile @@ -31,12 +31,11 @@ RUN mvn --batch-mode \ #FROM tomcat:9-jdk17 as api-image #COPY --from=build-image /build/web/target/*.war /usr/local/tomcat/webapps/ROOT.war #CMD [ "catalina.sh", "run" ] -FROM eclipse-temurin:17-jdk as sudoc-image +FROM eclipse-temurin:17-jre as sudoc-image WORKDIR /app/ COPY --from=build-image /build/target/sudoc.jar /app/sudoc.jar ENV TZ=Europe/Paris RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone COPY ./docker/docker-entrypoint.sh /docker-entrypoint.sh -COPY ./docker/jstatd.all.policy /app/jstatd.all.policy RUN chmod +x /docker-entrypoint.sh ENTRYPOINT ["/docker-entrypoint.sh"] diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh index adfa8be..63820cb 100644 --- a/docker/docker-entrypoint.sh +++ b/docker/docker-entrypoint.sh @@ -1,15 +1,4 @@ #!/bin/bash -export HOSTNAME=${HOSTNAME} - -echo "Démarrage de jstatd..." -jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.security.manager=allow -J-Djava.rmi.server.hostname=${HOSTNAME} & -JSTATD_PID=$! - echo "Démarrage de l'application Java..." -java -XX:MaxRAMPercentage=75 -XX:+UseG1GC -XX:ConcGCThreads=5 -XX:+ExitOnOutOfMemoryError -XX:MaxGCPauseMillis=100 -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=9090 -Dcom.sun.management.jmxremote.rmi.port=9090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.local.only=false -Djava.rmi.server.hostname=${HOSTNAME} -jar /app/sudoc.jar -JAVA_APP_PID=$! - -# Attendre que les processus se terminent -wait $JAVA_APP_PID -kill $JSTATD_PID \ No newline at end of file +java -XX:MaxRAMPercentage=75 -XX:+UseG1GC -XX:ConcGCThreads=5 -XX:+ExitOnOutOfMemoryError -XX:MaxGCPauseMillis=100 -jar /app/sudoc.jar \ No newline at end of file diff --git a/docker/jstatd.all.policy b/docker/jstatd.all.policy deleted file mode 100644 index 5d74bde..0000000 --- a/docker/jstatd.all.policy +++ /dev/null @@ -1,3 +0,0 @@ -grant { - permission java.security.AllPermission; -}; \ No newline at end of file diff --git a/src/main/java/fr/abes/sudoc/component/BaseXmlFunctionsCaller.java b/src/main/java/fr/abes/sudoc/component/BaseXmlFunctionsCaller.java index 64845b5..3e424bb 100644 --- a/src/main/java/fr/abes/sudoc/component/BaseXmlFunctionsCaller.java +++ b/src/main/java/fr/abes/sudoc/component/BaseXmlFunctionsCaller.java @@ -34,14 +34,6 @@ public List isbnToPpn(String isbn) throws UncategorizedSQLException { } - public String baconProvider035(Integer provider) throws SQLRecoverableException, UncategorizedSQLException { - StringBuilder request = new StringBuilder("SELECT AUTORITES.BACON_PROVIDER_035_JSON("); - request.append(provider); - request.append(") as data_xml from DUAL"); - return baseXmlJdbcTemplate.queryForObject(request.toString(), String.class); - } - - public List doiToPpn(String doi) throws UncategorizedSQLException { StringBuilder request = new StringBuilder("SELECT distinct ppn from AUTORITES.biblio_table_fouretout where cle1='DOI' and cle2='"); request.append(doi.toLowerCase()); diff --git a/src/main/java/fr/abes/sudoc/controller/SudocController.java b/src/main/java/fr/abes/sudoc/controller/SudocController.java index 5fabab8..e259271 100644 --- a/src/main/java/fr/abes/sudoc/controller/SudocController.java +++ b/src/main/java/fr/abes/sudoc/controller/SudocController.java @@ -9,18 +9,14 @@ import fr.abes.sudoc.exception.IllegalPpnException; import fr.abes.sudoc.exception.ZoneNotFoundException; import fr.abes.sudoc.service.*; -import fr.abes.sudoc.utils.ExecutionTime; import fr.abes.sudoc.utils.TYPE_ID; -import fr.abes.sudoc.utils.TYPE_SUPPORT; import fr.abes.sudoc.utils.Utilitaire; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.io.IOException; -import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -28,8 +24,6 @@ @RestController @RequestMapping("/api/v1") public class SudocController { - - private final IdentifiantFactory factory; private final SudocService service; @@ -55,10 +49,10 @@ public ResultWsDto onlineIdentifier2Ppn(@PathVariable String type, @PathVariable TYPE_ID enumType = Utilitaire.getEnumFromString(type); IIdentifiantService service = factory.getService(enumType); if (service.checkFormat(onlineIdentifier)) { - log.debug("Recherche des ppn pour l'identifiant onlineIdentifier n° " + onlineIdentifier + " avec le service " + enumType); + log.debug("Recherche des ppn pour l'identifiant onlineIdentifier n° {} avec le service {}", onlineIdentifier, enumType); List listPpn = service.getPpnFromIdentifiant(onlineIdentifier); for (String ppn : listPpn) { - log.debug("onlineIdentifier n° " + onlineIdentifier + " <-> ppn n° " + ppn); + log.debug("onlineIdentifier n° {} <-> ppn n° {}", onlineIdentifier, ppn); feedResultatWithNotice(resultat, providerDto, ppn); } } @@ -68,7 +62,7 @@ public ResultWsDto onlineIdentifier2Ppn(@PathVariable String type, @PathVariable } catch (IllegalStateException ex) { throw new IllegalArgumentException("Le type " + type + " est incorrect. Les types acceptés sont : monograph, serial"); } catch (IOException ex) { - log.error("erreur dans la récupération de la notice correspondant à l'identifiant " + onlineIdentifier); + log.error("erreur dans la récupération de la notice correspondant à l'online identifier {}", onlineIdentifier); throw new IOException(ex); } return resultat; @@ -84,9 +78,9 @@ public ResultWsDto printIdentifier2Ppn(@PathVariable String type, @PathVariable TYPE_ID enumType = Utilitaire.getEnumFromString(type); IIdentifiantService service = factory.getService(enumType); if (service.checkFormat(printIdentifier)) { - log.debug("Recherche des ppn pour l'identifiant printIdentifier n° " + printIdentifier + " avec le service " + enumType); + log.debug("Recherche des ppn pour l'identifiant printIdentifier n° {} avec le service {}", printIdentifier, enumType); for (String ppn : service.getPpnFromIdentifiant(printIdentifier)) { - log.debug("printIdentifier n° " + printIdentifier + " <-> ppn n° " + ppn); + log.debug("printIdentifier n° {} <-> ppn n° {}", printIdentifier, ppn); NoticeXml notice = noticeService.getNoticeByPpn(ppn); if (!notice.isDeleted()) { if (notice.isNoticeImprimee()) { @@ -127,7 +121,7 @@ public ResultWsDto printIdentifier2Ppn(@PathVariable String type, @PathVariable } catch (IllegalStateException ex) { throw new IllegalArgumentException("Le type " + type + " est incorrect. Les types acceptés sont : monograph, serial"); } catch (IOException ex) { - log.error("erreur dans la récupération de la notice correspondant à l'identifiant " + printIdentifier); + log.error("erreur dans la récupération de la notice correspondant à au print identifier {}", printIdentifier); throw new IOException(ex); } } @@ -141,21 +135,21 @@ public ResultWsDto doiIdentifier2Ppn(@RequestParam(name = "doi") String doi_iden try { IIdentifiantService service = factory.getService(TYPE_ID.DOI); if (service.checkFormat(doi_identifier)) { - log.debug("Recherche des ppn pour l'identifiant doi_identifier n° " + doi_identifier + " avec le service DOI"); + log.debug("Recherche des ppn pour l'identifiant doi_identifier n° {} avec le service DOI", doi_identifier); for(String ppn : service.getPpnFromIdentifiant(doi_identifier) ) { - log.debug("doi_identifier n° " + doi_identifier + " <-> ppn n° " + ppn); + log.debug("doi_identifier n° {} <-> ppn n° {}", doi_identifier, ppn); feedResultatWithNotice(resultat, providerDto, ppn); } } else { throw new IllegalArgumentException("Le DOI n'est pas au bon format"); } } catch (IOException ex) { - log.error("Erreur dans la récupération de la notice correspondant à l'identifiant"); + log.error("Erreur dans la récupération de la notice correspondant au doi {}", doi_identifier); throw new IOException(ex); } catch (ZoneNotFoundException e) { throw new IOException(e.getMessage()); } catch (IllegalPpnException e) { - log.info("Aucune notice ne correspond à l'identifiant " + doi_identifier); + log.info("Aucune notice ne correspond au doi {}", doi_identifier); //res.addErreur("Aucune notice ne correspond à l'identifiant " + doi_identifier); } return resultat; @@ -189,7 +183,7 @@ public ResultWsDto datToPpn(@Valid @RequestBody SearchDatWebDto request) throws } try { for (String ppn : service.getPpnFromDat(request.getDate(), request.getAuteur(), request.getTitre())) { - log.debug("dat2ppn : date : " + request.getDate() + " / auteur : " + request.getAuteur() + " / titre : " + request.getTitre() + " <-> ppn n° " + ppn); + log.debug("dat2ppn : date : {} / auteur : {} / titre : {} <-> ppn n° {}", request.getDate(), request.getAuteur(), request.getTitre(), ppn); feedResultatWithNotice(resultat, providerDto, ppn); } } catch (CBSException | ZoneNotFoundException ex) { diff --git a/src/main/java/fr/abes/sudoc/dto/provider035/BaconDto.java b/src/main/java/fr/abes/sudoc/dto/provider035/BaconDto.java deleted file mode 100644 index 6ac70b0..0000000 --- a/src/main/java/fr/abes/sudoc/dto/provider035/BaconDto.java +++ /dev/null @@ -1,14 +0,0 @@ -package fr.abes.sudoc.dto.provider035; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -@NoArgsConstructor -@Getter -@Setter -public class BaconDto { - @JsonProperty("query") - private QueryDto query; -} diff --git a/src/main/java/fr/abes/sudoc/dto/provider035/ElementDto.java b/src/main/java/fr/abes/sudoc/dto/provider035/ElementDto.java deleted file mode 100644 index 1c56da4..0000000 --- a/src/main/java/fr/abes/sudoc/dto/provider035/ElementDto.java +++ /dev/null @@ -1,14 +0,0 @@ -package fr.abes.sudoc.dto.provider035; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -@NoArgsConstructor -@Getter -@Setter -public class ElementDto { - @JsonProperty("valeur_035") - private String valeur035; -} diff --git a/src/main/java/fr/abes/sudoc/dto/provider035/QueryDto.java b/src/main/java/fr/abes/sudoc/dto/provider035/QueryDto.java deleted file mode 100644 index 2602d1c..0000000 --- a/src/main/java/fr/abes/sudoc/dto/provider035/QueryDto.java +++ /dev/null @@ -1,16 +0,0 @@ -package fr.abes.sudoc.dto.provider035; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -@NoArgsConstructor -@Getter -@Setter -public class QueryDto { - @JsonProperty("idt_provider") - private String id; - @JsonProperty("results") - private ResultDto result; -} diff --git a/src/main/java/fr/abes/sudoc/dto/provider035/ResultDto.java b/src/main/java/fr/abes/sudoc/dto/provider035/ResultDto.java deleted file mode 100644 index ea56b83..0000000 --- a/src/main/java/fr/abes/sudoc/dto/provider035/ResultDto.java +++ /dev/null @@ -1,14 +0,0 @@ -package fr.abes.sudoc.dto.provider035; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -@NoArgsConstructor -@Getter -@Setter -public class ResultDto { - @JsonProperty("element") - private ElementDto elements; -} diff --git a/src/main/java/fr/abes/sudoc/dto/provider035/ResultProvider035Dto.java b/src/main/java/fr/abes/sudoc/dto/provider035/ResultProvider035Dto.java deleted file mode 100644 index a51cf02..0000000 --- a/src/main/java/fr/abes/sudoc/dto/provider035/ResultProvider035Dto.java +++ /dev/null @@ -1,14 +0,0 @@ -package fr.abes.sudoc.dto.provider035; - -import com.fasterxml.jackson.annotation.JsonRootName; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -@NoArgsConstructor -@Getter -@Setter -@JsonRootName("bacon") -public class ResultProvider035Dto { - private BaconDto bacon; -} diff --git a/src/main/java/fr/abes/sudoc/entity/Provider035.java b/src/main/java/fr/abes/sudoc/entity/Provider035.java new file mode 100644 index 0000000..75b2602 --- /dev/null +++ b/src/main/java/fr/abes/sudoc/entity/Provider035.java @@ -0,0 +1,20 @@ +package fr.abes.sudoc.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.Data; + +import java.io.Serializable; + +@Entity +@Data +@Table(name = "PROVIDER_035", schema = "BACON") +public class Provider035 implements Serializable { + @Id + @Column(name = "IDT_PROVIDER") + private Integer id; + @Column(name = "VALEUR_035") + private String valeur; +} diff --git a/src/main/java/fr/abes/sudoc/repository/Provider035Repository.java b/src/main/java/fr/abes/sudoc/repository/Provider035Repository.java new file mode 100644 index 0000000..35cd072 --- /dev/null +++ b/src/main/java/fr/abes/sudoc/repository/Provider035Repository.java @@ -0,0 +1,9 @@ +package fr.abes.sudoc.repository; + +import fr.abes.sudoc.entity.Provider035; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface Provider035Repository extends JpaRepository { +} diff --git a/src/main/java/fr/abes/sudoc/service/DoiService.java b/src/main/java/fr/abes/sudoc/service/DoiService.java index 6277970..65ee36d 100644 --- a/src/main/java/fr/abes/sudoc/service/DoiService.java +++ b/src/main/java/fr/abes/sudoc/service/DoiService.java @@ -39,7 +39,9 @@ public List getPpnFromIdentifiant(String doi) throws IOException, Illega if (result.size() != 1) { throw new IllegalPpnException("Plusieurs résultats à la recherche sur doi " + doi); } else { - return Collections.singletonList(result.get(0)); + List retour = new ArrayList<>(); + retour.add(result.get(0)); + return retour; } } catch (UncategorizedSQLException ex) { throw new IOException("Incident technique lors de l'accès à la base de données"); diff --git a/src/main/java/fr/abes/sudoc/service/ProviderService.java b/src/main/java/fr/abes/sudoc/service/ProviderService.java index a555867..e996ef4 100644 --- a/src/main/java/fr/abes/sudoc/service/ProviderService.java +++ b/src/main/java/fr/abes/sudoc/service/ProviderService.java @@ -1,36 +1,25 @@ package fr.abes.sudoc.service; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import fr.abes.sudoc.component.BaseXmlFunctionsCaller; import fr.abes.sudoc.dto.provider.ElementDto; -import fr.abes.sudoc.dto.provider035.ResultProvider035Dto; import fr.abes.sudoc.entity.Provider; +import fr.abes.sudoc.entity.Provider035; import fr.abes.sudoc.entity.notice.NoticeXml; +import fr.abes.sudoc.repository.Provider035Repository; import fr.abes.sudoc.repository.ProviderRepository; -import fr.abes.sudoc.utils.ExecutionTime; -import fr.abes.sudoc.utils.Utilitaire; import lombok.RequiredArgsConstructor; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import java.io.IOException; -import java.sql.SQLRecoverableException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; import java.util.Optional; @Service @RequiredArgsConstructor public class ProviderService { - - private final BaseXmlFunctionsCaller caller; - - private final ObjectMapper objectMapper; - private final ProviderRepository providerRepository; + private final Provider035Repository provider035Repository; + @Cacheable("providerCache") public Optional getProviderDisplayName(Optional shortname) { @@ -49,32 +38,15 @@ public Optional getProviderDisplayName(Optional shortname) { return providerDisplayName; } - - public List getProviderFor035(Integer provider) throws IOException { - List listValeurs = new ArrayList<>(); - try { - ResultProvider035Dto result = objectMapper.readValue(caller.baconProvider035(provider), ResultProvider035Dto.class); - if (result.getBacon().getQuery().getResult() != null) { - String valeur035 = result.getBacon().getQuery().getResult().getElements().getValeur035(); - if (valeur035 != null) { - listValeurs.addAll(Arrays.stream(valeur035.split("\\|")).toList()); - } - } - } catch (JsonProcessingException ex) { - throw new IOException("Impossible de récupérer les ppns correspondant à cet identifiant"); - } catch (SQLRecoverableException ex) { - throw new IOException("Incident technique lors de l'accès à la base de données"); - } - return listValeurs; + public String getProviderFor035(Integer provider) { + Optional valeur035Opt = provider035Repository.findById(provider); + return valeur035Opt.map(Provider035::getValeur).orElse(null); } public boolean checkProviderDansNoticeGeneral(Optional providerDisplayName, NoticeXml notice) throws IOException { - if (providerDisplayName.isPresent()) { - return this.checkProviderDansNotice(providerDisplayName.get().getDisplayName(), notice) - || this.checkProviderDansNotice(providerDisplayName.get().getProvider(), notice) - || this.checkProviderIn035(providerDisplayName.get().getIdProvider(), notice); - } - return true; + return providerDisplayName.map(elementDto -> this.checkProviderDansNotice(elementDto.getDisplayName(), notice) + || this.checkProviderDansNotice(elementDto.getProvider(), notice) + || this.checkProviderIn035(elementDto.getIdProvider(), notice)).orElse(true); } private boolean checkProviderDansNotice(String provider, NoticeXml notice) { @@ -82,13 +54,9 @@ private boolean checkProviderDansNotice(String provider, NoticeXml notice) { || notice.checkProviderInZone(provider, "214", "c"); } - private boolean checkProviderIn035(Integer providerIdt, NoticeXml notice) throws IOException { - List providers035 = this.getProviderFor035(providerIdt); - for (String provider035 : providers035) { - if (notice.checkProviderIn035a(provider035)) { - return true; - } - } - return false; + private boolean checkProviderIn035(Integer providerIdt, NoticeXml notice) { + String provider035 = this.getProviderFor035(providerIdt); + return provider035 != null && notice.checkProviderIn035a(provider035); + } } diff --git a/src/main/java/fr/abes/sudoc/service/SudocService.java b/src/main/java/fr/abes/sudoc/service/SudocService.java index 90f2e1f..0fb9c74 100644 --- a/src/main/java/fr/abes/sudoc/service/SudocService.java +++ b/src/main/java/fr/abes/sudoc/service/SudocService.java @@ -4,7 +4,6 @@ import fr.abes.cbs.process.ProcessCBS; import lombok.Getter; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -41,11 +40,14 @@ public List getPpnFromDat(Integer annee, String auteur, String titre) th if (auteur != null) { this.query = "tno t ; che aut " + auteur + " et mti " + titre; } else { - this.query = "tno t ; che mti " + titre; + if (titre != null) + this.query = "tno t ; che mti " + titre; + else return new ArrayList<>(); + } } - log.debug("requête : " + this.query); + log.debug("requête : {}", this.query); cbs.search(this.query); return switch (cbs.getNbNotices()) { case 0 -> new ArrayList<>(); diff --git a/src/test/java/fr/abes/sudoc/service/IsbnServiceTest.java b/src/test/java/fr/abes/sudoc/service/IsbnServiceTest.java index 425aa6e..264fb42 100644 --- a/src/test/java/fr/abes/sudoc/service/IsbnServiceTest.java +++ b/src/test/java/fr/abes/sudoc/service/IsbnServiceTest.java @@ -89,7 +89,7 @@ void checkFormatIsbn13Characters() { Assertions.assertTrue(isbnService.checkFormat(isbn2)); String isbn3 = "123-45-67-891-010"; - Assertions.assertTrue(isbnService.checkFormat(isbn3)); + Assertions.assertFalse(isbnService.checkFormat(isbn3)); String isbn4 = "123--45-67-891-010"; Assertions.assertFalse(isbnService.checkFormat(isbn4)); diff --git a/src/test/java/fr/abes/sudoc/service/ProviderServiceTest.java b/src/test/java/fr/abes/sudoc/service/ProviderServiceTest.java index 73d2789..d95bb1a 100644 --- a/src/test/java/fr/abes/sudoc/service/ProviderServiceTest.java +++ b/src/test/java/fr/abes/sudoc/service/ProviderServiceTest.java @@ -1,8 +1,7 @@ package fr.abes.sudoc.service; -import com.fasterxml.jackson.databind.ObjectMapper; -import fr.abes.sudoc.component.BaseXmlFunctionsCaller; -import fr.abes.sudoc.configuration.UtilsConfig; +import fr.abes.sudoc.entity.Provider035; +import fr.abes.sudoc.repository.Provider035Repository; import fr.abes.sudoc.repository.ProviderRepository; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -13,52 +12,38 @@ import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.context.junit.jupiter.SpringExtension; -import java.io.IOException; -import java.sql.SQLRecoverableException; -import java.util.List; +import java.util.Optional; @ExtendWith(SpringExtension.class) -@SpringBootTest(classes = {ProviderService.class, BaseXmlFunctionsCaller.class, UtilsConfig.class}) +@SpringBootTest(classes = {ProviderService.class}) public class ProviderServiceTest { @Autowired ProviderService service; @MockBean - BaseXmlFunctionsCaller caller; + Provider035Repository provider035Repository; @MockBean ProviderRepository providerRepository; - @Autowired - ObjectMapper objectMapper; @Test - void getProviderFor035Test() throws SQLRecoverableException, IOException { - String resultWs = "{\"bacon\":{\"query\":{\"idt_provider\":\"81\",\"results\":{\"element\":{\"valeur_035\":\"FRCAIRN\"}}}}}"; - Mockito.when(caller.baconProvider035(Mockito.anyInt())).thenReturn(resultWs); - - List result = service.getProviderFor035(81); - Assertions.assertEquals(1, result.size()); - Assertions.assertEquals("FRCAIRN", result.get(0)); + void getProviderFor035Test() { + Provider035 provider = new Provider035(); + provider.setId(81); + provider.setValeur("FRCAIRN"); + Mockito.when(provider035Repository.findById(81)).thenReturn(Optional.of(provider)); + + String result = service.getProviderFor035(81); + Assertions.assertEquals("FRCAIRN", result); } - @Test - void getProviderFor035TestWithPipe() throws SQLRecoverableException, IOException { - String resultWs = "{\"bacon\":{\"query\":{\"idt_provider\":\"81\",\"results\":{\"element\":{\"valeur_035\":\"PROQUEST_|eeboln\"}}}}}"; - Mockito.when(caller.baconProvider035(Mockito.anyInt())).thenReturn(resultWs); - - List result = service.getProviderFor035(81); - Assertions.assertEquals(2, result.size()); - Assertions.assertEquals("PROQUEST_", result.get(0)); - Assertions.assertEquals("eeboln", result.get(1)); - } @Test - void getProviderFor035TestWithNoResult() throws SQLRecoverableException, IOException { - String resultWs = "{\"bacon\":{\"query\":{\"idt_provider\":\"81\",\"results\":null}}}"; - Mockito.when(caller.baconProvider035(Mockito.anyInt())).thenReturn(resultWs); + void getProviderFor035TestWithNoResult() { + Mockito.when(provider035Repository.findById(81)).thenReturn(Optional.empty()); - List result = service.getProviderFor035(81); - Assertions.assertEquals(0, result.size()); + String result = service.getProviderFor035(81); + Assertions.assertNull(result); } } diff --git a/src/test/java/fr/abes/sudoc/service/SudocServiceTest.java b/src/test/java/fr/abes/sudoc/service/SudocServiceTest.java deleted file mode 100644 index 0b2c6c6..0000000 --- a/src/test/java/fr/abes/sudoc/service/SudocServiceTest.java +++ /dev/null @@ -1,141 +0,0 @@ -package fr.abes.sudoc.service; - -import fr.abes.cbs.exception.CBSException; -import fr.abes.cbs.process.ProcessCBS; -import fr.abes.sudoc.dto.SearchDatWebDto; -import fr.abes.sudoc.exception.ExceptionControllerHandler; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -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.test.context.junit.jupiter.SpringExtension; -import org.springframework.web.context.WebApplicationContext; - -import java.util.List; - -@SpringBootTest(classes = {SudocService.class, ExceptionControllerHandler.class}) -@ExtendWith({SpringExtension.class}) -class SudocServiceTest { - - @Autowired - WebApplicationContext context; - - @MockBean - ProcessCBS cbs; - - @Autowired - SudocService service; - - @Test - @DisplayName("getPpnFromDatWithAnneeAuteurTitre Many results") - void getPpnFromDatWithAnneeAuteurTitreMany() throws CBSException { - - Integer annee = 2008; - String auteur = "Auteur"; - String titre = "Ours"; - - Mockito.doNothing().when(cbs).authenticate(Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.anyString()); - Mockito.when(cbs.search("tno t ; tdo b ; apu " + annee + " ; che aut " + auteur + " et mti " + titre)).thenReturn("123456789"); - Mockito.when(cbs.getListePpn()).thenReturn(new StringBuilder("123456789;987654321")); - Mockito.when(cbs.getNbNotices()).thenReturn(2); - - List result = service.getPpnFromDat(annee, auteur, titre); - Assertions.assertEquals(2, result.size()); - Assertions.assertEquals( "123456789", result.get(0)); - } - - @Test - @DisplayName("getPpnFromDatWithAnneeAuteurTitre one result") - void getPpnFromDatWithAnneeAuteurTitreOne() throws CBSException { - - Integer annee = 2008; - String auteur = "Auteur"; - String titre = "Ours"; - - Mockito.doNothing().when(cbs).authenticate(Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.anyString()); - Mockito.when(cbs.search("tno t ; tdo b ; apu " + annee + " ; che aut " + auteur + " et mti " + titre)).thenReturn("123456789"); - Mockito.when(cbs.getPpnEncours()).thenReturn("123456789"); - Mockito.when(cbs.getNbNotices()).thenReturn(1); - - - List result = service.getPpnFromDat(annee, auteur, titre); - Assertions.assertEquals(1, result.size()); - Assertions.assertEquals( "123456789", result.get(0)); - } - - @Test - @DisplayName("getPpnFromDatWithAnneeAuteurTitre no result") - void getPpnFromDatWithAnneeAuteurTitreZero() throws CBSException { - Integer annee = 2008; - String auteur = "Auteur"; - String titre = "Ours"; - - Mockito.doNothing().when(cbs).authenticate(Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.anyString()); - Mockito.when(cbs.search("tno t ; tdo b ; apu " + annee + " ; che aut " + auteur + " et mti " + titre)).thenReturn("123456789"); - Mockito.when(cbs.getNbNotices()).thenReturn(0); - - - List result = service.getPpnFromDat(annee, auteur, titre); - Assertions.assertEquals(0, result.size()); - Assertions.assertEquals("tno t ; apu " + annee + " ; che aut " + auteur + " et mti " + titre, service.getQuery()); - } - - @Test - @DisplayName("getPpnFromDatWithAnneeAuteurTitre no aut no yop") - void getPpnFromDatWithAnneeAuteurTitreNoAutNoYop() throws CBSException { - String titre = "Ours"; - Integer annee = null; - String auteur = null; - - Mockito.doNothing().when(cbs).authenticate(Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.anyString()); - Mockito.when(cbs.search(Mockito.anyString())).thenReturn("123456789"); - - service.getPpnFromDat(annee, auteur, titre); - Assertions.assertEquals("tno t ; che mti " + titre, service.getQuery()); - } - - @Test - @DisplayName("getPpnFromDatWithAnneeAuteurTitre no yop") - void getPpnFromDatWithAnneeAuteurTitreNoYop() throws CBSException { - String titre = "Ours"; - Integer annee = null; - String auteur = "Petit"; - - Mockito.doNothing().when(cbs).authenticate(Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.anyString()); - Mockito.when(cbs.search(Mockito.anyString())).thenReturn("123456789"); - - service.getPpnFromDat(annee, auteur, titre); - Assertions.assertEquals("tno t ; che aut " + auteur + " et mti " + titre, service.getQuery()); - } - - @Test - @DisplayName("getPpnFromDatWithAnneeAuteurTitre no aut") - void getPpnFromDatWithAnneeAuteurTitreNoAut() throws CBSException { - String titre = "Ours"; - Integer annee = 2000; - String auteur = null; - - Mockito.doNothing().when(cbs).authenticate(Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.anyString()); - Mockito.when(cbs.search(Mockito.anyString())).thenReturn("123456789"); - - service.getPpnFromDat(annee, auteur, titre); - Assertions.assertEquals("tno t ; apu " + annee + " ; che mti " + titre, service.getQuery()); - } - - @Test - @DisplayName("getPpnFromDatAllIsNull") - void getPpnFromDatAllIsNull() throws CBSException { - - Integer annee = null; - String auteur = null; - String titre = null; - - List result = service.getPpnFromDat(annee, auteur, titre); - - Assertions.assertEquals( 0, result.size()); - } -}