Skip to content

Commit

Permalink
[INJICERT-495] Added template exception for handling invalid id excep…
Browse files Browse the repository at this point in the history
…tions for template (#114)

* [INJICERT-495] Added template exception for handling invalid id exceptions for template

Signed-off-by: Piyush7034 <[email protected]>

* Added tests for svg template controller

Signed-off-by: Piyush7034 <[email protected]>

---------

Signed-off-by: Piyush7034 <[email protected]>
  • Loading branch information
Piyush7034 authored Oct 22, 2024
1 parent ca67f72 commit 1a4a8eb
Show file tree
Hide file tree
Showing 7 changed files with 105 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,4 @@ public class ErrorConstants {
public static final String UNSUPPORTED_OPENID_VERSION = "unsupported_openid4vci_draft_version";
public static final String INVALID_TEMPLATE_ID = "template_with_id_not_found";
public static final String EMPTY_TEMPLATE_CONTENT = "empty_template_content";
public static final String EMPTY_TEMPLATE_NAME = "empty_template_name";
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package io.mosip.certify.core.exception;

import io.mosip.certify.core.constants.ErrorConstants;

public class TemplateException extends RuntimeException {
private String errorCode;

public TemplateException() {
super(ErrorConstants.UNKNOWN_ERROR);
this.errorCode = ErrorConstants.UNKNOWN_ERROR;
}

public TemplateException(String errorCode) {
super(errorCode);
this.errorCode = errorCode;
}

public String getErrorCode() {
return errorCode;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import io.mosip.certify.core.exception.CertifyException;
import io.mosip.certify.core.exception.InvalidRequestException;
import io.mosip.certify.core.exception.NotAuthenticatedException;
import io.mosip.certify.core.exception.TemplateException;
import io.mosip.certify.core.util.CommonUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.TypeMismatchException;
Expand Down Expand Up @@ -130,6 +131,9 @@ private ResponseEntity<ResponseWrapper> handleInternalControllerException(Except
String errorCode = ((CertifyException) ex).getErrorCode();
return new ResponseEntity<ResponseWrapper>(getResponseWrapper(errorCode, getMessage(errorCode)), HttpStatus.OK);
}
if(ex instanceof TemplateException) {
return new ResponseEntity<>(getResponseWrapper(INVALID_REQUEST, ex.getMessage()) ,HttpStatus.NOT_FOUND);
}
if(ex instanceof AuthenticationCredentialsNotFoundException) {
return new ResponseEntity<ResponseWrapper>(getResponseWrapper(HttpStatus.UNAUTHORIZED.name(),
HttpStatus.UNAUTHORIZED.getReasonPhrase()), HttpStatus.UNAUTHORIZED);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

import io.mosip.certify.core.entity.SvgTemplate;
import io.mosip.certify.core.exception.CertifyException;
import io.mosip.certify.core.exception.TemplateException;
import io.mosip.certify.core.spi.SvgTemplateService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
Expand All @@ -30,10 +31,10 @@ public class SvgTemplateController {
SvgTemplateService svgTemplateService;

@GetMapping("/svg-template/{id}")
public ResponseEntity<String> serveSvgTemplate(@PathVariable UUID id) throws CertifyException {
public ResponseEntity<String> serveSvgTemplate(@PathVariable UUID id) throws TemplateException {
SvgTemplate template = svgTemplateService.getSvgTemplate(id);
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_TYPE, "image/svg")
.header(HttpHeaders.CONTENT_TYPE, "image/svg+xml")
.cacheControl(CacheControl.maxAge(1, TimeUnit.DAYS).cachePublic())
.lastModified(template.getUpdatedtimes().atZone(ZoneId.systemDefault()).toInstant())
.body(template.getTemplate());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import io.mosip.certify.core.constants.ErrorConstants;
import io.mosip.certify.core.entity.SvgTemplate;
import io.mosip.certify.core.exception.CertifyException;
import io.mosip.certify.core.exception.TemplateException;
import io.mosip.certify.core.repository.SvgTemplateRepository;
import io.mosip.certify.core.spi.SvgTemplateService;
import lombok.extern.slf4j.Slf4j;
Expand All @@ -27,7 +28,7 @@ public class SvgTemplateServiceImpl implements SvgTemplateService {
@Override
public SvgTemplate getSvgTemplate(UUID id) {
Optional<SvgTemplate> optional = svgRenderTemplateRepository.findById(id);
SvgTemplate svgRenderTemplate = optional.orElseThrow(() -> new CertifyException(ErrorConstants.INVALID_TEMPLATE_ID));
SvgTemplate svgRenderTemplate = optional.orElseThrow(() -> new TemplateException(ErrorConstants.INVALID_TEMPLATE_ID));

return svgRenderTemplate;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package io.mosip.certify.controller;

import io.mosip.certify.core.constants.ErrorConstants;
import io.mosip.certify.core.dto.ParsedAccessToken;
import io.mosip.certify.core.entity.SvgTemplate;
import io.mosip.certify.core.exception.TemplateException;
import io.mosip.certify.core.spi.SvgTemplateService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;

import java.net.http.HttpHeaders;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.UUID;

@RunWith(SpringRunner.class)
@WebMvcTest(value=SvgTemplateController.class)
public class SvgTemplateControllerTest {
@Autowired
MockMvc mockMvc;

@MockBean
SvgTemplateService svgTemplateService;

@MockBean
ParsedAccessToken parsedAccessToken;

@Test
public void getSvgTemplate_withValidId_thenPass() throws Exception {
SvgTemplate svgTemplate = new SvgTemplate();
UUID id = UUID.randomUUID();
svgTemplate.setId(id);
String template = """
<svg xmlns=\\"http://www.w3.org/2000/svg\\" width=\\"200\\" height=\\"200\\">
<rect width=\\"200\\" height=\\"200\\" fill=\\"#ff6347\\"/>
<text x=\\"100\\" y=\\"100\\" font-size=\\"30\\" text-anchor=\\"middle\\" fill=\\"white\\">
Hello, SVG!
</text></svg>
""";
svgTemplate.setTemplate(template);
LocalDateTime date = LocalDateTime.now();
svgTemplate.setCreatedtimes(date);
svgTemplate.setUpdatedtimes(date);

Mockito.when(svgTemplateService.getSvgTemplate(Mockito.any())).thenReturn(svgTemplate);

mockMvc.perform(get("/public/svg-template/" + id))
.andExpect(status().isOk())
.andExpect(content().string(svgTemplate.getTemplate()))
.andExpect(content().contentType("image/svg+xml"))
.andExpect(header().string("Cache-Control", "max-age=86400, public"));
}

@Test
public void getSvgTemplate_withInValidId_thenFail() throws Exception {
TemplateException templateException = new TemplateException(ErrorConstants.INVALID_TEMPLATE_ID);
UUID id = UUID.randomUUID();
Mockito.when(svgTemplateService.getSvgTemplate(id)).thenThrow(templateException);

mockMvc.perform(get("/public/svg-template/" + id))
.andExpect(status().isNotFound());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import io.mosip.certify.core.constants.ErrorConstants;
import io.mosip.certify.core.entity.SvgTemplate;
import io.mosip.certify.core.exception.CertifyException;
import io.mosip.certify.core.exception.TemplateException;
import io.mosip.certify.core.repository.SvgTemplateRepository;
import lombok.extern.slf4j.Slf4j;
import org.junit.Assert;
Expand Down Expand Up @@ -51,10 +51,10 @@ public void getSvgTemplate_withValidDetail_thenPass() {
@Test
public void getSvgTemplate_withInvalidId_thenFail() {
Mockito.when(svgRenderTemplateRepository.findById(Mockito.any())).thenReturn(Optional.empty());
CertifyException certifyException = Assert.assertThrows(CertifyException.class, () -> {
TemplateException templateException = Assert.assertThrows(TemplateException.class, () -> {
svgRenderTemplateService.getSvgTemplate(UUID.randomUUID());
});
Assert.assertEquals(ErrorConstants.INVALID_TEMPLATE_ID, certifyException.getErrorCode());
Assert.assertEquals(ErrorConstants.INVALID_TEMPLATE_ID, templateException.getErrorCode());
}

}

0 comments on commit 1a4a8eb

Please sign in to comment.