Added Wiki Scenario Automation gitlab-qa#263

This commit is contained in:
Ramya A 2018-06-20 17:22:05 +00:00 committed by Rémy Coutable
parent 3a1a5b28bf
commit bc07b89fc2
22 changed files with 314 additions and 70 deletions

View file

@ -46,10 +46,13 @@ module QA
autoload :Runner, 'qa/factory/resource/runner'
autoload :PersonalAccessToken, 'qa/factory/resource/personal_access_token'
autoload :KubernetesCluster, 'qa/factory/resource/kubernetes_cluster'
autoload :Wiki, 'qa/factory/resource/wiki'
end
module Repository
autoload :Push, 'qa/factory/repository/push'
autoload :ProjectPush, 'qa/factory/repository/project_push'
autoload :WikiPush, 'qa/factory/repository/wiki_push'
end
module Settings
@ -165,6 +168,16 @@ module QA
autoload :Show, 'qa/page/project/operations/kubernetes/show'
end
end
module Wiki
autoload :Edit, 'qa/page/project/wiki/edit'
autoload :New, 'qa/page/project/wiki/new'
autoload :Show, 'qa/page/project/wiki/show'
end
end
module Shared
autoload :ClonePanel, 'qa/page/shared/clone_panel'
end
module Profile

View file

@ -0,0 +1,34 @@
module QA
module Factory
module Repository
class ProjectPush < Factory::Repository::Push
dependency Factory::Resource::Project, as: :project do |project|
project.name = 'project-with-code'
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'
@commit_message = "This is a test commit"
@branch_name = 'master'
@new_branch = true
end
def repository_uri
@repository_uri ||= begin
project.visit!
Page::Project::Show.act do
choose_repository_clone_http
repository_location.uri
end
end
end
end
end
end
end

View file

@ -5,25 +5,17 @@ module QA
module Repository
class Push < Factory::Base
attr_accessor :file_name, :file_content, :commit_message,
:branch_name, :new_branch, :output
:branch_name, :new_branch, :output, :repository_uri
attr_writer :remote_branch
dependency Factory::Resource::Project, as: :project do |project|
project.name = 'project-with-code'
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'
@file_content = '# This is test file'
@commit_message = "This is a test commit"
@branch_name = 'master'
@new_branch = true
@repository_uri = ""
end
def remote_branch
@ -37,14 +29,8 @@ module QA
end
def fabricate!
project.visit!
Git::Repository.perform do |repository|
repository.uri = Page::Project::Show.act do
choose_repository_clone_http
repository_location.uri
end
repository.uri = repository_uri
repository.use_default_credentials
repository.clone
repository.configure_identity('GitLab QA', 'root@gitlab.com')

View file

@ -0,0 +1,32 @@
module QA
module Factory
module Repository
class WikiPush < Factory::Repository::Push
dependency Factory::Resource::Wiki, as: :wiki do |wiki|
wiki.title = 'Home'
wiki.content = '# My First Wiki Content'
wiki.message = 'Update home'
end
def initialize
@file_name = 'Home.md'
@file_content = '# Welcome to My Wiki'
@commit_message = 'Updating Home Page'
@branch_name = 'master'
@new_branch = false
end
def repository_uri
@repository_uri ||= begin
wiki.visit!
Page::Project::Wiki::Show.act do
go_to_clone_repository
choose_repository_clone_http
repository_location.uri
end
end
end
end
end
end
end

View file

@ -31,13 +31,13 @@ module QA
def fabricate!
project.visit!
Factory::Repository::Push.fabricate! do |resource|
Factory::Repository::ProjectPush.fabricate! do |resource|
resource.project = project
resource.file_name = 'kick-off.txt'
resource.commit_message = 'First commit'
end
branch = Factory::Repository::Push.fabricate! do |resource|
branch = Factory::Repository::ProjectPush.fabricate! do |resource|
resource.project = project
resource.file_name = 'README.md'
resource.commit_message = 'Add readme'

View file

@ -21,14 +21,14 @@ module QA
project.name = 'project-with-merge-request'
end
dependency Factory::Repository::Push, as: :target do |push, factory|
dependency Factory::Repository::ProjectPush, as: :target do |push, factory|
factory.project.visit!
push.project = factory.project
push.branch_name = 'master'
push.remote_branch = factory.target_branch
end
dependency Factory::Repository::Push, as: :source do |push, factory|
dependency Factory::Repository::ProjectPush, as: :source do |push, factory|
push.project = factory.project
push.branch_name = factory.target_branch
push.remote_branch = factory.source_branch

View file

@ -0,0 +1,25 @@
module QA
module Factory
module Resource
class Wiki < Factory::Base
attr_accessor :title, :content, :message
dependency Factory::Resource::Project, as: :project do |project|
project.name = 'project-for-wikis'
project.description = 'project for adding wikis'
end
def fabricate!
Page::Menu::Side.act { click_wiki }
Page::Project::Wiki::New.perform do |page|
page.go_to_create_first_page
page.set_title(@title)
page.set_content(@content)
page.set_message(@message)
page.create_new_page
end
end
end
end
end
end

View file

@ -13,6 +13,7 @@ module QA
element :top_level_items, '.sidebar-top-level-items'
element :operations_section, "class: 'shortcuts-operations'"
element :activity_link, "title: 'Activity'"
element :wiki_link_text, "Wiki"
end
view 'app/assets/javascripts/fly_out_nav.js' do
@ -61,6 +62,12 @@ module QA
end
end
def click_wiki
within_sidebar do
click_link('Wiki')
end
end
private
def hover_settings

View file

@ -2,11 +2,7 @@ module QA
module Page
module Project
class Show < Page::Base
view 'app/views/shared/_clone_panel.html.haml' do
element :clone_dropdown
element :clone_options_dropdown, '.clone-options-dropdown'
element :project_repository_location, 'text_field_tag :project_clone'
end
include Page::Shared::ClonePanel
view 'app/views/projects/_last_push.html.haml' do
element :create_merge_request
@ -26,21 +22,6 @@ module QA
element :branches_dropdown
end
def choose_repository_clone_http
choose_repository_clone('HTTP', 'http')
end
def choose_repository_clone_ssh
# It's not always beginning with ssh:// so detecting with @
# would be more reliable because ssh would always contain it.
# We can't use .git because HTTP also contain that part.
choose_repository_clone('SSH', '@')
end
def repository_location
Git::Location.new(find('#project_clone').value)
end
def project_name
find('.qa-project-name').text
end
@ -65,31 +46,11 @@ module QA
click_element :create_merge_request
end
def wait_for_push
sleep 5
refresh
end
def go_to_new_issue
click_element :new_menu_toggle
click_link 'New issue'
end
private
def choose_repository_clone(kind, detect_text)
wait(reload: false) do
click_element :clone_dropdown
page.within('.clone-options-dropdown') do
click_link(kind)
end
# Ensure git clone textbox was updated
repository_location.git_uri.include?(detect_text)
end
end
end
end
end

View file

@ -0,0 +1,27 @@
module QA
module Page
module Project
module Wiki
class Edit < Page::Base
view 'app/views/projects/wikis/_main_links.html.haml' do
element :new_page_link, 'New page'
element :page_history_link, 'Page history'
element :edit_page_link, 'Edit'
end
def go_to_new_page
click_on 'New page'
end
def got_to_view_history_page
click_on 'Page history'
end
def go_to_edit_page
click_on 'Edit'
end
end
end
end
end
end

View file

@ -0,0 +1,45 @@
module QA
module Page
module Project
module Wiki
class New < Page::Base
view 'app/views/projects/wikis/_form.html.haml' do
element :wiki_title_textbox, 'text_field :title'
element :wiki_content_textarea, "render 'projects/zen', f: f, attr: :content"
element :wiki_message_textbox, 'text_field :message'
element :save_changes_button, 'submit _("Save changes")'
element :create_page_button, 'submit s_("Wiki|Create page")'
end
view 'app/views/shared/empty_states/_wikis.html.haml' do
element :create_link, 'Create your first page'
end
def go_to_create_first_page
click_link 'Create your first page'
end
def set_title(title)
fill_in 'wiki_title', with: title
end
def set_content(content)
fill_in 'wiki_content', with: content
end
def set_message(message)
fill_in 'wiki_message', with: message
end
def save_changes
click_on 'Save changes'
end
def create_new_page
click_on 'Create page'
end
end
end
end
end
end

View file

@ -0,0 +1,19 @@
module QA
module Page
module Project
module Wiki
class Show < Page::Base
include Page::Shared::ClonePanel
view 'app/views/projects/wikis/pages.html.haml' do
element :clone_repository_link, 'Clone repository'
end
def go_to_clone_repository
click_on 'Clone repository'
end
end
end
end
end
end

View file

@ -0,0 +1,50 @@
module QA
module Page
module Shared
module ClonePanel
def self.included(base)
base.view 'app/views/shared/_clone_panel.html.haml' do
element :clone_dropdown
element :clone_options_dropdown, '.clone-options-dropdown'
element :project_repository_location, 'text_field_tag :project_clone'
end
end
def choose_repository_clone_http
choose_repository_clone('HTTP', 'http')
end
def choose_repository_clone_ssh
# It's not always beginning with ssh:// so detecting with @
# would be more reliable because ssh would always contain it.
# We can't use .git because HTTP also contain that part.
choose_repository_clone('SSH', '@')
end
def repository_location
Git::Location.new(find('#project_clone').value)
end
def wait_for_push
sleep 5
refresh
end
private
def choose_repository_clone(kind, detect_text)
wait(reload: false) do
click_element :clone_dropdown
page.within('.clone-options-dropdown') do
click_link(kind)
end
# Ensure git clone textbox was updated
repository_location.git_uri.include?(detect_text)
end
end
end
end
end
end

View file

@ -16,7 +16,7 @@ module QA
merge_request.title = 'Needs rebasing'
end
Factory::Repository::Push.fabricate! do |push|
Factory::Repository::ProjectPush.fabricate! do |push|
push.project = project
push.file_name = "other.txt"
push.file_content = "New file added!"

View file

@ -13,7 +13,7 @@ module QA
merge_request.title = 'Squashing commits'
end
Factory::Repository::Push.fabricate! do |push|
Factory::Repository::ProjectPush.fabricate! do |push|
push.project = project
push.commit_message = 'to be squashed'
push.branch_name = merge_request.source_branch

View file

@ -4,7 +4,7 @@ module QA
Runtime::Browser.visit(:gitlab, Page::Main::Login)
Page::Main::Login.act { sign_in_using_credentials }
Factory::Repository::Push.fabricate! do |push|
Factory::Repository::ProjectPush.fabricate! do |push|
push.file_name = 'README.md'
push.file_content = '# This is a test project'
push.commit_message = 'Add README.md'

View file

@ -16,7 +16,7 @@ module QA
end
# Create Auto Devops compatible repo
Factory::Repository::Push.fabricate! do |push|
Factory::Repository::ProjectPush.fabricate! do |push|
push.project = project
push.directory = Pathname
.new(__dir__)

View file

@ -75,7 +75,7 @@ module QA
- docker
YAML
Factory::Repository::Push.fabricate! do |resource|
Factory::Repository::ProjectPush.fabricate! do |resource|
resource.project = @project
resource.file_name = '.gitlab-ci.yml'
resource.commit_message = 'Add .gitlab-ci.yml'

View file

@ -40,7 +40,7 @@ module QA
runner.tags = %w[qa test]
end
Factory::Repository::Push.fabricate! do |push|
Factory::Repository::ProjectPush.fabricate! do |push|
push.project = project
push.file_name = '.gitlab-ci.yml'
push.commit_message = 'Add .gitlab-ci.yml'

View file

@ -0,0 +1,45 @@
module QA
feature 'Wiki Functionality', :core do
def login
Runtime::Browser.visit(:gitlab, Page::Main::Login)
Page::Main::Login.act { sign_in_using_credentials }
end
def validate_content(content)
expect(page).to have_content('Wiki was successfully updated')
expect(page).to have_content(/#{content}/)
end
before do
login
end
scenario 'User creates, edits, clones, and pushes to the wiki' do
wiki = Factory::Resource::Wiki.fabricate! do |resource|
resource.title = 'Home'
resource.content = '# My First Wiki Content'
resource.message = 'Update home'
end
validate_content('My First Wiki Content')
Page::Project::Wiki::Edit.act { go_to_edit_page }
Page::Project::Wiki::New.perform do |page|
page.set_content("My Second Wiki Content")
page.save_changes
end
validate_content('My Second Wiki Content')
Factory::Repository::WikiPush.fabricate! do |push|
push.wiki = wiki
push.file_name = 'Home.md'
push.file_content = '# My Third Wiki Content'
push.commit_message = 'Update Home.md'
end
Page::Menu::Side.act { click_wiki }
expect(page).to have_content('My Third Wiki Content')
end
end
end

View file

@ -56,7 +56,7 @@ module QA
end
def push_new_file(branch)
Factory::Repository::Push.fabricate! do |resource|
Factory::Repository::ProjectPush.fabricate! do |resource|
resource.project = project
resource.file_name = 'new_file.md'
resource.file_content = '# This is a new file'

View file

@ -5,7 +5,7 @@ module QA
Runtime::Browser.visit(:gitlab, Page::Main::Login)
Page::Main::Login.act { sign_in_using_credentials }
Factory::Repository::Push.fabricate! do |push|
Factory::Repository::ProjectPush.fabricate! do |push|
push.file_name = 'README.md'
push.file_content = '# This is a test project'
push.commit_message = 'Add README.md'