diff --git a/lib/tasks/contracts.rake b/lib/tasks/contracts.rake index 75c350f5be5d99b4809c60147de98aef959d6864..6bb7f30ad57d800ce73a2a49f316718d0c14f98b 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 ae4d5544df6d8543b3759eb5905a1800bb04bc92..38773e5fb109ad0d8edaa97e60eae606ebf594c6 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 cc2c054b08f49efbab63e3af678cdeea15f4ef3b..b53e4bb335db6431d7e0f7abfe93997515ab3973 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 c19ca2175b3c53dedf9258eaaaae723747b32c89..39dbcf78ee70b62035ca39351d9515326f955907 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 26f1d65f6630bad9f5f846f11109a9e8d0baee49..af0962a01cb97d096c781d3d2ee5f18f06d49867 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 6b1cefdbdbc5c2aea8d79497092d8e15ecd71fa8..0000000000000000000000000000000000000000 --- 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 2a5d0ba6267a894f3ccae9d4befa3a123d6214a5..0000000000000000000000000000000000000000 --- 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 fc082cb6a4668f0b5fda062263d846e088b033a8..0000000000000000000000000000000000000000 --- 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 0000000000000000000000000000000000000000..8c6e029cb12da9a012452978c1c84aa39b4a5c63 --- /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 2f097d8eb24ff25cd672291c7312a14c8849b0d1..3fa13766766e3a8f675ecb6064a1f7347e2610d8 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 eb22b7d2e3c5c595f98b8baf079550c23db74f94..b98a0127e545edd2248498d172f701f192754d1c 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 819d95276b38ecd5df6c9b113eb009ed63fd6639..ecaf9c123afcdae358db2bf19c464ea15922ba9f 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 0000000000000000000000000000000000000000..7d1fbe91e86ab34754fe6f43a5a63b09be214cf9 --- /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 0000000000000000000000000000000000000000..5f0c58d18d4fd6d950c9f273fb95c5b8e502eda1 --- /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 0000000000000000000000000000000000000000..0f4244ba40abe303a699e1935cd95158f42dade4 --- /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 24bdd00dbaeb0b1d6ac821ed5cee1184edf01bd7..0000000000000000000000000000000000000000 --- 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 135ccf48276f58817870df8c61b4a0d880c4ee32..0000000000000000000000000000000000000000 --- 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 e73b993a31a03ba64eb31ef3957d3413254f101c..0000000000000000000000000000000000000000 --- 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 d959cde5f5ec852c0aede07447c1f71b2413c82a..ac20c17c187999c387364c12d62da7c103a1cee2 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 59b290ce2fed0267315f1fe9345b4939eec4ead6..8754232690cff6d9b62187cb45d03e9679277910 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 ddbcf80f2c820100f9be53e4807de4c693a9e56d..2d64f85eedfd10416e909d7cbd513f532c4b7a34 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)