diff --git a/src/main/kotlin/hu/obuda/devops/fibonaccirestapi/controller/FibonacciController.kt b/src/main/kotlin/hu/obuda/devops/fibonaccirestapi/controller/FibonacciController.kt index 35c9112..bcc23bb 100644 --- a/src/main/kotlin/hu/obuda/devops/fibonaccirestapi/controller/FibonacciController.kt +++ b/src/main/kotlin/hu/obuda/devops/fibonaccirestapi/controller/FibonacciController.kt @@ -2,10 +2,12 @@ package hu.obuda.devops.fibonaccirestapi.controller import hu.obuda.devops.fibonaccirestapi.service.FibonacciService import org.springframework.beans.factory.annotation.Autowired +import org.springframework.http.HttpStatus 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 +import org.springframework.web.server.ResponseStatusException @RestController @RequestMapping("/") @@ -16,7 +18,10 @@ class FibonacciController { @GetMapping(value = ["fibonacci"]) open fun fibonacci(@RequestParam n: Int): Int? { - // TODO - If n is greater than 46 then return BAD REQUEST use HttpStatus + if (n > 46) { + throw ResponseStatusException(HttpStatus.BAD_REQUEST, "n must be <= 46") + } + return fibonacciService?.fibonacci(n) } } \ No newline at end of file diff --git a/src/main/kotlin/hu/obuda/devops/fibonaccirestapi/service/FibonacciService.kt b/src/main/kotlin/hu/obuda/devops/fibonaccirestapi/service/FibonacciService.kt index 137941a..e19ffd7 100644 --- a/src/main/kotlin/hu/obuda/devops/fibonaccirestapi/service/FibonacciService.kt +++ b/src/main/kotlin/hu/obuda/devops/fibonaccirestapi/service/FibonacciService.kt @@ -5,7 +5,11 @@ import org.springframework.stereotype.Service @Service class FibonacciService { fun fibonacci(n: Int): Int { - return if (n == 1) 0 - else 0 // TODO instead of this logic implement fibonacci + return when { + n < 0 -> 0 + n == 0 -> 0 + n == 1 -> 1 + else -> fibonacci(n - 1) + fibonacci(n - 2) + } } } \ No newline at end of file diff --git a/src/test/kotlin/hu/obuda/devops/fibonaccirestapi/integration/IntegrationTest.kt b/src/test/kotlin/hu/obuda/devops/fibonaccirestapi/integration/IntegrationTest.kt index f0579d3..2853085 100644 --- a/src/test/kotlin/hu/obuda/devops/fibonaccirestapi/integration/IntegrationTest.kt +++ b/src/test/kotlin/hu/obuda/devops/fibonaccirestapi/integration/IntegrationTest.kt @@ -27,6 +27,21 @@ class IntegrationTest { Assertions.assertEquals("1", entity.body) } + @Test + fun callFibonacciEndpoint2() { + // given + + // when + val entity = restTemplate.getForEntity( + "http://localhost:8080/fibonacci?n=46", + String::class.java + ) + + // then + Assertions.assertEquals(HttpStatus.OK, entity.statusCode) + Assertions.assertEquals("1836311903", entity.body) + } + @Test @Throws(Exception::class) fun callFibonacciEndpointWithInvalid() { diff --git a/src/test/kotlin/hu/obuda/devops/fibonaccirestapi/service/FibonacciServiceTest.kt b/src/test/kotlin/hu/obuda/devops/fibonaccirestapi/service/FibonacciServiceTest.kt index fc46305..72a52b0 100644 --- a/src/test/kotlin/hu/obuda/devops/fibonaccirestapi/service/FibonacciServiceTest.kt +++ b/src/test/kotlin/hu/obuda/devops/fibonaccirestapi/service/FibonacciServiceTest.kt @@ -19,4 +19,22 @@ class FibonacciServiceTest { } // TODO - Test with greater numbers and test edge cases + + @Test + fun shouldReturn0WhenCallMinus1() { + val result: Int = underTest.fibonacci(-1) + Assertions.assertEquals(0, result) + } + + @Test + fun shouldReturn1WhenCall2() { + val result: Int = underTest.fibonacci(2) + Assertions.assertEquals(1, result) + } + + @Test + fun shouldReturn2WhenCall3() { + val result: Int = underTest.fibonacci(3) + Assertions.assertEquals(2, result) + } } \ No newline at end of file