From 83eb8b76d4af7f46baeb4a989ce695e39c532a97 Mon Sep 17 00:00:00 2001
From: Richard Chong <rchong@gitlab.com>
Date: Thu, 16 Jun 2022 05:38:44 +0000
Subject: [PATCH] Contract tests restructure

---
 lib/tasks/contracts.rake                      |  19 +--
 .../endpoints/{ => project}/merge_requests.js |   4 +-
 .../merge_request/diffs_batch.fixture.js}     |   5 +-
 .../merge_request/diffs_metadata.fixture.js}  |   7 +-
 .../merge_request}/discussions.fixture.js     |   1 +
 spec/contracts/consumer/specs/diffs.spec.js   |  37 ------
 .../consumer/specs/discussions.spec.js        |  37 ------
 .../contracts/consumer/specs/metadata.spec.js |  37 ------
 .../specs/project/merge_request/show.spec.js  | 112 ++++++++++++++++++
 ...w-merge_request_diffs_batch_endpoint.json} |   6 +-
 ...erge_request_diffs_metadata_endpoint.json} |   8 +-
 ...w-merge_request_discussions_endpoint.json} |   4 +-
 .../merge_request/diffs_batch_helper.rb       |  16 +++
 .../merge_request/diffs_metadata_helper.rb    |  16 +++
 .../merge_request/discussions_helper.rb       |  16 +++
 spec/contracts/provider/specs/diffs_helper.rb |  16 ---
 .../provider/specs/discussions_helper.rb      |  16 ---
 .../provider/specs/metadata_helper.rb         |  16 ---
 .../merge_request/diffs_batch_state.rb}       |   2 +-
 .../merge_request/diffs_metadata_state.rb}    |   2 +-
 .../merge_request}/discussions_state.rb       |   2 +-
 21 files changed, 192 insertions(+), 187 deletions(-)
 rename spec/contracts/consumer/endpoints/{ => project}/merge_requests.js (89%)
 rename spec/contracts/consumer/fixtures/{diffs.fixture.js => project/merge_request/diffs_batch.fixture.js} (98%)
 rename spec/contracts/consumer/fixtures/{metadata.fixture.js => project/merge_request/diffs_metadata.fixture.js} (97%)
 rename spec/contracts/consumer/fixtures/{ => project/merge_request}/discussions.fixture.js (99%)
 delete mode 100644 spec/contracts/consumer/specs/diffs.spec.js
 delete mode 100644 spec/contracts/consumer/specs/discussions.spec.js
 delete mode 100644 spec/contracts/consumer/specs/metadata.spec.js
 create mode 100644 spec/contracts/consumer/specs/project/merge_request/show.spec.js
 rename spec/contracts/contracts/{merge_request_page-merge_request_diffs_endpoint.json => project/merge_request/show/mergerequest#show-merge_request_diffs_batch_endpoint.json} (98%)
 rename spec/contracts/contracts/{merge_request_page-merge_request_metadata_endpoint.json => project/merge_request/show/mergerequest#show-merge_request_diffs_metadata_endpoint.json} (98%)
 rename spec/contracts/contracts/{merge_request_page-merge_request_discussions_endpoint.json => project/merge_request/show/mergerequest#show-merge_request_discussions_endpoint.json} (99%)
 create mode 100644 spec/contracts/provider/pact_helpers/project/merge_request/diffs_batch_helper.rb
 create mode 100644 spec/contracts/provider/pact_helpers/project/merge_request/diffs_metadata_helper.rb
 create mode 100644 spec/contracts/provider/pact_helpers/project/merge_request/discussions_helper.rb
 delete mode 100644 spec/contracts/provider/specs/diffs_helper.rb
 delete mode 100644 spec/contracts/provider/specs/discussions_helper.rb
 delete mode 100644 spec/contracts/provider/specs/metadata_helper.rb
 rename spec/contracts/provider/states/{diffs_state.rb => project/merge_request/diffs_batch_state.rb} (93%)
 rename spec/contracts/provider/states/{metadata_state.rb => project/merge_request/diffs_metadata_state.rb} (92%)
 rename spec/contracts/provider/states/{ => project/merge_request}/discussions_state.rb (92%)

diff --git a/lib/tasks/contracts.rake b/lib/tasks/contracts.rake
index 75c350f5be5d9..6bb7f30ad57d8 100644
--- a/lib/tasks/contracts.rake
+++ b/lib/tasks/contracts.rake
@@ -10,24 +10,25 @@ provider = File.expand_path('provider', contracts)
 # rubocop:disable Rails/RakeEnvironment
 namespace :contracts do
   namespace :mr do
-    Pact::VerificationTask.new(:metadata) do |pact|
+    Pact::VerificationTask.new(:diffs_batch) do |pact|
       pact.uri(
-        "#{contracts}/contracts/merge_request_page-merge_request_metadata_endpoint.json",
-        pact_helper: "#{provider}/specs/metadata_helper.rb"
+        "#{contracts}/contracts/project/merge_request/show/mergerequest#show-merge_request_diffs_batch_endpoint.json",
+        pact_helper: "#{provider}/pact_helpers/project/merge_request/diffs_batch_helper.rb"
       )
     end
 
-    Pact::VerificationTask.new(:discussions) do |pact|
+    Pact::VerificationTask.new(:diffs_metadata) do |pact|
       pact.uri(
-        "#{contracts}/contracts/merge_request_page-merge_request_discussions_endpoint.json",
-        pact_helper: "#{provider}/specs/discussions_helper.rb"
+        "#{contracts}/contracts/project/merge_request/show/" \
+          "mergerequest#show-merge_request_diffs_metadata_endpoint.json",
+        pact_helper: "#{provider}/pact_helpers/project/merge_request/diffs_metadata_helper.rb"
       )
     end
 
-    Pact::VerificationTask.new(:diffs) do |pact|
+    Pact::VerificationTask.new(:discussions) do |pact|
       pact.uri(
-        "#{contracts}/contracts/merge_request_page-merge_request_diffs_endpoint.json",
-        pact_helper: "#{provider}/specs/diffs_helper.rb"
+        "#{contracts}/contracts/project/merge_request/show/mergerequest#show-merge_request_discussions_endpoint.json",
+        pact_helper: "#{provider}/pact_helpers/project/merge_request/discussions_helper.rb"
       )
     end
 
diff --git a/spec/contracts/consumer/endpoints/merge_requests.js b/spec/contracts/consumer/endpoints/project/merge_requests.js
similarity index 89%
rename from spec/contracts/consumer/endpoints/merge_requests.js
rename to spec/contracts/consumer/endpoints/project/merge_requests.js
index ae4d5544df6d8..38773e5fb109a 100644
--- a/spec/contracts/consumer/endpoints/merge_requests.js
+++ b/spec/contracts/consumer/endpoints/project/merge_requests.js
@@ -1,6 +1,6 @@
 import { request } from 'axios';
 
-export function getMetadata(endpoint) {
+export function getDiffsMetadata(endpoint) {
   const { url } = endpoint;
 
   return request({
@@ -22,7 +22,7 @@ export function getDiscussions(endpoint) {
   }).then((response) => response.data);
 }
 
-export function getDiffs(endpoint) {
+export function getDiffsBatch(endpoint) {
   const { url } = endpoint;
 
   return request({
diff --git a/spec/contracts/consumer/fixtures/diffs.fixture.js b/spec/contracts/consumer/fixtures/project/merge_request/diffs_batch.fixture.js
similarity index 98%
rename from spec/contracts/consumer/fixtures/diffs.fixture.js
rename to spec/contracts/consumer/fixtures/project/merge_request/diffs_batch.fixture.js
index cc2c054b08f49..b53e4bb335db6 100644
--- a/spec/contracts/consumer/fixtures/diffs.fixture.js
+++ b/spec/contracts/consumer/fixtures/project/merge_request/diffs_batch.fixture.js
@@ -62,7 +62,7 @@ const body = {
   },
 };
 
-const Diffs = {
+const DiffsBatch = {
   body: Matchers.extractPayload(body),
 
   success: {
@@ -86,5 +86,6 @@ const Diffs = {
   },
 };
 
-export { Diffs };
+export { DiffsBatch };
+
 /* eslint-enable @gitlab/require-i18n-strings */
diff --git a/spec/contracts/consumer/fixtures/metadata.fixture.js b/spec/contracts/consumer/fixtures/project/merge_request/diffs_metadata.fixture.js
similarity index 97%
rename from spec/contracts/consumer/fixtures/metadata.fixture.js
rename to spec/contracts/consumer/fixtures/project/merge_request/diffs_metadata.fixture.js
index c19ca2175b3c5..39dbcf78ee70b 100644
--- a/spec/contracts/consumer/fixtures/metadata.fixture.js
+++ b/spec/contracts/consumer/fixtures/project/merge_request/diffs_metadata.fixture.js
@@ -70,7 +70,7 @@ const body = {
   project_name: Matchers.string('contract-testing'),
 };
 
-const Metadata = {
+const DiffsMetadata = {
   body: Matchers.extractPayload(body),
 
   success: {
@@ -82,7 +82,7 @@ const Metadata = {
   },
 
   request: {
-    uponReceiving: 'a request for Metadata',
+    uponReceiving: 'a request for Diffs Metadata',
     withRequest: {
       method: 'GET',
       path: '/gitlab-org/gitlab-qa/-/merge_requests/1/diffs_metadata.json',
@@ -93,5 +93,6 @@ const Metadata = {
   },
 };
 
-export { Metadata };
+export { DiffsMetadata };
+
 /* eslint-enable @gitlab/require-i18n-strings */
diff --git a/spec/contracts/consumer/fixtures/discussions.fixture.js b/spec/contracts/consumer/fixtures/project/merge_request/discussions.fixture.js
similarity index 99%
rename from spec/contracts/consumer/fixtures/discussions.fixture.js
rename to spec/contracts/consumer/fixtures/project/merge_request/discussions.fixture.js
index 26f1d65f6630b..af0962a01cb97 100644
--- a/spec/contracts/consumer/fixtures/discussions.fixture.js
+++ b/spec/contracts/consumer/fixtures/project/merge_request/discussions.fixture.js
@@ -83,4 +83,5 @@ const Discussions = {
 };
 
 export { Discussions };
+
 /* eslint-enable @gitlab/require-i18n-strings */
diff --git a/spec/contracts/consumer/specs/diffs.spec.js b/spec/contracts/consumer/specs/diffs.spec.js
deleted file mode 100644
index 6b1cefdbdbc5c..0000000000000
--- a/spec/contracts/consumer/specs/diffs.spec.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/* eslint-disable @gitlab/require-i18n-strings */
-
-import { pactWith } from 'jest-pact';
-
-import { Diffs } from '../fixtures/diffs.fixture';
-import { getDiffs } from '../endpoints/merge_requests';
-
-pactWith(
-  {
-    consumer: 'Merge Request Page',
-    provider: 'Merge Request Diffs Endpoint',
-    log: '../logs/consumer.log',
-    dir: '../contracts',
-  },
-
-  (provider) => {
-    describe('Diffs Endpoint', () => {
-      beforeEach(() => {
-        const interaction = {
-          state: 'a merge request with diffs exists',
-          ...Diffs.request,
-          willRespondWith: Diffs.success,
-        };
-        provider.addInteraction(interaction);
-      });
-
-      it('return a successful body', () => {
-        return getDiffs({
-          url: provider.mockService.baseUrl,
-        }).then((diffs) => {
-          expect(diffs).toEqual(Diffs.body);
-        });
-      });
-    });
-  },
-);
-/* eslint-enable @gitlab/require-i18n-strings */
diff --git a/spec/contracts/consumer/specs/discussions.spec.js b/spec/contracts/consumer/specs/discussions.spec.js
deleted file mode 100644
index 2a5d0ba6267a8..0000000000000
--- a/spec/contracts/consumer/specs/discussions.spec.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/* eslint-disable @gitlab/require-i18n-strings */
-
-import { pactWith } from 'jest-pact';
-
-import { Discussions } from '../fixtures/discussions.fixture';
-import { getDiscussions } from '../endpoints/merge_requests';
-
-pactWith(
-  {
-    consumer: 'Merge Request Page',
-    provider: 'Merge Request Discussions Endpoint',
-    log: '../logs/consumer.log',
-    dir: '../contracts',
-  },
-
-  (provider) => {
-    describe('Discussions Endpoint', () => {
-      beforeEach(() => {
-        const interaction = {
-          state: 'a merge request with discussions exists',
-          ...Discussions.request,
-          willRespondWith: Discussions.success,
-        };
-        provider.addInteraction(interaction);
-      });
-
-      it('return a successful body', () => {
-        return getDiscussions({
-          url: provider.mockService.baseUrl,
-        }).then((discussions) => {
-          expect(discussions).toEqual(Discussions.body);
-        });
-      });
-    });
-  },
-);
-/* eslint-enable @gitlab/require-i18n-strings */
diff --git a/spec/contracts/consumer/specs/metadata.spec.js b/spec/contracts/consumer/specs/metadata.spec.js
deleted file mode 100644
index fc082cb6a4668..0000000000000
--- a/spec/contracts/consumer/specs/metadata.spec.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/* eslint-disable @gitlab/require-i18n-strings */
-
-import { pactWith } from 'jest-pact';
-
-import { Metadata } from '../fixtures/metadata.fixture';
-import { getMetadata } from '../endpoints/merge_requests';
-
-pactWith(
-  {
-    consumer: 'Merge Request Page',
-    provider: 'Merge Request Metadata Endpoint',
-    log: '../logs/consumer.log',
-    dir: '../contracts',
-  },
-
-  (provider) => {
-    describe('Metadata Endpoint', () => {
-      beforeEach(() => {
-        const interaction = {
-          state: 'a merge request exists',
-          ...Metadata.request,
-          willRespondWith: Metadata.success,
-        };
-        provider.addInteraction(interaction);
-      });
-
-      it('return a successful body', () => {
-        return getMetadata({
-          url: provider.mockService.baseUrl,
-        }).then((metadata) => {
-          expect(metadata).toEqual(Metadata.body);
-        });
-      });
-    });
-  },
-);
-/* eslint-enable @gitlab/require-i18n-strings */
diff --git a/spec/contracts/consumer/specs/project/merge_request/show.spec.js b/spec/contracts/consumer/specs/project/merge_request/show.spec.js
new file mode 100644
index 0000000000000..8c6e029cb12da
--- /dev/null
+++ b/spec/contracts/consumer/specs/project/merge_request/show.spec.js
@@ -0,0 +1,112 @@
+/* eslint-disable @gitlab/require-i18n-strings */
+
+import { pactWith } from 'jest-pact';
+
+import { DiffsBatch } from '../../../fixtures/project/merge_request/diffs_batch.fixture';
+import { Discussions } from '../../../fixtures/project/merge_request/discussions.fixture';
+import { DiffsMetadata } from '../../../fixtures/project/merge_request/diffs_metadata.fixture';
+import {
+  getDiffsBatch,
+  getDiffsMetadata,
+  getDiscussions,
+} from '../../../endpoints/project/merge_requests';
+
+const CONSUMER_NAME = 'MergeRequest#show';
+const CONSUMER_LOG = '../logs/consumer.log';
+const CONTRACT_DIR = '../contracts/project/merge_request/show';
+const DIFFS_BATCH_PROVIDER_NAME = 'Merge Request Diffs Batch Endpoint';
+const DISCUSSIONS_PROVIDER_NAME = 'Merge Request Discussions Endpoint';
+const DIFFS_METADATA_PROVIDER_NAME = 'Merge Request Diffs Metadata Endpoint';
+
+// API endpoint: /merge_requests/:id/diffs_batch.json
+pactWith(
+  {
+    consumer: CONSUMER_NAME,
+    provider: DIFFS_BATCH_PROVIDER_NAME,
+    log: CONSUMER_LOG,
+    dir: CONTRACT_DIR,
+  },
+
+  (provider) => {
+    describe(DIFFS_BATCH_PROVIDER_NAME, () => {
+      beforeEach(() => {
+        const interaction = {
+          state: 'a merge request with diffs exists',
+          ...DiffsBatch.request,
+          willRespondWith: DiffsBatch.success,
+        };
+        provider.addInteraction(interaction);
+      });
+
+      it('returns a successful body', () => {
+        return getDiffsBatch({
+          url: provider.mockService.baseUrl,
+        }).then((diffsBatch) => {
+          expect(diffsBatch).toEqual(DiffsBatch.body);
+        });
+      });
+    });
+  },
+);
+
+pactWith(
+  {
+    consumer: CONSUMER_NAME,
+    provider: DISCUSSIONS_PROVIDER_NAME,
+    log: CONSUMER_LOG,
+    dir: CONTRACT_DIR,
+  },
+
+  (provider) => {
+    describe(DISCUSSIONS_PROVIDER_NAME, () => {
+      beforeEach(() => {
+        const interaction = {
+          state: 'a merge request with discussions exists',
+          ...Discussions.request,
+          willRespondWith: Discussions.success,
+        };
+        provider.addInteraction(interaction);
+      });
+
+      it('return a successful body', () => {
+        return getDiscussions({
+          url: provider.mockService.baseUrl,
+        }).then((discussions) => {
+          expect(discussions).toEqual(Discussions.body);
+        });
+      });
+    });
+  },
+);
+
+pactWith(
+  {
+    consumer: CONSUMER_NAME,
+    provider: DIFFS_METADATA_PROVIDER_NAME,
+    log: CONSUMER_LOG,
+    dir: CONTRACT_DIR,
+  },
+
+  (provider) => {
+    describe(DIFFS_METADATA_PROVIDER_NAME, () => {
+      beforeEach(() => {
+        const interaction = {
+          state: 'a merge request exists',
+          ...DiffsMetadata.request,
+          willRespondWith: DiffsMetadata.success,
+        };
+        provider.addInteraction(interaction);
+      });
+
+      it('return a successful body', () => {
+        return getDiffsMetadata({
+          url: provider.mockService.baseUrl,
+        }).then((diffsMetadata) => {
+          expect(diffsMetadata).toEqual(DiffsMetadata.body);
+        });
+      });
+    });
+  },
+);
+
+/* eslint-enable @gitlab/require-i18n-strings */
diff --git a/spec/contracts/contracts/merge_request_page-merge_request_diffs_endpoint.json b/spec/contracts/contracts/project/merge_request/show/mergerequest#show-merge_request_diffs_batch_endpoint.json
similarity index 98%
rename from spec/contracts/contracts/merge_request_page-merge_request_diffs_endpoint.json
rename to spec/contracts/contracts/project/merge_request/show/mergerequest#show-merge_request_diffs_batch_endpoint.json
index 2f097d8eb24ff..3fa13766766e3 100644
--- a/spec/contracts/contracts/merge_request_page-merge_request_diffs_endpoint.json
+++ b/spec/contracts/contracts/project/merge_request/show/mergerequest#show-merge_request_diffs_batch_endpoint.json
@@ -1,9 +1,9 @@
 {
   "consumer": {
-    "name": "Merge Request Page"
+    "name": "MergeRequest#show"
   },
   "provider": {
-    "name": "Merge Request Diffs Endpoint"
+    "name": "Merge Request Diffs Batch Endpoint"
   },
   "interactions": [
     {
@@ -226,4 +226,4 @@
       "version": "2.0.0"
     }
   }
-}
+}
\ No newline at end of file
diff --git a/spec/contracts/contracts/merge_request_page-merge_request_metadata_endpoint.json b/spec/contracts/contracts/project/merge_request/show/mergerequest#show-merge_request_diffs_metadata_endpoint.json
similarity index 98%
rename from spec/contracts/contracts/merge_request_page-merge_request_metadata_endpoint.json
rename to spec/contracts/contracts/project/merge_request/show/mergerequest#show-merge_request_diffs_metadata_endpoint.json
index eb22b7d2e3c5c..b98a0127e545e 100644
--- a/spec/contracts/contracts/merge_request_page-merge_request_metadata_endpoint.json
+++ b/spec/contracts/contracts/project/merge_request/show/mergerequest#show-merge_request_diffs_metadata_endpoint.json
@@ -1,13 +1,13 @@
 {
   "consumer": {
-    "name": "Merge Request Page"
+    "name": "MergeRequest#show"
   },
   "provider": {
-    "name": "Merge Request Metadata Endpoint"
+    "name": "Merge Request Diffs Metadata Endpoint"
   },
   "interactions": [
     {
-      "description": "a request for Metadata",
+      "description": "a request for Diffs Metadata",
       "providerState": "a merge request exists",
       "request": {
         "method": "GET",
@@ -220,4 +220,4 @@
       "version": "2.0.0"
     }
   }
-}
+}
\ No newline at end of file
diff --git a/spec/contracts/contracts/merge_request_page-merge_request_discussions_endpoint.json b/spec/contracts/contracts/project/merge_request/show/mergerequest#show-merge_request_discussions_endpoint.json
similarity index 99%
rename from spec/contracts/contracts/merge_request_page-merge_request_discussions_endpoint.json
rename to spec/contracts/contracts/project/merge_request/show/mergerequest#show-merge_request_discussions_endpoint.json
index 819d95276b38e..ecaf9c123afcd 100644
--- a/spec/contracts/contracts/merge_request_page-merge_request_discussions_endpoint.json
+++ b/spec/contracts/contracts/project/merge_request/show/mergerequest#show-merge_request_discussions_endpoint.json
@@ -1,6 +1,6 @@
 {
   "consumer": {
-    "name": "Merge Request Page"
+    "name": "MergeRequest#show"
   },
   "provider": {
     "name": "Merge Request Discussions Endpoint"
@@ -233,4 +233,4 @@
       "version": "2.0.0"
     }
   }
-}
+}
\ No newline at end of file
diff --git a/spec/contracts/provider/pact_helpers/project/merge_request/diffs_batch_helper.rb b/spec/contracts/provider/pact_helpers/project/merge_request/diffs_batch_helper.rb
new file mode 100644
index 0000000000000..7d1fbe91e86ab
--- /dev/null
+++ b/spec/contracts/provider/pact_helpers/project/merge_request/diffs_batch_helper.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+require_relative '../../../spec_helper'
+require_relative '../../../states/project/merge_request/diffs_batch_state'
+
+module Provider
+  module DiffsBatchHelper
+    Pact.service_provider "Merge Request Diffs Batch Endpoint" do
+      app { Environments::Test.app }
+
+      honours_pact_with 'MergeRequest#show' do
+        pact_uri '../contracts/project/merge_request/show/mergerequest#show-merge_request_diffs_batch_endpoint.json'
+      end
+    end
+  end
+end
diff --git a/spec/contracts/provider/pact_helpers/project/merge_request/diffs_metadata_helper.rb b/spec/contracts/provider/pact_helpers/project/merge_request/diffs_metadata_helper.rb
new file mode 100644
index 0000000000000..5f0c58d18d4fd
--- /dev/null
+++ b/spec/contracts/provider/pact_helpers/project/merge_request/diffs_metadata_helper.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+require_relative '../../../spec_helper'
+require_relative '../../../states/project/merge_request/diffs_metadata_state'
+
+module Provider
+  module DiffsMetadataHelper
+    Pact.service_provider "Merge Request Diffs Metadata Endpoint" do
+      app { Environments::Test.app }
+
+      honours_pact_with 'MergeRequest#show' do
+        pact_uri '../contracts/project/merge_request/show/mergerequest#show-merge_request_diffs_metadata_endpoint.json'
+      end
+    end
+  end
+end
diff --git a/spec/contracts/provider/pact_helpers/project/merge_request/discussions_helper.rb b/spec/contracts/provider/pact_helpers/project/merge_request/discussions_helper.rb
new file mode 100644
index 0000000000000..0f4244ba40abe
--- /dev/null
+++ b/spec/contracts/provider/pact_helpers/project/merge_request/discussions_helper.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+require_relative '../../../spec_helper'
+require_relative '../../../states/project/merge_request/discussions_state'
+
+module Provider
+  module DiscussionsHelper
+    Pact.service_provider "Merge Request Discussions Endpoint" do
+      app { Environments::Test.app }
+
+      honours_pact_with 'MergeRequest#show' do
+        pact_uri '../contracts/project/merge_request/show/mergerequest#show-merge_request_discussions_endpoint.json'
+      end
+    end
+  end
+end
diff --git a/spec/contracts/provider/specs/diffs_helper.rb b/spec/contracts/provider/specs/diffs_helper.rb
deleted file mode 100644
index 24bdd00dbaeb0..0000000000000
--- a/spec/contracts/provider/specs/diffs_helper.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-# frozen_string_literal: true
-
-require_relative '../spec_helper'
-require_relative '../states/diffs_state'
-
-module Provider
-  module DiffsHelper
-    Pact.service_provider "Merge Request Diffs Endpoint" do
-      app { Environments::Test.app }
-
-      honours_pact_with 'Merge Request Page' do
-        pact_uri '../contracts/merge_request_page-merge_request_diffs_endpoint.json'
-      end
-    end
-  end
-end
diff --git a/spec/contracts/provider/specs/discussions_helper.rb b/spec/contracts/provider/specs/discussions_helper.rb
deleted file mode 100644
index 135ccf48276f5..0000000000000
--- a/spec/contracts/provider/specs/discussions_helper.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-# frozen_string_literal: true
-
-require_relative '../spec_helper'
-require_relative '../states/discussions_state'
-
-module Provider
-  module DiscussionsHelper
-    Pact.service_provider "Merge Request Discussions Endpoint" do
-      app { Environments::Test.app }
-
-      honours_pact_with 'Merge Request Page' do
-        pact_uri '../contracts/merge_request_page-merge_request_discussions_endpoint.json'
-      end
-    end
-  end
-end
diff --git a/spec/contracts/provider/specs/metadata_helper.rb b/spec/contracts/provider/specs/metadata_helper.rb
deleted file mode 100644
index e73b993a31a03..0000000000000
--- a/spec/contracts/provider/specs/metadata_helper.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-# frozen_string_literal: true
-
-require_relative '../spec_helper'
-require_relative '../states/metadata_state'
-
-module Provider
-  module MetadataHelper
-    Pact.service_provider "Merge Request Metadata Endpoint" do
-      app { Environments::Test.app }
-
-      honours_pact_with 'Merge Request Page' do
-        pact_uri '../contracts/merge_request_page-merge_request_metadata_endpoint.json'
-      end
-    end
-  end
-end
diff --git a/spec/contracts/provider/states/diffs_state.rb b/spec/contracts/provider/states/project/merge_request/diffs_batch_state.rb
similarity index 93%
rename from spec/contracts/provider/states/diffs_state.rb
rename to spec/contracts/provider/states/project/merge_request/diffs_batch_state.rb
index d959cde5f5ec8..ac20c17c18799 100644
--- a/spec/contracts/provider/states/diffs_state.rb
+++ b/spec/contracts/provider/states/project/merge_request/diffs_batch_state.rb
@@ -1,6 +1,6 @@
 # frozen_string_literal: true
 
-Pact.provider_states_for "Merge Request Page" do
+Pact.provider_states_for "MergeRequest#show" do
   provider_state "a merge request with diffs exists" do
     set_up do
       user = User.find_by(name: Provider::UsersHelper::CONTRACT_USER_NAME)
diff --git a/spec/contracts/provider/states/metadata_state.rb b/spec/contracts/provider/states/project/merge_request/diffs_metadata_state.rb
similarity index 92%
rename from spec/contracts/provider/states/metadata_state.rb
rename to spec/contracts/provider/states/project/merge_request/diffs_metadata_state.rb
index 59b290ce2fed0..8754232690cff 100644
--- a/spec/contracts/provider/states/metadata_state.rb
+++ b/spec/contracts/provider/states/project/merge_request/diffs_metadata_state.rb
@@ -1,6 +1,6 @@
 # frozen_string_literal: true
 
-Pact.provider_states_for "Merge Request Page" do
+Pact.provider_states_for "MergeRequest#show" do
   provider_state "a merge request exists" do
     set_up do
       user = User.find_by(name: Provider::UsersHelper::CONTRACT_USER_NAME)
diff --git a/spec/contracts/provider/states/discussions_state.rb b/spec/contracts/provider/states/project/merge_request/discussions_state.rb
similarity index 92%
rename from spec/contracts/provider/states/discussions_state.rb
rename to spec/contracts/provider/states/project/merge_request/discussions_state.rb
index ddbcf80f2c820..2d64f85eedfd1 100644
--- a/spec/contracts/provider/states/discussions_state.rb
+++ b/spec/contracts/provider/states/project/merge_request/discussions_state.rb
@@ -1,6 +1,6 @@
 # frozen_string_literal: true
 
-Pact.provider_states_for "Merge Request Page" do
+Pact.provider_states_for "MergeRequest#show" do
   provider_state "a merge request with discussions exists" do
     set_up do
       user = User.find_by(name: Provider::UsersHelper::CONTRACT_USER_NAME)
-- 
GitLab