]> git.r.bdr.sh - rbdr/forum/blobdiff - pacts/forumclient-forumserver.json
Add tests for actions + pacts for graphql errrors
[rbdr/forum] / pacts / forumclient-forumserver.json
index 3933bccffb7a932fd69599e6f8a0ba9edf00854d..9ec37f83890bf209498b47103c0fb661c499878b 100644 (file)
@@ -6,149 +6,6 @@
     "name": "ForumServer"
   },
   "interactions": [
-    {
-      "description": "a request to get a single post",
-      "providerState": "there's data",
-      "request": {
-        "method": "POST",
-        "path": "/graphql",
-        "headers": {
-          "content-type": "application/json"
-        },
-        "body": {
-          "operationName": "GetPost",
-          "query": "query GetPost($id: ID!) {\n              post(id: $id) {\n                id\n                text\n                created_at\n                author {\n                  id\n                  handle\n                  __typename\n                }\n                topic {\n                  id\n                  title\n                  __typename\n                }\n                __typename\n              }\n            }",
-          "variables": {
-            "id": "8f75eba5-6989-4dd3-b466-e464546ce374"
-          }
-        },
-        "matchingRules": {
-          "$.body.query": {
-            "match": "regex",
-            "regex": "query\\s*GetPost\\(\\$id:\\s*ID!\\)\\s*\\{\\s*post\\(id:\\s*\\$id\\)\\s*\\{\\s*id\\s*text\\s*created_at\\s*author\\s*\\{\\s*id\\s*handle\\s*__typename\\s*\\}\\s*topic\\s*\\{\\s*id\\s*title\\s*__typename\\s*\\}\\s*__typename\\s*\\}\\s*\\}"
-          }
-        }
-      },
-      "response": {
-        "status": 200,
-        "headers": {
-          "Content-Type": "application/json; charset=utf-8"
-        },
-        "body": {
-          "data": {
-            "post": {
-              "id": "8f75eba5-6989-4dd3-b466-e464546ce374",
-              "text": "This is a very pacty post",
-              "created_at": 1619976194937,
-              "author": {
-                "id": "a805b3de-cac4-451c-a1e6-f078869c9db9",
-                "handle": "pacts_person"
-              },
-              "topic": {
-                "id": "5c283ce1-0470-4b98-86f5-1fec9a22c9ac",
-                "title": "The parent pacts topic"
-              }
-            }
-          }
-        },
-        "matchingRules": {
-          "$.body.data.post": {
-            "match": "type"
-          },
-          "$.body.data.post.id": {
-            "match": "type"
-          },
-          "$.body.data.post.text": {
-            "match": "type"
-          },
-          "$.body.data.post.created_at": {
-            "match": "type"
-          },
-          "$.body.data.post.author": {
-            "match": "type"
-          },
-          "$.body.data.post.author.id": {
-            "match": "type"
-          },
-          "$.body.data.post.author.handle": {
-            "match": "type"
-          },
-          "$.body.data.post.topic": {
-            "match": "type"
-          },
-          "$.body.data.post.topic.id": {
-            "match": "type"
-          },
-          "$.body.data.post.topic.title": {
-            "match": "type"
-          }
-        }
-      }
-    },
-    {
-      "description": "a request to get a single post",
-      "providerState": "there's no data",
-      "request": {
-        "method": "POST",
-        "path": "/graphql",
-        "headers": {
-          "content-type": "application/json"
-        },
-        "body": {
-          "operationName": "GetPost",
-          "query": "query GetPost($id: ID!) {\n              post(id: $id) {\n                id\n                text\n                created_at\n                author {\n                  id\n                  handle\n                  __typename\n                }\n                topic {\n                  id\n                  title\n                  __typename\n                }\n                __typename\n              }\n            }",
-          "variables": {
-            "id": "8f75eba5-6989-4dd3-b466-e464546ce374"
-          }
-        },
-        "matchingRules": {
-          "$.body.query": {
-            "match": "regex",
-            "regex": "query\\s*GetPost\\(\\$id:\\s*ID!\\)\\s*\\{\\s*post\\(id:\\s*\\$id\\)\\s*\\{\\s*id\\s*text\\s*created_at\\s*author\\s*\\{\\s*id\\s*handle\\s*__typename\\s*\\}\\s*topic\\s*\\{\\s*id\\s*title\\s*__typename\\s*\\}\\s*__typename\\s*\\}\\s*\\}"
-          }
-        }
-      },
-      "response": {
-        "status": 200,
-        "headers": {
-          "Content-Type": "application/json; charset=utf-8"
-        },
-        "body": {
-          "data": {
-            "post": null
-          }
-        }
-      }
-    },
-    {
-      "description": "a request to get a single post",
-      "providerState": "there's an error",
-      "request": {
-        "method": "POST",
-        "path": "/graphql",
-        "headers": {
-          "content-type": "application/json"
-        },
-        "body": {
-          "operationName": "GetPost",
-          "query": "query GetPost($id: ID!) {\n              post(id: $id) {\n                id\n                text\n                created_at\n                author {\n                  id\n                  handle\n                  __typename\n                }\n                topic {\n                  id\n                  title\n                  __typename\n                }\n                __typename\n              }\n            }",
-          "variables": {
-            "id": "8f75eba5-6989-4dd3-b466-e464546ce374"
-          }
-        },
-        "matchingRules": {
-          "$.body.query": {
-            "match": "regex",
-            "regex": "query\\s*GetPost\\(\\$id:\\s*ID!\\)\\s*\\{\\s*post\\(id:\\s*\\$id\\)\\s*\\{\\s*id\\s*text\\s*created_at\\s*author\\s*\\{\\s*id\\s*handle\\s*__typename\\s*\\}\\s*topic\\s*\\{\\s*id\\s*title\\s*__typename\\s*\\}\\s*__typename\\s*\\}\\s*\\}"
-          }
-        }
-      },
-      "response": {
-        "status": 500,
-        "headers": {
-        }
-      }
-    },
     {
       "description": "a request to list the forums",
       "providerState": "there's data",
     },
     {
       "description": "a request to list the forums",
-      "providerState": "there's an error",
+      "providerState": "there's a server error",
       "request": {
         "method": "POST",
         "path": "/graphql",
     },
     {
       "description": "a request to get a single forum",
-      "providerState": "there's an error",
+      "providerState": "there's a server error",
       "request": {
         "method": "POST",
         "path": "/graphql",
       }
     },
     {
-      "description": "a request to get a single tag",
-      "providerState": "there's data",
+      "description": "a request to list the forums",
+      "providerState": "there's an error in the response",
       "request": {
         "method": "POST",
         "path": "/graphql",
           "content-type": "application/json"
         },
         "body": {
-          "operationName": "GetTag",
-          "query": "query GetTag($id: ID!) {\n              tag(id: $id) {\n                id\n                topics {\n                  id\n                  title\n                  updated_at\n                  ttl\n                  __typename\n                }\n                __typename\n              }\n            }",
+          "operationName": "GetForums",
+          "query": "query GetForums {\n              forums {\n                id\n                glyph\n                label\n                position\n                __typename\n              }\n            }",
           "variables": {
-            "id": "pineapple"
           }
         },
         "matchingRules": {
           "$.body.query": {
             "match": "regex",
-            "regex": "query\\s*GetTag\\(\\$id:\\s*ID!\\)\\s*\\{\\s*tag\\(id:\\s*\\$id\\)\\s*\\{\\s*id\\s*topics\\s*\\{\\s*id\\s*title\\s*updated_at\\s*ttl\\s*__typename\\s*\\}\\s*__typename\\s*\\}\\s*\\}"
+            "regex": "query\\s*GetForums\\s*\\{\\s*forums\\s*\\{\\s*id\\s*glyph\\s*label\\s*position\\s*__typename\\s*\\}\\s*\\}"
           }
         }
       },
           "Content-Type": "application/json; charset=utf-8"
         },
         "body": {
-          "data": {
-            "tag": {
-              "id": "pineapple",
-              "topics": [
-                {
-                  "id": "cd038ae7-e8b4-4e38-9543-3d697e69ac34",
-                  "title": "This topic is about pineapples",
-                  "updated_at": 1619978944077,
-                  "ttl": 3555
-                }
-              ]
+          "errors": [
+            {
+              "message": "An error occurred when fetching forums"
             }
-          }
+          ]
         },
         "matchingRules": {
-          "$.body.data.tag.id": {
-            "match": "type"
-          },
-          "$.body.data.tag.topics": {
+          "$.body.errors": {
             "min": 1
           },
-          "$.body.data.tag.topics[*].*": {
-            "match": "type"
-          },
-          "$.body.data.tag.topics[*].id": {
-            "match": "type"
-          },
-          "$.body.data.tag.topics[*].title": {
-            "match": "type"
-          },
-          "$.body.data.tag.topics[*].updated_at": {
+          "$.body.errors[*].*": {
             "match": "type"
           },
-          "$.body.data.tag.topics[*].ttl": {
+          "$.body.errors[*].message": {
             "match": "type"
           }
         }
       }
     },
     {
-      "description": "a request to get a single tag",
-      "providerState": "there's no data",
+      "description": "a request to get a single forum",
+      "providerState": "there's an error in the response",
       "request": {
         "method": "POST",
         "path": "/graphql",
           "content-type": "application/json"
         },
         "body": {
-          "operationName": "GetTag",
-          "query": "query GetTag($id: ID!) {\n              tag(id: $id) {\n                id\n                topics {\n                  id\n                  title\n                  updated_at\n                  ttl\n                  __typename\n                }\n                __typename\n              }\n            }",
+          "operationName": "GetForum",
+          "query": "query GetForum($id: ID!) {\n              forum(id: $id) {\n                id\n                glyph\n                label\n                position\n                topics {\n                  id\n                  title\n                  updated_at\n                  ttl\n                  __typename\n                }\n                __typename\n              }\n            }",
           "variables": {
-            "id": "pineapple"
+            "id": "freezer"
           }
         },
         "matchingRules": {
           "$.body.query": {
             "match": "regex",
-            "regex": "query\\s*GetTag\\(\\$id:\\s*ID!\\)\\s*\\{\\s*tag\\(id:\\s*\\$id\\)\\s*\\{\\s*id\\s*topics\\s*\\{\\s*id\\s*title\\s*updated_at\\s*ttl\\s*__typename\\s*\\}\\s*__typename\\s*\\}\\s*\\}"
+            "regex": "query\\s*GetForum\\(\\$id:\\s*ID!\\)\\s*\\{\\s*forum\\(id:\\s*\\$id\\)\\s*\\{\\s*id\\s*glyph\\s*label\\s*position\\s*topics\\s*\\{\\s*id\\s*title\\s*updated_at\\s*ttl\\s*__typename\\s*\\}\\s*__typename\\s*\\}\\s*\\}"
           }
         }
       },
           "Content-Type": "application/json; charset=utf-8"
         },
         "body": {
-          "data": {
-            "tag": null
+          "errors": [
+            {
+              "message": "An error occurred when fetching the forum"
+            }
+          ]
+        },
+        "matchingRules": {
+          "$.body.errors": {
+            "min": 1
+          },
+          "$.body.errors[*].*": {
+            "match": "type"
+          },
+          "$.body.errors[*].message": {
+            "match": "type"
           }
         }
       }
     },
     {
-      "description": "a request to get a single tag",
-      "providerState": "there's an error",
+      "description": "a request to get a single topic",
+      "providerState": "there's data",
       "request": {
         "method": "POST",
         "path": "/graphql",
           "content-type": "application/json"
         },
         "body": {
-          "operationName": "GetTag",
-          "query": "query GetTag($id: ID!) {\n              tag(id: $id) {\n                id\n                topics {\n                  id\n                  title\n                  updated_at\n                  ttl\n                  __typename\n                }\n                __typename\n              }\n            }",
+          "operationName": "GetTopic",
+          "query": "query GetTopic($id: ID!) {\n              topic(id: $id) {\n                id\n                title\n                updated_at\n                ttl\n                forum {\n                  id\n                  glyph\n                  label\n                  __typename\n                }\n                tags {\n                  id\n                  weight\n                  __typename\n                }\n                posts {\n                  id\n                  text\n                  created_at\n                  author {\n                    id\n                    handle\n                    __typename\n                  }\n                  __typename\n                }\n                __typename\n              }\n            }",
           "variables": {
-            "id": "pineapple"
+            "id": "0b58959d-d448-4a4e-84b6-35e5ac0028d1"
           }
         },
         "matchingRules": {
           "$.body.query": {
             "match": "regex",
-            "regex": "query\\s*GetTag\\(\\$id:\\s*ID!\\)\\s*\\{\\s*tag\\(id:\\s*\\$id\\)\\s*\\{\\s*id\\s*topics\\s*\\{\\s*id\\s*title\\s*updated_at\\s*ttl\\s*__typename\\s*\\}\\s*__typename\\s*\\}\\s*\\}"
+            "regex": "query\\s*GetTopic\\(\\$id:\\s*ID!\\)\\s*\\{\\s*topic\\(id:\\s*\\$id\\)\\s*\\{\\s*id\\s*title\\s*updated_at\\s*ttl\\s*forum\\s*\\{\\s*id\\s*glyph\\s*label\\s*__typename\\s*\\}\\s*tags\\s*\\{\\s*id\\s*weight\\s*__typename\\s*\\}\\s*posts\\s*\\{\\s*id\\s*text\\s*created_at\\s*author\\s*\\{\\s*id\\s*handle\\s*__typename\\s*\\}\\s*__typename\\s*\\}\\s*__typename\\s*\\}\\s*\\}"
           }
         }
       },
       "response": {
-        "status": 500,
+        "status": 200,
         "headers": {
+          "Content-Type": "application/json; charset=utf-8"
+        },
+        "body": {
+          "data": {
+            "topic": {
+              "id": "0b58959d-d448-4a4e-84b6-35e5ac0028d1",
+              "title": "The pacty topic of the day",
+              "updated_at": 1619979888906,
+              "ttl": 3399,
+              "forum": {
+                "id": "cucumber",
+                "glyph": "✽",
+                "label": "test_forums.cucumber"
+              },
+              "tags": [
+                {
+                  "id": "skunk",
+                  "weight": 44
+                }
+              ],
+              "posts": [
+                {
+                  "id": "ed93530e-6f9c-4701-91ef-14f9e0ed3e26",
+                  "text": "The content of this post is very relevant",
+                  "created_at": 1619979889798,
+                  "author": {
+                    "id": "07fb2ba0-0945-464a-b215-873296710c8c",
+                    "handle": "cucumber_fan92"
+                  }
+                }
+              ]
+            }
+          }
+        },
+        "matchingRules": {
+          "$.body.data.topic.id": {
+            "match": "type"
+          },
+          "$.body.data.topic.title": {
+            "match": "type"
+          },
+          "$.body.data.topic.updated_at": {
+            "match": "type"
+          },
+          "$.body.data.topic.ttl": {
+            "match": "type"
+          },
+          "$.body.data.topic.forum.id": {
+            "match": "type"
+          },
+          "$.body.data.topic.forum.glyph": {
+            "match": "type"
+          },
+          "$.body.data.topic.forum.label": {
+            "match": "type"
+          },
+          "$.body.data.topic.tags": {
+            "min": 1
+          },
+          "$.body.data.topic.tags[*].*": {
+            "match": "type"
+          },
+          "$.body.data.topic.tags[*].id": {
+            "match": "type"
+          },
+          "$.body.data.topic.tags[*].weight": {
+            "match": "type"
+          },
+          "$.body.data.topic.posts": {
+            "min": 1
+          },
+          "$.body.data.topic.posts[*].*": {
+            "match": "type"
+          },
+          "$.body.data.topic.posts[*].id": {
+            "match": "type"
+          },
+          "$.body.data.topic.posts[*].text": {
+            "match": "type"
+          },
+          "$.body.data.topic.posts[*].created_at": {
+            "match": "type"
+          },
+          "$.body.data.topic.posts[*].author": {
+            "match": "type"
+          },
+          "$.body.data.topic.posts[*].author.id": {
+            "match": "type"
+          },
+          "$.body.data.topic.posts[*].author.handle": {
+            "match": "type"
+          }
+        }
+      }
+    },
+    {
+      "description": "a request to get a single topic",
+      "providerState": "there's no data",
+      "request": {
+        "method": "POST",
+        "path": "/graphql",
+        "headers": {
+          "content-type": "application/json"
+        },
+        "body": {
+          "operationName": "GetTopic",
+          "query": "query GetTopic($id: ID!) {\n              topic(id: $id) {\n                id\n                title\n                updated_at\n                ttl\n                forum {\n                  id\n                  glyph\n                  label\n                  __typename\n                }\n                tags {\n                  id\n                  weight\n                  __typename\n                }\n                posts {\n                  id\n                  text\n                  created_at\n                  author {\n                    id\n                    handle\n                    __typename\n                  }\n                  __typename\n                }\n                __typename\n              }\n            }",
+          "variables": {
+            "id": "0b58959d-d448-4a4e-84b6-35e5ac0028d1"
+          }
+        },
+        "matchingRules": {
+          "$.body.query": {
+            "match": "regex",
+            "regex": "query\\s*GetTopic\\(\\$id:\\s*ID!\\)\\s*\\{\\s*topic\\(id:\\s*\\$id\\)\\s*\\{\\s*id\\s*title\\s*updated_at\\s*ttl\\s*forum\\s*\\{\\s*id\\s*glyph\\s*label\\s*__typename\\s*\\}\\s*tags\\s*\\{\\s*id\\s*weight\\s*__typename\\s*\\}\\s*posts\\s*\\{\\s*id\\s*text\\s*created_at\\s*author\\s*\\{\\s*id\\s*handle\\s*__typename\\s*\\}\\s*__typename\\s*\\}\\s*__typename\\s*\\}\\s*\\}"
+          }
+        }
+      },
+      "response": {
+        "status": 200,
+        "headers": {
+          "Content-Type": "application/json; charset=utf-8"
+        },
+        "body": {
+          "data": {
+            "topic": null
+          }
+        }
+      }
+    },
+    {
+      "description": "a request to get a single topic",
+      "providerState": "there's a server error",
+      "request": {
+        "method": "POST",
+        "path": "/graphql",
+        "headers": {
+          "content-type": "application/json"
+        },
+        "body": {
+          "operationName": "GetTopic",
+          "query": "query GetTopic($id: ID!) {\n              topic(id: $id) {\n                id\n                title\n                updated_at\n                ttl\n                forum {\n                  id\n                  glyph\n                  label\n                  __typename\n                }\n                tags {\n                  id\n                  weight\n                  __typename\n                }\n                posts {\n                  id\n                  text\n                  created_at\n                  author {\n                    id\n                    handle\n                    __typename\n                  }\n                  __typename\n                }\n                __typename\n              }\n            }",
+          "variables": {
+            "id": "0b58959d-d448-4a4e-84b6-35e5ac0028d1"
+          }
+        },
+        "matchingRules": {
+          "$.body.query": {
+            "match": "regex",
+            "regex": "query\\s*GetTopic\\(\\$id:\\s*ID!\\)\\s*\\{\\s*topic\\(id:\\s*\\$id\\)\\s*\\{\\s*id\\s*title\\s*updated_at\\s*ttl\\s*forum\\s*\\{\\s*id\\s*glyph\\s*label\\s*__typename\\s*\\}\\s*tags\\s*\\{\\s*id\\s*weight\\s*__typename\\s*\\}\\s*posts\\s*\\{\\s*id\\s*text\\s*created_at\\s*author\\s*\\{\\s*id\\s*handle\\s*__typename\\s*\\}\\s*__typename\\s*\\}\\s*__typename\\s*\\}\\s*\\}"
+          }
+        }
+      },
+      "response": {
+        "status": 500,
+        "headers": {
+        }
+      }
+    },
+    {
+      "description": "a request to get a single topic",
+      "providerState": "there's an error in the response",
+      "request": {
+        "method": "POST",
+        "path": "/graphql",
+        "headers": {
+          "content-type": "application/json"
+        },
+        "body": {
+          "operationName": "GetTopic",
+          "query": "query GetTopic($id: ID!) {\n              topic(id: $id) {\n                id\n                title\n                updated_at\n                ttl\n                forum {\n                  id\n                  glyph\n                  label\n                  __typename\n                }\n                tags {\n                  id\n                  weight\n                  __typename\n                }\n                posts {\n                  id\n                  text\n                  created_at\n                  author {\n                    id\n                    handle\n                    __typename\n                  }\n                  __typename\n                }\n                __typename\n              }\n            }",
+          "variables": {
+            "id": "0b58959d-d448-4a4e-84b6-35e5ac0028d1"
+          }
+        },
+        "matchingRules": {
+          "$.body.query": {
+            "match": "regex",
+            "regex": "query\\s*GetTopic\\(\\$id:\\s*ID!\\)\\s*\\{\\s*topic\\(id:\\s*\\$id\\)\\s*\\{\\s*id\\s*title\\s*updated_at\\s*ttl\\s*forum\\s*\\{\\s*id\\s*glyph\\s*label\\s*__typename\\s*\\}\\s*tags\\s*\\{\\s*id\\s*weight\\s*__typename\\s*\\}\\s*posts\\s*\\{\\s*id\\s*text\\s*created_at\\s*author\\s*\\{\\s*id\\s*handle\\s*__typename\\s*\\}\\s*__typename\\s*\\}\\s*__typename\\s*\\}\\s*\\}"
+          }
+        }
+      },
+      "response": {
+        "status": 200,
+        "headers": {
+          "Content-Type": "application/json; charset=utf-8"
+        },
+        "body": {
+          "errors": [
+            {
+              "message": "An error occurred when fetching the topic"
+            }
+          ]
+        },
+        "matchingRules": {
+          "$.body.errors": {
+            "min": 1
+          },
+          "$.body.errors[*].*": {
+            "match": "type"
+          },
+          "$.body.errors[*].message": {
+            "match": "type"
+          }
+        }
+      }
+    },
+    {
+      "description": "a request to get a single tag",
+      "providerState": "there's data",
+      "request": {
+        "method": "POST",
+        "path": "/graphql",
+        "headers": {
+          "content-type": "application/json"
+        },
+        "body": {
+          "operationName": "GetTag",
+          "query": "query GetTag($id: ID!) {\n              tag(id: $id) {\n                id\n                topics {\n                  id\n                  title\n                  updated_at\n                  ttl\n                  __typename\n                }\n                __typename\n              }\n            }",
+          "variables": {
+            "id": "pineapple"
+          }
+        },
+        "matchingRules": {
+          "$.body.query": {
+            "match": "regex",
+            "regex": "query\\s*GetTag\\(\\$id:\\s*ID!\\)\\s*\\{\\s*tag\\(id:\\s*\\$id\\)\\s*\\{\\s*id\\s*topics\\s*\\{\\s*id\\s*title\\s*updated_at\\s*ttl\\s*__typename\\s*\\}\\s*__typename\\s*\\}\\s*\\}"
+          }
+        }
+      },
+      "response": {
+        "status": 200,
+        "headers": {
+          "Content-Type": "application/json; charset=utf-8"
+        },
+        "body": {
+          "data": {
+            "tag": {
+              "id": "pineapple",
+              "topics": [
+                {
+                  "id": "cd038ae7-e8b4-4e38-9543-3d697e69ac34",
+                  "title": "This topic is about pineapples",
+                  "updated_at": 1619978944077,
+                  "ttl": 3555
+                }
+              ]
+            }
+          }
+        },
+        "matchingRules": {
+          "$.body.data.tag.id": {
+            "match": "type"
+          },
+          "$.body.data.tag.topics": {
+            "min": 1
+          },
+          "$.body.data.tag.topics[*].*": {
+            "match": "type"
+          },
+          "$.body.data.tag.topics[*].id": {
+            "match": "type"
+          },
+          "$.body.data.tag.topics[*].title": {
+            "match": "type"
+          },
+          "$.body.data.tag.topics[*].updated_at": {
+            "match": "type"
+          },
+          "$.body.data.tag.topics[*].ttl": {
+            "match": "type"
+          }
+        }
+      }
+    },
+    {
+      "description": "a request to get a single tag",
+      "providerState": "there's no data",
+      "request": {
+        "method": "POST",
+        "path": "/graphql",
+        "headers": {
+          "content-type": "application/json"
+        },
+        "body": {
+          "operationName": "GetTag",
+          "query": "query GetTag($id: ID!) {\n              tag(id: $id) {\n                id\n                topics {\n                  id\n                  title\n                  updated_at\n                  ttl\n                  __typename\n                }\n                __typename\n              }\n            }",
+          "variables": {
+            "id": "pineapple"
+          }
+        },
+        "matchingRules": {
+          "$.body.query": {
+            "match": "regex",
+            "regex": "query\\s*GetTag\\(\\$id:\\s*ID!\\)\\s*\\{\\s*tag\\(id:\\s*\\$id\\)\\s*\\{\\s*id\\s*topics\\s*\\{\\s*id\\s*title\\s*updated_at\\s*ttl\\s*__typename\\s*\\}\\s*__typename\\s*\\}\\s*\\}"
+          }
+        }
+      },
+      "response": {
+        "status": 200,
+        "headers": {
+          "Content-Type": "application/json; charset=utf-8"
+        },
+        "body": {
+          "data": {
+            "tag": null
+          }
+        }
+      }
+    },
+    {
+      "description": "a request to get a single tag",
+      "providerState": "there's a server error",
+      "request": {
+        "method": "POST",
+        "path": "/graphql",
+        "headers": {
+          "content-type": "application/json"
+        },
+        "body": {
+          "operationName": "GetTag",
+          "query": "query GetTag($id: ID!) {\n              tag(id: $id) {\n                id\n                topics {\n                  id\n                  title\n                  updated_at\n                  ttl\n                  __typename\n                }\n                __typename\n              }\n            }",
+          "variables": {
+            "id": "pineapple"
+          }
+        },
+        "matchingRules": {
+          "$.body.query": {
+            "match": "regex",
+            "regex": "query\\s*GetTag\\(\\$id:\\s*ID!\\)\\s*\\{\\s*tag\\(id:\\s*\\$id\\)\\s*\\{\\s*id\\s*topics\\s*\\{\\s*id\\s*title\\s*updated_at\\s*ttl\\s*__typename\\s*\\}\\s*__typename\\s*\\}\\s*\\}"
+          }
+        }
+      },
+      "response": {
+        "status": 500,
+        "headers": {
+        }
+      }
+    },
+    {
+      "description": "a request to get a single tag",
+      "providerState": "there's an error in the response",
+      "request": {
+        "method": "POST",
+        "path": "/graphql",
+        "headers": {
+          "content-type": "application/json"
+        },
+        "body": {
+          "operationName": "GetTag",
+          "query": "query GetTag($id: ID!) {\n              tag(id: $id) {\n                id\n                topics {\n                  id\n                  title\n                  updated_at\n                  ttl\n                  __typename\n                }\n                __typename\n              }\n            }",
+          "variables": {
+            "id": "pineapple"
+          }
+        },
+        "matchingRules": {
+          "$.body.query": {
+            "match": "regex",
+            "regex": "query\\s*GetTag\\(\\$id:\\s*ID!\\)\\s*\\{\\s*tag\\(id:\\s*\\$id\\)\\s*\\{\\s*id\\s*topics\\s*\\{\\s*id\\s*title\\s*updated_at\\s*ttl\\s*__typename\\s*\\}\\s*__typename\\s*\\}\\s*\\}"
+          }
+        }
+      },
+      "response": {
+        "status": 200,
+        "headers": {
+          "Content-Type": "application/json; charset=utf-8"
+        },
+        "body": {
+          "errors": [
+            {
+              "message": "An error occurred when fetching the tag"
+            }
+          ]
+        },
+        "matchingRules": {
+          "$.body.errors": {
+            "min": 1
+          },
+          "$.body.errors[*].*": {
+            "match": "type"
+          },
+          "$.body.errors[*].message": {
+            "match": "type"
+          }
+        }
+      }
+    },
+    {
+      "description": "a request to get a single post",
+      "providerState": "there's data",
+      "request": {
+        "method": "POST",
+        "path": "/graphql",
+        "headers": {
+          "content-type": "application/json"
+        },
+        "body": {
+          "operationName": "GetPost",
+          "query": "query GetPost($id: ID!) {\n              post(id: $id) {\n                id\n                text\n                created_at\n                author {\n                  id\n                  handle\n                  __typename\n                }\n                topic {\n                  id\n                  title\n                  __typename\n                }\n                __typename\n              }\n            }",
+          "variables": {
+            "id": "8f75eba5-6989-4dd3-b466-e464546ce374"
+          }
+        },
+        "matchingRules": {
+          "$.body.query": {
+            "match": "regex",
+            "regex": "query\\s*GetPost\\(\\$id:\\s*ID!\\)\\s*\\{\\s*post\\(id:\\s*\\$id\\)\\s*\\{\\s*id\\s*text\\s*created_at\\s*author\\s*\\{\\s*id\\s*handle\\s*__typename\\s*\\}\\s*topic\\s*\\{\\s*id\\s*title\\s*__typename\\s*\\}\\s*__typename\\s*\\}\\s*\\}"
+          }
+        }
+      },
+      "response": {
+        "status": 200,
+        "headers": {
+          "Content-Type": "application/json; charset=utf-8"
+        },
+        "body": {
+          "data": {
+            "post": {
+              "id": "8f75eba5-6989-4dd3-b466-e464546ce374",
+              "text": "This is a very pacty post",
+              "created_at": 1619976194937,
+              "author": {
+                "id": "a805b3de-cac4-451c-a1e6-f078869c9db9",
+                "handle": "pacts_person"
+              },
+              "topic": {
+                "id": "5c283ce1-0470-4b98-86f5-1fec9a22c9ac",
+                "title": "The parent pacts topic"
+              }
+            }
+          }
+        },
+        "matchingRules": {
+          "$.body.data.post": {
+            "match": "type"
+          },
+          "$.body.data.post.id": {
+            "match": "type"
+          },
+          "$.body.data.post.text": {
+            "match": "type"
+          },
+          "$.body.data.post.created_at": {
+            "match": "type"
+          },
+          "$.body.data.post.author": {
+            "match": "type"
+          },
+          "$.body.data.post.author.id": {
+            "match": "type"
+          },
+          "$.body.data.post.author.handle": {
+            "match": "type"
+          },
+          "$.body.data.post.topic": {
+            "match": "type"
+          },
+          "$.body.data.post.topic.id": {
+            "match": "type"
+          },
+          "$.body.data.post.topic.title": {
+            "match": "type"
+          }
+        }
+      }
+    },
+    {
+      "description": "a request to get a single post",
+      "providerState": "there's no data",
+      "request": {
+        "method": "POST",
+        "path": "/graphql",
+        "headers": {
+          "content-type": "application/json"
+        },
+        "body": {
+          "operationName": "GetPost",
+          "query": "query GetPost($id: ID!) {\n              post(id: $id) {\n                id\n                text\n                created_at\n                author {\n                  id\n                  handle\n                  __typename\n                }\n                topic {\n                  id\n                  title\n                  __typename\n                }\n                __typename\n              }\n            }",
+          "variables": {
+            "id": "8f75eba5-6989-4dd3-b466-e464546ce374"
+          }
+        },
+        "matchingRules": {
+          "$.body.query": {
+            "match": "regex",
+            "regex": "query\\s*GetPost\\(\\$id:\\s*ID!\\)\\s*\\{\\s*post\\(id:\\s*\\$id\\)\\s*\\{\\s*id\\s*text\\s*created_at\\s*author\\s*\\{\\s*id\\s*handle\\s*__typename\\s*\\}\\s*topic\\s*\\{\\s*id\\s*title\\s*__typename\\s*\\}\\s*__typename\\s*\\}\\s*\\}"
+          }
+        }
+      },
+      "response": {
+        "status": 200,
+        "headers": {
+          "Content-Type": "application/json; charset=utf-8"
+        },
+        "body": {
+          "data": {
+            "post": null
+          }
+        }
+      }
+    },
+    {
+      "description": "a request to get a single post",
+      "providerState": "there's a server error",
+      "request": {
+        "method": "POST",
+        "path": "/graphql",
+        "headers": {
+          "content-type": "application/json"
+        },
+        "body": {
+          "operationName": "GetPost",
+          "query": "query GetPost($id: ID!) {\n              post(id: $id) {\n                id\n                text\n                created_at\n                author {\n                  id\n                  handle\n                  __typename\n                }\n                topic {\n                  id\n                  title\n                  __typename\n                }\n                __typename\n              }\n            }",
+          "variables": {
+            "id": "8f75eba5-6989-4dd3-b466-e464546ce374"
+          }
+        },
+        "matchingRules": {
+          "$.body.query": {
+            "match": "regex",
+            "regex": "query\\s*GetPost\\(\\$id:\\s*ID!\\)\\s*\\{\\s*post\\(id:\\s*\\$id\\)\\s*\\{\\s*id\\s*text\\s*created_at\\s*author\\s*\\{\\s*id\\s*handle\\s*__typename\\s*\\}\\s*topic\\s*\\{\\s*id\\s*title\\s*__typename\\s*\\}\\s*__typename\\s*\\}\\s*\\}"
+          }
+        }
+      },
+      "response": {
+        "status": 500,
+        "headers": {
+        }
+      }
+    },
+    {
+      "description": "a request to get a single post",
+      "providerState": "there's an error in the response",
+      "request": {
+        "method": "POST",
+        "path": "/graphql",
+        "headers": {
+          "content-type": "application/json"
+        },
+        "body": {
+          "operationName": "GetPost",
+          "query": "query GetPost($id: ID!) {\n              post(id: $id) {\n                id\n                text\n                created_at\n                author {\n                  id\n                  handle\n                  __typename\n                }\n                topic {\n                  id\n                  title\n                  __typename\n                }\n                __typename\n              }\n            }",
+          "variables": {
+            "id": "8f75eba5-6989-4dd3-b466-e464546ce374"
+          }
+        },
+        "matchingRules": {
+          "$.body.query": {
+            "match": "regex",
+            "regex": "query\\s*GetPost\\(\\$id:\\s*ID!\\)\\s*\\{\\s*post\\(id:\\s*\\$id\\)\\s*\\{\\s*id\\s*text\\s*created_at\\s*author\\s*\\{\\s*id\\s*handle\\s*__typename\\s*\\}\\s*topic\\s*\\{\\s*id\\s*title\\s*__typename\\s*\\}\\s*__typename\\s*\\}\\s*\\}"
+          }
+        }
+      },
+      "response": {
+        "status": 200,
+        "headers": {
+          "Content-Type": "application/json; charset=utf-8"
+        },
+        "body": {
+          "errors": [
+            {
+              "message": "An error occurred when fetching the post"
+            }
+          ]
+        },
+        "matchingRules": {
+          "$.body.errors": {
+            "min": 1
+          },
+          "$.body.errors[*].*": {
+            "match": "type"
+          },
+          "$.body.errors[*].message": {
+            "match": "type"
+          }
         }
       }
     }