diff --git a/.eslintrc.yml b/.eslintrc.yml
index 22dae35187e2f354799d1c965c7d2a92014583a3..5e6755edaa56f4d89a7d47bae4a9f37e0a7b0643 100644
--- a/.eslintrc.yml
+++ b/.eslintrc.yml
@@ -177,3 +177,7 @@ overrides:
       '@graphql-eslint/no-unused-variables': error
       '@graphql-eslint/no-unused-fragments': error
       '@graphql-eslint/no-duplicate-fields': error
+  - files:
+    - 'spec/contracts/consumer/**/*'
+    rules:
+      '@gitlab/require-i18n-strings': off
diff --git a/lib/tasks/contracts/merge_requests.rake b/lib/tasks/contracts/merge_requests.rake
index 2fdd2beb4ee8c4d8dda7afa9d0f4ba01a638454c..fdcea8046404158a0108f4af5d152a6862002e5d 100644
--- a/lib/tasks/contracts/merge_requests.rake
+++ b/lib/tasks/contracts/merge_requests.rake
@@ -4,31 +4,30 @@ return if Rails.env.production?
 
 require 'pact/tasks/verification_task'
 
-contracts = File.expand_path('../../../spec/contracts', __dir__)
-provider = File.expand_path('provider', contracts)
+contracts = File.expand_path('../../../spec/contracts/contracts/project/merge_request', __dir__)
+provider = File.expand_path('../../../spec/contracts/provider', __dir__)
 
 # rubocop:disable Rails/RakeEnvironment
 namespace :contracts do
   namespace :merge_requests do
     Pact::VerificationTask.new(:diffs_batch) do |pact|
       pact.uri(
-        "#{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"
+        "#{contracts}/show/mergerequest#show-merge_request_diffs_batch_endpoint.json",
+        pact_helper: "#{provider}/pact_helpers/project/merge_request/show/diffs_batch_helper.rb"
       )
     end
 
     Pact::VerificationTask.new(:diffs_metadata) do |pact|
       pact.uri(
-        "#{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"
+        "#{contracts}/show/mergerequest#show-merge_request_diffs_metadata_endpoint.json",
+        pact_helper: "#{provider}/pact_helpers/project/merge_request/show/diffs_metadata_helper.rb"
       )
     end
 
     Pact::VerificationTask.new(:discussions) do |pact|
       pact.uri(
-        "#{contracts}/contracts/project/merge_request/show/mergerequest#show-merge_request_discussions_endpoint.json",
-        pact_helper: "#{provider}/pact_helpers/project/merge_request/discussions_helper.rb"
+        "#{contracts}/show/mergerequest#show-merge_request_discussions_endpoint.json",
+        pact_helper: "#{provider}/pact_helpers/project/merge_request/show/discussions_helper.rb"
       )
     end
 
diff --git a/lib/tasks/contracts/pipeline_schedules.rake b/lib/tasks/contracts/pipeline_schedules.rake
index b6d331448e2733fdd05452076f060abb8ad27e01..136577730c8dc56c9bdc7f64d790e2799b80d527 100644
--- a/lib/tasks/contracts/pipeline_schedules.rake
+++ b/lib/tasks/contracts/pipeline_schedules.rake
@@ -5,7 +5,7 @@ return if Rails.env.production?
 require 'pact/tasks/verification_task'
 
 contracts = File.expand_path('../../../spec/contracts/contracts/project/pipeline_schedule', __dir__)
-provider = File.expand_path('../../../provider', contracts)
+provider = File.expand_path('../../../spec/contracts/provider', __dir__)
 
 # rubocop:disable Rails/RakeEnvironment
 namespace :contracts do
diff --git a/lib/tasks/contracts/pipelines.rake b/lib/tasks/contracts/pipelines.rake
index 759558222425e3d8a797f51d0a60d4da96a74a4d..75d381e1f8d72bf9cf4994997e4c6f7f9c24a494 100644
--- a/lib/tasks/contracts/pipelines.rake
+++ b/lib/tasks/contracts/pipelines.rake
@@ -4,36 +4,36 @@ return if Rails.env.production?
 
 require 'pact/tasks/verification_task'
 
-contracts = File.expand_path('../../../spec/contracts', __dir__)
-provider = File.expand_path('provider', contracts)
+contracts = File.expand_path('../../../spec/contracts/contracts/project/pipeline', __dir__)
+provider = File.expand_path('../../../spec/contracts/provider', __dir__)
 
 # rubocop:disable Rails/RakeEnvironment
 namespace :contracts do
   namespace :pipelines do
     Pact::VerificationTask.new(:create_a_new_pipeline) do |pact|
       pact.uri(
-        "#{contracts}/contracts/project/pipeline/new/pipelines#new-post_create_a_new_pipeline.json",
-        pact_helper: "#{provider}/pact_helpers/project/pipeline/create_a_new_pipeline_helper.rb"
+        "#{contracts}/new/pipelines#new-post_create_a_new_pipeline.json",
+        pact_helper: "#{provider}/pact_helpers/project/pipeline/index/create_a_new_pipeline_helper.rb"
       )
     end
 
     Pact::VerificationTask.new(:get_list_project_pipelines) do |pact|
       pact.uri(
-        "#{contracts}/contracts/project/pipeline/index/pipelines#index-get_list_project_pipelines.json",
-        pact_helper: "#{provider}/pact_helpers/project/pipeline/get_list_project_pipelines_helper.rb"
+        "#{contracts}/index/pipelines#index-get_list_project_pipelines.json",
+        pact_helper: "#{provider}/pact_helpers/project/pipeline/index/get_list_project_pipelines_helper.rb"
       )
     end
 
     Pact::VerificationTask.new(:get_pipeline_header_data) do |pact|
       pact.uri(
-        "#{contracts}/contracts/project/pipeline/show/pipelines#show-get_pipeline_header_data.json",
+        "#{contracts}/show/pipelines#show-get_pipeline_header_data.json",
         pact_helper: "#{provider}/pact_helpers/project/pipeline/show/get_pipeline_header_data_helper.rb"
       )
     end
 
     Pact::VerificationTask.new(:delete_pipeline) do |pact|
       pact.uri(
-        "#{contracts}/contracts/project/pipeline/show/pipelines#show-delete_pipeline.json",
+        "#{contracts}/show/pipelines#show-delete_pipeline.json",
         pact_helper: "#{provider}/pact_helpers/project/pipeline/show/delete_pipeline_helper.rb"
       )
     end
diff --git a/spec/contracts/consumer/endpoints/project/pipelines.js b/spec/contracts/consumer/endpoints/project/pipelines.js
deleted file mode 100644
index 33758dee75b9415ab5c83ae683129cef668a8782..0000000000000000000000000000000000000000
--- a/spec/contracts/consumer/endpoints/project/pipelines.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import { request } from 'axios';
-
-export function getProjectPipelines(endpoint) {
-  const { url } = endpoint;
-
-  return request({
-    method: 'GET',
-    baseURL: url,
-    url: '/gitlab-org/gitlab-qa/-/pipelines.json',
-    headers: { Accept: '*/*' },
-    params: {
-      scope: 'all',
-      page: 1,
-    },
-  }).then((response) => response.data);
-}
diff --git a/spec/contracts/consumer/fixtures/project/merge_request/diffs_batch.fixture.js b/spec/contracts/consumer/fixtures/project/merge_request/diffs_batch.fixture.js
index b53e4bb335db6431d7e0f7abfe93997515ab3973..673aad721b3be46aba3530b047c6419b9b1ecdc2 100644
--- a/spec/contracts/consumer/fixtures/project/merge_request/diffs_batch.fixture.js
+++ b/spec/contracts/consumer/fixtures/project/merge_request/diffs_batch.fixture.js
@@ -1,5 +1,3 @@
-/* eslint-disable @gitlab/require-i18n-strings */
-
 import { Matchers } from '@pact-foundation/pact';
 
 const body = {
@@ -73,8 +71,12 @@ const DiffsBatch = {
     body,
   },
 
-  request: {
+  scenario: {
+    state: 'a merge request with diffs exists',
     uponReceiving: 'a request for diff lines',
+  },
+
+  request: {
     withRequest: {
       method: 'GET',
       path: '/gitlab-org/gitlab-qa/-/merge_requests/1/diffs_batch.json',
@@ -87,5 +89,3 @@ const DiffsBatch = {
 };
 
 export { DiffsBatch };
-
-/* eslint-enable @gitlab/require-i18n-strings */
diff --git a/spec/contracts/consumer/fixtures/project/merge_request/diffs_metadata.fixture.js b/spec/contracts/consumer/fixtures/project/merge_request/diffs_metadata.fixture.js
index 39dbcf78ee70b62035ca39351d9515326f955907..2fee4a02023b1881cf7bcc60c7c561c6e4dfadb9 100644
--- a/spec/contracts/consumer/fixtures/project/merge_request/diffs_metadata.fixture.js
+++ b/spec/contracts/consumer/fixtures/project/merge_request/diffs_metadata.fixture.js
@@ -1,5 +1,3 @@
-/* eslint-disable @gitlab/require-i18n-strings */
-
 import { Matchers } from '@pact-foundation/pact';
 
 const body = {
@@ -81,8 +79,12 @@ const DiffsMetadata = {
     body,
   },
 
+  scenario: {
+    state: 'a merge request exists',
+    uponReceiving: 'a request for diffs metadata',
+  },
+
   request: {
-    uponReceiving: 'a request for Diffs Metadata',
     withRequest: {
       method: 'GET',
       path: '/gitlab-org/gitlab-qa/-/merge_requests/1/diffs_metadata.json',
@@ -94,5 +96,3 @@ const DiffsMetadata = {
 };
 
 export { DiffsMetadata };
-
-/* eslint-enable @gitlab/require-i18n-strings */
diff --git a/spec/contracts/consumer/fixtures/project/merge_request/discussions.fixture.js b/spec/contracts/consumer/fixtures/project/merge_request/discussions.fixture.js
index af0962a01cb97d096c781d3d2ee5f18f06d49867..8c392395e1c741e25de5c36918b27d3618be0342 100644
--- a/spec/contracts/consumer/fixtures/project/merge_request/discussions.fixture.js
+++ b/spec/contracts/consumer/fixtures/project/merge_request/discussions.fixture.js
@@ -1,5 +1,3 @@
-/* eslint-disable @gitlab/require-i18n-strings */
-
 import { Matchers } from '@pact-foundation/pact';
 
 const body = Matchers.eachLike({
@@ -70,8 +68,12 @@ const Discussions = {
     body,
   },
 
-  request: {
+  scenario: {
+    state: 'a merge request with discussions exists',
     uponReceiving: 'a request for discussions',
+  },
+
+  request: {
     withRequest: {
       method: 'GET',
       path: '/gitlab-org/gitlab-qa/-/merge_requests/1/discussions.json',
@@ -83,5 +85,3 @@ const Discussions = {
 };
 
 export { Discussions };
-
-/* eslint-enable @gitlab/require-i18n-strings */
diff --git a/spec/contracts/consumer/fixtures/project/pipeline/create_a_new_pipeline.fixture.js b/spec/contracts/consumer/fixtures/project/pipeline/create_a_new_pipeline.fixture.js
index a732189e6fbe67fd9424c4c32f8dedeb1140050e..68063d2fb0c8d176c7f4862fc3ee85ce5ca1f41a 100644
--- a/spec/contracts/consumer/fixtures/project/pipeline/create_a_new_pipeline.fixture.js
+++ b/spec/contracts/consumer/fixtures/project/pipeline/create_a_new_pipeline.fixture.js
@@ -1,5 +1,3 @@
-/* eslint-disable @gitlab/require-i18n-strings */
-
 import { Matchers } from '@pact-foundation/pact';
 import { REDIRECT_HTML } from '../../../helpers/common_regex_patterns';
 
@@ -39,5 +37,3 @@ const NewProjectPipeline = {
 };
 
 export { NewProjectPipeline };
-
-/* eslint-enable @gitlab/require-i18n-strings */
diff --git a/spec/contracts/consumer/fixtures/project/pipeline/delete_pipeline.fixture.js b/spec/contracts/consumer/fixtures/project/pipeline/delete_pipeline.fixture.js
index 4dbb694064bbc67711cb936a950e589fa361472f..2e3e7355b99d030e1f929435bfd73cdb3d7f449c 100644
--- a/spec/contracts/consumer/fixtures/project/pipeline/delete_pipeline.fixture.js
+++ b/spec/contracts/consumer/fixtures/project/pipeline/delete_pipeline.fixture.js
@@ -6,6 +6,11 @@ const DeletePipeline = {
     },
   },
 
+  scenario: {
+    state: 'a pipeline for a project exists',
+    uponReceiving: 'a request to delete the pipeline',
+  },
+
   request: {
     method: 'POST',
     path: '/api/graphql',
diff --git a/spec/contracts/consumer/fixtures/project/pipeline/get_list_project_pipelines.fixture.js b/spec/contracts/consumer/fixtures/project/pipeline/get_list_project_pipelines.fixture.js
index 8a7663325b98904820f3831649fcbd995bcee856..a982e927572776e8b857d2410246a680e6da6036 100644
--- a/spec/contracts/consumer/fixtures/project/pipeline/get_list_project_pipelines.fixture.js
+++ b/spec/contracts/consumer/fixtures/project/pipeline/get_list_project_pipelines.fixture.js
@@ -1,5 +1,3 @@
-/* eslint-disable @gitlab/require-i18n-strings */
-
 import { Matchers } from '@pact-foundation/pact';
 import {
   URL,
@@ -225,8 +223,12 @@ const ProjectPipelines = {
     body,
   },
 
-  request: {
+  scenario: {
+    state: 'a few pipelines for a project exists',
     uponReceiving: 'a request for a list of project pipelines',
+  },
+
+  request: {
     withRequest: {
       method: 'GET',
       path: '/gitlab-org/gitlab-qa/-/pipelines.json',
@@ -239,5 +241,3 @@ const ProjectPipelines = {
 };
 
 export { ProjectPipelines };
-
-/* eslint-enable @gitlab/require-i18n-strings */
diff --git a/spec/contracts/consumer/fixtures/project/pipeline/get_pipeline_header_data.fixture.js b/spec/contracts/consumer/fixtures/project/pipeline/get_pipeline_header_data.fixture.js
index f51ed9c2c741f6c83dc9398eb02fd58812464a68..b14a230d2e0bfe3e7843dcf6e3c8a3cc6049da35 100644
--- a/spec/contracts/consumer/fixtures/project/pipeline/get_pipeline_header_data.fixture.js
+++ b/spec/contracts/consumer/fixtures/project/pipeline/get_pipeline_header_data.fixture.js
@@ -1,5 +1,3 @@
-/* eslint-disable @gitlab/require-i18n-strings */
-
 import { Matchers } from '@pact-foundation/pact';
 import {
   JOB_STATUSES,
@@ -83,6 +81,11 @@ const PipelineHeaderData = {
     body,
   },
 
+  scenario: {
+    state: 'a pipeline for a project exists',
+    uponReceiving: 'a request for the pipeline header data',
+  },
+
   request: {
     method: 'POST',
     path: '/api/graphql',
@@ -95,5 +98,3 @@ const PipelineHeaderData = {
 };
 
 export { PipelineHeaderData };
-
-/* eslint-enable @gitlab/require-i18n-strings */
diff --git a/spec/contracts/consumer/fixtures/project/pipeline_schedule/update_pipeline_schedule.fixture.js b/spec/contracts/consumer/fixtures/project/pipeline_schedule/update_pipeline_schedule.fixture.js
index acdc94d5c6e9fed7a8090b6a3a4df5f8b3f00128..acfab14851a75feb4c42d0e1e3bcb49d867af850 100644
--- a/spec/contracts/consumer/fixtures/project/pipeline_schedule/update_pipeline_schedule.fixture.js
+++ b/spec/contracts/consumer/fixtures/project/pipeline_schedule/update_pipeline_schedule.fixture.js
@@ -1,5 +1,3 @@
-/* eslint-disable @gitlab/require-i18n-strings */
-
 import { Matchers } from '@pact-foundation/pact';
 import { REDIRECT_HTML } from '../../../helpers/common_regex_patterns';
 
@@ -44,5 +42,3 @@ const UpdatePipelineSchedule = {
 };
 
 export { UpdatePipelineSchedule };
-
-/* eslint-enable @gitlab/require-i18n-strings */
diff --git a/spec/contracts/consumer/endpoints/project/merge_requests.js b/spec/contracts/consumer/resources/api/project/merge_requests.js
similarity index 73%
rename from spec/contracts/consumer/endpoints/project/merge_requests.js
rename to spec/contracts/consumer/resources/api/project/merge_requests.js
index 38773e5fb109ad0d8edaa97e60eae606ebf594c6..e52743cede226d1c9f0f09459914f3f330f0e1a7 100644
--- a/spec/contracts/consumer/endpoints/project/merge_requests.js
+++ b/spec/contracts/consumer/resources/api/project/merge_requests.js
@@ -1,9 +1,9 @@
-import { request } from 'axios';
+import axios from 'axios';
 
-export function getDiffsMetadata(endpoint) {
+export async function getDiffsMetadata(endpoint) {
   const { url } = endpoint;
 
-  return request({
+  return axios({
     method: 'GET',
     baseURL: url,
     url: '/gitlab-org/gitlab-qa/-/merge_requests/1/diffs_metadata.json',
@@ -11,10 +11,10 @@ export function getDiffsMetadata(endpoint) {
   }).then((response) => response.data);
 }
 
-export function getDiscussions(endpoint) {
+export async function getDiscussions(endpoint) {
   const { url } = endpoint;
 
-  return request({
+  return axios({
     method: 'GET',
     baseURL: url,
     url: '/gitlab-org/gitlab-qa/-/merge_requests/1/discussions.json',
@@ -22,10 +22,10 @@ export function getDiscussions(endpoint) {
   }).then((response) => response.data);
 }
 
-export function getDiffsBatch(endpoint) {
+export async function getDiffsBatch(endpoint) {
   const { url } = endpoint;
 
-  return request({
+  return axios({
     method: 'GET',
     baseURL: url,
     url: '/gitlab-org/gitlab-qa/-/merge_requests/1/diffs_batch.json?page=0',
diff --git a/spec/contracts/consumer/resources/api/project/pipelines.js b/spec/contracts/consumer/resources/api/project/pipelines.js
index f58a7a5fb0f12981dc0b0adc77cff32c3ceeeacb..8c6f5199666bceeec3b278c2c4e069424f669a54 100644
--- a/spec/contracts/consumer/resources/api/project/pipelines.js
+++ b/spec/contracts/consumer/resources/api/project/pipelines.js
@@ -1,5 +1,20 @@
 import axios from 'axios';
 
+export async function getProjectPipelines(endpoint) {
+  const { url } = endpoint;
+
+  return axios({
+    method: 'GET',
+    baseURL: url,
+    url: '/gitlab-org/gitlab-qa/-/pipelines.json',
+    headers: { Accept: '*/*' },
+    params: {
+      scope: 'all',
+      page: 1,
+    },
+  }).then((response) => response.data);
+}
+
 export async function postProjectPipelines(endpoint) {
   const { url } = endpoint;
 
diff --git a/spec/contracts/consumer/specs/project/merge_request/show.spec.js b/spec/contracts/consumer/specs/project/merge_request/show.spec.js
index 8c6e029cb12da9a012452978c1c84aa39b4a5c63..4183e19435ae31987e9605aac07eefe250e5b9f4 100644
--- a/spec/contracts/consumer/specs/project/merge_request/show.spec.js
+++ b/spec/contracts/consumer/specs/project/merge_request/show.spec.js
@@ -1,5 +1,3 @@
-/* eslint-disable @gitlab/require-i18n-strings */
-
 import { pactWith } from 'jest-pact';
 
 import { DiffsBatch } from '../../../fixtures/project/merge_request/diffs_batch.fixture';
@@ -9,7 +7,7 @@ import {
   getDiffsBatch,
   getDiffsMetadata,
   getDiscussions,
-} from '../../../endpoints/project/merge_requests';
+} from '../../../resources/api/project/merge_requests';
 
 const CONSUMER_NAME = 'MergeRequest#show';
 const CONSUMER_LOG = '../logs/consumer.log';
@@ -31,19 +29,19 @@ pactWith(
     describe(DIFFS_BATCH_PROVIDER_NAME, () => {
       beforeEach(() => {
         const interaction = {
-          state: 'a merge request with diffs exists',
+          ...DiffsBatch.scenario,
           ...DiffsBatch.request,
           willRespondWith: DiffsBatch.success,
         };
         provider.addInteraction(interaction);
       });
 
-      it('returns a successful body', () => {
-        return getDiffsBatch({
+      it('returns a successful body', async () => {
+        const diffsBatch = await getDiffsBatch({
           url: provider.mockService.baseUrl,
-        }).then((diffsBatch) => {
-          expect(diffsBatch).toEqual(DiffsBatch.body);
         });
+
+        expect(diffsBatch).toEqual(DiffsBatch.body);
       });
     });
   },
@@ -61,19 +59,19 @@ pactWith(
     describe(DISCUSSIONS_PROVIDER_NAME, () => {
       beforeEach(() => {
         const interaction = {
-          state: 'a merge request with discussions exists',
+          ...Discussions.scenario,
           ...Discussions.request,
           willRespondWith: Discussions.success,
         };
         provider.addInteraction(interaction);
       });
 
-      it('return a successful body', () => {
-        return getDiscussions({
+      it('return a successful body', async () => {
+        const discussions = await getDiscussions({
           url: provider.mockService.baseUrl,
-        }).then((discussions) => {
-          expect(discussions).toEqual(Discussions.body);
         });
+
+        expect(discussions).toEqual(Discussions.body);
       });
     });
   },
@@ -91,22 +89,20 @@ pactWith(
     describe(DIFFS_METADATA_PROVIDER_NAME, () => {
       beforeEach(() => {
         const interaction = {
-          state: 'a merge request exists',
+          ...DiffsMetadata.scenario,
           ...DiffsMetadata.request,
           willRespondWith: DiffsMetadata.success,
         };
         provider.addInteraction(interaction);
       });
 
-      it('return a successful body', () => {
-        return getDiffsMetadata({
+      it('return a successful body', async () => {
+        const diffsMetadata = await getDiffsMetadata({
           url: provider.mockService.baseUrl,
-        }).then((diffsMetadata) => {
-          expect(diffsMetadata).toEqual(DiffsMetadata.body);
         });
+
+        expect(diffsMetadata).toEqual(DiffsMetadata.body);
       });
     });
   },
 );
-
-/* eslint-enable @gitlab/require-i18n-strings */
diff --git a/spec/contracts/consumer/specs/project/pipeline/index.spec.js b/spec/contracts/consumer/specs/project/pipeline/index.spec.js
index 1c0358a3e28cbfbd7b4ecd6bb1f2ba600eadbe8b..1453435d637aa2a3246ce81c1083e963dc99107e 100644
--- a/spec/contracts/consumer/specs/project/pipeline/index.spec.js
+++ b/spec/contracts/consumer/specs/project/pipeline/index.spec.js
@@ -1,9 +1,7 @@
-/* eslint-disable @gitlab/require-i18n-strings */
-
 import { pactWith } from 'jest-pact';
 
 import { ProjectPipelines } from '../../../fixtures/project/pipeline/get_list_project_pipelines.fixture';
-import { getProjectPipelines } from '../../../endpoints/project/pipelines';
+import { getProjectPipelines } from '../../../resources/api/project/pipelines';
 
 const CONSUMER_NAME = 'Pipelines#index';
 const CONSUMER_LOG = '../logs/consumer.log';
@@ -23,22 +21,20 @@ pactWith(
     describe(PROVIDER_NAME, () => {
       beforeEach(() => {
         const interaction = {
-          state: 'a few pipelines for a project exists',
+          ...ProjectPipelines.scenario,
           ...ProjectPipelines.request,
           willRespondWith: ProjectPipelines.success,
         };
         provider.addInteraction(interaction);
       });
 
-      it('returns a successful body', () => {
-        return getProjectPipelines({
+      it('returns a successful body', async () => {
+        const pipelines = await getProjectPipelines({
           url: provider.mockService.baseUrl,
-        }).then((pipelines) => {
-          expect(pipelines).toEqual(ProjectPipelines.body);
         });
+
+        expect(pipelines).toEqual(ProjectPipelines.body);
       });
     });
   },
 );
-
-/* eslint-enable @gitlab/require-i18n-strings */
diff --git a/spec/contracts/consumer/specs/project/pipeline/new.spec.js b/spec/contracts/consumer/specs/project/pipeline/new.spec.js
index 621b31af52d11ce6f1a556ea035ef28341d3dd66..c3824d5979ed96b4efa0969daeb604401dd2a229 100644
--- a/spec/contracts/consumer/specs/project/pipeline/new.spec.js
+++ b/spec/contracts/consumer/specs/project/pipeline/new.spec.js
@@ -1,5 +1,3 @@
-/* eslint-disable @gitlab/require-i18n-strings */
-
 import { pactWith } from 'jest-pact';
 
 import { NewProjectPipeline } from '../../../fixtures/project/pipeline/create_a_new_pipeline.fixture';
@@ -41,5 +39,3 @@ pactWith(
     });
   },
 );
-
-/* eslint-enable @gitlab/require-i18n-strings */
diff --git a/spec/contracts/consumer/specs/project/pipeline/show.spec.js b/spec/contracts/consumer/specs/project/pipeline/show.spec.js
index 2c5ba964e2edc3e5bb729f9f5fed595dc2f8b296..be6abb78eb50dc50071a6c71bf6f63107cb57680 100644
--- a/spec/contracts/consumer/specs/project/pipeline/show.spec.js
+++ b/spec/contracts/consumer/specs/project/pipeline/show.spec.js
@@ -1,5 +1,3 @@
-/* eslint-disable @gitlab/require-i18n-strings */
-
 import { pactWith } from 'jest-pact';
 import { GraphQLInteraction } from '@pact-foundation/pact';
 
@@ -32,8 +30,8 @@ pactWith(
           'app/assets/javascripts/pipelines/graphql/queries/get_pipeline_header_data.query.graphql',
         );
         const graphqlQuery = new GraphQLInteraction()
-          .given('a pipeline for a project exists')
-          .uponReceiving('a request for the pipeline header data')
+          .given(PipelineHeaderData.scenario.state)
+          .uponReceiving(PipelineHeaderData.scenario.uponReceiving)
           .withQuery(query)
           .withRequest(PipelineHeaderData.request)
           .withVariables(PipelineHeaderData.variables)
@@ -69,8 +67,8 @@ pactWith(
           'app/assets/javascripts/pipelines/graphql/mutations/delete_pipeline.mutation.graphql',
         );
         const graphqlQuery = new GraphQLInteraction()
-          .given('a pipeline for a project exists')
-          .uponReceiving('a request to delete the pipeline')
+          .given(DeletePipeline.scenario.state)
+          .uponReceiving(DeletePipeline.scenario.uponReceiving)
           .withQuery(query)
           .withRequest(DeletePipeline.request)
           .withVariables(DeletePipeline.variables)
@@ -89,5 +87,3 @@ pactWith(
     });
   },
 );
-
-/* eslint-enable @gitlab/require-i18n-strings */
diff --git a/spec/contracts/consumer/specs/project/pipeline_schedule/edit.spec.js b/spec/contracts/consumer/specs/project/pipeline_schedule/edit.spec.js
index 7d89825bcd4f0af4cedbccc4618e547ead17e5d3..117e6754255e36ad667a602e0dd3d04202261adf 100644
--- a/spec/contracts/consumer/specs/project/pipeline_schedule/edit.spec.js
+++ b/spec/contracts/consumer/specs/project/pipeline_schedule/edit.spec.js
@@ -1,5 +1,3 @@
-/* eslint-disable @gitlab/require-i18n-strings */
-
 import { pactWith } from 'jest-pact';
 
 import { UpdatePipelineSchedule } from '../../../fixtures/project/pipeline_schedule/update_pipeline_schedule.fixture';
@@ -41,5 +39,3 @@ pactWith(
     });
   },
 );
-
-/* eslint-enable @gitlab/require-i18n-strings */
diff --git a/spec/contracts/contracts/project/merge_request/show/mergerequest#show-merge_request_diffs_metadata_endpoint.json b/spec/contracts/contracts/project/merge_request/show/mergerequest#show-merge_request_diffs_metadata_endpoint.json
index b98a0127e545edd2248498d172f701f192754d1c..c59a3d55f43dc3c2d493374376e2bd48871a7c1a 100644
--- a/spec/contracts/contracts/project/merge_request/show/mergerequest#show-merge_request_diffs_metadata_endpoint.json
+++ b/spec/contracts/contracts/project/merge_request/show/mergerequest#show-merge_request_diffs_metadata_endpoint.json
@@ -7,7 +7,7 @@
   },
   "interactions": [
     {
-      "description": "a request for Diffs 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/provider/pact_helpers/project/merge_request/diffs_batch_helper.rb b/spec/contracts/provider/pact_helpers/project/merge_request/show/diffs_batch_helper.rb
similarity index 76%
rename from spec/contracts/provider/pact_helpers/project/merge_request/diffs_batch_helper.rb
rename to spec/contracts/provider/pact_helpers/project/merge_request/show/diffs_batch_helper.rb
index 7d1fbe91e86ab34754fe6f43a5a63b09be214cf9..f94ce47b1f3cc9dfd07eaae4dfad5aa183175c3e 100644
--- a/spec/contracts/provider/pact_helpers/project/merge_request/diffs_batch_helper.rb
+++ b/spec/contracts/provider/pact_helpers/project/merge_request/show/diffs_batch_helper.rb
@@ -1,7 +1,7 @@
 # frozen_string_literal: true
 
-require_relative '../../../spec_helper'
-require_relative '../../../states/project/merge_request/diffs_batch_state'
+require_relative '../../../../spec_helper'
+require_relative '../../../../states/project/merge_request/show_state'
 
 module Provider
   module DiffsBatchHelper
diff --git a/spec/contracts/provider/pact_helpers/project/merge_request/diffs_metadata_helper.rb b/spec/contracts/provider/pact_helpers/project/merge_request/show/diffs_metadata_helper.rb
similarity index 76%
rename from spec/contracts/provider/pact_helpers/project/merge_request/diffs_metadata_helper.rb
rename to spec/contracts/provider/pact_helpers/project/merge_request/show/diffs_metadata_helper.rb
index 5f0c58d18d4fd6d950c9f273fb95c5b8e502eda1..61567214b7a15625721cd91a8cc8db71c3188776 100644
--- a/spec/contracts/provider/pact_helpers/project/merge_request/diffs_metadata_helper.rb
+++ b/spec/contracts/provider/pact_helpers/project/merge_request/show/diffs_metadata_helper.rb
@@ -1,7 +1,7 @@
 # frozen_string_literal: true
 
-require_relative '../../../spec_helper'
-require_relative '../../../states/project/merge_request/diffs_metadata_state'
+require_relative '../../../../spec_helper'
+require_relative '../../../../states/project/merge_request/show_state'
 
 module Provider
   module DiffsMetadataHelper
diff --git a/spec/contracts/provider/pact_helpers/project/merge_request/discussions_helper.rb b/spec/contracts/provider/pact_helpers/project/merge_request/show/discussions_helper.rb
similarity index 76%
rename from spec/contracts/provider/pact_helpers/project/merge_request/discussions_helper.rb
rename to spec/contracts/provider/pact_helpers/project/merge_request/show/discussions_helper.rb
index 0f4244ba40abe303a699e1935cd95158f42dade4..fa76ce8889a5f8b70b7173b8976acf052bec0013 100644
--- a/spec/contracts/provider/pact_helpers/project/merge_request/discussions_helper.rb
+++ b/spec/contracts/provider/pact_helpers/project/merge_request/show/discussions_helper.rb
@@ -1,7 +1,7 @@
 # frozen_string_literal: true
 
-require_relative '../../../spec_helper'
-require_relative '../../../states/project/merge_request/discussions_state'
+require_relative '../../../../spec_helper'
+require_relative '../../../../states/project/merge_request/show_state'
 
 module Provider
   module DiscussionsHelper
diff --git a/spec/contracts/provider/pact_helpers/project/pipeline/create_a_new_pipeline_helper.rb b/spec/contracts/provider/pact_helpers/project/pipeline/index/create_a_new_pipeline_helper.rb
similarity index 76%
rename from spec/contracts/provider/pact_helpers/project/pipeline/create_a_new_pipeline_helper.rb
rename to spec/contracts/provider/pact_helpers/project/pipeline/index/create_a_new_pipeline_helper.rb
index e7d9b1452d3b126cf090b6cf94b571faee624b88..247a7c4ca8e4e1037e9b4b3c30e85a6a6cee9a1b 100644
--- a/spec/contracts/provider/pact_helpers/project/pipeline/create_a_new_pipeline_helper.rb
+++ b/spec/contracts/provider/pact_helpers/project/pipeline/index/create_a_new_pipeline_helper.rb
@@ -1,7 +1,7 @@
 # frozen_string_literal: true
 
-require_relative '../../../spec_helper'
-require_relative '../../../states/project/pipeline/new_state'
+require_relative '../../../../spec_helper'
+require_relative '../../../../states/project/pipeline/new_state'
 
 module Provider
   module CreateNewPipelineHelper
diff --git a/spec/contracts/provider/pact_helpers/project/pipeline/get_list_project_pipelines_helper.rb b/spec/contracts/provider/pact_helpers/project/pipeline/index/get_list_project_pipelines_helper.rb
similarity index 76%
rename from spec/contracts/provider/pact_helpers/project/pipeline/get_list_project_pipelines_helper.rb
rename to spec/contracts/provider/pact_helpers/project/pipeline/index/get_list_project_pipelines_helper.rb
index 5307468b7c6a4e0905e3f085835d1c1b2b4011f1..80cbbe3b4dd23afa6848f2cd2060998dc9ab95d7 100644
--- a/spec/contracts/provider/pact_helpers/project/pipeline/get_list_project_pipelines_helper.rb
+++ b/spec/contracts/provider/pact_helpers/project/pipeline/index/get_list_project_pipelines_helper.rb
@@ -1,7 +1,7 @@
 # frozen_string_literal: true
 
-require_relative '../../../spec_helper'
-require_relative '../../../states/project/pipeline/pipelines_state'
+require_relative '../../../../spec_helper'
+require_relative '../../../../states/project/pipeline/index_state'
 
 module Provider
   module GetListProjectPipelinesHelper
diff --git a/spec/contracts/provider/pact_helpers/project/pipeline/show/get_pipeline_header_data_helper.rb b/spec/contracts/provider/pact_helpers/project/pipeline/show/get_pipeline_header_data_helper.rb
index 4bc7dff2ef97f42d75c85d7319b6f62447635cda..bc8c04cc455dcfdb64e9f3b4615d1af64578d35e 100644
--- a/spec/contracts/provider/pact_helpers/project/pipeline/show/get_pipeline_header_data_helper.rb
+++ b/spec/contracts/provider/pact_helpers/project/pipeline/show/get_pipeline_header_data_helper.rb
@@ -1,7 +1,7 @@
 # frozen_string_literal: true
 
 require_relative '../../../../spec_helper'
-require_relative '../../../../states/project/pipeline/pipeline_state'
+require_relative '../../../../states/project/pipeline/show_state'
 
 module Provider
   module GetPipelinesHeaderDataHelper
diff --git a/spec/contracts/provider/states/project/merge_request/diffs_batch_state.rb b/spec/contracts/provider/states/project/merge_request/diffs_batch_state.rb
deleted file mode 100644
index ac20c17c187999c387364c12d62da7c103a1cee2..0000000000000000000000000000000000000000
--- a/spec/contracts/provider/states/project/merge_request/diffs_batch_state.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-# frozen_string_literal: true
-
-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)
-      namespace = create(:namespace, name: 'gitlab-org')
-      project = create(:project, :custom_repo, name: 'gitlab-qa', namespace: namespace, files: {})
-
-      project.add_maintainer(user)
-
-      merge_request = create(:merge_request_with_multiple_diffs, source_project: project)
-      merge_request_diff = create(:merge_request_diff, merge_request: merge_request)
-
-      create(:merge_request_diff_file, :new_file, merge_request_diff: merge_request_diff)
-    end
-  end
-end
diff --git a/spec/contracts/provider/states/project/merge_request/diffs_metadata_state.rb b/spec/contracts/provider/states/project/merge_request/diffs_metadata_state.rb
deleted file mode 100644
index 8754232690cff6d9b62187cb45d03e9679277910..0000000000000000000000000000000000000000
--- a/spec/contracts/provider/states/project/merge_request/diffs_metadata_state.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-# frozen_string_literal: true
-
-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)
-      namespace = create(:namespace, name: 'gitlab-org')
-      project = create(:project, :custom_repo, name: 'gitlab-qa', namespace: namespace, files: {})
-
-      project.add_maintainer(user)
-
-      merge_request = create(:merge_request, source_project: project)
-      merge_request_diff = create(:merge_request_diff, merge_request: merge_request)
-
-      create(:merge_request_diff_file, :new_file, merge_request_diff: merge_request_diff)
-    end
-  end
-end
diff --git a/spec/contracts/provider/states/project/merge_request/discussions_state.rb b/spec/contracts/provider/states/project/merge_request/discussions_state.rb
deleted file mode 100644
index 2d64f85eedfd10416e909d7cbd513f532c4b7a34..0000000000000000000000000000000000000000
--- a/spec/contracts/provider/states/project/merge_request/discussions_state.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-# frozen_string_literal: true
-
-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)
-      namespace = create(:namespace, name: 'gitlab-org')
-      project = create(:project, name: 'gitlab-qa', namespace: namespace)
-
-      project.add_maintainer(user)
-
-      merge_request = create(:merge_request_with_diffs, source_project: project, author: user)
-
-      create(:discussion_note_on_merge_request, noteable: merge_request, project: project, author: user)
-    end
-  end
-end
diff --git a/spec/contracts/provider/states/project/merge_request/show_state.rb b/spec/contracts/provider/states/project/merge_request/show_state.rb
new file mode 100644
index 0000000000000000000000000000000000000000..46f322f723a30fa3f94599f67224efdc07e63bd6
--- /dev/null
+++ b/spec/contracts/provider/states/project/merge_request/show_state.rb
@@ -0,0 +1,47 @@
+# frozen_string_literal: true
+
+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)
+      namespace = create(:namespace, name: 'gitlab-org')
+      project = create(:project, :custom_repo, name: 'gitlab-qa', namespace: namespace, files: {})
+
+      project.add_maintainer(user)
+
+      merge_request = create(:merge_request_with_multiple_diffs, source_project: project)
+      merge_request_diff = create(:merge_request_diff, merge_request: merge_request)
+
+      create(:merge_request_diff_file, :new_file, merge_request_diff: merge_request_diff)
+    end
+  end
+
+  provider_state "a merge request exists" do
+    set_up do
+      user = User.find_by(name: Provider::UsersHelper::CONTRACT_USER_NAME)
+      namespace = create(:namespace, name: 'gitlab-org')
+      project = create(:project, :custom_repo, name: 'gitlab-qa', namespace: namespace, files: {})
+
+      project.add_maintainer(user)
+
+      merge_request = create(:merge_request, source_project: project)
+      merge_request_diff = create(:merge_request_diff, merge_request: merge_request)
+
+      create(:merge_request_diff_file, :new_file, merge_request_diff: merge_request_diff)
+    end
+  end
+
+  provider_state "a merge request with discussions exists" do
+    set_up do
+      user = User.find_by(name: Provider::UsersHelper::CONTRACT_USER_NAME)
+      namespace = create(:namespace, name: 'gitlab-org')
+      project = create(:project, name: 'gitlab-qa', namespace: namespace)
+
+      project.add_maintainer(user)
+
+      merge_request = create(:merge_request_with_diffs, source_project: project, author: user)
+
+      create(:discussion_note_on_merge_request, noteable: merge_request, project: project, author: user)
+    end
+  end
+end
diff --git a/spec/contracts/provider/states/project/pipeline/pipelines_state.rb b/spec/contracts/provider/states/project/pipeline/index_state.rb
similarity index 100%
rename from spec/contracts/provider/states/project/pipeline/pipelines_state.rb
rename to spec/contracts/provider/states/project/pipeline/index_state.rb
diff --git a/spec/contracts/provider/states/project/pipeline/pipeline_state.rb b/spec/contracts/provider/states/project/pipeline/pipeline_state.rb
deleted file mode 100644
index d1a4cd34bdd0f5d83ecc924bd2bdac85b348e702..0000000000000000000000000000000000000000
--- a/spec/contracts/provider/states/project/pipeline/pipeline_state.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-# frozen_string_literal: true
-
-Pact.provider_states_for "Pipelines#show" do
-  provider_state "a pipeline for a project exists" do
-    set_up do
-      user = User.find_by(name: Provider::UsersHelper::CONTRACT_USER_NAME)
-      namespace = create(:namespace, name: 'gitlab-org')
-      project = create(:project, :repository, name: 'gitlab-qa', namespace: namespace, creator: user)
-      scheduled_job = create(:ci_build, :scheduled)
-      manual_job = create(:ci_build, :manual)
-
-      project.add_maintainer(user)
-
-      create(
-        :ci_pipeline,
-        :with_job,
-        :success,
-        iid: 1,
-        project: project,
-        user: user,
-        duration: 10,
-        finished_at: '2022-06-01T02:47:31.432Z',
-        builds: [scheduled_job, manual_job]
-      )
-    end
-  end
-end