Migrate remaining legacy operator workflows
This commit is contained in:
@@ -142,6 +142,65 @@ test("search responses reject duplicates, ambiguous names, invalid rows and reor
|
||||
})), null);
|
||||
});
|
||||
|
||||
test("UC7 name-sort toggles descending first and ascending second", () => {
|
||||
assert.equal(workflow.nextTradingHaltNameSort(null), "descending");
|
||||
assert.equal(workflow.nextTradingHaltNameSort("descending"), "ascending");
|
||||
assert.equal(workflow.nextTradingHaltNameSort("ascending"), "descending");
|
||||
});
|
||||
|
||||
test("display-only name sort handles mixed markets and deterministic duplicate-name ties", () => {
|
||||
const rows = [
|
||||
{ market: "kospi", stockCode: "000002", displayName: "동명" },
|
||||
{ market: "kosdaq", stockCode: "000003", displayName: "동명" },
|
||||
{ market: "kospi", stockCode: "000004", displayName: "마지막" },
|
||||
{ market: "kosdaq", stockCode: "000001", displayName: "동명" },
|
||||
{ market: "kospi", stockCode: "000005", displayName: "가나다" }
|
||||
];
|
||||
const original = [...rows];
|
||||
|
||||
assert.deepEqual(
|
||||
workflow.sortTradingHaltsForDisplay(rows, "ascending").map(value => `${value.displayName}|${value.market}|${value.stockCode}`),
|
||||
[
|
||||
"가나다|kospi|000005",
|
||||
"동명|kosdaq|000001",
|
||||
"동명|kosdaq|000003",
|
||||
"동명|kospi|000002",
|
||||
"마지막|kospi|000004"
|
||||
]);
|
||||
assert.deepEqual(
|
||||
workflow.sortTradingHaltsForDisplay(rows, "descending").map(value => `${value.displayName}|${value.market}|${value.stockCode}`),
|
||||
[
|
||||
"마지막|kospi|000004",
|
||||
"동명|kosdaq|000001",
|
||||
"동명|kosdaq|000003",
|
||||
"동명|kospi|000002",
|
||||
"가나다|kospi|000005"
|
||||
]);
|
||||
const selectedIdentity = workflow.tradingHaltIdentity(rows[0]);
|
||||
const selectedAfterSort = workflow.sortTradingHaltsForDisplay(rows, "ascending")
|
||||
.find(value => workflow.tradingHaltIdentity(value) === selectedIdentity);
|
||||
assert.equal(selectedAfterSort, rows[0]);
|
||||
const serverOrder = workflow.sortTradingHaltsForDisplay(rows, null);
|
||||
assert.deepEqual(rows, original);
|
||||
assert.deepEqual(serverOrder, rows);
|
||||
assert.notEqual(serverOrder, rows);
|
||||
assert.equal(serverOrder[0], rows[0]);
|
||||
assert.throws(() => workflow.sortTradingHaltsForDisplay(rows, "server"), /ascending/i);
|
||||
});
|
||||
|
||||
test("trading-halt selection identity is market plus stock code, independent of display name", () => {
|
||||
assert.equal(
|
||||
workflow.tradingHaltIdentity({ market: "kospi", stockCode: "005930", displayName: "삼성전자" }),
|
||||
"kospi\u0000005930");
|
||||
assert.equal(
|
||||
workflow.tradingHaltIdentity({ market: "kospi", stockCode: "005930", displayName: "표시명 변경" }),
|
||||
"kospi\u0000005930");
|
||||
assert.notEqual(
|
||||
workflow.tradingHaltIdentity({ market: "kosdaq", stockCode: "005930", displayName: "삼성전자" }),
|
||||
"kospi\u0000005930");
|
||||
assert.equal(workflow.tradingHaltIdentity(null), "");
|
||||
});
|
||||
|
||||
test("5001 current selections bind the exact halted-stock Core contract", () => {
|
||||
for (const [stock, groupCode] of [[kospi, "KOSPI"], [kosdaq, "KOSDAQ"]]) {
|
||||
const mapping = workflow.buildTradingHaltSelection("current", stock, {
|
||||
|
||||
Reference in New Issue
Block a user