From 418ee01151b45f0429993491cca87d1a93f9cc34 Mon Sep 17 00:00:00 2001 From: akrstjp Date: Tue, 5 Apr 2016 22:58:53 +0900 Subject: [PATCH] refactor test code --- test/selenium/clear_core_field.rb | 67 ++++---------- test/selenium/clear_custom_field.rb | 83 +++++------------ test/selenium/edit_core_field.rb | 104 +++++++-------------- test/selenium/edit_custom_field.rb | 124 +++++++++----------------- test/selenium/edit_on_mypage.rb | 94 ++++++------------- test/selenium/helpers/issue_helper.rb | 94 ------------------- test/selenium/pages/my_apikey.rb | 29 ++++-- test/selenium/pages/page.rb | 4 +- test/selenium/pages/quick_edit.rb | 6 +- test/selenium/replace_core_field.rb | 80 +++-------------- test/selenium/replace_core_field_on_mypage.rb | 77 +++------------- 11 files changed, 191 insertions(+), 571 deletions(-) delete mode 100644 test/selenium/helpers/issue_helper.rb diff --git a/test/selenium/clear_core_field.rb b/test/selenium/clear_core_field.rb index 040628f..d11c2db 100644 --- a/test/selenium/clear_core_field.rb +++ b/test/selenium/clear_core_field.rb @@ -12,6 +12,7 @@ require "net/http" include RSpec::Expectations describe "Clear core field" do + let(:helper) { TestHelper.new } before(:all) do profile = Selenium::WebDriver::Firefox::Profile.new @@ -38,6 +39,9 @@ describe "Clear core field" do before(:each) do @issues_page = @issues_page.open_issues + helper.page = @issues_page + helper.base_url = @base_url + helper.issue_id = @issue_id end after(:each) do @@ -50,82 +54,49 @@ describe "Clear core field" do it "start_date can clear" do new_value = '1900-01-01' - expect( edit(@issue_id, :start_date, new_value) ).to eq new_value + expect( helper.edit(:start_date, new_value) ).to eq new_value - expect( clear(@issue_id, :start_date) ).to eq nil + expect( helper.clear(:start_date) ).to eq nil end it "start_date can clear with private notes" do # before edit new_value = '1900-01-01' - expect( edit(@issue_id, :start_date, new_value) ).to eq new_value + expect( helper.edit(:start_date, new_value) ).to eq new_value # clear new_value = {:value => :none, :notes => {:text => "notes\ntime=" + (Time.now.to_s), :is_private => true}} - expect( edit(@issue_id, :start_date, new_value) ).to eq new_value[:value] - expect( latest_note(@issue_id, @issues_page.session_cookie) ).to eq new_value + expect( helper.clear(:start_date, new_value[:notes]) ).to eq nil + expect( helper.latest_note ).to eq new_value end it "due_date can clear" do new_value = '2000-01-01' - expect( edit(@issue_id, :due_date, new_value) ).to eq new_value + expect( helper.edit(:due_date, new_value) ).to eq new_value - expect( clear(@issue_id, :due_date) ).to eq nil + expect( helper.clear(:due_date) ).to eq nil end it "estimated_hours can clear" do new_value = '0' - expect( edit(@issue_id, :estimated_hours, new_value).to_f ).to eq new_value.to_f + expect( helper.edit(:estimated_hours, new_value).to_f ).to eq new_value.to_f - expect( clear(@issue_id, :estimated_hours) ).to eq nil + expect( helper.clear(:estimated_hours) ).to eq nil end it "parent_issue_id can clear" do - issue_ids = @issues_page.issue_ids_on_page - issue_new_page = @issues_page.open_new_page() + issue_ids = helper.page.issue_ids_on_page + issue_new_page = helper.page.open_new_page() issue_show_page = issue_new_page.create(:bug, 'first subject') new_issue_id = issue_show_page.id - @issues_page = issue_show_page.open_issues + helper.page = @issues_page = issue_show_page.open_issues new_value = @issue_id.to_s - expect( edit(new_issue_id, :parent_issue_id, new_value) ).to eq new_value.to_i - - expect( clear(new_issue_id, :parent_issue_id) ).to eq nil - end - - def edit(issue_id, attribute_name, new_value) - @issues_page.quick_edit_for_core_field issue_id, attribute_name, new_value - - attribute_name = :parent if attribute_name.to_sym == :parent_issue_id - field_value = get_core_field(issue_id, attribute_name) - field_value = :none if field_value.nil? - - if attribute_name == :parent - field_value["id"] - else - field_value - end - end - - def clear(issue_id, attribute_name) - quick_edit = @issues_page.open_context(issue_id) - menu_selector = quick_edit.menu_selector(attribute_name) - @issues_page = quick_edit.clear_field(issue_id, menu_selector) - - attribute_name = :parent if attribute_name.to_sym == :parent_issue_id - field_value = get_core_field(issue_id, attribute_name) - end - - def get_core_field(issue_id, attribute_name) - json = get_json("issues/#{issue_id}.json") + helper.issue_id = new_issue_id + expect( helper.edit(:parent_issue_id, new_value) ).to eq new_value.to_i - json["issue"][attribute_name.to_s] + expect( helper.clear(:parent_issue_id) ).to eq nil end - def get_json(path) - uri = URI::parse "#{@base_url}#{path}" - res = Net::HTTP::get_response(uri) - JSON.parse(res.body) - end end diff --git a/test/selenium/clear_custom_field.rb b/test/selenium/clear_custom_field.rb index d30cfdd..03ebfa7 100644 --- a/test/selenium/clear_custom_field.rb +++ b/test/selenium/clear_custom_field.rb @@ -6,11 +6,13 @@ $: << File.expand_path('../../', __FILE__) require 'spec_helper' Dir[File.dirname(__FILE__) + '/pages/page.rb'].each {|file| require file } Dir[File.dirname(__FILE__) + '/pages/*.rb'].each {|file| require file } +Dir[File.dirname(__FILE__) + '/helpers/*.rb'].each {|file| require file } require "uri" require "net/http" include RSpec::Expectations describe "Clear custom field" do + let(:helper) { TestHelper.new } before(:all) do profile = Selenium::WebDriver::Firefox::Profile.new @@ -26,7 +28,10 @@ describe "Clear custom field" do # open issues start_page = QuickEdit::Test::Pages::StartPage.new(@driver, @base_url, @default_project) first_page = start_page.login @default_user, @default_password - @issues_page = first_page.open_issues + admin_info_page = first_page.open_admin_info + apikey_page = admin_info_page.open_my_apikey(admin_info_page.redmine_version) + @api_key = apikey_page.key + @issues_page = apikey_page.open_issues # get issue id for test @issue_id = @issues_page.issue_ids_on_page().first().to_i @@ -41,6 +46,10 @@ describe "Clear custom field" do else @issues_page = @issues_page.open_issues end + helper.page = @issues_page + helper.base_url = @base_url + helper.issue_id = @issue_id + helper.api_key = @api_key end after(:each) do @@ -53,37 +62,37 @@ describe "Clear custom field" do it "custom_text can clear" do new_value = 'dummy' - expect( edit_custom_field(@issue_id, :custom_text, new_value) ).to eq new_value + expect( helper.edit_custom_field(:custom_text, new_value) ).to eq new_value - expect( clear_custom_field(@issue_id, :custom_text) ).to eq '' + expect( helper.clear_custom_field(:custom_text) ).to eq '' end it "custom_int can clear" do new_value = '0' - expect( edit_custom_field(@issue_id, :custom_int, new_value) ).to eq new_value + expect( helper.edit_custom_field(:custom_int, new_value) ).to eq new_value - expect( clear_custom_field(@issue_id, :custom_int) ).to eq '' + expect( helper.clear_custom_field(:custom_int) ).to eq '' end it "custom_date can clear" do new_value = '1900-01-01' - expect( edit_custom_field(@issue_id, :custom_date, new_value) ).to eq new_value + expect( helper.edit_custom_field(:custom_date, new_value) ).to eq new_value - expect( clear_custom_field(@issue_id, :custom_date) ).to eq '' + expect( helper.clear_custom_field(:custom_date) ).to eq '' end it "custom_long can clear" do new_value = 'dummy' - expect( edit_custom_field(@issue_id, :custom_long, new_value) ).to eq new_value + expect( helper.edit_custom_field(:custom_long, new_value) ).to eq new_value - expect( clear_custom_field(@issue_id, :custom_long) ).to eq '' + expect( helper.clear_custom_field(:custom_long) ).to eq '' end it "custom_float can clear" do new_value = '0' - expect( edit_custom_field(@issue_id, :custom_float, new_value) ).to eq new_value + expect( helper.edit_custom_field(:custom_float, new_value) ).to eq new_value - expect( clear_custom_field(@issue_id, :custom_float) ).to eq '' + expect( helper.clear_custom_field(:custom_float) ).to eq '' end it "custom_link can clear" do @@ -95,58 +104,10 @@ describe "Clear custom field" do @issues_page = admin_info_page.open_issues new_value = 'dummy' - expect( edit_custom_field(@issue_id, :custom_link, new_value) ).to eq new_value + expect( helper.edit_custom_field(:custom_link, new_value) ).to eq new_value - expect( clear_custom_field(@issue_id, :custom_link) ).to eq '' + expect( helper.clear_custom_field(:custom_link) ).to eq '' end end - - def edit_custom_field(issue_id, custom_field_name, new_value) - cf = get_custom_field(issue_id, custom_field_name) - cf_id = cf["id"] - - quick_edit = @issues_page.open_context(issue_id) - menu_selector = quick_edit.menu_selector(:custom_field, cf_id) - @issues_page = quick_edit.update_field(issue_id, menu_selector, new_value) - - cf = get_custom_field(issue_id, custom_field_name) - cf["value"] - end - - def clear_custom_field(issue_id, custom_field_name) - cf = get_custom_field(issue_id, custom_field_name) - cf_id = cf["id"] - - quick_edit = @issues_page.open_context(issue_id) - menu_selector = quick_edit.menu_selector(:custom_field, cf_id) - @issues_page = quick_edit.clear_field(issue_id, menu_selector) - - - cf = get_custom_field(issue_id, custom_field_name) - cf["value"] - end - - def get_custom_field(issue_id, custom_field_name) - cf_hash_list = get_custom_fields(issue_id) - - cf_hash = cf_hash_list.select do |cf_hash| - cf_hash["name"] == custom_field_name.to_s - end - - cf_hash.first - end - - def get_custom_fields(issue_id) - json = get_json("issues/#{issue_id}.json") - - json["issue"]["custom_fields"] - end - - def get_json(path) - uri = URI::parse "#{@base_url}#{path}" - res = Net::HTTP::get_response(uri) - JSON.parse(res.body) - end - end diff --git a/test/selenium/edit_core_field.rb b/test/selenium/edit_core_field.rb index b862320..e291b22 100644 --- a/test/selenium/edit_core_field.rb +++ b/test/selenium/edit_core_field.rb @@ -12,6 +12,7 @@ require "net/http" include RSpec::Expectations describe "Edit core field" do + let(:helper) { TestHelper.new } before(:all) do profile = Selenium::WebDriver::Firefox::Profile.new @@ -38,6 +39,9 @@ describe "Edit core field" do before(:each) do @issues_page = @issues_page.open_issues + helper.page = @issues_page + helper.base_url = @base_url + helper.issue_id = @issue_id end after(:each) do @@ -50,143 +54,99 @@ describe "Edit core field" do it "subject can edit" do new_value = 'dummy' - expect( edit(@issue_id, :subject, new_value) ).to eq new_value + expect( helper.edit(:subject, new_value) ).to eq new_value new_value = 'subject: new_value' - expect( edit(@issue_id, :subject, new_value) ).to eq new_value + expect( helper.edit(:subject, new_value) ).to eq new_value - expect( edit_with_alert(@issue_id, :subject, "") ).to eq new_value + expect( helper.edit_with_alert(:subject, "") ).to eq new_value end it "subject can edit with public notes" do new_value = {:value => 'subject: with_notes', :notes => {:text => "notes\ntime=" + (Time.now.to_s), :is_private => false}} - expect( edit(@issue_id, :subject, new_value) ).to eq new_value[:value] - expect( latest_note(@issue_id, @issues_page.session_cookie) ).to eq new_value + expect( helper.edit( :subject, new_value) ).to eq new_value[:value] + expect( helper.latest_note ).to eq new_value end it "subject can edit with private notes" do new_value = {:value => 'subject: with_notes', :notes => {:text => "notes\ntime=" + (Time.now.to_s), :is_private => true}} - expect( edit(@issue_id, :subject, new_value) ).to eq new_value[:value] - expect( latest_note(@issue_id, @issues_page.session_cookie) ).to eq new_value + expect( helper.edit( :subject, new_value) ).to eq new_value[:value] + expect( helper.latest_note ).to eq new_value end it "start_date can edit" do new_value = '1900-01-01' - expect( edit(@issue_id, :start_date, new_value) ).to eq new_value + expect( helper.edit( :start_date, new_value) ).to eq new_value new_value = '1900-01-02' - expect( edit(@issue_id, :start_date, new_value) ).to eq new_value + expect( helper.edit( :start_date, new_value) ).to eq new_value invalid_value = '1900-01-0a' - expect( edit_with_alert(@issue_id, :start_date, invalid_value) ).to eq new_value + expect( helper.edit_with_alert( :start_date, invalid_value) ).to eq new_value invalid_value = '' - expect( edit_with_alert(@issue_id, :start_date, invalid_value) ).to eq new_value + expect( helper.edit_with_alert( :start_date, invalid_value) ).to eq new_value end it "due_date can edit" do new_value = '2000-01-01' - expect( edit(@issue_id, :due_date, new_value) ).to eq new_value + expect( helper.edit( :due_date, new_value) ).to eq new_value new_value = '2000-01-02' - expect( edit(@issue_id, :due_date, new_value) ).to eq new_value + expect( helper.edit( :due_date, new_value) ).to eq new_value invalid_value = '2000-01-0a' - expect( edit_with_alert(@issue_id, :due_date, invalid_value) ).to eq new_value + expect( helper.edit_with_alert( :due_date, invalid_value) ).to eq new_value invalid_value = '' - expect( edit_with_alert(@issue_id, :due_date, invalid_value) ).to eq new_value + expect( helper.edit_with_alert( :due_date, invalid_value) ).to eq new_value end it "description can edit" do new_value = 'dummy' - expect( edit(@issue_id, :description, new_value) ).to eq new_value + expect( helper.edit( :description, new_value) ).to eq new_value new_value = 'description: new_value' - expect( edit(@issue_id, :description, new_value) ).to eq new_value + expect( helper.edit( :description, new_value) ).to eq new_value - expect( edit_with_alert(@issue_id, :description, "") ).to eq new_value + expect( helper.edit_with_alert( :description, "") ).to eq new_value end # unsigned float field it "estimated_hours can edit" do new_value = '0' - expect( edit(@issue_id, :estimated_hours, new_value).to_f ).to eq new_value.to_f + expect( helper.edit( :estimated_hours, new_value).to_f ).to eq new_value.to_f new_value = '0.1' - expect( edit(@issue_id, :estimated_hours, new_value).to_f ).to eq new_value.to_f + expect( helper.edit( :estimated_hours, new_value).to_f ).to eq new_value.to_f new_value = '+0.1' - expect( edit(@issue_id, :estimated_hours, new_value).to_f ).to eq new_value.to_f + expect( helper.edit( :estimated_hours, new_value).to_f ).to eq new_value.to_f new_value = '0.1e2' - expect( edit(@issue_id, :estimated_hours, new_value).to_f ).to eq new_value.to_f + expect( helper.edit( :estimated_hours, new_value).to_f ).to eq new_value.to_f invalid_value = '' - expect( edit_with_alert(@issue_id, :estimated_hours, invalid_value) ).to eq new_value.to_f + expect( helper.edit_with_alert( :estimated_hours, invalid_value) ).to eq new_value.to_f end it "parent_issue_id can edit" do issue_ids = @issues_page.issue_ids_on_page issue_new_page = @issues_page.open_new_page() issue_show_page = issue_new_page.create(:bug, 'first subject') - new_issue_id = issue_show_page.id - @issues_page = issue_show_page.open_issues + helper.issue_id = issue_show_page.id + helper.page = issue_show_page.open_issues new_value = @issue_id.to_s - expect( edit(new_issue_id, :parent_issue_id, new_value) ).to eq new_value.to_i + expect( helper.edit(:parent_issue_id, new_value) ).to eq new_value.to_i invalid_value = '' - expect( edit_with_alert(new_issue_id, :parent_issue_id, invalid_value) ).to eq new_value.to_i + expect( helper.edit_with_alert(:parent_issue_id, invalid_value) ).to eq new_value.to_i new_value = @issue_id.to_s - expect( edit(new_issue_id, :parent_issue_id, new_value) ).to eq new_value.to_i + expect( helper.edit(:parent_issue_id, new_value) ).to eq new_value.to_i end - def edit(issue_id, attribute_name, new_value) - quick_edit = @issues_page.open_context(issue_id) - menu_selector = quick_edit.menu_selector(attribute_name) - @issues_page = quick_edit.update_field(issue_id, menu_selector, new_value) - - attribute_name = :parent if attribute_name.to_sym == :parent_issue_id - field_value = get_core_field(issue_id, attribute_name) - - if attribute_name == :parent - field_value["id"] - else - field_value - end - end - - def edit_with_alert(issue_id, attribute_name, new_value) - quick_edit = @issues_page.open_context(issue_id) - menu_selector = quick_edit.menu_selector(attribute_name) - quick_edit.update_field(issue_id, menu_selector, new_value, true) - quick_edit.alert.accept - quick_edit.cancel_quick_edit - - attribute_name = :parent if attribute_name.to_sym == :parent_issue_id - field_value = get_core_field(issue_id, attribute_name) - - if attribute_name == :parent - field_value["id"] - else - field_value - end - end - - def get_core_field(issue_id, attribute_name) - json = get_json("issues/#{issue_id}.json") - - json["issue"][attribute_name.to_s] - end - - def get_json(path) - uri = URI::parse "#{@base_url}#{path}" - res = Net::HTTP::get_response(uri) - JSON.parse(res.body) - end - end diff --git a/test/selenium/edit_custom_field.rb b/test/selenium/edit_custom_field.rb index a959133..a67191d 100644 --- a/test/selenium/edit_custom_field.rb +++ b/test/selenium/edit_custom_field.rb @@ -6,11 +6,13 @@ $: << File.expand_path('../../', __FILE__) require 'spec_helper' Dir[File.dirname(__FILE__) + '/pages/page.rb'].each {|file| require file } Dir[File.dirname(__FILE__) + '/pages/*.rb'].each {|file| require file } +Dir[File.dirname(__FILE__) + '/helpers/*.rb'].each {|file| require file } require "uri" require "net/http" include RSpec::Expectations describe "Edit custom field" do + let(:helper) { TestHelper.new } before(:all) do profile = Selenium::WebDriver::Firefox::Profile.new @@ -26,7 +28,8 @@ describe "Edit custom field" do # open issues start_page = QuickEdit::Test::Pages::StartPage.new(@driver, @base_url, @default_project) first_page = start_page.login @default_user, @default_password - apikey_page = first_page.open_my_apikey + admin_info_page = first_page.open_admin_info + apikey_page = admin_info_page.open_my_apikey(admin_info_page.redmine_version) @api_key = apikey_page.key @issues_page = apikey_page.open_issues @@ -43,6 +46,10 @@ describe "Edit custom field" do else @issues_page = @issues_page.open_issues end + helper.base_url = @base_url + helper.page = @issues_page + helper.issue_id = @issue_id + helper.api_key = @api_key end after(:each) do @@ -55,165 +62,114 @@ describe "Edit custom field" do it "custom_text can edit" do new_value = 'dummy' - expect( edit_custom_field(@issue_id, :custom_text, new_value) ).to eq new_value + expect( helper.edit_custom_field(:custom_text, new_value) ).to eq new_value new_value = 'custom_text: new_value' - expect( edit_custom_field(@issue_id, :custom_text, new_value) ).to eq new_value + expect( helper.edit_custom_field(:custom_text, new_value) ).to eq new_value invalid_value = '' - expect( edit_custom_field_with_alert(@issue_id, :custom_text, invalid_value) ).to eq new_value + expect( helper.edit_custom_field_with_alert(:custom_text, invalid_value) ).to eq new_value end it "custom_int can edit" do new_value = '0' - expect( edit_custom_field(@issue_id, :custom_int, new_value) ).to eq new_value + expect( helper.edit_custom_field(:custom_int, new_value) ).to eq new_value new_value = '2147483647' - expect( edit_custom_field(@issue_id, :custom_int, new_value) ).to eq new_value + expect( helper.edit_custom_field(:custom_int, new_value) ).to eq new_value new_value = '+10' - expect( edit_custom_field(@issue_id, :custom_int, new_value).to_i ).to eq new_value.to_i + expect( helper.edit_custom_field(:custom_int, new_value).to_i ).to eq new_value.to_i new_value = '-10' - expect( edit_custom_field(@issue_id, :custom_int, new_value).to_i ).to eq new_value.to_i + expect( helper.edit_custom_field(:custom_int, new_value).to_i ).to eq new_value.to_i invalid_value = 'a' - expect( edit_custom_field_with_alert(@issue_id, :custom_int, invalid_value) ).to eq new_value + expect( helper.edit_custom_field_with_alert(:custom_int, invalid_value) ).to eq new_value invalid_value = '' - expect( edit_custom_field_with_alert(@issue_id, :custom_int, "") ).to eq new_value + expect( helper.edit_custom_field_with_alert(:custom_int, "") ).to eq new_value end it "custom_date can edit" do new_value = '1900-01-01' - expect( edit_custom_field(@issue_id, :custom_date, new_value) ).to eq new_value + expect( helper.edit_custom_field(:custom_date, new_value) ).to eq new_value new_value = '2015-01-01' - expect( edit_custom_field(@issue_id, :custom_date, new_value) ).to eq new_value + expect( helper.edit_custom_field(:custom_date, new_value) ).to eq new_value invalid_value = '2015-01-0a' - expect( edit_custom_field_with_alert(@issue_id, :custom_date, invalid_value) ).to eq new_value + expect( helper.edit_custom_field_with_alert(:custom_date, invalid_value) ).to eq new_value invalid_value = '' - expect( edit_custom_field_with_alert(@issue_id, :custom_date, invalid_value) ).to eq new_value + expect( helper.edit_custom_field_with_alert(:custom_date, invalid_value) ).to eq new_value end it "custom_long can edit" do new_value = 'dummy' - expect( edit_custom_field(@issue_id, :custom_long, new_value) ).to eq new_value + expect( helper.edit_custom_field(:custom_long, new_value) ).to eq new_value new_value = 'custom_long: new_value ' - expect( edit_custom_field(@issue_id, :custom_long, new_value) ).to eq new_value + expect( helper.edit_custom_field(:custom_long, new_value) ).to eq new_value invalid_value = '' - expect( edit_custom_field_with_alert(@issue_id, :custom_long, invalid_value) ).to eq new_value + expect( helper.edit_custom_field_with_alert(:custom_long, invalid_value) ).to eq new_value end it "custom_float can edit" do new_value = '0' - expect( edit_custom_field(@issue_id, :custom_float, new_value) ).to eq new_value + expect( helper.edit_custom_field(:custom_float, new_value) ).to eq new_value new_value = '0.1' - expect( edit_custom_field(@issue_id, :custom_float, new_value).to_f ).to eq new_value.to_f + expect( helper.edit_custom_field(:custom_float, new_value).to_f ).to eq new_value.to_f new_value = '+0.1' - expect( edit_custom_field(@issue_id, :custom_float, new_value).to_f ).to eq new_value.to_f + expect( helper.edit_custom_field(:custom_float, new_value).to_f ).to eq new_value.to_f new_value = '-0.1' - expect( edit_custom_field(@issue_id, :custom_float, new_value).to_f ).to eq new_value.to_f + expect( helper.edit_custom_field(:custom_float, new_value).to_f ).to eq new_value.to_f new_value = '0.1e2' - expect( edit_custom_field(@issue_id, :custom_float, new_value).to_f ).to eq new_value.to_f + expect( helper.edit_custom_field(:custom_float, new_value).to_f ).to eq new_value.to_f new_value = '0.1e-2' - expect( edit_custom_field(@issue_id, :custom_float, new_value).to_f ).to eq new_value.to_f + expect( helper.edit_custom_field(:custom_float, new_value).to_f ).to eq new_value.to_f invalid_value = '' - expect( edit_custom_field_with_alert(@issue_id, :custom_float, invalid_value) ).to eq new_value + expect( helper.edit_custom_field_with_alert(:custom_float, invalid_value) ).to eq new_value end it "custom_link can edit" do - admin_info_page = @issues_page.open_admin_info + admin_info_page = helper.page.open_admin_info redmine_version = admin_info_page.redmine_version if redmine_version >= 205 - @issues_page = admin_info_page.open_issues + helper.page = admin_info_page.open_issues new_value = 'dummy' - expect( edit_custom_field(@issue_id, :custom_link, new_value) ).to eq new_value + expect( helper.edit_custom_field(:custom_link, new_value) ).to eq new_value new_value = 'custom_link' - expect( edit_custom_field(@issue_id, :custom_link, new_value) ).to eq new_value + expect( helper.edit_custom_field(:custom_link, new_value) ).to eq new_value invalid_value = '' - expect( edit_custom_field_with_alert(@issue_id, :custom_link, invalid_value) ).to eq new_value + expect( helper.edit_custom_field_with_alert(:custom_link, invalid_value) ).to eq new_value end end it "readonly field can not edit" do - welcome_page = @issues_page.logout + welcome_page = helper.page.logout start_page = welcome_page.open_login first_page = start_page.login("dev1", "dummy") - @issues_page = first_page.open_issues + @issues_page = helper.page = first_page.open_issues - field_id = select_field(get_custom_field_defs(), :readonly_in_progress)["id"] - menu_item = @issues_page.find_quick_edit_menu_for_custom_field(@issue_id, field_id) + field_id = helper.select_field(helper.get_custom_field_defs(), :readonly_in_progress)["id"] + menu_item = helper.page.find_quick_edit_menu_for_custom_field(helper.issue_id, field_id) expect( menu_item.attribute("class") ).to eq "quick_edit icon-edit disabled" end - - def edit_custom_field(issue_id, custom_field_name, new_value) - cf = select_field(get_custom_field_defs(), custom_field_name) - cf_id = cf["id"] - - quick_edit = @issues_page.open_context(issue_id) - menu_selector = quick_edit.menu_selector(:custom_field, cf_id) - @issues_page = quick_edit.update_field(issue_id, menu_selector, new_value) - - cf = select_field(get_custom_fields(issue_id), custom_field_name) - cf["value"] - end - - def edit_custom_field_with_alert(issue_id, custom_field_name, new_value="") - cf = select_field(get_custom_field_defs(), custom_field_name) - cf_id = cf["id"] - - quick_edit = @issues_page.open_context(issue_id) - menu_selector = quick_edit.menu_selector(:custom_field, cf_id) - quick_edit.update_field(issue_id, menu_selector, new_value, true) - quick_edit.alert.accept - quick_edit.cancel_quick_edit - - cf = select_field(get_custom_fields(issue_id), custom_field_name) - cf["value"] - end - - def select_field(fields, custom_field_name) - fields.find do |cf_hash| - cf_hash["name"] == custom_field_name.to_s - end - end - - def get_custom_field_defs - json = get_json("/custom_fields.json?key=#{@api_key}") - - json["custom_fields"] - end - - def get_custom_fields(issue_id) - json = get_json("issues/#{issue_id}.json") - - json["issue"]["custom_fields"] - end - - def get_json(path) - uri = URI::parse "#{@base_url}#{path}" - res = Net::HTTP::get_response(uri) - JSON.parse(res.body) - end - end diff --git a/test/selenium/edit_on_mypage.rb b/test/selenium/edit_on_mypage.rb index 6075f46..80e6d99 100644 --- a/test/selenium/edit_on_mypage.rb +++ b/test/selenium/edit_on_mypage.rb @@ -13,6 +13,7 @@ require "net/http" include RSpec::Expectations describe "Edit on the mypage" do + let(:helper) { TestHelper.new } before(:all) do profile = Selenium::WebDriver::Firefox::Profile.new @@ -40,6 +41,9 @@ describe "Edit on the mypage" do before(:each) do @my_page = @my_page.open_mypage + helper.page = @my_page + helper.base_url = @base_url + helper.issue_id = @issue_id end after(:each) do @@ -52,79 +56,79 @@ describe "Edit on the mypage" do it "subject can edit" do new_value = 'dummy' - expect( edit(@issue_id, :subject, new_value) ).to eq new_value + expect( helper.edit(:subject, new_value) ).to eq new_value new_value = 'subject: new_value' - expect( edit(@issue_id, :subject, new_value) ).to eq new_value + expect( helper.edit(:subject, new_value) ).to eq new_value - expect( edit_with_alert(@issue_id, :subject, "") ).to eq new_value + expect( helper.edit_with_alert(:subject, "") ).to eq new_value end it "subject can edit with private note" do new_value = 'dummy' - expect( edit(@issue_id, :subject, new_value) ).to eq new_value + expect( helper.edit(:subject, new_value) ).to eq new_value new_value = {:value => 'subject: with_notes', :notes => {:text => "notes\ntime=" + (Time.now.to_s), :is_private => true}} - expect( edit(@issue_id, :subject, new_value) ).to eq new_value[:value] - expect( latest_note(@issue_id, @my_page.session_cookie) ).to eq new_value + expect( helper.edit(:subject, new_value) ).to eq new_value[:value] + expect( helper.latest_note ).to eq new_value end it "start_date can edit" do new_value = '1900-01-01' - expect( edit(@issue_id, :start_date, new_value) ).to eq new_value + expect( helper.edit(:start_date, new_value) ).to eq new_value new_value = '1900-01-02' - expect( edit(@issue_id, :start_date, new_value) ).to eq new_value + expect( helper.edit(:start_date, new_value) ).to eq new_value invalid_value = '1900-01-0a' - expect( edit_with_alert(@issue_id, :start_date, invalid_value) ).to eq new_value + expect( helper.edit_with_alert(:start_date, invalid_value) ).to eq new_value invalid_value = '' - expect( edit_with_alert(@issue_id, :start_date, invalid_value) ).to eq new_value + expect( helper.edit_with_alert(:start_date, invalid_value) ).to eq new_value end it "due_date can edit" do new_value = '2000-01-01' - expect( edit(@issue_id, :due_date, new_value) ).to eq new_value + expect( helper.edit(:due_date, new_value) ).to eq new_value new_value = '2000-01-02' - expect( edit(@issue_id, :due_date, new_value) ).to eq new_value + expect( helper.edit(:due_date, new_value) ).to eq new_value invalid_value = '2000-01-0a' - expect( edit_with_alert(@issue_id, :due_date, invalid_value) ).to eq new_value + expect( helper.edit_with_alert(:due_date, invalid_value) ).to eq new_value invalid_value = '' - expect( edit_with_alert(@issue_id, :due_date, invalid_value) ).to eq new_value + expect( helper.edit_with_alert(:due_date, invalid_value) ).to eq new_value end it "description can edit" do new_value = 'dummy' - expect( edit(@issue_id, :description, new_value) ).to eq new_value + expect( helper.edit(:description, new_value) ).to eq new_value new_value = 'description: new_value' - expect( edit(@issue_id, :description, new_value) ).to eq new_value + expect( helper.edit(:description, new_value) ).to eq new_value invalid_value = '' - expect( edit_with_alert(@issue_id, :description, invalid_value) ).to eq new_value + expect( helper.edit_with_alert(:description, invalid_value) ).to eq new_value end # unsigned float field it "estimated_hours can edit" do new_value = '0' - expect( edit(@issue_id, :estimated_hours, new_value).to_f ).to eq new_value.to_f + expect( helper.edit(:estimated_hours, new_value).to_f ).to eq new_value.to_f new_value = '0.1' - expect( edit(@issue_id, :estimated_hours, new_value).to_f ).to eq new_value.to_f + expect( helper.edit(:estimated_hours, new_value).to_f ).to eq new_value.to_f new_value = '+0.1' - expect( edit(@issue_id, :estimated_hours, new_value).to_f ).to eq new_value.to_f + expect( helper.edit(:estimated_hours, new_value).to_f ).to eq new_value.to_f new_value = '0.1e2' - expect( edit(@issue_id, :estimated_hours, new_value).to_f ).to eq new_value.to_f + expect( helper.edit(:estimated_hours, new_value).to_f ).to eq new_value.to_f invalid_value = '' - expect( edit_with_alert(@issue_id, :estimated_hours, invalid_value) ).to eq new_value.to_f + expect( helper.edit_with_alert(:estimated_hours, invalid_value) ).to eq new_value.to_f end #it "parent_issue_id can edit" do @@ -143,51 +147,5 @@ describe "Edit on the mypage" do # new_value = @issue_id.to_s # expect( edit(new_issue_id, :parent_issue_id, new_value) ).to eq new_value.to_i #end - - def edit(issue_id, attribute_name, new_value) - quick_edit = @my_page.open_context(issue_id) - menu_selector = quick_edit.menu_selector(attribute_name) - @my_page = quick_edit.update_field(issue_id, menu_selector, new_value) - - attribute_name = :parent if attribute_name.to_sym == :parent_issue_id - field_value = get_core_field(issue_id, attribute_name) - - if attribute_name == :parent - field_value["id"] - else - field_value - end - end - - def edit_with_alert(issue_id, attribute_name, new_value) - quick_edit = @my_page.open_context(issue_id) - menu_selector = quick_edit.menu_selector(attribute_name) - quick_edit.update_field issue_id, menu_selector, new_value, true - quick_edit.alert.accept - quick_edit.cancel_quick_edit - @my_page = quick_edit.open_mypage - - attribute_name = :parent if attribute_name.to_sym == :parent_issue_id - field_value = get_core_field(issue_id, attribute_name) - - if attribute_name == :parent - field_value["id"] - else - field_value - end - end - - def get_core_field(issue_id, attribute_name) - json = get_json("issues/#{issue_id}.json") - - json["issue"][attribute_name.to_s] - end - - def get_json(path) - uri = URI::parse "#{@base_url}#{path}" - res = Net::HTTP::get_response(uri) - JSON.parse(res.body) - end - end diff --git a/test/selenium/helpers/issue_helper.rb b/test/selenium/helpers/issue_helper.rb deleted file mode 100644 index 7b66c58..0000000 --- a/test/selenium/helpers/issue_helper.rb +++ /dev/null @@ -1,94 +0,0 @@ - -# coding: utf-8 - -require "nokogiri" -require "uri" -require "net/http" - - def latest_note(issue_id, session_cookie) - result = {:value => nil, :notes => {:text => nil, :is_private => nil}} - - feed = get_feed("issues/#{issue_id}.atom", session_cookie).css("entry") - feed_limitted = get_feed("issues/#{issue_id}.atom").css("entry") - - entry = feed.pop - entry_limitted = feed_limitted.pop - - parsed_entry = parse_feed_entry(entry) - parsed_entry_limitted = parse_feed_entry(entry_limitted) - #p "parsed_entry---" - #p parsed_entry.inspect - #p "parsed_entry_for_guest---" - #p parsed_entry_limitted.inspect - - # private notes? - if parsed_entry[:notes][:journal_id].to_s != parsed_entry_limitted[:notes][:journal_id].to_s - result[:notes][:is_private] = true - else - result[:notes][:is_private] = false - end - - # The was splitted if notes is private. - if result[:notes][:is_private] - result[:value] = parsed_entry_limitted[:value] - result[:notes][:text] = parsed_entry[:notes][:text] - else - result[:value] = parsed_entry[:value] - result[:notes][:text] = parsed_entry[:notes][:text] - end - - result - end - - def parse_feed_entry(entry) - result = {:value => nil, :notes => {:journal_id => nil, :text => nil, :is_private => nil}} - - # parse - result[:notes][:journal_id] = entry.css("id").text - - # parse - src = entry.css("content").text - #p "content=" + src - html = Nokogiri::HTML(src) - - # get change field from - # - attension - one field only. - unless html.css("li").empty? - change_desc = html.css("li").first - #p "li=" + change_desc.inner_html - - field_name = change_desc.css("strong").first.text - if change_desc.css("i").length == 2 - result[:value] = change_desc.css("i").last.text - else - result[:value] = :none - end - end - - # get notes from - # - attension - not support wiki format - #p "inner html=" + html.inner_html - notes = Nokogiri::HTML(html.inner_html).css("p").inner_html.gsub(/
/, "\n") - #p "text=" + notes - result[:notes][:text] = notes - - result - end - - def get_feed(path, session_cookie=nil) - uri = URI::parse "#{@base_url}#{path}" - if session_cookie.nil? - headers = {} - else - headers = {'Cookie' => cookie_hash_to_header_string(session_cookie)} - end - res = Net::HTTP.start(uri.host, uri.port) do |http| - http.get(uri.path, headers) - end - src = res.body.gsub(//, "") # To avoid erroneous decisions made by Nokogiri - Nokogiri::Slop(src) - end - - def cookie_hash_to_header_string(cookie) - "#{cookie[:name]}=#{cookie[:value]};path=#{cookie[:path]}" - end diff --git a/test/selenium/pages/my_apikey.rb b/test/selenium/pages/my_apikey.rb index 1dc93c3..972ee77 100644 --- a/test/selenium/pages/my_apikey.rb +++ b/test/selenium/pages/my_apikey.rb @@ -4,19 +4,36 @@ module QuickEdit module Test module Pages class MyApiKeyPage < Page - def initialize(driver, base_url, project) + def initialize(driver, base_url, project, redmine_version) super(driver, base_url, project) + @redmine_version = redmine_version - find_element :css, "body[class='controller-my action-show_api_key']" + if @redmine_version >= 301 + find_element :css, "body[class='controller-my action-show_api_key']" + else + find_element :css, "body[class='controller-my action-account']" + end end - def self.open(driver, base_url, project) - driver.get "#{base_url}/my/api_key" - MyApiKeyPage.new driver, base_url, project + def self.open(driver, base_url, project, redmine_version) + if redmine_version >= 301 + driver.get "#{base_url}/my/api_key" + MyApiKeyPage.new driver, base_url, project, redmine_version + else + driver.get "#{base_url}/my/account" + MyApiKeyPage.new driver, base_url, project, redmine_version + end end def key - find_element(:css, "div.box > pre").text + if @redmine_version >= 301 + find_element(:css, "div.box > pre").text + else + find_elements(:css, 'a[href="#"]').select do |e| + e.text == "Show" + end.first.click + find_element(:css, "pre#api-access-key").text + end end end end diff --git a/test/selenium/pages/page.rb b/test/selenium/pages/page.rb index 361f76d..836f58d 100644 --- a/test/selenium/pages/page.rb +++ b/test/selenium/pages/page.rb @@ -86,8 +86,8 @@ module QuickEdit @driver.switch_to.alert end - def open_my_apikey - MyApiKeyPage.open @driver, @base_url, @project + def open_my_apikey(redmine_version) + MyApiKeyPage.open @driver, @base_url, @project, redmine_version end def open_admin_info diff --git a/test/selenium/pages/quick_edit.rb b/test/selenium/pages/quick_edit.rb index 3b59a30..73d7f77 100644 --- a/test/selenium/pages/quick_edit.rb +++ b/test/selenium/pages/quick_edit.rb @@ -40,11 +40,15 @@ module QuickEdit @before_page.class.open @driver, @base_url, @project unless desire_alerting end - def clear_field(issue_id, menu_selector) + def clear_field(issue_id, menu_selector, notes) menu_element = find_element(:id, "quick_edit_context") menu_item_element = find_element(:css, menu_selector) action.move_to(menu_element).click(menu_item_element).perform + if notes.is_a?(Hash) + input_text :id, "notes_for_edit", notes[:text] unless notes.nil? + click :id, "issue_private_notes_for_edit" if notes[:is_private] + end find_element(:css, '#quick_edit_input_dialog #clear').click buttons = find_elements(:css, "button > span") diff --git a/test/selenium/replace_core_field.rb b/test/selenium/replace_core_field.rb index 950e3f9..bfe2127 100644 --- a/test/selenium/replace_core_field.rb +++ b/test/selenium/replace_core_field.rb @@ -12,6 +12,7 @@ require "net/http" include RSpec::Expectations describe "Replace core field" do + let(:helper) { TestHelper.new } before(:all) do profile = Selenium::WebDriver::Firefox::Profile.new @@ -38,6 +39,9 @@ describe "Replace core field" do before(:each) do @issues_page = @issues_page.open_issues + helper.page = @issues_page + helper.base_url = @base_url + helper.issue_id = @issue_id end after(:each) do @@ -55,7 +59,7 @@ describe "Replace core field" do :replace => 'NEW', :match_case => false } - expect( replace(@issue_id, :subject, params) ).to eq new_value + expect( helper.replace(:subject, params) ).to eq new_value # match case test: to lower new_value = 'new text' @@ -64,7 +68,7 @@ describe "Replace core field" do :replace => 'new', :match_case => true } - expect( replace(@issue_id, :subject, params) ).to eq new_value + expect( helper.replace(:subject, params) ).to eq new_value # special chars test new_value = "new<>\'\"&\\+ %text" @@ -73,7 +77,7 @@ describe "Replace core field" do :replace => "<>\'\"&\\+ %", :match_case => false } - expect( replace(@issue_id, :subject, params) ).to eq new_value + expect( helper.replace(:subject, params) ).to eq new_value # escape test for meta character of regexp pattern new_value = "new<>\'\"&\\++ %text" @@ -82,20 +86,20 @@ describe "Replace core field" do :replace => "\\+", :match_case => false } - expect( replace(@issue_id, :subject, params) ).to eq new_value + expect( helper.replace(:subject, params) ).to eq new_value params = { :find => '', :replace => '', :match_case => false } - expect( replace_with_alert(@issue_id, :subject, params) ).to eq new_value + expect( helper.replace_with_alert(:subject, params) ).to eq new_value end it "subject can replace with private note" do # initialize new_value = 'dummy' - edit(@issue_id, :subject, new_value) + helper.edit(:subject, new_value) # find & replace new_value = {:value => 'summy', @@ -104,68 +108,8 @@ describe "Replace core field" do :replace => 's', :match_case => false, :notes => new_value[:notes]} - expect( replace(@issue_id, :subject, params) ).to eq new_value[:value] - expect( latest_note(@issue_id, @issues_page.session_cookie) ).to eq new_value + expect( helper.replace(:subject, params) ).to eq new_value[:value] + expect( helper.latest_note ).to eq new_value end - - def edit(issue_id, attribute_name, new_value) - quick_edit = @issues_page.open_context(issue_id) - menu_selector = quick_edit.menu_selector(attribute_name) - @issues_page = quick_edit.update_field(issue_id, menu_selector, new_value) - - attribute_name = :parent if attribute_name.to_sym == :parent_issue_id - field_value = get_core_field(issue_id, attribute_name) - - if attribute_name == :parent - field_value["id"] - else - field_value - end - end - - def replace(issue_id, attribute_name, params) - quick_edit = @issues_page.open_context(issue_id) - menu_selector = quick_edit.menu_selector(attribute_name) - @issues_page = quick_edit.replace(issue_id, menu_selector, params) - - attribute_name = :parent if attribute_name.to_sym == :parent_issue_id - field_value = get_core_field(issue_id, attribute_name) - - if attribute_name == :parent - field_value["id"] - else - field_value - end - end - - def replace_with_alert(issue_id, attribute_name, params) - quick_edit = @issues_page.open_context(issue_id) - menu_selector = quick_edit.menu_selector(attribute_name) - quick_edit.replace(issue_id, menu_selector, params, true) - quick_edit.alert.accept - quick_edit.cancel_quick_edit - - attribute_name = :parent if attribute_name.to_sym == :parent_issue_id - field_value = get_core_field(issue_id, attribute_name) - - if attribute_name == :parent - field_value["id"] - else - field_value - end - end - - def get_core_field(issue_id, attribute_name) - json = get_json("issues/#{issue_id}.json") - - json["issue"][attribute_name.to_s] - end - - def get_json(path) - uri = URI::parse "#{@base_url}#{path}" - res = Net::HTTP::get_response(uri) - JSON.parse(res.body) - end - end diff --git a/test/selenium/replace_core_field_on_mypage.rb b/test/selenium/replace_core_field_on_mypage.rb index 6543be9..0e6217e 100644 --- a/test/selenium/replace_core_field_on_mypage.rb +++ b/test/selenium/replace_core_field_on_mypage.rb @@ -2,7 +2,6 @@ require "json" require "selenium-webdriver" -$: << File.expand_path('../../', __FILE__) require 'spec_helper' Dir[File.dirname(__FILE__) + '/pages/page.rb'].each {|file| require file } Dir[File.dirname(__FILE__) + '/pages/*.rb'].each {|file| require file } @@ -12,6 +11,7 @@ require "net/http" include RSpec::Expectations describe "Replace core field" do + let(:helper) { TestHelper.new } before(:all) do profile = Selenium::WebDriver::Firefox::Profile.new @@ -38,6 +38,9 @@ describe "Replace core field" do before(:each) do @issues_page = @issues_page.open_mypage + helper.page = @issues_page + helper.base_url = @base_url + helper.issue_id = @issue_id end after(:each) do @@ -54,26 +57,26 @@ describe "Replace core field" do :find => 'initial', :replace => 'new' } - expect( replace(@issue_id, :subject, params) ).to eq new_value + expect( helper.replace(:subject, params) ).to eq new_value new_value = "new<>\'\"&+% text" params = { :find => ' ', :replace => "<>\'\"&+% " } - expect( replace(@issue_id, :subject, params) ).to eq new_value + expect( helper.replace(:subject, params) ).to eq new_value params = { :find => '', :replace => '' } - expect( replace_with_alert(@issue_id, :subject, params) ).to eq new_value + expect( helper.replace_with_alert(:subject, params) ).to eq new_value end it "subject can replace with private note" do # initialize new_value = 'dummy' - edit(@issue_id, :subject, new_value) + helper.edit(:subject, new_value) # find & replace new_value = {:value => 'summy', @@ -82,68 +85,8 @@ describe "Replace core field" do :replace => 's', :match_case => false, :notes => new_value[:notes]} - expect( replace(@issue_id, :subject, param) ).to eq new_value[:value] - expect( latest_note(@issue_id, @issues_page.session_cookie) ).to eq new_value + expect( helper.replace(:subject, param) ).to eq new_value[:value] + expect( helper.latest_note ).to eq new_value end - def edit(issue_id, attribute_name, new_value) - quick_edit = @issues_page.open_context(issue_id) - menu_selector = quick_edit.menu_selector(attribute_name) - @issues_page = quick_edit.update_field(issue_id, menu_selector, new_value) - - attribute_name = :parent if attribute_name.to_sym == :parent_issue_id - field_value = get_core_field(issue_id, attribute_name) - - if attribute_name == :parent - field_value["id"] - else - field_value - end - end - - def replace(issue_id, attribute_name, params) - quick_edit = @issues_page.open_context(issue_id) - menu_selector = quick_edit.menu_selector(attribute_name) - @issues_page = quick_edit.replace(issue_id, menu_selector, params, false) - - attribute_name = :parent if attribute_name.to_sym == :parent_issue_id - field_value = get_core_field(issue_id, attribute_name) - - if attribute_name == :parent - field_value["id"] - else - field_value - end - end - - def replace_with_alert(issue_id, attribute_name, params) - quick_edit = @issues_page.open_context(issue_id) - menu_selector = quick_edit.menu_selector(attribute_name) - quick_edit.replace(issue_id, menu_selector, params, true) - quick_edit.alert.accept - quick_edit.cancel_quick_edit - - attribute_name = :parent if attribute_name.to_sym == :parent_issue_id - field_value = get_core_field(issue_id, attribute_name) - - if attribute_name == :parent - field_value["id"] - else - field_value - end - end - - def get_core_field(issue_id, attribute_name) - json = get_json("issues/#{issue_id}.json") - - json["issue"][attribute_name.to_s] - end - - def get_json(path) - uri = URI::parse "#{@base_url}#{path}" - res = Net::HTTP::get_response(uri) - JSON.parse(res.body) - end - - end -- 2.11.0