X-Git-Url: https://git.r.bdr.sh/rbdr/forum/blobdiff_plain/73973edab9aaa81312ba80a68bfe34bf5abcecd9..fcbbc49687afeeecdc9388b367b1d7f2d0c76214:/src/stores/forums.test.js diff --git a/src/stores/forums.test.js b/src/stores/forums.test.js index 25293c8..694316b 100644 --- a/src/stores/forums.test.js +++ b/src/stores/forums.test.js @@ -3,19 +3,17 @@ import { resolve } from 'path'; import { resolveAfter } from '$/utils/resolve_after'; -import { act } from '@testing-library/svelte'; - const { eachLike, like } = Matchers; jest.mock('$/config/config.js'); -import { getForums } from './forums'; +import { getForum, getForums } from './forums'; const internals = { provider: null }; -describe('Forum store pact', () => { +describe('Forums store pact', () => { beforeAll(async () => { @@ -32,7 +30,7 @@ describe('Forum store pact', () => { afterEach(() => internals.provider.verify()); afterAll(() => internals.provider.finalize()); - describe('there are forums', () => { + describe('GetForums', () => { beforeAll(async () => { @@ -98,4 +96,90 @@ describe('Forum store pact', () => { expect(response.error).toBe(undefined); }); }); + + describe('GetForum', () => { + + beforeAll(async () => { + + const forumQuery = new GraphQLInteraction() + .uponReceiving('a request to get a single forum') + .withRequest({ + path: '/graphql', + method: 'POST' + }) + .withOperation('GetForum') + .withQuery( + `query GetForum($id: ID!) { + forum(id: $id) { + id + glyph + label + position + topics { + id + title + updated_at + ttl + __typename + } + __typename + } + }` + ) + .withVariables({ + id: 'freezer' + }) + .willRespondWith({ + status: 200, + headers: { + 'Content-Type': 'application/json; charset=utf-8' + }, + body: { + data: { + forum: like({ + id: 'freezer', + glyph: like('✭'), + label: like('test_forums.freezer'), + position: like(3), + topics: eachLike({ + id: like('629de02c-151a-4db7-bb86-43b2add8a15a'), + title: like('Very pacty topic'), + updated_at: like(1619954611616), + ttl: like(3601) + }) + }) + } + } + }); + return await internals.provider.addInteraction(forumQuery); + }); + + test('it returns the forum', async () => { + + const forum = getForum('freezer'); + const { counter, promise: resolveAfterTwo } = resolveAfter(2); + let response = null; + forum.subscribe((forumsValue) => { + + response = forumsValue; + counter(); + }); + expect(response.data).toEqual(expect.arrayContaining([])); + expect(response.loading).toBe(true); + expect(response.error).toBe(undefined); + await resolveAfterTwo; + expect(response.data.id).toBe('freezer'); + expect(response.data.glyph).toBe('✭'); + expect(response.data.label).toBe('test_forums.freezer'); + expect(response.data.position).toBe(3); + expect(response.data.topics).toEqual(expect.arrayContaining([{ + id: '629de02c-151a-4db7-bb86-43b2add8a15a', + title: 'Very pacty topic', + updated_at: 1619954611616, + ttl: 3601 + }])); + expect(response.loading).toBe(false); + expect(response.error).toBe(undefined); + }); + }); });