Skip to content
代码片段 群组 项目

比较版本

更改显示为版本正在合并到目标版本。了解更多关于比较版本的信息。

来源

选择目标项目
No results found

目标

选择目标项目
  • hu0701/gitlab
  • butterflyingdog/butter-git-lab
  • gitlab-cn/gitlab
  • .xyz/gitlab
  • blazz/gitlab
  • songzheng/gitlab
  • daveliu/gitlab-cn-fork
  • nanzm/gitlab
  • yuantongkang/gitlab
  • suyan666/gitlab
  • 11122zxh/gitlab
  • WangWenTong/gitlab
  • ltinyho/gitlab
  • HelloZJW/gitlab
  • zhangwenlong8911/gitlab
  • lfsadamn/gitlab
  • icbd-trial/gitlab-cn/gitlab
  • raymond-liao/gitlab
  • tonekuo/gitlab
  • wenkewang/gitlab
  • bobby285271/gitlab
  • zenk/gitlab
  • MkAnHui/gitlab
  • cbd-ultimate/git-service-apdex-gitlab
  • 1078589263/gitlab
  • pengxuan678/fork-first
  • dev-with-copilot/gitlab
  • hjz060401/gitlab
  • tpanic98/gitlab
  • HimmaHorde/gitlab
  • llm2323/gitlab
  • liangc40K/gitlab
  • 603856288/gitlab
33 个结果
显示更改
源代码提交(4)
......@@ -24,6 +24,10 @@ def gitee_password
def gitee_access_token
ENV['QA_GITEE_ACCESS_TOKEN'].to_s.strip
end
def gitee_api_address
ENV['QA_GITEE_API_ADDRESS'].to_s.strip
end
end
end
end
......
......@@ -4,7 +4,8 @@ module QA
module Resource
class ProjectImportedFromGitee < Resource::Project
attr_accessor :gitee_personal_access_token,
:gitee_repository_path
:gitee_repository_path,
:gitee_file
def fabricate!
self.import = true
......@@ -29,6 +30,59 @@ def go_to_import_page
project_page.click_gitee_link
end
end
def fabricate_via_api!
super
rescue ResourceURLMissingError
"#{Runtime::Scenario.gitlab_address}/#{full_path}"
end
def api_post_path
'/import/gitee'
end
def api_contents_path
"repos/#{gitee_repository_path}/contents/#{gitee_file}"
end
def transform_api_resource(api_resource)
api_resource
end
def get_repo_contents
Support::Retrier.retry_until(max_attempts: 6, sleep_interval: 10) do
response = get(gitee_api_request(api_contents_path).url)
Runtime::Logger.info "Get contents request response: #{response}"
unless response.code == Support::API::HTTP_STATUS_OK
raise ResourceQueryError, "Could not get repo contents. Request returned (#{response.code}): `#{response}`."
end
process_api_response(parse_body(response))
end
end
def update_repo_contents(body)
Support::Retrier.retry_until(max_attempts: 6, sleep_interval: 10) do
response = put(gitee_api_request(api_contents_path).url, body)
Runtime::Logger.info "Update contents request response: #{response}"
response.code == Support::API::HTTP_STATUS_OK
end
end
private
def gitee_api_client
@gitee_api_client ||= Runtime::API::Client.new(Runtime::Env.gitee_api_address,
personal_access_token: Runtime::Env.gitee_access_token)
end
def gitee_api_request(path)
@gitee_api_request ||= Runtime::API::ThirdPartyRequest.new(gitee_api_client, path,
access_token: Runtime::Env.gitee_access_token)
end
end
end
end
# frozen_string_literal: true
module QA
module Runtime
module API
class ThirdPartyRequest
def self.masked_url(url)
url.sub(/private_token=.*/, "private_token=[****]")
end
def initialize(api_client, path, **query_string)
query_string[:private_token] ||= api_client.personal_access_token unless query_string[:access_token]
request_path = request_path(path, **query_string)
@session_address = Runtime::Address.new(api_client.address, request_path)
end
def mask_url
QA::Runtime::API::Request.masked_url(url)
end
def url
@session_address.address
end
def request_path(path, **query_string)
full_path = ::File.join('/', path)
if query_string.any?
full_path << (path.include?('?') ? '&' : '?')
full_path << query_string.map { |k, v| "#{k}=#{CGI.escape(v.to_s)}" }.join('&')
end
full_path
end
end
end
end
end
# frozen_string_literal: true
require 'base64'
module QA
describe 'JH Verify', :gitee, :requires_admin, only: { subdomain: :staging } do
describe 'Project import from gitee' do
let(:commit_message) { "Update #{gitee_data[:file_name]} - #{Time.now}" }
let(:project_name) { 'gitee-project-with-pipeline' }
let(:admin_api_client) { Runtime::API::Client.as_admin }
let(:user_api_client) { Runtime::API::Client.new(:gitlab, user: user) }
let(:gitee_data) do
{
access_token: Runtime::Env.gitee_access_token,
file_name: 'README.md',
repo: 'gitlab-qa-gitee/test-project',
repo_url: "https://gitlab-qa-gitee@gitee.com/gitlab-qa-gitee/test-project.git"
}
end
let(:group) do
Resource::Group.fabricate_via_api! do |resource|
resource.api_client = admin_api_client
end
end
let(:user) do
Resource::User.fabricate_via_api! do |resource|
resource.api_client = admin_api_client
resource.hard_delete_on_api_removal = true
end
end
let(:imported_project) do
Resource::ProjectImportedFromGitee.fabricate_via_browser_ui! do |project|
project.import = true
project.name = project_name
project.group = group
project.gitee_personal_access_token = gitee_data[:access_token]
project.gitee_repository_path = gitee_data[:repo]
project.gitee_file = gitee_data[:file_name]
project.api_client = user_api_client
end
end
before do
admin_api_client.personal_access_token
user_api_client.personal_access_token
group.add_member(user, Resource::Members::AccessLevel::OWNER)
Flow::Login.sign_in(as: user)
imported_project
end
after do
imported_project.remove_via_api!
group.remove_via_api!
user.remove_via_api!
end
it(
'can be synced after the mirror repository is updated',
testcase: 'https://jihulab.com/gitlab-cn/quality/testcases/-/issues/10'
) do
Page::Project::Menu.perform(&:go_to_repository_settings)
Page::Project::Settings::Repository.perform do |settings|
settings.expand_mirroring_repositories do |mirror_settings|
mirror_settings.repository_url = gitee_data[:repo_url]
mirror_settings.mirror_direction = 'Pull'
mirror_settings.authentication_method = 'Password'
mirror_settings.password = Runtime::Env.gitee_password
mirror_settings.mirror_repository
end
end
current_content = edit_gitee_file
imported_project.visit!
Support::Waiter.wait_until(sleep_interval: 5, max_duration: 60, reload_page: page, retry_on_exception: true) do
Page::Project::Show.perform do |project|
expect(project).to have_readme_content(current_content)
end
end
end
private
def edit_gitee_file
Runtime::Logger.info "Making changes to Gitee file."
gitee_file_contents = imported_project.get_repo_contents
file_new_content = Base64.encode64(Faker::Lorem.sentence).strip
contents_body =
{
owner: gitee_data[:repo].split('/').first,
repo: gitee_data[:repo].split('/').last,
path: gitee_data[:file_name],
message: commit_message,
content: file_new_content,
sha: gitee_file_contents[:sha]
}
imported_project.update_repo_contents(contents_body)
Support::Retrier.retry_until(max_attempts: 5, sleep_interval: 2) do
file_content = imported_project.get_repo_contents
current_content = Base64.decode64(file_content[:content]).strip
current_content.equal?(Base64.decode64(file_new_content).strip)
current_content
end
end
end
end
end