Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package io.mosip.kernel.masterdata.controller;

import io.mosip.kernel.masterdata.dto.BlockListedWordStatusUpdateDto;
import jakarta.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
Expand Down Expand Up @@ -278,15 +279,14 @@ public ResponseWrapper<FilterResponseDto> blockListedWordsFilterValues(
@PreAuthorize("hasAnyRole(@authorizedRoles.getPatchblocklistedwords())")
@PatchMapping
@ApiOperation(value = "update the blocklisted word")
public ResponseWrapper<StatusResponseDto> updateBlockListedWordStatus(@RequestParam boolean isActive,
@RequestParam String word) {
public ResponseWrapper<StatusResponseDto> updateBlockListedWordStatus(@RequestBody @Valid RequestWrapper<BlockListedWordStatusUpdateDto> requestWrapper) {
auditUtil.auditRequest(
MasterDataConstant.STATUS_API_IS_CALLED + BlockListedWordsUpdateDto.class.getCanonicalName(),
MasterDataConstant.AUDIT_SYSTEM,
MasterDataConstant.STATUS_API_IS_CALLED + BlockListedWordsUpdateDto.class.getCanonicalName(),
"ADM-552");
ResponseWrapper<StatusResponseDto> responseWrapper = new ResponseWrapper<>();
responseWrapper.setResponse(blocklistedWordsService.updateBlockListedWordStatus(word, isActive));
responseWrapper.setResponse(blocklistedWordsService.updateBlockListedWordStatus(requestWrapper.getRequest()));
auditUtil.auditRequest(
MasterDataConstant.STATUS_UPDATED_SUCCESS + BlockListedWordsUpdateDto.class.getCanonicalName(),
MasterDataConstant.AUDIT_SYSTEM,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package io.mosip.kernel.masterdata.dto;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import io.mosip.kernel.masterdata.validator.AlphabeticValidator;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;

@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class BlockListedWordStatusUpdateDto {

@NotNull
@Size(min = 1, max = 128)
@AlphabeticValidator(message = "Blocklisted word cannot contain numbers and special characters")
private String word;

@NotNull
private Boolean isActive;
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package io.mosip.kernel.masterdata.service;

import java.util.List;

import io.mosip.kernel.masterdata.dto.BlockListedWordStatusUpdateDto;
import io.mosip.kernel.masterdata.dto.BlockListedWordsUpdateDto;
import io.mosip.kernel.masterdata.dto.BlocklistedWordsDto;
import io.mosip.kernel.masterdata.dto.getresponse.BlocklistedWordsResponseDto;
Expand All @@ -14,6 +13,8 @@
import io.mosip.kernel.masterdata.dto.response.PageResponseDto;
import io.mosip.kernel.masterdata.entity.id.WordAndLanguageCodeID;

import java.util.List;

/**
* blocklisted words service
*
Expand Down Expand Up @@ -95,6 +96,6 @@ public PageDto<BlocklistedWordsExtnDto> getBlockListedWords(int pageNumber, int
*/
public FilterResponseDto blockListedWordsFilterValues(FilterValueDto filterValueDto);

public StatusResponseDto updateBlockListedWordStatus(String word, boolean isActive);
public StatusResponseDto updateBlockListedWordStatus(BlockListedWordStatusUpdateDto requestDto);

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,15 @@

import io.mosip.kernel.core.dataaccess.exception.DataAccessLayerException;
import io.mosip.kernel.core.datamapper.spi.DataMapper;
import io.mosip.kernel.masterdata.constant.BlocklistedWordsErrorCode;
import io.mosip.kernel.masterdata.constant.LanguageErrorCode;
import io.mosip.kernel.masterdata.constant.MachineErrorCode;
import io.mosip.kernel.masterdata.constant.MasterDataConstant;
import io.mosip.kernel.masterdata.constant.UpdateQueryConstants;
import io.mosip.kernel.masterdata.constant.*;
import io.mosip.kernel.masterdata.dto.BlockListedWordStatusUpdateDto;
import io.mosip.kernel.masterdata.dto.BlockListedWordsUpdateDto;
import io.mosip.kernel.masterdata.dto.BlocklistedWordsDto;
import io.mosip.kernel.masterdata.dto.getresponse.BlocklistedWordsResponseDto;
import io.mosip.kernel.masterdata.dto.getresponse.PageDto;
import io.mosip.kernel.masterdata.dto.getresponse.StatusResponseDto;
import io.mosip.kernel.masterdata.dto.getresponse.extn.BlocklistedWordsExtnDto;
import io.mosip.kernel.masterdata.dto.request.FilterDto;
import io.mosip.kernel.masterdata.dto.request.FilterValueDto;
import io.mosip.kernel.masterdata.dto.request.Pagination;
import io.mosip.kernel.masterdata.dto.request.SearchDto;
import io.mosip.kernel.masterdata.dto.request.SearchFilter;
import io.mosip.kernel.masterdata.dto.request.SearchSort;
import io.mosip.kernel.masterdata.dto.request.*;
import io.mosip.kernel.masterdata.dto.response.ColumnValue;
import io.mosip.kernel.masterdata.dto.response.FilterResponseDto;
import io.mosip.kernel.masterdata.dto.response.FilterResult;
Expand All @@ -30,14 +22,7 @@
import io.mosip.kernel.masterdata.exception.RequestException;
import io.mosip.kernel.masterdata.repository.BlocklistedWordsRepository;
import io.mosip.kernel.masterdata.service.BlocklistedWordsService;
import io.mosip.kernel.masterdata.utils.AuditUtil;
import io.mosip.kernel.masterdata.utils.ExceptionUtils;
import io.mosip.kernel.masterdata.utils.MapperUtils;
import io.mosip.kernel.masterdata.utils.MasterDataFilterHelper;
import io.mosip.kernel.masterdata.utils.MasterdataCreationUtil;
import io.mosip.kernel.masterdata.utils.MasterdataSearchHelper;
import io.mosip.kernel.masterdata.utils.MetaDataUtils;
import io.mosip.kernel.masterdata.utils.PageUtils;
import io.mosip.kernel.masterdata.utils.*;
import io.mosip.kernel.masterdata.validator.FilterColumnValidator;
import io.mosip.kernel.masterdata.validator.FilterTypeValidator;
import jakarta.persistence.EntityManager;
Expand All @@ -58,14 +43,7 @@

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
import java.util.Collections;
import java.util.*;

/**
* Service implementation class for {@link BlocklistedWordsService}.
Expand Down Expand Up @@ -455,13 +433,23 @@ public FilterResponseDto blockListedWordsFilterValues(FilterValueDto filterValue

@CacheEvict(value = "blocklisted-words", allEntries = true)
@Override
public StatusResponseDto updateBlockListedWordStatus(String word, boolean isActive) {
public StatusResponseDto updateBlockListedWordStatus(BlockListedWordStatusUpdateDto requestDto) {
// TODO Auto-generated method stub
StatusResponseDto response = new StatusResponseDto();

if (requestDto == null || requestDto.getWord() == null || requestDto.getWord().isBlank()) {
throw new IllegalArgumentException("Word cannot be null or empty");
}
String normalizedWord = requestDto.getWord().trim().toLowerCase();

Boolean isActive = requestDto.getIsActive();
if (requestDto.getIsActive() == null) {
throw new IllegalArgumentException("isActive field cannot be null");
}

List<BlocklistedWords> wordEntity = null;
try {
wordEntity = blocklistedWordsRepository.findtoUpdateBlocklistedWordByWord(word);
wordEntity = blocklistedWordsRepository.findtoUpdateBlocklistedWordByWord(normalizedWord);
} catch (DataAccessException | DataAccessLayerException accessException) {
auditUtil.auditRequest(
String.format(MasterDataConstant.FAILURE_UPDATE, BlockListedWordsUpdateDto.class.getSimpleName()),
Expand All @@ -477,7 +465,7 @@ public StatusResponseDto updateBlockListedWordStatus(String word, boolean isActi
}

if (wordEntity != null && !wordEntity.isEmpty()) {
masterdataCreationUtil.updateMasterDataStatus(BlocklistedWords.class, word, isActive, "word");
masterdataCreationUtil.updateMasterDataStatus(BlocklistedWords.class, normalizedWord, isActive, "word");
} else {
auditUtil.auditRequest(
String.format(MasterDataConstant.FAILURE_UPDATE, BlockListedWordsUpdateDto.class.getSimpleName()),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,79 +1,15 @@
package io.mosip.kernel.masterdata.test.controller;

import static org.hamcrest.CoreMatchers.is;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.doNothing;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Month;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;

import org.hamcrest.Matchers;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.security.test.context.support.WithUserDetails;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.RequestBuilder;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.web.client.RestTemplate;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;

import io.mosip.kernel.core.http.RequestWrapper;
import io.mosip.kernel.core.websub.model.EventModel;
import io.mosip.kernel.core.websub.spi.PublisherClient;
import io.mosip.kernel.masterdata.constant.BlocklistedWordsErrorCode;
import io.mosip.kernel.masterdata.constant.LocationErrorCode;
import io.mosip.kernel.masterdata.dto.ApplicationDto;
import io.mosip.kernel.masterdata.dto.BiometricAttributeDto;
import io.mosip.kernel.masterdata.dto.BiometricTypeDto;
import io.mosip.kernel.masterdata.dto.BlockListedWordsRequest;
import io.mosip.kernel.masterdata.dto.BlocklistedWordListRequestDto;
import io.mosip.kernel.masterdata.dto.BlocklistedWordsDto;
import io.mosip.kernel.masterdata.dto.DocumentCategoryDto;
import io.mosip.kernel.masterdata.dto.DocumentTypeDto;
import io.mosip.kernel.masterdata.dto.ExceptionalHolidayDto;
import io.mosip.kernel.masterdata.dto.LanguageDto;
import io.mosip.kernel.masterdata.dto.LocationDto;
import io.mosip.kernel.masterdata.dto.LocationHierarchyLevelDto;
import io.mosip.kernel.masterdata.dto.LocationHierarchyLevelResponseDto;
import io.mosip.kernel.masterdata.dto.TemplateDto;
import io.mosip.kernel.masterdata.dto.WeekDaysResponseDto;
import io.mosip.kernel.masterdata.dto.WorkingDaysResponseDto;
import io.mosip.kernel.masterdata.dto.getresponse.ApplicationResponseDto;
import io.mosip.kernel.masterdata.dto.getresponse.BiometricAttributeResponseDto;
import io.mosip.kernel.masterdata.dto.getresponse.BiometricTypeResponseDto;
import io.mosip.kernel.masterdata.dto.getresponse.BlockListedWordsResponse;
import io.mosip.kernel.masterdata.dto.getresponse.DocumentCategoryResponseDto;
import io.mosip.kernel.masterdata.dto.getresponse.ExceptionalHolidayResponseDto;
import io.mosip.kernel.masterdata.dto.getresponse.LanguageResponseDto;
import io.mosip.kernel.masterdata.dto.getresponse.LocationHierarchyDto;
import io.mosip.kernel.masterdata.dto.getresponse.LocationHierarchyResponseDto;
import io.mosip.kernel.masterdata.dto.getresponse.LocationResponseDto;
import io.mosip.kernel.masterdata.dto.getresponse.ResgistrationCenterStatusResponseDto;
import io.mosip.kernel.masterdata.dto.getresponse.StatusResponseDto;
import io.mosip.kernel.masterdata.dto.getresponse.TemplateResponseDto;
import io.mosip.kernel.masterdata.dto.getresponse.ValidDocumentTypeResponseDto;
import io.mosip.kernel.masterdata.dto.getresponse.WeekDaysDto;
import io.mosip.kernel.masterdata.dto.*;
import io.mosip.kernel.masterdata.dto.getresponse.*;
import io.mosip.kernel.masterdata.dto.postresponse.CodeResponseDto;
import io.mosip.kernel.masterdata.dto.postresponse.PostLocationCodeResponseDto;
import io.mosip.kernel.masterdata.dto.request.FilterDto;
Expand All @@ -93,33 +29,43 @@
import io.mosip.kernel.masterdata.repository.HolidayRepository;
import io.mosip.kernel.masterdata.repository.IdTypeRepository;
import io.mosip.kernel.masterdata.repository.RegistrationCenterRepository;
import io.mosip.kernel.masterdata.service.ApplicationService;
import io.mosip.kernel.masterdata.service.BiometricAttributeService;
import io.mosip.kernel.masterdata.service.BiometricTypeService;
import io.mosip.kernel.masterdata.service.BlocklistedWordsService;
import io.mosip.kernel.masterdata.service.DeviceService;
import io.mosip.kernel.masterdata.service.DeviceSpecificationService;
import io.mosip.kernel.masterdata.service.DeviceTypeService;
import io.mosip.kernel.masterdata.service.DocumentCategoryService;
import io.mosip.kernel.masterdata.service.DocumentTypeService;
import io.mosip.kernel.masterdata.service.DynamicFieldService;
import io.mosip.kernel.masterdata.service.ExceptionalHolidayService;
import io.mosip.kernel.masterdata.service.HolidayService;
import io.mosip.kernel.masterdata.service.LanguageService;
import io.mosip.kernel.masterdata.service.LocationHierarchyService;
import io.mosip.kernel.masterdata.service.LocationService;
import io.mosip.kernel.masterdata.service.MachineService;
import io.mosip.kernel.masterdata.service.MachineSpecificationService;
import io.mosip.kernel.masterdata.service.MachineTypeService;
import io.mosip.kernel.masterdata.service.RegWorkingNonWorkingService;
import io.mosip.kernel.masterdata.service.RegistrationCenterService;
import io.mosip.kernel.masterdata.service.RegistrationCenterTypeService;
import io.mosip.kernel.masterdata.service.TemplateFileFormatService;
import io.mosip.kernel.masterdata.service.TemplateService;
import io.mosip.kernel.masterdata.service.ZoneService;
import io.mosip.kernel.masterdata.service.*;
import io.mosip.kernel.masterdata.test.TestBootApplication;
import io.mosip.kernel.masterdata.utils.AuditUtil;
import io.mosip.kernel.masterdata.utils.LocalDateTimeUtil;
import org.hamcrest.Matchers;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.security.test.context.support.WithUserDetails;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.RequestBuilder;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.web.client.RestTemplate;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Month;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;

import static org.hamcrest.CoreMatchers.is;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.doNothing;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestBootApplication.class)
Expand Down Expand Up @@ -1262,13 +1208,22 @@ public void updateBlockListedWordStatusTest() throws Exception {

StatusResponseDto dto = new StatusResponseDto();
dto.setStatus("Status updated successfully for BlocklistedWords");
Mockito.when(blocklistedWordsService.updateBlockListedWordStatus(Mockito.anyString(), Mockito.anyBoolean()))
Mockito.when(blocklistedWordsService.updateBlockListedWordStatus(Mockito.any(BlockListedWordStatusUpdateDto.class)))
.thenReturn(dto);

RequestBuilder requestBuilder = MockMvcRequestBuilders.patch("/blocklistedwords").characterEncoding("UTF-8")
.accept(MediaType.APPLICATION_JSON_VALUE).contentType(MediaType.APPLICATION_JSON).param("word", "ABC")
.param("isActive", "true");
mockMvc.perform(requestBuilder).andExpect(status().isOk());
BlockListedWordStatusUpdateDto requestDto = new BlockListedWordStatusUpdateDto();
requestDto.setWord("ABC");
requestDto.setIsActive(true);

ObjectMapper objectMapper = new ObjectMapper();
String requestBody = objectMapper.writeValueAsString(requestDto);

mockMvc.perform(MockMvcRequestBuilders.patch("/blocklistedwords")
.characterEncoding("UTF-8")
.accept(MediaType.APPLICATION_JSON_VALUE)
.contentType(MediaType.APPLICATION_JSON)
.content(requestBody))
.andExpect(status().isOk());
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1586,21 +1586,36 @@ public void updateBlockListedWordStatusSuccessTest() {
when(wordsRepository.findtoUpdateBlocklistedWordByWord(Mockito.anyString())).thenReturn(words);
when(masterdataCreationUtil.updateMasterDataStatus(Mockito.eq(BlocklistedWords.class), Mockito.anyString(),
Mockito.anyBoolean(), Mockito.anyString())).thenReturn(1);
StatusResponseDto actual = blocklistedWordsService.updateBlockListedWordStatus("abc", false);

BlockListedWordStatusUpdateDto requestDto = new BlockListedWordStatusUpdateDto();
requestDto.setWord("abc");
requestDto.setIsActive(false);

StatusResponseDto actual = blocklistedWordsService.updateBlockListedWordStatus(requestDto);
Assert.assertEquals(dto, actual);
}

@Test(expected = MasterDataServiceException.class)
public void updateBlockListedWordStatusFailureTest() {
when(wordsRepository.findtoUpdateBlocklistedWordByWord(Mockito.anyString()))
.thenThrow(MasterDataServiceException.class);
blocklistedWordsService.updateBlockListedWordStatus("abc", false);

BlockListedWordStatusUpdateDto requestDto = new BlockListedWordStatusUpdateDto();
requestDto.setWord("abc");
requestDto.setIsActive(false);

blocklistedWordsService.updateBlockListedWordStatus(requestDto);
}

@Test(expected = DataNotFoundException.class)
public void updateBlockListedWordStatusFailureDataNotFoundTest() {
when(wordsRepository.findtoUpdateBlocklistedWordByWord(Mockito.anyString())).thenReturn(null);
blocklistedWordsService.updateBlockListedWordStatus("abc", false);

BlockListedWordStatusUpdateDto requestDto = new BlockListedWordStatusUpdateDto();
requestDto.setWord("abc");
requestDto.setIsActive(false);

blocklistedWordsService.updateBlockListedWordStatus(requestDto);
}

// ------------------ DeviceSpecificationServiceTest -----------------//
Expand Down