diff --git a/src/main/java/ro/raffa/curs/validator/CarValidator.java b/src/main/java/ro/raffa/curs/validator/CarValidator.java index 02b0d5b..a5c1861 100644 --- a/src/main/java/ro/raffa/curs/validator/CarValidator.java +++ b/src/main/java/ro/raffa/curs/validator/CarValidator.java @@ -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); @@ -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()){ + 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); + } + } } diff --git a/src/test/java/ro/raffa/curs/validator/CarValidatorTest.java b/src/test/java/ro/raffa/curs/validator/CarValidatorTest.java index 9aec6a9..ab8cc78 100644 --- a/src/test/java/ro/raffa/curs/validator/CarValidatorTest.java +++ b/src/test/java/ro/raffa/curs/validator/CarValidatorTest.java @@ -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()); } @@ -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()); } @@ -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()); } @@ -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()); } @@ -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) { 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; + } } \ No newline at end of file