QA scenario to add/edit/delete a file via the Web UI

This commit is contained in:
Sanad Liaquat 2018-07-17 13:34:55 +00:00 committed by Rémy Coutable
parent 59b82fbcd4
commit 7e1f90ab90
8 changed files with 197 additions and 2 deletions

View file

@ -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'

View 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
View 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

View 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
View 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

View file

@ -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

View file

@ -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

View 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