diff --git a/.java-version b/.java-version
index 8e2afd3..98d9bcb 100644
--- a/.java-version
+++ b/.java-version
@@ -1 +1 @@
-17
\ No newline at end of file
+17
diff --git a/pom.xml b/pom.xml
index 8166acf..e090abd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -62,7 +62,7 @@
com.github.makeOurCity
moc-java
- 0.0.4
+ 73d3ac3
diff --git a/src/main/java/city/makeour/fiwarecraft/client/FcMocClient.java b/src/main/java/city/makeour/fiwarecraft/client/FcMocClient.java
index 5191080..1361ac9 100644
--- a/src/main/java/city/makeour/fiwarecraft/client/FcMocClient.java
+++ b/src/main/java/city/makeour/fiwarecraft/client/FcMocClient.java
@@ -6,6 +6,9 @@
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
+import java.util.Map;
import org.springframework.web.client.RestClient.ResponseSpec;
@@ -49,6 +52,7 @@ public boolean auth() {
return true;
}
+ /*
public void sendPing(String entityId, boolean status) {
Ping pingEntity = new Ping();
pingEntity.setType("Ping");
@@ -78,6 +82,33 @@ public void sendPing(Ping pingEntity) {
System.out.println("Ping sent: " + resp.body(String.class));
}
}
+ */
+
+ public void sendPing(String entityId, boolean status) {
+ // 1. 更新用データの作成
+ Map attributes = new HashMap<>();
+
+ // 現在時刻を文字列形式に変換(FIWAREの標準的な形式)
+ String now = LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
+
+ attributes.put("lastSucceededAt", now);
+ attributes.put("status", status);
+
+ // 2. Fiware-Service ヘッダーの設定(もしあれば)
+ if (this.fiwareService != null && !this.fiwareService.isEmpty()) {
+ mocClient.setFiwareService(this.fiwareService);
+ }
+
+ // 3. updateEntity を呼び出す(これが内部で Create か Update かを判定してくれる)
+ // 引数: ID, Type, 属性のMap
+ var resp = mocClient.updateEntity(entityId, "Ping", attributes);
+
+ // 4. レスポンスの確認
+ if (resp != null) {
+ System.out.println("Ping sent/updated for ID: " + entityId);
+ }
+ }
+
public void setFiwareService(String fiwareService) {
this.fiwareService = fiwareService;
diff --git a/src/test/java/city/makeour/fiwarecraft/client/FcMocClientTest.java b/src/test/java/city/makeour/fiwarecraft/client/FcMocClientTest.java
index 3bddb32..48fadd0 100644
--- a/src/test/java/city/makeour/fiwarecraft/client/FcMocClientTest.java
+++ b/src/test/java/city/makeour/fiwarecraft/client/FcMocClientTest.java
@@ -1,21 +1,17 @@
package city.makeour.fiwarecraft.client;
import city.makeour.moc.MocClient;
-import city.makeour.fiwarecraft.model.Ping;
import org.junit.Before;
import org.junit.Test;
-import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable;
-import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariables;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
-import java.time.LocalDateTime;
+import java.util.Map;
import static org.junit.Assert.*;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.*;
@@ -29,24 +25,26 @@ public class FcMocClientTest {
@Before
public void setUp() {
+ // テストごとに FcMocClient を初期化
fcMocClient = new FcMocClient(mockMocClient);
- fcMocClient.auth();
}
@Test
public void testConstructorWithDefaultService() {
- FcMocClient client = new FcMocClient(mockMocClient);
- assertEquals("fiwarecraft", client.getFiwareService());
+ // デフォルトの Fiware-Service 名が正しくセットされているか
+ assertEquals("fiwarecraft", fcMocClient.getFiwareService());
}
@Test
public void testConstructorWithCustomService() {
+ // カスタムの Fiware-Service 名が正しくセットされているか
FcMocClient client = new FcMocClient(mockMocClient, "custom-service");
assertEquals("custom-service", client.getFiwareService());
}
@Test
public void testSetAndGetFiwareService() {
+ // 途中でサービス名を変更できるか
fcMocClient.setFiwareService("test-service");
assertEquals("test-service", fcMocClient.getFiwareService());
}
@@ -58,186 +56,41 @@ public void testSendPingWithIdAndStatus() throws Exception {
fcMocClient.sendPing(entityId, status);
+ // 1. Fiware-Service ヘッダーがセットされたか検証
verify(mockMocClient, times(1)).setFiwareService("fiwarecraft");
- verify(mockMocClient, times(1)).createEntity(eq("application/json"), any(Ping.class));
- }
-
- @Test
- public void testSendPingWithPingEntity() throws Exception {
- LocalDateTime testTime = LocalDateTime.of(2023, 12, 25, 14, 30, 45);
- Ping pingEntity = new Ping();
- pingEntity.setType("Ping");
- pingEntity.setId("test-ping-002");
- pingEntity.setLastSucceededAt(testTime);
- pingEntity.setStatus(true);
-
- fcMocClient.sendPing(pingEntity);
-
- verify(mockMocClient, times(1)).setFiwareService("fiwarecraft");
- verify(mockMocClient, times(1)).createEntity("application/json", pingEntity);
- assertEquals("Ping", pingEntity.getType());
- assertEquals("test-ping-002", pingEntity.getId());
- assertEquals(testTime, pingEntity.getLastSucceededAt());
- assertTrue(pingEntity.isStatus());
- }
-
- @Test
- public void testSendPingSetsDefaultType() throws Exception {
- Ping pingEntity = new Ping();
- pingEntity.setId("test-ping-003");
- pingEntity.setStatus(false);
-
- fcMocClient.sendPing(pingEntity);
-
- verify(mockMocClient, times(1)).setFiwareService("fiwarecraft");
- verify(mockMocClient, times(1)).createEntity("application/json", pingEntity);
- assertEquals("Ping", pingEntity.getType());
- }
-
- @Test
- public void testSendPingSetsDefaultTimestamp() throws Exception {
- LocalDateTime beforeCall = LocalDateTime.now();
-
- Ping pingEntity = new Ping();
- pingEntity.setType("Ping");
- pingEntity.setId("test-ping-004");
- pingEntity.setStatus(true);
-
- fcMocClient.sendPing(pingEntity);
-
- LocalDateTime afterCall = LocalDateTime.now();
-
- verify(mockMocClient, times(1)).setFiwareService("fiwarecraft");
- verify(mockMocClient, times(1)).createEntity("application/json", pingEntity);
- assertNotNull(pingEntity.getLastSucceededAt());
- assertTrue(pingEntity.getLastSucceededAt().isAfter(beforeCall.minusSeconds(1)));
- assertTrue(pingEntity.getLastSucceededAt().isBefore(afterCall.plusSeconds(1)));
+
+ // 2. updateEntity が正しい引数 (ID, Type, Map) で呼ばれたか検証
+ // 第3引数の Map には時刻とステータスが入っているため any(Map.class) で検証
+ verify(mockMocClient, times(1)).updateEntity(eq(entityId), eq("Ping"), any(Map.class));
}
@Test
public void testSendPingWithCustomService() throws Exception {
+ // サービス名を変更した状態で送信した場合
fcMocClient.setFiwareService("custom-service");
-
- Ping pingEntity = new Ping();
- pingEntity.setType("Ping");
- pingEntity.setId("test-ping-005");
- pingEntity.setStatus(true);
-
- fcMocClient.sendPing(pingEntity);
+ fcMocClient.sendPing("test-id", true);
verify(mockMocClient, times(1)).setFiwareService("custom-service");
- verify(mockMocClient, times(1)).createEntity("application/json", pingEntity);
- }
-
- @Test
- public void testSendPingHandlesException() throws Exception {
- Exception testException = new RuntimeException("Network error");
- doThrow(testException).when(mockMocClient).createEntity(anyString(), any(Ping.class));
-
- Ping pingEntity = new Ping();
- pingEntity.setType("Ping");
- pingEntity.setId("test-ping-error");
- pingEntity.setStatus(true);
-
- RuntimeException thrown = assertThrows(RuntimeException.class, () -> {
- fcMocClient.sendPing(pingEntity);
- });
-
- verify(mockMocClient, times(1)).setFiwareService("fiwarecraft");
- assertEquals("Network error", thrown.getMessage());
- }
-
- @Test
- public void testSendPingPreservesExistingValues() throws Exception {
- LocalDateTime existingTime = LocalDateTime.of(2023, 1, 1, 12, 0, 0);
-
- Ping pingEntity = new Ping();
- pingEntity.setType("CustomPing");
- pingEntity.setId("test-ping-preserve");
- pingEntity.setLastSucceededAt(existingTime);
- pingEntity.setStatus(false);
-
- fcMocClient.sendPing(pingEntity);
-
- verify(mockMocClient, times(1)).setFiwareService("fiwarecraft");
- verify(mockMocClient, times(1)).createEntity("application/json", pingEntity);
- assertEquals("CustomPing", pingEntity.getType());
- assertEquals(existingTime, pingEntity.getLastSucceededAt());
- assertFalse(pingEntity.isStatus());
- }
-
- @Test
- public void testSendPingWithIdAndStatusCreatesCorrectEntity() throws Exception {
- LocalDateTime beforeCall = LocalDateTime.now();
-
- fcMocClient.sendPing("simple-ping", false);
-
- LocalDateTime afterCall = LocalDateTime.now();
-
- verify(mockMocClient, times(1)).setFiwareService("fiwarecraft");
- verify(mockMocClient, times(1)).createEntity(eq("application/json"), argThat(ping -> {
- Ping p = (Ping) ping;
- return "Ping".equals(p.getType()) &&
- "simple-ping".equals(p.getId()) &&
- !p.isStatus() &&
- p.getLastSucceededAt() != null &&
- p.getLastSucceededAt().isAfter(beforeCall.minusSeconds(1)) &&
- p.getLastSucceededAt().isBefore(afterCall.plusSeconds(1));
- }));
+ verify(mockMocClient, times(1)).updateEntity(anyString(), eq("Ping"), any(Map.class));
}
@Test
public void testSendPingWithNullService() throws Exception {
+ // サービス名が null の場合、ヘッダー設定がスキップされるか
fcMocClient.setFiwareService(null);
-
- Ping pingEntity = new Ping();
- pingEntity.setType("Ping");
- pingEntity.setId("test-ping-null-service");
- pingEntity.setStatus(true);
-
- fcMocClient.sendPing(pingEntity);
+ fcMocClient.sendPing("test-id", true);
verify(mockMocClient, never()).setFiwareService(anyString());
- verify(mockMocClient, times(1)).createEntity("application/json", pingEntity);
+ verify(mockMocClient, times(1)).updateEntity(anyString(), eq("Ping"), any(Map.class));
}
@Test
public void testSendPingWithEmptyService() throws Exception {
+ // サービス名が空文字の場合、ヘッダー設定がスキップされるか
fcMocClient.setFiwareService("");
-
- Ping pingEntity = new Ping();
- pingEntity.setType("Ping");
- pingEntity.setId("test-ping-empty-service");
- pingEntity.setStatus(true);
-
- fcMocClient.sendPing(pingEntity);
+ fcMocClient.sendPing("test-id", true);
verify(mockMocClient, never()).setFiwareService(anyString());
- verify(mockMocClient, times(1)).createEntity("application/json", pingEntity);
+ verify(mockMocClient, times(1)).updateEntity(anyString(), eq("Ping"), any(Map.class));
}
-
- // @Test
- // @EnabledIfEnvironmentVariables({
- // @EnabledIfEnvironmentVariable(named = "TEST_COGNITO_USER_POOL_ID", matches =
- // ".*"),
- // @EnabledIfEnvironmentVariable(named = "TEST_COGNITO_CLIENT_ID", matches =
- // ".*"),
- // @EnabledIfEnvironmentVariable(named = "TEST_COGNITO_USERNAME", matches =
- // ".*"),
- // @EnabledIfEnvironmentVariable(named = "TEST_COGNITO_PASSWORD", matches =
- // ".*")
- // })
- // public void testSendPingWithRealClient() {
- // FcMocClient realClient = new FcMocClient(new MocClient());
- // boolean authenticated = realClient.auth();
- // assertTrue("Authentication should succeed with valid credentials",
- // authenticated);
-
- // String entityId = "real-ping-001";
- // boolean status = true;
-
- // realClient.sendPing(entityId, status);
- // // Here you would typically verify the entity was created in the actual MOC
- // // service
- // }
}
\ No newline at end of file