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));
}
}