QA scenario to add/edit/delete a file via the Web UI
This commit is contained in:
parent
59b82fbcd4
commit
7e1f90ab90
8 changed files with 197 additions and 2 deletions
10
qa/qa.rb
10
qa/qa.rb
|
@ -53,6 +53,7 @@ module QA
|
|||
autoload :User, 'qa/factory/resource/user'
|
||||
autoload :ProjectMilestone, 'qa/factory/resource/project_milestone'
|
||||
autoload :Wiki, 'qa/factory/resource/wiki'
|
||||
autoload :File, 'qa/factory/resource/file'
|
||||
autoload :Fork, 'qa/factory/resource/fork'
|
||||
end
|
||||
|
||||
|
@ -136,6 +137,15 @@ module QA
|
|||
autoload :Show, 'qa/page/group/show'
|
||||
end
|
||||
|
||||
module File
|
||||
autoload :Form, 'qa/page/file/form'
|
||||
autoload :Show, 'qa/page/file/show'
|
||||
|
||||
module Shared
|
||||
autoload :CommitMessage, 'qa/page/file/shared/commit_message'
|
||||
end
|
||||
end
|
||||
|
||||
module Project
|
||||
autoload :New, 'qa/page/project/new'
|
||||
autoload :Show, 'qa/page/project/show'
|
||||
|
|
34
qa/qa/factory/resource/file.rb
Normal file
34
qa/qa/factory/resource/file.rb
Normal file
|
@ -0,0 +1,34 @@
|
|||
module QA
|
||||
module Factory
|
||||
module Resource
|
||||
class File < Factory::Base
|
||||
attr_accessor :name,
|
||||
:content,
|
||||
:commit_message
|
||||
|
||||
dependency Factory::Resource::Project, as: :project do |project|
|
||||
project.name = 'project-with-new-file'
|
||||
end
|
||||
|
||||
def initialize
|
||||
@name = 'QA Test - File name'
|
||||
@content = 'QA Test - File content'
|
||||
@commit_message = 'QA Test - Commit message'
|
||||
end
|
||||
|
||||
def fabricate!
|
||||
project.visit!
|
||||
|
||||
Page::Project::Show.act { go_to_new_file! }
|
||||
|
||||
Page::File::Form.perform do |page|
|
||||
page.add_name(@name)
|
||||
page.add_content(@content)
|
||||
page.add_commit_message(@commit_message)
|
||||
page.commit_changes
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
40
qa/qa/page/file/form.rb
Normal file
40
qa/qa/page/file/form.rb
Normal file
|
@ -0,0 +1,40 @@
|
|||
module QA
|
||||
module Page
|
||||
module File
|
||||
class Form < Page::Base
|
||||
include Shared::CommitMessage
|
||||
|
||||
view 'app/views/projects/blob/_editor.html.haml' do
|
||||
element :file_name, "text_field_tag 'file_name'"
|
||||
element :editor, '#editor'
|
||||
end
|
||||
|
||||
view 'app/views/projects/_commit_button.html.haml' do
|
||||
element :commit_changes, "button_tag 'Commit changes'"
|
||||
end
|
||||
|
||||
def add_name(name)
|
||||
fill_in 'file_name', with: name
|
||||
end
|
||||
|
||||
def add_content(content)
|
||||
text_area.set content
|
||||
end
|
||||
|
||||
def remove_content
|
||||
text_area.send_keys([:command, 'a'], :backspace)
|
||||
end
|
||||
|
||||
def commit_changes
|
||||
click_on 'Commit changes'
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def text_area
|
||||
find('#editor>textarea', visible: false)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
19
qa/qa/page/file/shared/commit_message.rb
Normal file
19
qa/qa/page/file/shared/commit_message.rb
Normal file
|
@ -0,0 +1,19 @@
|
|||
module QA
|
||||
module Page
|
||||
module File
|
||||
module Shared
|
||||
module CommitMessage
|
||||
def self.included(base)
|
||||
base.view 'app/views/shared/_commit_message_container.html.haml' do
|
||||
element :commit_message, "text_area_tag 'commit_message'"
|
||||
end
|
||||
end
|
||||
|
||||
def add_commit_message(message)
|
||||
fill_in 'commit_message', with: message
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
30
qa/qa/page/file/show.rb
Normal file
30
qa/qa/page/file/show.rb
Normal file
|
@ -0,0 +1,30 @@
|
|||
module QA
|
||||
module Page
|
||||
module File
|
||||
class Show < Page::Base
|
||||
include Shared::CommitMessage
|
||||
|
||||
view 'app/helpers/blob_helper.rb' do
|
||||
element :edit_button, "_('Edit')"
|
||||
element :delete_button, /label:\s+"Delete"/
|
||||
end
|
||||
|
||||
view 'app/views/projects/blob/_remove.html.haml' do
|
||||
element :delete_file_button, "button_tag 'Delete file'"
|
||||
end
|
||||
|
||||
def click_edit
|
||||
click_on 'Edit'
|
||||
end
|
||||
|
||||
def click_delete
|
||||
click_on 'Delete'
|
||||
end
|
||||
|
||||
def click_delete_file
|
||||
click_on 'Delete file'
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -31,10 +31,18 @@ module QA
|
|||
element :tree_holder, '.tree-holder'
|
||||
end
|
||||
|
||||
view 'app/presenters/project_presenter.rb' do
|
||||
element :new_file_button, "label: _('New file'),"
|
||||
end
|
||||
|
||||
def project_name
|
||||
find('.qa-project-name').text
|
||||
end
|
||||
|
||||
def go_to_new_file!
|
||||
click_on 'New file'
|
||||
end
|
||||
|
||||
def switch_to_branch(branch_name)
|
||||
find_element(:branches_select).click
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ module QA
|
|||
end
|
||||
|
||||
def pathname
|
||||
@pathname ||= Pathname.new(File.join(__dir__, '../../../', @path))
|
||||
@pathname ||= Pathname.new(::File.join(__dir__, '../../../', @path))
|
||||
.cleanpath.expand_path
|
||||
end
|
||||
|
||||
|
@ -23,7 +23,7 @@ module QA
|
|||
# elements' existence.
|
||||
#
|
||||
@missing ||= @elements.dup.tap do |elements|
|
||||
File.foreach(pathname.to_s) do |line|
|
||||
::File.foreach(pathname.to_s) do |line|
|
||||
elements.reject! { |element| element.matches?(line) }
|
||||
end
|
||||
end
|
||||
|
|
54
qa/qa/specs/features/project/file_spec.rb
Normal file
54
qa/qa/specs/features/project/file_spec.rb
Normal file
|
@ -0,0 +1,54 @@
|
|||
module QA
|
||||
describe 'File Functionality', :core do
|
||||
it 'lets a user create, edit and delete a file via WebUI' do
|
||||
Runtime::Browser.visit(:gitlab, Page::Main::Login)
|
||||
Page::Main::Login.act { sign_in_using_credentials }
|
||||
|
||||
# Create
|
||||
file_name = 'QA Test - File name'
|
||||
file_content = 'QA Test - File content'
|
||||
commit_message_for_create = 'QA Test - Create new file'
|
||||
|
||||
Factory::Resource::File.fabricate! do |file|
|
||||
file.name = file_name
|
||||
file.content = file_content
|
||||
file.commit_message = commit_message_for_create
|
||||
end
|
||||
|
||||
expect(page).to have_content('The file has been successfully created.')
|
||||
expect(page).to have_content(file_name)
|
||||
expect(page).to have_content(file_content)
|
||||
expect(page).to have_content(commit_message_for_create)
|
||||
|
||||
# Edit
|
||||
updated_file_content = 'QA Test - Updated file content'
|
||||
commit_message_for_update = 'QA Test - Update file'
|
||||
|
||||
Page::File::Show.act { click_edit }
|
||||
|
||||
Page::File::Form.act do
|
||||
remove_content
|
||||
add_content(updated_file_content)
|
||||
add_commit_message(commit_message_for_update)
|
||||
commit_changes
|
||||
end
|
||||
|
||||
expect(page).to have_content('Your changes have been successfully committed.')
|
||||
expect(page).to have_content(updated_file_content)
|
||||
expect(page).to have_content(commit_message_for_update)
|
||||
|
||||
# Delete
|
||||
commit_message_for_delete = 'QA Test - Delete file'
|
||||
|
||||
Page::File::Show.act do
|
||||
click_delete
|
||||
add_commit_message(commit_message_for_delete)
|
||||
click_delete_file
|
||||
end
|
||||
|
||||
expect(page).to have_content('The file has been successfully deleted.')
|
||||
expect(page).to have_content(commit_message_for_delete)
|
||||
expect(page).to have_no_content(file_name)
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue