feat(msn): implement full MSN Finance endpoint coverage

- Finance/Equities: company profile + executives (idx stock profile)
- Finance/Equities/financialstatements: balance sheet, cash flow, income (idx stock financials)
- Finance/Events/Earnings: EPS history + forecast (idx stock earnings)
- Finance/Charts: OHLCV chart history, unblocks MSN history command
- Finance/SentimentBrowser: crowd sentiment (idx stock sentiment)
- api.msn.com/insights: AI insights (idx stock insights)
- MSN/Feed/me: stock news feed (idx stock news)
- Finance/Screener: IDX universe screener with 8 presets (idx screen)
- Wire ProfileProvider, EarningsProvider, FinancialsProvider, SentimentProvider,
  InsightsProvider, NewsProvider traits on MsnProvider
- Remove HISTORY_UNSUPPORTED_REASON — MSN history now works via charts API
This commit is contained in:
Ciphercat 2026-03-06 19:32:56 +00:00
commit a0da0a3adb
8 changed files with 1049 additions and 49 deletions

View file

@ -107,28 +107,23 @@ fn technical_with_mock_provider_json_contains_fields() {
}
#[test]
fn msn_history_reports_unsupported() {
test_bin("msn-history-unsupported")
fn msn_history_is_no_longer_unsupported() {
test_bin("msn-history-supported")
.env("IDX_PROVIDER", "msn")
.args(["stocks", "history", "BBCA", "--period", "1mo"])
.assert()
.failure()
.stderr(predicate::str::contains(
"MSN provider does not currently support history or technical analysis",
));
.stderr(predicate::str::contains("MSN provider does not currently support").not());
}
#[test]
fn msn_technical_json_reports_unsupported() {
test_bin("msn-technical-unsupported")
fn msn_technical_json_is_no_longer_unsupported() {
test_bin("msn-technical-supported")
.env("IDX_PROVIDER", "msn")
.args(["-o", "json", "stocks", "technical", "BBCA"])
.assert()
.failure()
.stderr(predicate::str::contains("\"code\": \"UNSUPPORTED\""))
.stderr(predicate::str::contains(
"MSN provider does not currently support history or technical analysis",
));
.stderr(predicate::str::contains("\"code\": \"UNSUPPORTED\"").not());
}
#[test]