diff options
| author | Ruben Beltran del Rio <ruben@unlimited.pizza> | 2021-05-02 20:16:44 +0200 |
|---|---|---|
| committer | Ruben Beltran del Rio <ruben@unlimited.pizza> | 2021-05-02 20:16:44 +0200 |
| commit | 5fc4715f923e5a0935cff2030325608ea6ddc0d6 (patch) | |
| tree | 39284ff13d21a7c53466c24344b37a3649837a28 /src | |
| parent | b15225c9dff2864ee774a0ab1dcf19d9353ec10b (diff) | |
Add tags store pact tests
Diffstat (limited to 'src')
| -rw-r--r-- | src/stores/posts.test.js | 14 | ||||
| -rw-r--r-- | src/stores/tags.test.js | 242 |
2 files changed, 249 insertions, 7 deletions
diff --git a/src/stores/posts.test.js b/src/stores/posts.test.js index acd843c..5d1fc05 100644 --- a/src/stores/posts.test.js +++ b/src/stores/posts.test.js @@ -3,7 +3,7 @@ import { resolve } from 'path'; import { resolveAfter } from '$/utils/resolve_after'; -const { eachLike, like } = Matchers; +const { like } = Matchers; jest.mock('$/config/config.js'); @@ -66,7 +66,7 @@ describe('Posts store pact', () => { }` ) .withVariables({ - id: 'freezer' + id: '8f75eba5-6989-4dd3-b466-e464546ce374' }) .willRespondWith({ status: 200, @@ -96,7 +96,7 @@ describe('Posts store pact', () => { test('it returns the post', async () => { - const post = getPost('freezer'); + const post = getPost('8f75eba5-6989-4dd3-b466-e464546ce374'); const { counter, promise: resolveAfterTwo } = resolveAfter(2); let response = null; post.subscribe((postValue) => { @@ -162,7 +162,7 @@ describe('Posts store pact', () => { }` ) .withVariables({ - id: 'freezer' + id: '8f75eba5-6989-4dd3-b466-e464546ce374' }) .willRespondWith({ status: 200, @@ -180,7 +180,7 @@ describe('Posts store pact', () => { test('it returns the post', async () => { - const post = getPost('freezer'); + const post = getPost('8f75eba5-6989-4dd3-b466-e464546ce374'); const { counter, promise: resolveAfterTwo } = resolveAfter(2); let response = null; post.subscribe((postValue) => { @@ -234,7 +234,7 @@ describe('Posts store pact', () => { }` ) .withVariables({ - id: 'freezer' + id: '8f75eba5-6989-4dd3-b466-e464546ce374' }) .willRespondWith({ status: 500 @@ -244,7 +244,7 @@ describe('Posts store pact', () => { test('it returns the error', async () => { - const post = getPost('freezer'); + const post = getPost('8f75eba5-6989-4dd3-b466-e464546ce374'); const { counter, promise: resolveAfterTwo } = resolveAfter(2); let response = null; post.subscribe((postValue) => { diff --git a/src/stores/tags.test.js b/src/stores/tags.test.js new file mode 100644 index 0000000..177919b --- /dev/null +++ b/src/stores/tags.test.js @@ -0,0 +1,242 @@ +import { GraphQLInteraction, Pact, Matchers } from '@pact-foundation/pact'; +import { resolve } from 'path'; + +import { resolveAfter } from '$/utils/resolve_after'; + +const { eachLike, like } = Matchers; + +jest.mock('$/config/config.js'); + +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 an error', () => { + + describe('GetTag', () => { + + beforeAll(async () => { + + const tagQuery = new GraphQLInteraction() + .given('there\'s an 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); + }); + }); + }); +}); |