package de.twomartens.oparlservice.service; import de.twomartens.oparlservice.configs.OParlServiceProperties; import de.twomartens.oparlservice.entity.internal.System; import de.twomartens.oparlservice.repository.SystemRepository; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import java.time.ZonedDateTime; import java.util.List; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; class OParlServiceTest { private OParlServiceProperties properties; private OParlService service; private SystemRepository systemRepository; @BeforeEach void setUp() { properties = new OParlServiceProperties(); properties.setUrl("http://localhost"); systemRepository = mock(SystemRepository.class); service = new OParlService(properties, systemRepository); } @Test void shouldAnnotateSystemWithURLs() { System internalSystem = new System(0, "https://creativecommons.org/cc-by", "OParl-Schnittstelle", "admin@2martens.de", "Jim Martens", null, null, null, null, ZonedDateTime.now(), ZonedDateTime.now(), false); when(systemRepository.findAll()).thenReturn(List.of(internalSystem)); de.twomartens.oparlservice.entity.dto.System result = service.getSystem(); assertNotNull(result); assertEquals(String.valueOf(0), result.getId()); assertEquals("https://schema.oparl.org/1.1/Schema", result.getType()); assertEquals("https://schema.oparl.org/1.1/", result.getOparlVersion()); assertEquals("http://localhost/bodies", result.getBody()); } @Test void shouldPickFirstSystem_whenMultipleSystemsAvailable() { System internalSystem1 = new System(0, "https://creativecommons.org/cc-by", "OParl-Schnittstelle", "admin@2martens.de", "Jim Martens", null, null, null, null, ZonedDateTime.now(), ZonedDateTime.now(), false); System internalSystem2 = new System(1, "https://creativecommons.org/cc-by-sa", "OParl-Baustelle", "admin@2martens.de", "Jim Martens", null, null, null, null, ZonedDateTime.now(), ZonedDateTime.now(), false); when(systemRepository.findAll()).thenReturn(List.of(internalSystem1, internalSystem2)); de.twomartens.oparlservice.entity.dto.System result = service.getSystem(); assertNotNull(result); assertEquals(String.valueOf(0), result.getId()); assertEquals("https://creativecommons.org/cc-by", result.getLicense()); assertEquals("OParl-Schnittstelle", result.getName()); } @Test void shouldPickFirstNotDeletedSystem() { System internalSystem1 = new System(0, "https://creativecommons.org/cc-by", "OParl-Schnittstelle", "admin@2martens.de", "Jim Martens", null, null, null, null, ZonedDateTime.now(), ZonedDateTime.now(), true); System internalSystem2 = new System(1, "https://creativecommons.org/cc-by-sa", "OParl-Baustelle", "admin@2martens.de", "Jim Martens", null, null, null, null, ZonedDateTime.now(), ZonedDateTime.now(), false); when(systemRepository.findAll()).thenReturn(List.of(internalSystem1, internalSystem2)); de.twomartens.oparlservice.entity.dto.System result = service.getSystem(); assertNotNull(result); assertEquals(String.valueOf(1), result.getId()); assertEquals("https://creativecommons.org/cc-by-sa", result.getLicense()); assertEquals("OParl-Baustelle", result.getName()); assertFalse(result.isDeleted()); } @Test void shouldUseCorrectUrl() { System internalSystem = new System(1, "https://creativecommons.org/cc-by-sa", "OParl-Baustelle", "admin@2martens.de", "Jim Martens", null, null, null, null, ZonedDateTime.now(), ZonedDateTime.now(), false); when(systemRepository.findAll()).thenReturn(List.of(internalSystem)); de.twomartens.oparlservice.entity.dto.System result1 = service.getSystem(); properties.setUrl("http://test.com"); de.twomartens.oparlservice.entity.dto.System result2 = service.getSystem(); assertNotNull(result1); assertNotNull(result2); assertEquals(String.valueOf(1), result1.getId()); assertEquals(String.valueOf(1), result2.getId()); assertEquals("http://localhost/bodies", result1.getBody()); assertEquals("http://test.com/bodies", result2.getBody()); } @Test void shouldReturnNonValuesOfInternalEntity() { System internalSystem = new System(1, "https://creativecommons.org/cc-by-sa", "OParl-Baustelle", "admin@2martens.de", "Jim Martens", "https://sitzungsdienst-eimsbuettel.hamburg.de/bi/allris.net.asp", "https://2martens.de", "https://git.2martens.com/2martens/oparl-service", "http://example.com", ZonedDateTime.now(), ZonedDateTime.now(), false); when(systemRepository.findAll()).thenReturn(List.of(internalSystem)); de.twomartens.oparlservice.entity.dto.System result = service.getSystem(); assertEquals("OParl-Baustelle", result.getName()); assertEquals("admin@2martens.de", result.getContactEmail()); assertEquals("Jim Martens", result.getContactName()); assertEquals("https://2martens.de", result.getVendor()); assertEquals("https://sitzungsdienst-eimsbuettel.hamburg.de/bi/allris.net.asp", result.getWebsite()); assertEquals("https://git.2martens.com/2martens/oparl-service", result.getProduct()); assertEquals("http://example.com", result.getWeb()); } }