diff --git a/http/node.http b/http/node.http new file mode 100644 index 0000000..a9a1807 --- /dev/null +++ b/http/node.http @@ -0,0 +1,9 @@ +### register node for a client and device with name +POST {{hostname}}/node +Content-Type: application/json + +{ + "client": "00000000-0000-0000-0000-000000000000", + "device": "00000000-0000-0000-0000-000000000000", + "name": "my test device" +} diff --git a/src/main/kotlin/ltd/hlaeja/controller/NodeController.kt b/src/main/kotlin/ltd/hlaeja/controller/NodeController.kt new file mode 100644 index 0000000..0f1a705 --- /dev/null +++ b/src/main/kotlin/ltd/hlaeja/controller/NodeController.kt @@ -0,0 +1,20 @@ +package ltd.hlaeja.controller + +import ltd.hlaeja.library.deviceRegistry.Node +import ltd.hlaeja.service.NodeService +import ltd.hlaeja.util.toEntity +import ltd.hlaeja.util.toNodeResponse +import org.springframework.web.bind.annotation.PostMapping +import org.springframework.web.bind.annotation.RequestBody +import org.springframework.web.bind.annotation.RestController + +@RestController +class NodeController( + private val nodeService: NodeService, +) { + + @PostMapping("/node") + suspend fun addNode( + @RequestBody request: Node.Request, + ): Node.Response = nodeService.addNode(request.toEntity()).toNodeResponse() +} diff --git a/src/test/kotlin/ltd/hlaeja/controller/NodeControllerTest.kt b/src/test/kotlin/ltd/hlaeja/controller/NodeControllerTest.kt new file mode 100644 index 0000000..84e38d1 --- /dev/null +++ b/src/test/kotlin/ltd/hlaeja/controller/NodeControllerTest.kt @@ -0,0 +1,50 @@ +package ltd.hlaeja.controller + +import io.mockk.coEvery +import io.mockk.coVerify +import io.mockk.mockk +import java.util.UUID +import kotlinx.coroutines.test.runTest +import ltd.hlaeja.assertj.assertThat +import ltd.hlaeja.entity.NodeEntity +import ltd.hlaeja.library.deviceRegistry.Node +import ltd.hlaeja.service.NodeService +import org.assertj.core.api.Assertions.assertThat +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Test + +class NodeControllerTest { + + val service: NodeService = mockk() + + lateinit var controller: NodeController + + @BeforeEach + fun setUp() { + controller = NodeController(service) + } + + @Test + fun `add device - success`() = runTest { + // given + val request: Node.Request = Node.Request( + UUID.fromString("00000000-0000-0000-0000-000000000001"), + UUID.fromString("00000000-0000-0000-0000-000000000002"), + "test", + ) + coEvery { service.addNode(any()) } answers { call -> + (call.invocation.args[0] as NodeEntity).copy(id = UUID.fromString("00000000-0000-0000-0000-000000000003")) + } + + // when + val response = controller.addNode(request) + + // then + coVerify(exactly = 1) { service.addNode(any()) } + + assertThat(response.id).isUUID("00000000-0000-0000-0000-000000000003") + assertThat(response.client).isUUID("00000000-0000-0000-0000-000000000001") + assertThat(response.device).isUUID("00000000-0000-0000-0000-000000000002") + assertThat(response.name).isEqualTo("test") + } +}