diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-05-19 15:44:42 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-05-19 15:44:42 +0000 |
commit | 4555e1b21c365ed8303ffb7a3325d773c9b8bf31 (patch) | |
tree | 5423a1c7516cffe36384133ade12572cf709398d /qa/qa/specs/features/browser_ui/5_package/npm_registry_spec.rb | |
parent | e570267f2f6b326480d284e0164a6464ba4081bc (diff) | |
download | gitlab-ce-4555e1b21c365ed8303ffb7a3325d773c9b8bf31.tar.gz |
Add latest changes from gitlab-org/gitlab@13-12-stable-eev13.12.0-rc42
Diffstat (limited to 'qa/qa/specs/features/browser_ui/5_package/npm_registry_spec.rb')
-rw-r--r-- | qa/qa/specs/features/browser_ui/5_package/npm_registry_spec.rb | 159 |
1 files changed, 139 insertions, 20 deletions
diff --git a/qa/qa/specs/features/browser_ui/5_package/npm_registry_spec.rb b/qa/qa/specs/features/browser_ui/5_package/npm_registry_spec.rb index 49b42bd1ff6..4d714affd65 100644 --- a/qa/qa/specs/features/browser_ui/5_package/npm_registry_spec.rb +++ b/qa/qa/specs/features/browser_ui/5_package/npm_registry_spec.rb @@ -5,7 +5,7 @@ module QA describe 'npm registry' do include Runtime::Fixtures - let!(:registry_scope) { project.group.sandbox.path } + let!(:registry_scope) { Runtime::Namespace.sandbox_name } let(:auth_token) do unless Page::Main::Menu.perform(&:signed_in?) Flow::Login.sign_in @@ -14,28 +14,87 @@ module QA Resource::PersonalAccessToken.fabricate!.token end + let(:uri) { URI.parse(Runtime::Scenario.gitlab_address) } + let(:gitlab_address_with_port) { "#{uri.scheme}://#{uri.host}:#{uri.port}" } + let(:gitlab_host_with_port) { "#{uri.host}:#{uri.port}" } + let!(:project) do Resource::Project.fabricate_via_api! do |project| - project.name = 'npm-registry-project' + project.name = 'npm-project' end end - let(:package) do - Resource::Package.new.tap do |package| - package.name = "@#{registry_scope}/#{project.name}" - package.project = project + let!(:another_project) do + Resource::Project.fabricate_via_api! do |another_project| + another_project.name = 'npm-another-project' + another_project.template_name = 'express' + another_project.group = project.group end end - after do - package.remove_via_api! + let!(:runner) do + Resource::Runner.fabricate! do |runner| + runner.name = "qa-runner-#{Time.now.to_i}" + runner.tags = ["runner-for-#{project.group.name}"] + runner.executor = :docker + runner.token = project.group.sandbox.runners_token + end + end + + let(:gitlab_ci_deploy_yaml) do + { + file_path: '.gitlab-ci.yml', + content: + <<~YAML + image: node:14-buster + + stages: + - deploy + + deploy: + stage: deploy + script: + - npm publish + only: + - "#{project.default_branch}" + tags: + - "runner-for-#{project.group.name}" + YAML + } end - it 'publishes an npm package and then deletes it', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/944' do - uri = URI.parse(Runtime::Scenario.gitlab_address) - gitlab_host_with_port = "#{uri.host}:#{uri.port}" - gitlab_address_with_port = "#{uri.scheme}://#{uri.host}:#{uri.port}" - package_json = { + let(:gitlab_ci_install_yaml) do + { + file_path: '.gitlab-ci.yml', + content: + <<~YAML + image: node:latest + + stages: + - install + + install: + stage: install + script: + - "npm config set @#{registry_scope}:registry #{gitlab_address_with_port}/api/v4/packages/npm/" + - "npm install #{package.name}" + cache: + key: ${CI_BUILD_REF_NAME} + paths: + - node_modules/ + artifacts: + paths: + - node_modules/ + only: + - "#{another_project.default_branch}" + tags: + - "runner-for-#{another_project.group.name}" + YAML + } + end + + let(:package_json) do + { file_path: 'package.json', content: <<~JSON { @@ -47,19 +106,79 @@ module QA } } JSON - } - npmrc = { + } + end + + let(:npmrc) do + { file_path: '.npmrc', content: <<~NPMRC //#{gitlab_host_with_port}/api/v4/projects/#{project.id}/packages/npm/:_authToken=#{auth_token} - //#{gitlab_host_with_port}/api/v4/packages/npm/:_authToken=#{auth_token} - @#{registry_scope}:registry=#{gitlab_address_with_port}/api/v4/packages/npm/ + @#{registry_scope}:registry=#{gitlab_address_with_port}/api/v4/projects/#{project.id}/packages/npm/ NPMRC } + end + + let(:package) do + Resource::Package.new.tap do |package| + package.name = "@#{registry_scope}/#{project.name}" + package.project = project + end + end + + after do + package.remove_via_api! + runner.remove_via_api! + project.remove_via_api! + another_project.remove_via_api! + end + + it 'push and pull a npm package via CI', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/1772' do + Resource::Repository::Commit.fabricate_via_api! do |commit| + commit.project = project + commit.commit_message = 'Add .gitlab-ci.yml' + commit.add_files([ + gitlab_ci_deploy_yaml, + npmrc, + package_json + ]) + end + + project.visit! + Flow::Pipeline.visit_latest_pipeline + + Page::Project::Pipeline::Show.perform do |pipeline| + pipeline.click_job('deploy') + end + + Page::Project::Job::Show.perform do |job| + expect(job).to be_successful(timeout: 800) + end + + Resource::Repository::Commit.fabricate_via_api! do |commit| + commit.project = another_project + commit.commit_message = 'Add .gitlab-ci.yml' + commit.add_files([ + gitlab_ci_install_yaml + ]) + end + + another_project.visit! + Flow::Pipeline.visit_latest_pipeline + + Page::Project::Pipeline::Show.perform do |pipeline| + pipeline.click_job('install') + end + + Page::Project::Job::Show.perform do |job| + expect(job).to be_successful(timeout: 800) + job.click_browse_button + end - # Use a node docker container to publish the package - with_fixtures([npmrc, package_json]) do |dir| - Service::DockerRun::NodeJs.new(dir).publish! + Page::Project::Artifact::Show.perform do |artifacts| + artifacts.go_to_directory('node_modules') + artifacts.go_to_directory("@#{registry_scope}") + expect(artifacts).to have_content( "#{project.name}") end project.visit! |