Skip to content

Commit

Permalink
Mistakes have been fixed. Jacoco pull request report added.
Browse files Browse the repository at this point in the history
  • Loading branch information
Niaktes committed Nov 21, 2023
1 parent dedf8ec commit 498bd42
Show file tree
Hide file tree
Showing 5 changed files with 119 additions and 26 deletions.
31 changes: 31 additions & 0 deletions .github/workflows/jacoco_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# A Github action that publishes the JaCoCo report as a comment

name: Measure coverage

on:
pull_request:

jobs:
build:
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- uses: actions/checkout@v2
- name: Set up JDK 17
uses: actions/setup-java@v1
with:
java-version: '17'
- name: Build with Maven
run: mvn --batch-mode --update-snapshots test

- name: Jacoco Report to PR
id: jacoco
uses: madrapps/jacoco-report@v1.6.1
with:
paths: ${{ github.workspace }}/build/site/jacoco/jacoco.xml
token: ${{ secrets.GITHUB_TOKEN }}
min-coverage-overall: 40
min-coverage-changed-files: 60
title: Code Coverage
update-comment: true
9 changes: 9 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,15 @@
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
Expand Down
49 changes: 23 additions & 26 deletions src/main/java/ru/job4j/cars/controller/PostController.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import ru.job4j.cars.dto.ImageDto;
Expand All @@ -13,6 +14,7 @@
import ru.job4j.cars.model.CarModel;
import ru.job4j.cars.model.Post;
import ru.job4j.cars.service.*;
import ru.job4j.cars.utilities.SearchValidator;

@Controller
@RequestMapping("/posts")
Expand All @@ -29,14 +31,13 @@ public class PostController {
private final FuelTypeService fuelTypeService;
private final TransmissionService transmissionService;

private final SearchValidator searchValidator;

@GetMapping("/all")
public String getAllPosts(Model model, @ModelAttribute PostSearchDto searchDto) {
public String getAllPosts(Model model, @ModelAttribute PostSearchDto searchDto, BindingResult br) {
addFormAttributesToModel(model);
boolean searchActive = searchDto.getCar() != null
|| searchDto.getHighestPrice() > 0
|| searchDto.getLowestPrice() > 0
|| searchDto.getPostCreatedBeforeDays() > 0
|| searchDto.isImageExists();
searchValidator.validate(searchDto, br);
boolean searchActive = searchIsActiveCheck(br);
if (!searchActive) {
model.addAttribute("posts", postService.findAllNotSold());
} else {
Expand Down Expand Up @@ -75,32 +76,24 @@ public String getEditPage(Model model, @PathVariable int id) {
}

@PostMapping("/create")
public String createPost(@ModelAttribute Post post, @RequestParam MultipartFile file, Model model) {
try {
Optional<Post> savedPost = postService.save(post,
new ImageDto(file.getOriginalFilename(), file.getBytes()));
if (savedPost.isEmpty()) {
model.addAttribute("message", "Произошла ошибка при создании объявления.");
return "errors/404";
}
} catch (IOException e) {
model.addAttribute("message", "Ошибка при создании объявления!");
public String createPost(@ModelAttribute Post post, @RequestParam MultipartFile file, Model model)
throws IOException {
Optional<Post> savedPost = postService.save(post,
new ImageDto(file.getOriginalFilename(), file.getBytes()));
if (savedPost.isEmpty()) {
model.addAttribute("message", "Произошла ошибка при создании объявления.");
return "errors/404";
}
return "redirect:/posts/all";
}

@PostMapping("/edit")
public String editPost(@ModelAttribute Post post, @RequestParam MultipartFile file, Model model) {
try {
boolean isUpdated = postService.update(post,
new ImageDto(file.getOriginalFilename(), file.getBytes()));
if (!isUpdated) {
model.addAttribute("message", "Произошла ошибка при обновлении объявления.");
return "errors/404";
}
} catch (IOException e) {
model.addAttribute("message", "Ошибка при обновлении объявления!");
public String editPost(@ModelAttribute Post post, @RequestParam MultipartFile file, Model model)
throws IOException {
boolean isUpdated = postService.update(post,
new ImageDto(file.getOriginalFilename(), file.getBytes()));
if (!isUpdated) {
model.addAttribute("message", "Произошла ошибка при обновлении объявления.");
return "errors/404";
}
return "redirect:/users/posts";
Expand All @@ -123,4 +116,8 @@ private Model addFormAttributesToModel(Model model) {
return model;
}

private boolean searchIsActiveCheck(BindingResult bindingResult) {
return bindingResult.getErrorCount() < PostSearchDto.class.getDeclaredFields().length;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package ru.job4j.cars.handler;

import java.io.IOException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

@ControllerAdvice
@Slf4j
public class MultipartFileGlobalExceptionHandler {

@ExceptionHandler (value = {IOException.class})
public String ioExceptionHandle(Exception e, Model model) {
log.error(e.getMessage(), e);
model.addAttribute("message", "Ошибка при работе с объявлением!");
return "errors/404";
}

}
36 changes: 36 additions & 0 deletions src/main/java/ru/job4j/cars/utilities/SearchValidator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package ru.job4j.cars.utilities;

import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
import ru.job4j.cars.dto.PostSearchDto;

@Component
public class SearchValidator implements Validator {

@Override
public boolean supports(Class<?> clazz) {
return PostSearchDto.class.equals(clazz);
}

@Override
public void validate(Object target, Errors errors) {
PostSearchDto dto = (PostSearchDto) target;
if (dto.getCar() == null) {
errors.rejectValue("car", "Car is null");
}
if (dto.getHighestPrice() <= 0) {
errors.rejectValue("highestPrice", "highest price is less than 1");
}
if (dto.getLowestPrice() <= 0) {
errors.rejectValue("lowestPrice", "lowest price is less than 1");
}
if (dto.getPostCreatedBeforeDays() <= 0) {
errors.rejectValue("postCreatedBeforeDays", "created before is less than 1");
}
if (!dto.isImageExists()) {
errors.rejectValue("imageExists", " only image exists is false");
}
}

}

0 comments on commit 498bd42

Please sign in to comment.