X-Git-Url: https://git.r.bdr.sh/rbdr/forum/blobdiff_plain/852ee620f0a2f6a83cf83eba860ca951b66bb7e2..6ccc6f60fc85e665c8a07a169efbe8d09c9d9e8e:/src/lib/stores/tags.test.ts diff --git a/src/lib/stores/tags.test.ts b/src/lib/stores/tags.test.ts deleted file mode 100644 index 8c9effe..0000000 --- a/src/lib/stores/tags.test.ts +++ /dev/null @@ -1,295 +0,0 @@ -import { GraphQLInteraction, Pact, Matchers } from '@pact-foundation/pact'; -import { resolve } from 'path'; - -import { resolveAfter } from '$lib/utils/resolve_after'; - -const { eachLike, like } = Matchers; - -jest.mock('$lib/config/config.ts'); - -import { getTag } from './tags'; - -const internals = { - provider: null -}; - -describe('Tags store pact', () => { - beforeAll(async () => { - internals.provider = new Pact({ - port: 1234, - dir: resolve(process.cwd(), 'pacts'), - consumer: 'ForumClient', - provider: 'ForumServer', - pactfileWriteMode: 'update' - }); - - await internals.provider.setup(); - }); - - afterEach(() => internals.provider.verify()); - afterAll(() => internals.provider.finalize()); - - describe("When there's data", () => { - describe('GetTag', () => { - beforeAll(async () => { - const tagQuery = new GraphQLInteraction() - .given("there's data") - .uponReceiving('a request to get a single tag') - .withRequest({ - path: '/graphql', - method: 'POST' - }) - .withOperation('GetTag') - .withQuery( - `query GetTag($id: ID!) { - tag(id: $id) { - id - topics { - id - title - updated_at - ttl - __typename - } - __typename - } - }` - ) - .withVariables({ - id: 'pineapple' - }) - .willRespondWith({ - status: 200, - headers: { - 'Content-Type': 'application/json; charset=utf-8' - }, - body: { - data: { - tag: { - id: like('pineapple'), - topics: eachLike({ - id: like('cd038ae7-e8b4-4e38-9543-3d697e69ac34'), - title: like('This topic is about pineapples'), - updated_at: like(1619978944077), - ttl: like(3555) - }) - } - } - } - }); - return await internals.provider.addInteraction(tagQuery); - }); - - test('it returns the tag', async () => { - const tag = getTag('pineapple'); - const { counter, promise: resolveAfterTwo } = resolveAfter(2); - let response = null; - tag.subscribe((tagValue) => { - response = tagValue; - counter(); - }); - expect(response.data).toBe(null); - expect(response.loading).toBe(true); - expect(response.error).toBe(undefined); - await resolveAfterTwo; - expect(response.data).toEqual({ - id: 'pineapple', - topics: [ - { - id: 'cd038ae7-e8b4-4e38-9543-3d697e69ac34', - title: 'This topic is about pineapples', - updated_at: 1619978944077, - ttl: 3555 - } - ] - }); - expect(response.loading).toBe(false); - expect(response.error).toBe(undefined); - }); - }); - }); - - describe("When there's no data", () => { - describe('GetTag', () => { - beforeAll(async () => { - const tagQuery = new GraphQLInteraction() - .given("there's no data") - .uponReceiving('a request to get a single tag') - .withRequest({ - path: '/graphql', - method: 'POST' - }) - .withOperation('GetTag') - .withQuery( - `query GetTag($id: ID!) { - tag(id: $id) { - id - topics { - id - title - updated_at - ttl - __typename - } - __typename - } - }` - ) - .withVariables({ - id: 'pineapple' - }) - .willRespondWith({ - status: 200, - headers: { - 'Content-Type': 'application/json; charset=utf-8' - }, - body: { - data: { - tag: null - } - } - }); - return await internals.provider.addInteraction(tagQuery); - }); - - test('it returns the tag', async () => { - const tag = getTag('pineapple'); - const { counter, promise: resolveAfterTwo } = resolveAfter(2); - let response = null; - tag.subscribe((tagValue) => { - response = tagValue; - counter(); - }); - expect(response.data).toBe(null); - expect(response.loading).toBe(true); - expect(response.error).toBe(undefined); - await resolveAfterTwo; - expect(response.data).toBe(null); - expect(response.loading).toBe(false); - expect(response.error).toBe(undefined); - }); - }); - }); - - describe("When there's a server error", () => { - describe('GetTag', () => { - beforeAll(async () => { - const tagQuery = new GraphQLInteraction() - .given("there's a server error") - .uponReceiving('a request to get a single tag') - .withRequest({ - path: '/graphql', - method: 'POST' - }) - .withOperation('GetTag') - .withQuery( - `query GetTag($id: ID!) { - tag(id: $id) { - id - topics { - id - title - updated_at - ttl - __typename - } - __typename - } - }` - ) - .withVariables({ - id: 'pineapple' - }) - .willRespondWith({ - status: 500 - }); - return await internals.provider.addInteraction(tagQuery); - }); - - test('it returns the error', async () => { - const tag = getTag('pineapple'); - const { counter, promise: resolveAfterTwo } = resolveAfter(2); - let response = null; - tag.subscribe((tagValue) => { - response = tagValue; - counter(); - }); - expect(response.data).toBe(null); - expect(response.loading).toBe(true); - expect(response.error).toBe(undefined); - await resolveAfterTwo; - expect(response.data).toBe(null); - expect(response.loading).toBe(false); - expect(response.error).toBeInstanceOf(Error); - }); - }); - }); - - describe("When there's an error in the response", () => { - describe('GetTag', () => { - beforeAll(async () => { - const tagQuery = new GraphQLInteraction() - .given("there's an error in the response") - .uponReceiving('a request to get a single tag') - .withRequest({ - path: '/graphql', - method: 'POST' - }) - .withOperation('GetTag') - .withQuery( - `query GetTag($id: ID!) { - tag(id: $id) { - id - topics { - id - title - updated_at - ttl - __typename - } - __typename - } - }` - ) - .withVariables({ - id: 'pineapple' - }) - .willRespondWith({ - status: 200, - headers: { - 'Content-Type': 'application/json; charset=utf-8' - }, - body: { - errors: eachLike({ - message: like('An error occurred when fetching the tag') - }) - } - }); - return await internals.provider.addInteraction(tagQuery); - }); - - test('it returns the error', async () => { - const tag = getTag('pineapple'); - const { counter, promise: resolveAfterTwo } = resolveAfter(2); - let response = null; - tag.subscribe((tagValue) => { - response = tagValue; - counter(); - }); - expect(response.data).toBe(null); - expect(response.loading).toBe(true); - expect(response.error).toBe(undefined); - await resolveAfterTwo; - expect(response.data).toBe(null); - expect(response.loading).toBe(false); - expect(response.error.graphQLErrors).toEqual( - expect.arrayContaining([ - { - message: 'An error occurred when fetching the tag' - } - ]) - ); - }); - }); - }); -});