From 7e1f90ab90ade79d8ee4ae416a0101840d1b618f Mon Sep 17 00:00:00 2001 From: Sanad Liaquat Date: Tue, 17 Jul 2018 13:34:55 +0000 Subject: QA scenario to add/edit/delete a file via the Web UI --- qa/qa.rb | 10 ++++++ qa/qa/factory/resource/file.rb | 34 +++++++++++++++++++ qa/qa/page/file/form.rb | 40 +++++++++++++++++++++++ qa/qa/page/file/shared/commit_message.rb | 19 +++++++++++ qa/qa/page/file/show.rb | 30 +++++++++++++++++ qa/qa/page/project/show.rb | 8 +++++ qa/qa/page/view.rb | 4 +-- qa/qa/specs/features/project/file_spec.rb | 54 +++++++++++++++++++++++++++++++ 8 files changed, 197 insertions(+), 2 deletions(-) create mode 100644 qa/qa/factory/resource/file.rb create mode 100644 qa/qa/page/file/form.rb create mode 100644 qa/qa/page/file/shared/commit_message.rb create mode 100644 qa/qa/page/file/show.rb create mode 100644 qa/qa/specs/features/project/file_spec.rb (limited to 'qa') diff --git a/qa/qa.rb b/qa/qa.rb index ef83722de90..0b48cf58766 100644 --- a/qa/qa.rb +++ b/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' diff --git a/qa/qa/factory/resource/file.rb b/qa/qa/factory/resource/file.rb new file mode 100644 index 00000000000..2016d10ddae --- /dev/null +++ b/qa/qa/factory/resource/file.rb @@ -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 diff --git a/qa/qa/page/file/form.rb b/qa/qa/page/file/form.rb new file mode 100644 index 00000000000..f6e502f500b --- /dev/null +++ b/qa/qa/page/file/form.rb @@ -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 diff --git a/qa/qa/page/file/shared/commit_message.rb b/qa/qa/page/file/shared/commit_message.rb new file mode 100644 index 00000000000..5af1a55e2ef --- /dev/null +++ b/qa/qa/page/file/shared/commit_message.rb @@ -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 diff --git a/qa/qa/page/file/show.rb b/qa/qa/page/file/show.rb new file mode 100644 index 00000000000..99f5924b67f --- /dev/null +++ b/qa/qa/page/file/show.rb @@ -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 diff --git a/qa/qa/page/project/show.rb b/qa/qa/page/project/show.rb index 88861d5772d..1d3dad4cda0 100644 --- a/qa/qa/page/project/show.rb +++ b/qa/qa/page/project/show.rb @@ -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 diff --git a/qa/qa/page/view.rb b/qa/qa/page/view.rb index 6635e1ce039..b2a2da4dbf3 100644 --- a/qa/qa/page/view.rb +++ b/qa/qa/page/view.rb @@ -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 diff --git a/qa/qa/specs/features/project/file_spec.rb b/qa/qa/specs/features/project/file_spec.rb new file mode 100644 index 00000000000..5659784cd5c --- /dev/null +++ b/qa/qa/specs/features/project/file_spec.rb @@ -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 -- cgit v1.2.3