diff --git a/net/web/src/api/getChannels.js b/net/web/src/api/getChannels.js index 0dafc671..b5dd7ce7 100644 --- a/net/web/src/api/getChannels.js +++ b/net/web/src/api/getChannels.js @@ -8,6 +8,7 @@ export async function getChannels(token, revision) { let types = encodeURIComponent(JSON.stringify([ 'sealed', 'superbasic' ])); param += `&types=${types}` let channels = await fetchWithTimeout('/content/channels' + param, { method: 'GET' }); + checkResponse(channels) let ret = await channels.json() return ret; diff --git a/net/web/test/Channel.test.js b/net/web/test/Channel.test.js index 07a84329..5371a4b9 100644 --- a/net/web/test/Channel.test.js +++ b/net/web/test/Channel.test.js @@ -1,4 +1,5 @@ import React, { useState, useEffect, useContext } from 'react'; +import { prettyDOM } from '@testing-library/dom' import {render, act, screen, waitFor, fireEvent} from '@testing-library/react' import { ChannelContextProvider, ChannelContext } from 'context/ChannelContext'; import * as fetchUtil from 'api/fetchUtil'; @@ -6,16 +7,27 @@ import * as fetchUtil from 'api/fetchUtil'; let channelContext = null; function ChannelView() { const [renderCount, setRenderCount] = useState(0); + const [channels, setChannels] = useState([]); const channel = useContext(ChannelContext); channelContext = channel; useEffect(() => { + const rendered = [] + const entries = Array.from(channel.state.channels.values()); + entries.forEach(entry => { + rendered.push( +
+ { entry.data.channelDetail.data } + { entry.data.channelSummary.data } +
); + }); + setChannels(rendered); setRenderCount(renderCount + 1); - }, [channel.state]); + }, [channel.state]) return ( -
- { renderCount } +
+ { channels }
); } @@ -45,6 +57,36 @@ afterEach(() => { }); test('testing channel sync', async () => { + + fetching = (url, options) => { + if (url.startsWith('/content/channels/123/detail')) { + return Promise.resolve({ + status: 200, + json: () => Promise.resolve({ dataType: 'superbasic', data: 'testdata' }), + }); + } + else if (url.startsWith('/content/channels/123/summary')) { + return Promise.resolve({ + status: 200, + json: () => Promise.resolve({ guid: '11', dataType: 'superbasictopic', data: 'testdata' }), + }); + } + else { + return Promise.resolve({ + status: 200, + json: () => Promise.resolve([ + { id: '123', revision: 2, data: { + detailRevision: 3, + topicRevision: 5, + channelSummary: { guid: '11', dataType: 'superbasictopic', data: 'testdata' }, + channelDetail: { dataType: 'superbasic', data: 'testdata' }, + } + }, + ]) + }); + } + } + render(); await waitFor(async () => { @@ -55,6 +97,16 @@ test('testing channel sync', async () => { channelContext.actions.setToken('abc123'); await channelContext.actions.setRevision(1); }); + + //screen.getByTestId('count').attributes.count.value + //console.log(prettyDOM(screen.getByTestId('channels'))); + + await waitFor(async () => { + expect(screen.getByTestId('channels').children).toHaveLength(1); + expect(screen.getByTestId('detail').textContent).toBe('testdata'); + expect(screen.getByTestId('summary').textContent).toBe('testdata'); + }); + });