From f6eedeb32167f44f2e9979d5e8456152173bb492 Mon Sep 17 00:00:00 2001 From: Swordsteel Date: Fri, 22 Nov 2024 23:59:48 +0100 Subject: [PATCH] add IdentityController --- http/identity.http | 2 + .../hlaeja/controller/IdentityController.kt | 22 ++++++++ .../controller/IdentityControllerTest.kt | 55 +++++++++++++++++++ 3 files changed, 79 insertions(+) create mode 100644 http/identity.http create mode 100644 src/main/kotlin/ltd/hlaeja/controller/IdentityController.kt create mode 100644 src/test/kotlin/ltd/hlaeja/controller/IdentityControllerTest.kt diff --git a/http/identity.http b/http/identity.http new file mode 100644 index 0000000..523b36e --- /dev/null +++ b/http/identity.http @@ -0,0 +1,2 @@ +### get identity +GET {{hostname}}/identity/device-00000000-0000-0000-0000-000000000001 diff --git a/src/main/kotlin/ltd/hlaeja/controller/IdentityController.kt b/src/main/kotlin/ltd/hlaeja/controller/IdentityController.kt new file mode 100644 index 0000000..9a783d0 --- /dev/null +++ b/src/main/kotlin/ltd/hlaeja/controller/IdentityController.kt @@ -0,0 +1,22 @@ +package ltd.hlaeja.controller + +import java.util.UUID +import ltd.hlaeja.library.deviceRegistry.Identity +import ltd.hlaeja.service.NodeService +import ltd.hlaeja.util.toIdentityResponse +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.PathVariable +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RestController + +@RestController +@RequestMapping("/identity") +class IdentityController( + private val nodeService: NodeService, +) { + + @GetMapping("/device-{device}") + suspend fun getIdentityFromDevice( + @PathVariable device: UUID, + ): Identity.Response = nodeService.getNodeFromDevice(device).toIdentityResponse() +} diff --git a/src/test/kotlin/ltd/hlaeja/controller/IdentityControllerTest.kt b/src/test/kotlin/ltd/hlaeja/controller/IdentityControllerTest.kt new file mode 100644 index 0000000..6c222cf --- /dev/null +++ b/src/test/kotlin/ltd/hlaeja/controller/IdentityControllerTest.kt @@ -0,0 +1,55 @@ +package ltd.hlaeja.controller + +import io.mockk.coEvery +import io.mockk.coVerify +import io.mockk.mockk +import java.time.LocalDateTime +import java.time.ZoneId +import java.time.ZonedDateTime +import java.util.UUID +import kotlinx.coroutines.test.runTest +import ltd.hlaeja.assertj.assertThat +import ltd.hlaeja.entity.NodeEntity +import ltd.hlaeja.service.NodeService +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Test + +class IdentityControllerTest { + companion object { + val timestamp: ZonedDateTime = ZonedDateTime.of(LocalDateTime.of(2000, 1, 1, 0, 0, 0, 1), ZoneId.of("UTC")) + } + + val service: NodeService = mockk() + + lateinit var controller: IdentityController + + @BeforeEach + fun setUp() { + controller = IdentityController(service) + } + + @Test + fun `get node by device - success`() = runTest { + // given + val device = UUID.fromString("00000000-0000-0000-0000-000000000003") + val entity = NodeEntity( + UUID.fromString("00000000-0000-0000-0000-000000000001"), + timestamp, + UUID.fromString("00000000-0000-0000-0000-000000000002"), + device, + "test", + ) + + coEvery { service.getNodeFromDevice(any()) } returns entity + + // when + val response = controller.getIdentityFromDevice(device) + + // then + coVerify(exactly = 1) { service.getNodeFromDevice(any()) } + + assertThat(response.node).isUUID("00000000-0000-0000-0000-000000000001") + assertThat(response.client).isUUID("00000000-0000-0000-0000-000000000002") + assertThat(response.device).isUUID("00000000-0000-0000-0000-000000000003") + } +}