import { FocusModule } from '../src/focus'; import { NoStore } from '../src/store'; import { ConsoleLogging } from '../src/logging'; import { Topic } from '../src/types'; import { waitFor } from '../__mocks__/waitFor'; function getTopic(id: number) { return { id: `topicId-${id}`, revision: id, data: { detailRevision: id, tagRevision: id, topicDetail: { guid: `guid-${id}`, dataType: 'superbasictopic', data: JSON.stringify({ text: `message-${id}` }), created: 1, updated: 2, status: 'confirmed', transform: 'ready', } } } } function initialTopics() { const topics = []; for (let i = 0; i < 32; i++) { topics.push(getTopic(i)); } return topics; } function nextTopics() { const topics = []; for (let i = 0; i < 4; i++) { topics.push(getTopic(i + 32)); } return topics; } jest.mock('../src/net/fetchUtil', () => { const fn = jest.fn().mockImplementation((url: string, options: { method: string, body: string }) => { if (url === 'http://test_node/content/channels/test_channel_id/topics?agent=test_token&count=32') { return Promise.resolve({ status: 200, json: () => (initialTopics()), headers: { get: (key: string) => key === 'topic-marker' ? 300 : 400 }}); } else if (url === 'http://test_node/content/channels/test_channel_id/topics?agent=test_token&count=32&end=300') { return Promise.resolve({ status: 200, json: () => (nextTopics()), headers: { get: (key: string) => key === 'topic-marker' ? 200 : 400 }}); } else { console.log(url, options); return Promise.resolve({ status: 200, json: () => [], headers: { get: (key: string) => key === 'topic-marker' ? 300 : 400 }}); } }); return { fetchWithTimeout: fn, checkResponse: () => {}, } }); class TestStore extends NoStore { } test('focus module works', async () => { let focusTopics = null as null | Topic[]; const setTopics = (topics: null | Topic[]) => { focusTopics = topics; } const log = new ConsoleLogging(); const store = new TestStore(); const connection = { node: 'test_node', secure: false, token: 'test_token' }; const markRead = async () => {}; const flagTopic = async (id: string) => {}; const focus = new FocusModule(log, store, null, null, null, 'test_channel_id', 'my_guid', connection, null, false, 1, markRead, flagTopic); focus.addTopicListener(setTopics); await waitFor(() => focusTopics?.length == 32); focus.viewMoreTopics(); await waitFor(() => focusTopics?.length == 36); await focus.close(); });