실시간 차트 보조지표 탭 문제 수정

This commit is contained in:
Macbook
2026-05-28 01:26:53 +09:00
parent 4f6694b206
commit 98dfb3613c
19 changed files with 801 additions and 182 deletions
@@ -6,7 +6,6 @@ import com.goldenchart.repository.GcStrategyRepository;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Spy;
import org.mockito.junit.jupiter.MockitoExtension;
@@ -26,9 +25,20 @@ class StrategyConditionTimeframeServiceTest {
@Spy
private ObjectMapper objectMapper = new ObjectMapper();
@InjectMocks
@Mock
private StrategyDslTimeframeNormalizer dslNormalizer;
@Mock
private LiveStrategyEvaluator liveStrategyEvaluator;
private StrategyConditionTimeframeService service;
@BeforeEach
void setUpService() {
service = new StrategyConditionTimeframeService(
strategyRepo, objectMapper, dslNormalizer, liveStrategyEvaluator);
}
@BeforeEach
void stubStrategy() {
GcStrategy strategy = new GcStrategy();
@@ -45,6 +55,10 @@ class StrategyConditionTimeframeServiceTest {
""");
strategy.setSellConditionJson(null);
when(strategyRepo.findById(1L)).thenReturn(Optional.of(strategy));
when(dslNormalizer.alignSellStartTimeframeToBuy(org.mockito.ArgumentMatchers.any(), org.mockito.ArgumentMatchers.any()))
.thenAnswer(inv -> inv.getArgument(1));
when(dslNormalizer.normalizeJson(org.mockito.ArgumentMatchers.anyString(), org.mockito.ArgumentMatchers.any()))
.thenAnswer(inv -> inv.getArgument(0));
}
@Test
@@ -71,6 +85,10 @@ class StrategyConditionTimeframeServiceTest {
}
""");
when(strategyRepo.findById(4L)).thenReturn(Optional.of(onlyUpper));
when(dslNormalizer.alignSellStartTimeframeToBuy(org.mockito.ArgumentMatchers.any(), org.mockito.ArgumentMatchers.any()))
.thenAnswer(inv -> inv.getArgument(1));
when(dslNormalizer.normalizeJson(org.mockito.ArgumentMatchers.anyString(), org.mockito.ArgumentMatchers.any()))
.thenAnswer(inv -> inv.getArgument(0));
Set<String> tfs = service.collectForStrategy(4L);
assertEquals(Set.of("3m", "5m"), tfs);
@@ -95,6 +113,10 @@ class StrategyConditionTimeframeServiceTest {
}
""");
when(strategyRepo.findById(3L)).thenReturn(Optional.of(multi));
when(dslNormalizer.alignSellStartTimeframeToBuy(org.mockito.ArgumentMatchers.any(), org.mockito.ArgumentMatchers.any()))
.thenAnswer(inv -> inv.getArgument(1));
when(dslNormalizer.normalizeJson(org.mockito.ArgumentMatchers.anyString(), org.mockito.ArgumentMatchers.any()))
.thenAnswer(inv -> inv.getArgument(0));
Set<String> tfs = service.collectForStrategy(3L);
assertEquals(Set.of("1m", "3m", "5m"), tfs);
@@ -127,6 +149,10 @@ class StrategyConditionTimeframeServiceTest {
}
""");
when(strategyRepo.findById(5L)).thenReturn(Optional.of(mixed));
when(dslNormalizer.alignSellStartTimeframeToBuy(org.mockito.ArgumentMatchers.any(), org.mockito.ArgumentMatchers.any()))
.thenAnswer(inv -> inv.getArgument(1));
when(dslNormalizer.normalizeJson(org.mockito.ArgumentMatchers.anyString(), org.mockito.ArgumentMatchers.any()))
.thenAnswer(inv -> inv.getArgument(0));
Set<String> tfs = service.collectForStrategy(5L);
assertEquals(Set.of("3m", "5m"), tfs);
@@ -147,6 +173,10 @@ class StrategyConditionTimeframeServiceTest {
}
""");
when(strategyRepo.findById(2L)).thenReturn(Optional.of(legacy));
when(dslNormalizer.alignSellStartTimeframeToBuy(org.mockito.ArgumentMatchers.any(), org.mockito.ArgumentMatchers.any()))
.thenAnswer(inv -> inv.getArgument(1));
when(dslNormalizer.normalizeJson(org.mockito.ArgumentMatchers.anyString(), org.mockito.ArgumentMatchers.any()))
.thenAnswer(inv -> inv.getArgument(0));
assertEquals(Set.of("1m"), service.collectForStrategy(2L));
}
@@ -0,0 +1,34 @@
package com.goldenchart.service;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class StrategyDslTimeframeNormalizerAlignTest {
private final StrategyDslTimeframeNormalizer normalizer =
new StrategyDslTimeframeNormalizer(new ObjectMapper());
@Test
void alignSell_copiesBuyCandleTypesToSell() throws Exception {
String buy = """
{
"type": "TIMEFRAME",
"candleType": "5m",
"candleTypes": ["5m"],
"children": [{ "type": "CONDITION", "condition": { "indicatorType": "RSI" } }]
}
""";
String sell = """
{
"type": "TIMEFRAME",
"candleType": "1m",
"children": [{ "type": "CONDITION", "condition": { "indicatorType": "RSI" } }]
}
""";
String aligned = normalizer.alignSellStartTimeframeToBuy(buy, sell);
assertTrue(aligned.contains("\"5m\""));
assertFalse(aligned.contains("\"candleType\":\"1m\""));
}
}