aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRuben Beltran del Rio <ruben@unlimited.pizza>2021-05-02 20:16:44 +0200
committerRuben Beltran del Rio <ruben@unlimited.pizza>2021-05-02 20:16:44 +0200
commit5fc4715f923e5a0935cff2030325608ea6ddc0d6 (patch)
tree39284ff13d21a7c53466c24344b37a3649837a28 /src
parentb15225c9dff2864ee774a0ab1dcf19d9353ec10b (diff)
Add tags store pact tests
Diffstat (limited to 'src')
-rw-r--r--src/stores/posts.test.js14
-rw-r--r--src/stores/tags.test.js242
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);
+ });
+ });
+ });
+});