Commit 01400a08 authored by Michael Kozono's avatar Michael Kozono

Reuse Push factory

parent c5bcae5d
......@@ -3,7 +3,7 @@ module QA
module Repository
class Push < Factory::Base
attr_accessor :file_name, :file_content, :commit_message,
:branch_name, :new_branch
:branch_name, :new_branch, :output
attr_writer :remote_branch
......@@ -12,6 +12,10 @@ module QA
project.description = 'Project with repository'
end
product :output do |factory|
factory.output
end
def initialize
@file_name = 'file.txt'
@file_content = '# This is test project'
......@@ -58,7 +62,7 @@ module QA
end
repository.commit(commit_message)
repository.push_changes("#{branch_name}:#{remote_branch}")
@output = repository.push_changes("#{branch_name}:#{remote_branch}")
end
end
end
......
......@@ -7,8 +7,6 @@ module QA
class Repository
include Scenario::Actable
attr_reader :push_output
def self.perform(*args)
Dir.mktmpdir do |dir|
Dir.chdir(dir) { super }
......@@ -71,7 +69,9 @@ module QA
end
def push_changes(branch = 'master')
@push_output, _ = run_and_redact_credentials("git push #{@uri} #{branch}")
output, _ = run_and_redact_credentials("git push #{@uri} #{branch}")
output
end
def commits
......
......@@ -7,12 +7,6 @@ module QA
resource.name = 'protected-branch-project'
end
end
given(:location) do
Page::Project::Show.act do
choose_repository_clone_http
repository_location
end
end
before do
Runtime::Browser.visit(:gitlab, Page::Main::Login)
......@@ -27,40 +21,32 @@ module QA
end
context 'when developers and maintainers are allowed to push to a protected branch' do
let!(:protected_branch) { fabricate_branch(allow_to_push: true) }
let!(:protected_branch) { create_protected_branch(allow_to_push: true) }
scenario 'user with push rights successfully pushes to the protected branch' do
expect(protected_branch.name).to have_content(branch_name)
expect(protected_branch.push_allowance).to have_content('Developers + Maintainers')
project.visit!
Git::Repository.perform do |repository|
push_output = push_to_repository(repository)
push = push_new_file(branch_name)
expect(push_output).to match(/remote: To create a merge request for protected-branch, visit/)
end
expect(push.output).to match(/remote: To create a merge request for protected-branch, visit/)
end
end
context 'when developers and maintainers are not allowed to push to a protected branch' do
scenario 'user without push rights fails to push to the protected branch' do
fabricate_branch(allow_to_push: false)
project.visit!
create_protected_branch(allow_to_push: false)
Git::Repository.perform do |repository|
push_output = push_to_repository(repository)
push = push_new_file(branch_name)
expect(push_output)
expect(push.output)
.to match(/remote\: GitLab\: You are not allowed to push code to protected branches on this project/)
expect(push_output)
expect(push.output)
.to match(/\[remote rejected\] #{branch_name} -> #{branch_name} \(pre-receive hook declined\)/)
end
end
end
def fabricate_branch(allow_to_push:)
def create_protected_branch(allow_to_push:)
Factory::Resource::Branch.fabricate! do |resource|
resource.branch_name = branch_name
resource.project = project
......@@ -69,17 +55,14 @@ module QA
end
end
def push_to_repository(repository)
repository.uri = location.uri
repository.use_default_credentials
repository.act do
clone
configure_identity('GitLab QA', 'root@gitlab.com')
checkout('protected-branch')
commit_file('README.md', 'readme content', 'Add a readme')
push_changes('protected-branch')
push_output
def push_new_file(branch)
Factory::Repository::Push.fabricate! do |resource|
resource.project = project
resource.file_name = 'new_file.md'
resource.file_content = '# This is a new file'
resource.commit_message = 'Add new_file.md'
resource.branch_name = branch_name
resource.new_branch = false
end
end
end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment