Задание НУ из ui
This commit is contained in:
+48
@@ -1,6 +1,7 @@
|
||||
package space.nstart.pcp.slots_service.controller
|
||||
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.mockito.ArgumentCaptor
|
||||
import org.mockito.ArgumentMatchers.any
|
||||
import org.mockito.ArgumentMatchers.eq
|
||||
import org.mockito.Mockito.doReturn
|
||||
@@ -15,6 +16,7 @@ import org.springframework.test.context.bean.override.mockito.MockitoBean
|
||||
import org.springframework.web.reactive.function.client.WebClient
|
||||
import reactor.core.publisher.Mono
|
||||
import space.nstart.pcp.pcp_types_lib.dto.ballistics.InitialConditionsDTO
|
||||
import space.nstart.pcp.pcp_types_lib.dto.ballistics.MovementModel
|
||||
import space.nstart.pcp.pcp_types_lib.dto.ballistics.OrbPointDTO
|
||||
import space.nstart.pcp.pcp_types_lib.dto.ballistics.SatelliteICDTO
|
||||
import space.nstart.pcp.pcp_types_lib.dto.ballistics.PositionDTO
|
||||
@@ -34,6 +36,7 @@ import space.nstart.pcp.pcp_types_lib.dto.satellite.SatelliteGroupCreateDTO
|
||||
import space.nstart.pcp.pcp_types_lib.dto.satellite.SatelliteGroupDTO
|
||||
import space.nstart.pcp.pcp_types_lib.dto.satellite.SatelliteSlotProfileDTO
|
||||
import space.nstart.pcp.pcp_types_lib.dto.satellite.SatelliteVisualizationDTO
|
||||
import space.nstart.pcp.slots_service.service.BallisticsService
|
||||
import space.nstart.pcp.slots_service.service.GroupStateService
|
||||
import space.nstart.pcp.slots_service.service.SatelliteCatalogService
|
||||
import space.nstart.pcp.slots_service.service.SatellitePdcmService
|
||||
@@ -73,6 +76,9 @@ class CatalogControllerTest {
|
||||
@MockitoBean
|
||||
private lateinit var satellitePdcmService: SatellitePdcmService
|
||||
|
||||
@MockitoBean
|
||||
private lateinit var ballisticsService: BallisticsService
|
||||
|
||||
@Test
|
||||
fun `groups page is rendered`() {
|
||||
val body = WebClient.create("http://localhost:$port")
|
||||
@@ -136,6 +142,9 @@ class CatalogControllerTest {
|
||||
assertTrue(body.contains("Спутники"))
|
||||
assertTrue(body.contains("Скачать CSV"))
|
||||
assertTrue(body.contains("satellite-pdcm-send-ic-time"))
|
||||
assertTrue(body.contains("Задать НУ"))
|
||||
assertTrue(body.contains("satellite-pdcm-set-ic-modal"))
|
||||
assertTrue(body.contains("value=\"FOTO\" selected"))
|
||||
assertTrue(body.contains("dd.mm.yyyy hh:MM:ss.zzz"))
|
||||
assertTrue(body.contains("/webjars/bootstrap/5.3.0/css/bootstrap.min.css"))
|
||||
}
|
||||
@@ -343,6 +352,43 @@ class CatalogControllerTest {
|
||||
verify(slotService, never()).sendSatelliteInitialConditions(eq(501L), anyLocalDateTime())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `satellite pdcm set initial conditions endpoint proxies request to ballistics`() {
|
||||
val request = SatelliteICDTO(
|
||||
satelliteId = 999L,
|
||||
movementModel = MovementModel.KONDOR,
|
||||
ic = InitialConditionsDTO(
|
||||
orbPoint = OrbPointDTO(
|
||||
time = LocalDateTime.of(2026, 4, 24, 10, 15, 30, 123_000_000),
|
||||
revolution = 42L,
|
||||
vx = 1.0,
|
||||
vy = 2.0,
|
||||
vz = 3.0,
|
||||
x = 4.0,
|
||||
y = 5.0,
|
||||
z = 6.0
|
||||
),
|
||||
sBall = 0.07,
|
||||
f81 = 145.2
|
||||
)
|
||||
)
|
||||
|
||||
val status = WebClient.create("http://localhost:$port")
|
||||
.post()
|
||||
.uri("/api/catalog/satellites/pdcm/501/initial-conditions")
|
||||
.contentType(MediaType.APPLICATION_JSON)
|
||||
.bodyValue(request)
|
||||
.exchangeToMono { response -> Mono.just(response.statusCode()) }
|
||||
.block()!!
|
||||
|
||||
val requestCaptor = ArgumentCaptor.forClass(SatelliteICDTO::class.java)
|
||||
assertEquals(HttpStatus.ACCEPTED, status)
|
||||
verify(ballisticsService).receiveRv(captureSatelliteIc(requestCaptor))
|
||||
assertEquals(501L, requestCaptor.value.satelliteId)
|
||||
assertEquals(MovementModel.KONDOR, requestCaptor.value.movementModel)
|
||||
assertEquals(42L, requestCaptor.value.ic.orbPoint.revolution)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `satellite create endpoint proxies request`() {
|
||||
val request = SatelliteCreateDTO(
|
||||
@@ -578,4 +624,6 @@ class CatalogControllerTest {
|
||||
private fun anyInitialConditions(): InitialConditionsDTO = any(InitialConditionsDTO::class.java) ?: InitialConditionsDTO()
|
||||
private fun anySlotProfile(): SatelliteSlotProfileDTO = any(SatelliteSlotProfileDTO::class.java) ?: SatelliteSlotProfileDTO()
|
||||
private fun anyLocalDateTime(): LocalDateTime = any(LocalDateTime::class.java) ?: LocalDateTime.MIN
|
||||
private fun captureSatelliteIc(captor: ArgumentCaptor<SatelliteICDTO>): SatelliteICDTO =
|
||||
captor.capture() ?: SatelliteICDTO()
|
||||
}
|
||||
|
||||
+33
-3
@@ -7,7 +7,10 @@ import org.junit.jupiter.api.Test
|
||||
import org.springframework.beans.factory.ObjectProvider
|
||||
import org.springframework.test.util.ReflectionTestUtils
|
||||
import org.springframework.web.reactive.function.client.WebClient
|
||||
import space.nstart.pcp.pcp_types_lib.dto.ballistics.InitialConditionsDTO
|
||||
import space.nstart.pcp.pcp_types_lib.dto.ballistics.MovementModel
|
||||
import space.nstart.pcp.pcp_types_lib.dto.ballistics.OrbPointDTO
|
||||
import space.nstart.pcp.pcp_types_lib.dto.ballistics.SatelliteICDTO
|
||||
import java.net.InetSocketAddress
|
||||
import java.net.URI
|
||||
import java.time.LocalDateTime
|
||||
@@ -27,7 +30,8 @@ class BallisticsServiceTest {
|
||||
@Test
|
||||
fun `sat data methods forward time interval to ballistics service`() {
|
||||
val requests = CopyOnWriteArrayList<URI>()
|
||||
val serverUrl = startServer(requests)
|
||||
val requestBodies = CopyOnWriteArrayList<String>()
|
||||
val serverUrl = startServer(requests, requestBodies)
|
||||
val service = createService(serverUrl)
|
||||
val timeStart = LocalDateTime.of(2026, 4, 21, 10, 0)
|
||||
val timeStop = LocalDateTime.of(2026, 4, 21, 12, 0)
|
||||
@@ -37,6 +41,24 @@ class BallisticsServiceTest {
|
||||
service.points(101L, timeStart, timeStop).collectList().block()
|
||||
val availability = service.orbitAvailability()
|
||||
val exactPoint = service.exactTimePoint(101L, timeStart)
|
||||
service.receiveRv(
|
||||
SatelliteICDTO(
|
||||
satelliteId = 101L,
|
||||
movementModel = MovementModel.KONDOR,
|
||||
ic = InitialConditionsDTO(
|
||||
orbPoint = OrbPointDTO(
|
||||
time = timeStart,
|
||||
revolution = 7L,
|
||||
vx = 1.0,
|
||||
vy = 2.0,
|
||||
vz = 3.0,
|
||||
x = 4.0,
|
||||
y = 5.0,
|
||||
z = 6.0
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
assertEquals(
|
||||
listOf(
|
||||
@@ -44,7 +66,8 @@ class BallisticsServiceTest {
|
||||
"/api/satellites/101/flight-line",
|
||||
"/api/satellites/101/orbit",
|
||||
"/api/satellites/orbit/availability",
|
||||
"/api/satellites/101/extract-time"
|
||||
"/api/satellites/101/extract-time",
|
||||
"/api/satellites/receive-rv"
|
||||
),
|
||||
requests.map { it.path }
|
||||
)
|
||||
@@ -54,6 +77,7 @@ class BallisticsServiceTest {
|
||||
"time_start=2026-04-21T10:00&time_stop=2026-04-21T12:00",
|
||||
"time_start=2026-04-21T10:00&time_stop=2026-04-21T12:00",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
),
|
||||
requests.map { it.query }
|
||||
@@ -62,6 +86,7 @@ class BallisticsServiceTest {
|
||||
assertEquals(101L, availability.single().satelliteId)
|
||||
assertNotNull(exactPoint)
|
||||
assertEquals(timeStart, exactPoint.time)
|
||||
assertEquals(true, requestBodies.single().contains(""""movementModel":"KONDOR""""))
|
||||
}
|
||||
|
||||
private fun createService(serverUrl: String): BallisticsService {
|
||||
@@ -77,7 +102,7 @@ class BallisticsServiceTest {
|
||||
return service
|
||||
}
|
||||
|
||||
private fun startServer(requests: MutableList<URI>): String {
|
||||
private fun startServer(requests: MutableList<URI>, requestBodies: MutableList<String>): String {
|
||||
val startedServer = HttpServer.create(InetSocketAddress(0), 0)
|
||||
listOf(
|
||||
"/api/satellites/101/asc-node",
|
||||
@@ -103,6 +128,11 @@ class BallisticsServiceTest {
|
||||
"""[{"time":"2026-04-21T10:00:00","revolution":1,"vx":1.0,"vy":2.0,"vz":3.0,"x":4.0,"y":5.0,"z":6.0}]"""
|
||||
)
|
||||
}
|
||||
startedServer.createContext("/api/satellites/receive-rv") { exchange ->
|
||||
requests.add(exchange.requestURI)
|
||||
requestBodies.add(exchange.requestBody.bufferedReader().use { it.readText() })
|
||||
respond(exchange, "")
|
||||
}
|
||||
startedServer.start()
|
||||
server = startedServer
|
||||
return "http://localhost:${startedServer.address.port}"
|
||||
|
||||
Reference in New Issue
Block a user