Use Yahoo Finance company descriptions
This commit is contained in:
66
lib/server/yahoo-company-profile.test.ts
Normal file
66
lib/server/yahoo-company-profile.test.ts
Normal file
@@ -0,0 +1,66 @@
|
||||
import { beforeEach, describe, expect, it, mock } from 'bun:test';
|
||||
import {
|
||||
__yahooCompanyProfileInternals,
|
||||
getYahooCompanyDescription
|
||||
} from './yahoo-company-profile';
|
||||
|
||||
describe('yahoo company profile', () => {
|
||||
beforeEach(() => {
|
||||
__yahooCompanyProfileInternals.resetCaches();
|
||||
});
|
||||
|
||||
it('extracts a Yahoo session cookie from response headers', () => {
|
||||
const headers = new Headers();
|
||||
headers.append('set-cookie', 'A3=session-token; Domain=.yahoo.com; Path=/; Secure; HttpOnly');
|
||||
|
||||
expect(__yahooCompanyProfileInternals.pickYahooSessionCookie(headers)).toBe('A3=session-token');
|
||||
});
|
||||
|
||||
it('normalizes and clips long descriptions', () => {
|
||||
const value = ` Microsoft builds software.\n\n\n${'x'.repeat(1800)} `;
|
||||
const normalized = __yahooCompanyProfileInternals.normalizeDescription(value);
|
||||
|
||||
expect(normalized).toContain('Microsoft builds software.');
|
||||
expect((normalized?.length ?? 0) <= 1600).toBe(true);
|
||||
});
|
||||
|
||||
it('fetches longBusinessSummary through Yahoo cookie and crumb endpoints', async () => {
|
||||
const fetchMock = mock(async (input: string | URL | Request) => {
|
||||
const url = String(input);
|
||||
|
||||
if (url === 'https://fc.yahoo.com') {
|
||||
return new Response('', {
|
||||
status: 404,
|
||||
headers: {
|
||||
'set-cookie': 'A3=session-token; Domain=.yahoo.com; Path=/; Secure; HttpOnly'
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (url === 'https://query1.finance.yahoo.com/v1/test/getcrumb') {
|
||||
return new Response('crumb-token', { status: 200 });
|
||||
}
|
||||
|
||||
if (url === 'https://query1.finance.yahoo.com/v10/finance/quoteSummary/MSFT?modules=assetProfile&crumb=crumb-token') {
|
||||
return Response.json({
|
||||
quoteSummary: {
|
||||
result: [
|
||||
{
|
||||
assetProfile: {
|
||||
longBusinessSummary: 'Microsoft builds cloud and software products worldwide.'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
throw new Error(`Unexpected URL: ${url}`);
|
||||
}) as unknown as typeof fetch;
|
||||
|
||||
const description = await getYahooCompanyDescription('msft', { fetchImpl: fetchMock });
|
||||
|
||||
expect(description).toBe('Microsoft builds cloud and software products worldwide.');
|
||||
expect(fetchMock).toHaveBeenCalledTimes(3);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user