diff --git a/pom.xml b/pom.xml index d2126220..3e2b25a0 100644 --- a/pom.xml +++ b/pom.xml @@ -1,32 +1,34 @@ - - - 4.0.0 + + + + org.springframework.boot + spring-boot-starter-web + - com.houari - Calculator - 1.0-SNAPSHOT + + + org.springframework.boot + spring-boot-starter-data-jpa + - - 11 - 11 - 2.14.2 - 5.9.2 - + + + com.h2database + h2 + runtime + - - - com.fasterxml.jackson.dataformat - jackson-dataformat-yaml - ${jackson-dataformat-yaml.version} - + + + org.projectlombok + lombok + provided + - - org.junit.jupiter - junit-jupiter-params - ${junit-jupiter-params.version} - test - - - \ No newline at end of file + + + org.springframework.boot + spring-boot-starter-test + test + + diff --git a/src/main/java/com/houarizegai/calculator/controller/CalculatorController.java b/src/main/java/com/houarizegai/calculator/controller/CalculatorController.java new file mode 100644 index 00000000..dbc3bee7 --- /dev/null +++ b/src/main/java/com/houarizegai/calculator/controller/CalculatorController.java @@ -0,0 +1,35 @@ +package com.example.calculator.controller; + +import com.example.calculator.service.CalculatorService; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/calculator") +public class CalculatorController { + + private final CalculatorService calculatorService; + + public CalculatorController(CalculatorService calculatorService) { + this.calculatorService = calculatorService; + } + + @GetMapping("/add") + public int add(@RequestParam int a, @RequestParam int b) { + return calculatorService.add(a, b); + } + + @GetMapping("/subtract") + public int subtract(@RequestParam int a, @RequestParam int b) { + return calculatorService.subtract(a, b); + } + + @GetMapping("/multiply") + public int multiply(@RequestParam int a, @RequestParam int b) { + return calculatorService.multiply(a, b); + } + + @GetMapping("/divide") + public int divide(@RequestParam int a, @RequestParam int b) { + return calculatorService.divide(a, b); + } +} diff --git a/src/main/java/com/houarizegai/calculator/tdd/service/userService.java b/src/main/java/com/houarizegai/calculator/tdd/service/userService.java new file mode 100644 index 00000000..f7164579 --- /dev/null +++ b/src/main/java/com/houarizegai/calculator/tdd/service/userService.java @@ -0,0 +1,25 @@ +package com.example.tdd.service; + +import com.example.tdd.model.User; +import com.example.tdd.repository.UserRepository; +import org.springframework.stereotype.Service; +import java.util.Optional; + +@Service +public class UserService { + + private final UserRepository userRepository; + + public UserService(UserRepository userRepository) { + this.userRepository = userRepository; + } + + public User createUser(User user) { + return userRepository.save(user); + } + + public User getUserById(Long id) { + Optional user = userRepository.findById(id); + return user.orElseThrow(() -> new RuntimeException("User not found")); + } +} diff --git a/src/main/java/com/houarizegai/calculator/tdd/service/userServiceTest.java b/src/main/java/com/houarizegai/calculator/tdd/service/userServiceTest.java new file mode 100644 index 00000000..4de5d124 --- /dev/null +++ b/src/main/java/com/houarizegai/calculator/tdd/service/userServiceTest.java @@ -0,0 +1,36 @@ +package com.example.tdd.service; + +import com.example.tdd.model.User; +import com.example.tdd.repository.UserRepository; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import static org.junit.jupiter.api.Assertions.*; +import java.util.Optional; + +class UserServiceTest { + + private final UserRepository userRepository = Mockito.mock(UserRepository.class); + private final UserService userService = new UserService(userRepository); + + @Test + void testCreateUser() { + User user = new User(1L, "John Doe", "john@example.com"); + + Mockito.when(userRepository.save(user)).thenReturn(user); + + User createdUser = userService.createUser(user); + assertNotNull(createdUser); + assertEquals("John Doe", createdUser.getName()); + } + + @Test + void testFindUserById() { + User user = new User(1L, "John Doe", "john@example.com"); + + Mockito.when(userRepository.findById(1L)).thenReturn(Optional.of(user)); + + User foundUser = userService.getUserById(1L); + assertNotNull(foundUser); + assertEquals("John Doe", foundUser.getName()); + } +} diff --git a/src/main/java/com/houarizegai/calculator/tdd/userModal.java b/src/main/java/com/houarizegai/calculator/tdd/userModal.java new file mode 100644 index 00000000..2a2cdeef --- /dev/null +++ b/src/main/java/com/houarizegai/calculator/tdd/userModal.java @@ -0,0 +1,20 @@ +package com.example.tdd.model; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Entity +@Data +@AllArgsConstructor +@NoArgsConstructor +public class User { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private String name; + private String email; +} diff --git a/src/main/java/com/houarizegai/calculator/tdd/userRepository.java b/src/main/java/com/houarizegai/calculator/tdd/userRepository.java new file mode 100644 index 00000000..30d56d91 --- /dev/null +++ b/src/main/java/com/houarizegai/calculator/tdd/userRepository.java @@ -0,0 +1,7 @@ +package com.example.tdd.repository; + +import com.example.tdd.model.User; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface UserRepository extends JpaRepository { +} diff --git a/src/test/java/com/houarizegai/calculator/Calculator.code-workspace b/src/test/java/com/houarizegai/calculator/Calculator.code-workspace new file mode 100644 index 00000000..90d9b35a --- /dev/null +++ b/src/test/java/com/houarizegai/calculator/Calculator.code-workspace @@ -0,0 +1,8 @@ +{ + "folders": [ + { + "path": "../../../../../.." + } + ], + "settings": {} +} \ No newline at end of file diff --git a/src/test/java/com/houarizegai/calculator/CalculatorService.java b/src/test/java/com/houarizegai/calculator/CalculatorService.java new file mode 100644 index 00000000..784631c2 --- /dev/null +++ b/src/test/java/com/houarizegai/calculator/CalculatorService.java @@ -0,0 +1,26 @@ +package com.example.calculator.service; + +import org.springframework.stereotype.Service; + +@Service +public class CalculatorService { + + public int add(int a, int b) { + return a + b; + } + + public int subtract(int a, int b) { + return a - b; + } + + public int multiply(int a, int b) { + return a * b; + } + + public int divide(int a, int b) { + if (b == 0) { + throw new ArithmeticException("Cannot divide by zero"); + } + return a / b; + } +} diff --git a/src/test/java/com/houarizegai/calculator/CalculatorUITest.java b/src/test/java/com/houarizegai/calculator/CalculatorUITest.java index 1c617ee5..d926522c 100644 --- a/src/test/java/com/houarizegai/calculator/CalculatorUITest.java +++ b/src/test/java/com/houarizegai/calculator/CalculatorUITest.java @@ -1,24 +1,41 @@ -package com.houarizegai.calculator; +package com.example.calculator.service; -import com.houarizegai.calculator.ui.CalculatorUI; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.CsvSource; +import static org.junit.jupiter.api.Assertions.*; -import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; -class CalculatorUITest { +class CalculatorServiceTest { - private CalculatorUI calculatorUI; + private CalculatorService calculatorService; @BeforeEach void setUp() { - calculatorUI = new CalculatorUI(); + calculatorService = new CalculatorService(); + } + + @Test + void testAddition() { + assertEquals(10, calculatorService.add(5, 5)); + } + + @Test + void testSubtraction() { + assertEquals(3, calculatorService.subtract(8, 5)); + } + + @Test + void testMultiplication() { + assertEquals(20, calculatorService.multiply(4, 5)); + } + + @Test + void testDivision() { + assertEquals(2, calculatorService.divide(10, 5)); } - @ParameterizedTest - @CsvSource({"3,5,+,8", "2,8,-,-6", "44.5,10,*,445", "320,5,/,64", "3,5,%,3", "5,3,^,125"}) - void testCalculation(double firstNumber, double secondNumber, char operator, double expectedResult) { - assertEquals(expectedResult, calculatorUI.calculate(firstNumber, secondNumber, operator)); + @Test + void testDivisionByZero() { + assertThrows(ArithmeticException.class, () -> calculatorService.divide(10, 0)); } }