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
7 changes: 7 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,13 @@
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>

<build>
Expand Down
49 changes: 49 additions & 0 deletions src/main/java/pro/sky/Calculator/CalculatorController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package pro.sky.Calculator;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/calculator")
public class CalculatorController {
private final CalculatorService calculatorService;

public CalculatorController(CalculatorService calculatorService) {
this.calculatorService = calculatorService;
}
@GetMapping
public String welcome() {
return "Добро пожаловать в калькулятор";
}
@GetMapping("/plus")
public String plus(@RequestParam(required = false) Integer num1, @RequestParam(required = false) Integer num2){
isNull(num1);
isNull(num2);
return calculatorService.result(num1, num2, "+", calculatorService.plus(num1,num2));
}
@GetMapping("/minus")
public String minus(@RequestParam Integer num1, @RequestParam Integer num2){
isNull(num1);
isNull(num2);
return calculatorService.result(num1, num2, "-", calculatorService.minus(num1,num2));
}
@GetMapping("/multiply")
public String multiply(@RequestParam Integer num1, @RequestParam Integer num2){
isNull(num1);
isNull(num2);
return calculatorService.result(num1, num2, "*", calculatorService.multiply(num1,num2));
}
@GetMapping("/divide")
public String divide(@RequestParam Integer num1, @RequestParam Integer num2){
isNull(num1);
isNull(num2);
return calculatorService.result(num1, num2, "/", calculatorService.divide(num1,num2));
}
private void isNull(Integer num) {
if (num==null)
throw new NumIsNullException("Переменная не задана");

}
}
29 changes: 21 additions & 8 deletions src/main/java/pro/sky/Calculator/CalculatorService.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,30 @@

@Service
public class CalculatorService {
public int plus(int num1, int num2) {
return num1 + num2;
public Integer plus(Integer num1, Integer num2) {
return num1+num2;
}
public int minus(int num1, int num2) {
return num1 - num2;
public Integer minus(Integer num1, Integer num2) {
return num1-num2;
}
public int multiply(int num1, int num2) {
return num1 * num2;
public Integer multiply(Integer num1, Integer num2) {
return num1*num2;
}
public int divide(int num1, int num2) {

public Integer divide(Integer num1, Integer num2) {
if (num2==0) {
throw new IllegalArgumentException("Попытка деления на 0");
}
return num1/num2;
}
public String result (Integer num1, Integer num2, String operation, Integer result) {
StringBuilder str = new StringBuilder();
str.append(num1);
str.append(" ");
str.append(operation);
str.append(" ");
str.append(num2);
str.append(" = ");
str.append(result);
return str.toString();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package pro.sky.Calculator;

public class IllegalArgumentException extends RuntimeException{
public IllegalArgumentException(String s) {
super(s);
}
}
7 changes: 7 additions & 0 deletions src/main/java/pro/sky/Calculator/NumIsNullException.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package pro.sky.Calculator;

public class NumIsNullException extends RuntimeException{
public NumIsNullException (String s) {
super(s);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
package pro.sky.Calculator;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.CsvSource;

import java.util.stream.Stream;

import static org.junit.jupiter.api.Assertions.*;

class CalculatorServiceParameterizedTest {
private CalculatorService calculatorService = new CalculatorService();

@ParameterizedTest
@CsvSource({
"1, 2",
"20, 10",
"-10, 10"
})
void plus(Integer num1, Integer num2) {
Integer expected = calculatorService.plus(num1, num2);
Integer actual = num1 + num2;
assertEquals(expected, actual);
}

@ParameterizedTest
@CsvSource({
"1, 2",
"20, 10",
"-10, 10"
})
void minus(Integer num1, Integer num2) {
Integer expected = calculatorService.minus(num1, num2);
Integer actual = num1 - num2;
assertEquals(expected, actual);
}

@ParameterizedTest
@CsvSource({
"1, 2",
"20, 10",
"-10, 10"
})
void multiply(Integer num1, Integer num2) {
Integer expected = calculatorService.multiply(num1, num2);
Integer actual = num1 * num2;
assertEquals(expected, actual);
}

@ParameterizedTest
@CsvSource({
"1, 2",
"20, 10",
"-10, 10"
})
void divide(Integer num1, Integer num2) {
Integer expected = calculatorService.divide(num1, num2);
Integer actual = num1 / num2;
assertEquals(expected, actual);
}

@ParameterizedTest
@CsvSource({
"1, 2",
"20, 10",
"-10, 10"
})
void result(Integer num1, Integer num2) {
String operation = "+";
String expected = calculatorService.result(num1, num2, operation, calculatorService.plus(num1, num2));
String actual = num1 + " " + operation + " " + num2 + " = " + calculatorService.plus(num1,num2);
assertEquals(expected, actual);
}
}
61 changes: 61 additions & 0 deletions src/test/java/pro/sky/Calculator/CalculatorServiceTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package pro.sky.Calculator;

import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.*;

class CalculatorServiceTest {
private Integer num1;
private Integer num2;
private CalculatorService calculatorService;
@BeforeEach
void setUp() {
num1 = 4;
num2 = 2;
calculatorService = new CalculatorService();
}
@Test
void plus() {
Integer expected = calculatorService.plus(num1, num2);
Integer actual = num1 + num2;
assertEquals(expected, actual);
}

@Test
void minus() {
Integer expected = calculatorService.minus(num1, num2);
Integer actual = num1 - num2;
assertEquals(expected, actual);
}

@Test
void multiply() {
Integer expected = calculatorService.multiply(num1, num2);
Integer actual = num1 * num2;
assertEquals(expected, actual);
}

@Test
void divide() {
Integer expected = calculatorService.divide(num1, num2);
Integer actual = num1 / num2;
assertEquals(expected, actual);
}

@Test
void result() {
String operation = "+";
String expected = calculatorService.result(num1, num2, operation, calculatorService.plus(num1, num2));
String actual = num1 + " " + operation + " " + num2 + " = " + calculatorService.plus(num1,num2);
assertEquals(expected, actual);
}

@Test
void shouldThrowIllegalArgumentExceptionIfDivideByZero() {
assertThrows(IllegalArgumentException.class,
() -> calculatorService.divide(1, 0));
}

}