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
55 changes: 55 additions & 0 deletions src/main/java/ro/raffa/curs/validator/CarValidator.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,29 @@
package ro.raffa.curs.validator;

import java.math.BigDecimal;
import java.time.OffsetDateTime;
import java.time.YearMonth;

import org.springframework.beans.factory.annotation.Autowired;

import lombok.experimental.UtilityClass;
import ro.raffa.curs.exception.CarValidatorException;
import ro.raffa.curs.model.Car;

@UtilityClass
public class CarValidator {

public static Boolean validateCar(Car car) throws CarValidatorException {
validateCarMaker(car.getMaker());
validateCarModel(car.getModel());
validateCarColor(car.getColor());
validateCarYear(car.getYear());
validateCarPrice(car.getPrice());
validateCarCurrency(car.getCurrency());
return true;
}


private static void validateCarMaker(String name) throws CarValidatorException {
if (name == null || name.isEmpty()) {
throw new CarValidatorException(90001, name);
Expand All @@ -22,5 +35,47 @@ private static void validateCarMaker(String name) throws CarValidatorException {
throw new CarValidatorException(90003, name);
}
}

private static void validateCarCurrency(String currency) throws CarValidatorException{
if(currency == null || currency.isEmpty()) {
throw new CarValidatorException(9004, currency);
}
if(!currency.equals("EUR")){
throw new CarValidatorException(9005, currency);
}
}

private static void validateCarPrice(BigDecimal price) {
if(price.equals(BigDecimal.valueOf(0))) {
throw new CarValidatorException(9006, price.toString());
}
}

private static void validateCarYear(Integer year) {
if(year > YearMonth.now().getYear()){
Copy link
Owner

@radu103 radu103 May 24, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

validateCar_year_null test fails because of missing year == null check in this function ?

throw new CarValidatorException(9012, year.toString());
}
if(year== 0) {
throw new CarValidatorException(9007, year.toString());
}
}

private static void validateCarModel(String model) {
if(model == null || model.isEmpty()) {
throw new CarValidatorException(9008, model);
}
if(model.toLowerCase().charAt(0) == model.charAt(0)) {
throw new CarValidatorException(9009, model);
}
}

private static void validateCarColor(String color) {
if(color == null || color.isEmpty()) {
throw new CarValidatorException(9010, color);
}
if(color.toLowerCase().charAt(0) == color.charAt(0)) {
throw new CarValidatorException(9011, color);
}
}

}
201 changes: 193 additions & 8 deletions src/test/java/ro/raffa/curs/validator/CarValidatorTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,12 @@
@SpringBootTest
@ActiveProfiles("local")
public class CarValidatorTest {


@Test
void validateCar_name_null() {
try {
CarValidator.validateCar(createCar(null));
CarValidator.validateCar(carForMaker(null));
} catch (CarValidatorException e) {
assertEquals(90001, e.getErrorCode());
}
Expand All @@ -28,7 +30,7 @@ void validateCar_name_null() {
@Test
void validateCar_name_empty() {
try {
CarValidator.validateCar(createCar(""));
CarValidator.validateCar(carForMaker(""));
} catch (CarValidatorException e) {
assertEquals(90001, e.getErrorCode());
}
Expand All @@ -38,7 +40,7 @@ void validateCar_name_empty() {
@Test
void validateCar_name_over_15() {
try {
CarValidator.validateCar(createCar("Kiewjiejfiejefwefwewef"));
CarValidator.validateCar(carForMaker("Kiewjiejfiejefwefwewef"));
} catch (CarValidatorException e) {
assertEquals(90002, e.getErrorCode());
}
Expand All @@ -48,7 +50,7 @@ void validateCar_name_over_15() {
@Test
void validateCar_name_firstChar_lowerCase() {
try {
CarValidator.validateCar(createCar("mercedes"));
CarValidator.validateCar(carForMaker("mercedes"));
} catch (CarValidatorException e) {
assertEquals(90003, e.getErrorCode());
}
Expand All @@ -57,18 +59,201 @@ void validateCar_name_firstChar_lowerCase() {

@Test
void validateCar_name_okay() {
Boolean result = CarValidator.validateCar(createCar("Mercedes"));
Boolean result = CarValidator.validateCar(carForMaker("Mercedes"));
assertTrue(result);
}

Car createCar(String maker) {
@Test
void validateCar_model_null() {
try {
CarValidator.validateCar(carForModel(null));
} catch (CarValidatorException e) {
assertEquals(9008, e.getErrorCode());
}
}

@Test
void validateCar_model_empty() {
try {
CarValidator.validateCar(carForModel(""));
} catch (CarValidatorException e) {
assertEquals(9008, e.getErrorCode());
}
}

@Test
void validateCar_model_firstChar_lowerCase() {
try {
CarValidator.validateCar(carForModel("toronto"));
} catch (CarValidatorException e) {
assertEquals(9009, e.getErrorCode());
}
}

@Test
void validateCar_model_ok() {
assertTrue(CarValidator.validateCar(carForMaker("Toronto")));
}

@Test
void validateCar_color_null() {
try {
CarValidator.validateCar(carForColor(null));
} catch (CarValidatorException e) {
assertEquals(9010, e.getErrorCode());
}
}

@Test
void validateCar_color_empty() {
try {
CarValidator.validateCar(carForColor(""));
} catch (CarValidatorException e) {
assertEquals(9010, e.getErrorCode());
}
}

@Test
void validateCar_color_firstChar_lowerCase() {
try {
CarValidator.validateCar(carForColor("color"));
} catch (CarValidatorException e) {
assertEquals(9011, e.getErrorCode());
}
}

@Test
void validateCar_color_ok() {
assertTrue(CarValidator.validateCar(carForColor("Color")));
}

@Test
void validateCar_year_is0() {
try {
CarValidator.validateCar(carForYear(0));
} catch (CarValidatorException e) {
assertEquals(9007, e.getErrorCode());
}
}

@Test
void validateCar_year_over_current_year() {
try {
CarValidator.validateCar(carForYear(2024));
} catch (CarValidatorException e) {
assertEquals(9012, e.getErrorCode());
}
}

@Test
void validateCar_year_ok() {
assertTrue(CarValidator.validateCar(carForYear(2005)));
}

@Test
void validateCar_price_is0() {
try {
CarValidator.validateCar(carForPrice(BigDecimal.valueOf(0)));
} catch (CarValidatorException e) {
assertEquals(9006, e.getErrorCode());
}
}

@Test
void validateCar_price_ok() {
assertTrue(CarValidator.validateCar(carForPrice(BigDecimal.valueOf(250000))));
}

@Test
void validateCar_currency_null() {
try {
CarValidator.validateCar(carForCurrency(null));
} catch (CarValidatorException e) {
assertEquals(9004, e.getErrorCode());
}
}

@Test
void validateCar_currency_empty() {
try {
CarValidator.validateCar(carForCurrency(""));
} catch (CarValidatorException e) {
assertEquals(9004, e.getErrorCode());
}
}

@Test
void validateCar_incorrect_currency() {
try {
CarValidator.validateCar(carForCurrency("RON"));
} catch (CarValidatorException e) {
assertEquals(9005, e.getErrorCode());
}
}

Car carForMaker(String maker) {
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you can move all these private functions and used them from a static class re-usable for all tests

Car car = new Car();
car.setMaker(maker);
car.setColor("yellow");
car.setModel("x5");
car.setColor("Yellow");
car.setModel("X5");
car.setYear(2023);
car.setCurrency("EUR");
car.setPrice(BigDecimal.valueOf(98000));
return car;
}

Car carForModel(String model) {
Car car = new Car();
car.setMaker("Mercedes");
car.setColor("Yellow");
car.setModel(model);
car.setYear(2023);
car.setCurrency("EUR");
car.setPrice(BigDecimal.valueOf(98000));
return car;
}

Car carForColor(String color) {
Car car = new Car();
car.setMaker("Mercedes");
car.setColor(color);
car.setModel("X5");
car.setYear(2023);
car.setCurrency("EUR");
car.setPrice(BigDecimal.valueOf(98000));
return car;
}

Car carForYear(Integer year) {
Car car = new Car();
car.setMaker("Mercedes");
car.setColor("Yellow");
car.setModel("X5");
car.setYear(year);
car.setCurrency("EUR");
car.setPrice(BigDecimal.valueOf(98000));
return car;
}

Car carForPrice(BigDecimal price) {
Car car = new Car();
car.setMaker("Mercedes");
car.setColor("Yellow");
car.setModel("X5");
car.setYear(2023);
car.setCurrency("EUR");
car.setPrice(price);
return car;
}

Car carForCurrency(String currency) {
Car car = new Car();
car.setMaker("Mercedes");
car.setColor("Yellow");
car.setModel("X5");
car.setYear(2023);
car.setCurrency(currency);
car.setPrice(BigDecimal.valueOf(98000));
return car;
}
}