diff --git a/ docker-compose.yml b/ docker-compose.yml index e39b1170..cea37c14 100644 --- a/ docker-compose.yml +++ b/ docker-compose.yml @@ -12,4 +12,3 @@ services: MYSQL_PASSWORD: strong_password_here ports: - "3306:3306" - command: --default-authentication-plugin=mysql_native_password diff --git a/faktura.txt b/faktura.txt index 6b306cd6..8b137891 100644 --- a/faktura.txt +++ b/faktura.txt @@ -1,7 +1 @@ -FAKTURA - EVTA Rental -Kund: eric -Att betala: 1700.0 kr -Betala till: -Bankgiro: 3492-232 -OCR: 0000000000 diff --git a/sql/seeds.sql b/sql/seeds.sql index 3dcff68d..4f7b64d1 100644 --- a/sql/seeds.sql +++ b/sql/seeds.sql @@ -1,3 +1,4 @@ + USE car_rental; INSERT INTO cars (brand, model, registrationNumber, pricePerHour, pricePerDay) VALUES diff --git a/src/main/java/org/example/controller/PaymentController.java b/src/main/java/org/example/controller/PaymentController.java new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/org/example/entity/Addon.java b/src/main/java/org/example/entity/Addon.java index e27cd73b..b9957053 100644 --- a/src/main/java/org/example/entity/Addon.java +++ b/src/main/java/org/example/entity/Addon.java @@ -25,6 +25,11 @@ public Addon(String name, double price) { this.price = price; } + public Addon(String name, String description, double price) { + this.name = name; + this.price = price; + } + public Long getId() { return id; } public String getName() { return name; } public double getPrice() { return price; } diff --git a/src/main/java/org/example/entity/PaymentMethod.java b/src/main/java/org/example/entity/PaymentMethod.java index c00ce6bd..3dde7977 100644 --- a/src/main/java/org/example/entity/PaymentMethod.java +++ b/src/main/java/org/example/entity/PaymentMethod.java @@ -1,6 +1,7 @@ package org.example.entity; public enum PaymentMethod { + Debit, CASH, INVOICE } diff --git a/src/test/java/org/example/AppIT.java b/src/test/java/org/example/AppIT.java index 9d1ca031..393ff8e4 100644 --- a/src/test/java/org/example/AppIT.java +++ b/src/test/java/org/example/AppIT.java @@ -4,6 +4,7 @@ import static org.assertj.core.api.Assertions.assertThat; + public class AppIT { @Test void itTest() { diff --git a/src/test/java/org/example/BookingServiceTest.java b/src/test/java/org/example/BookingServiceTest.java new file mode 100644 index 00000000..8737d08d --- /dev/null +++ b/src/test/java/org/example/BookingServiceTest.java @@ -0,0 +1,73 @@ +package org.example; + +import org.example.entity.Addon; +import org.example.entity.BookingType; +import org.example.entity.Car; +import org.example.service.BookingService; +import org.junit.jupiter.api.Test; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +class BookingServiceTest { + + private final BookingService bookingService = new BookingService(); + + @Test + void testCalculatePriceHourly() { + Car car = new Car("Volvo", "XC90", "ABC123", 500, 2000); + LocalDateTime start = LocalDateTime.of(2026, 1, 14, 10, 0); + LocalDateTime end = LocalDateTime.of(2026, 1, 14, 12, 0); // 2 timmar + List addons = new ArrayList<>(); + + double price = bookingService.calculatePrice(car, start, end, BookingType.HOURLY, addons); + + // 2 timmar * 500 kr/timme = 1000 kr + assertThat(price).isEqualTo(1000); + } + + @Test + void testCalculatePriceDaily() { + Car car = new Car("Volvo", "XC90", "ABC123", 500, 2000); + LocalDateTime start = LocalDateTime.of(2026, 1, 14, 10, 0); + LocalDateTime end = LocalDateTime.of(2026, 1, 16, 10, 0); // 2 dagar + List addons = new ArrayList<>(); + + double price = bookingService.calculatePrice(car, start, end, BookingType.DAILY, addons); + + // 2 dagar * 2000 kr/dag = 4000 kr + assertThat(price).isEqualTo(4000); + } + + @Test + void testCalculatePriceWithAddons() { + Car car = new Car("Volvo", "XC90", "ABC123", 500, 2000); + LocalDateTime start = LocalDateTime.of(2026, 1, 14, 10, 0); + LocalDateTime end = LocalDateTime.of(2026, 1, 14, 12, 0); // 2 timmar + + List addons = new ArrayList<>(); + Addon addon1 = new Addon("GPS", "GPS-navigator", 100); + addons.add(addon1); + + double price = bookingService.calculatePrice(car, start, end, BookingType.HOURLY, addons); + + // (2 timmar * 500 kr/timme) + 100 kr addon = 1100 kr + assertThat(price).isEqualTo(1100); + } + + @Test + void testCalculatePriceMinimumOneHour() { + Car car = new Car("Volvo", "XC90", "ABC123", 500, 2000); + LocalDateTime start = LocalDateTime.of(2026, 1, 14, 10, 30); + LocalDateTime end = LocalDateTime.of(2026, 1, 14, 10, 45); // Samma timme + List addons = new ArrayList<>(); + + double price = bookingService.calculatePrice(car, start, end, BookingType.HOURLY, addons); + + // Minimum 1 timme även om mindre än 1 timme valts + assertThat(price).isEqualTo(500); + } +} diff --git a/src/test/java/org/example/CarServiceTest.java b/src/test/java/org/example/CarServiceTest.java new file mode 100644 index 00000000..aeacac84 --- /dev/null +++ b/src/test/java/org/example/CarServiceTest.java @@ -0,0 +1,27 @@ + +package org.example; + +import org.example.entity.Car; +import org.example.service.CarService; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +class CarServiceTest { + + private final CarService carService = new CarService(); + + @Test + void testGetAllCarsReturnsNotNull() { + List cars = carService.getAllCars(); + assertThat(cars).isNotNull(); + } + + @Test + void testGetAllCarsReturnsAList() { + List cars = carService.getAllCars(); + assertThat(cars).isInstanceOf(List.class); + } +}