From 813608d320f15aa3bd51e5582464b858b26fda49 Mon Sep 17 00:00:00 2001 From: akrstjp Date: Fri, 1 Apr 2016 22:28:14 +0900 Subject: [PATCH] test for add note. refs #35392 --- test/selenium/clear_core_field.rb | 14 ++++ test/selenium/edit_core_field.rb | 18 ++++- test/selenium/edit_on_mypage.rb | 11 ++++ test/selenium/helpers/issue_helper.rb | 94 +++++++++++++++++++++++++++ test/selenium/pages/issues.rb | 12 +++- test/selenium/pages/page.rb | 4 ++ test/selenium/pages/quick_edit.rb | 23 +++++-- test/selenium/replace_core_field.rb | 19 +++++- test/selenium/replace_core_field_on_mypage.rb | 19 +++++- 9 files changed, 205 insertions(+), 9 deletions(-) create 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 93205bc..040628f 100644 --- a/test/selenium/clear_core_field.rb +++ b/test/selenium/clear_core_field.rb @@ -6,6 +6,7 @@ $: << 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 @@ -54,6 +55,18 @@ describe "Clear core field" do expect( clear(@issue_id, :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 + + # 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 + end + it "due_date can clear" do new_value = '2000-01-01' expect( edit(@issue_id, :due_date, new_value) ).to eq new_value @@ -86,6 +99,7 @@ describe "Clear core field" do 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"] diff --git a/test/selenium/edit_core_field.rb b/test/selenium/edit_core_field.rb index 488f26e..c9b7f44 100644 --- a/test/selenium/edit_core_field.rb +++ b/test/selenium/edit_core_field.rb @@ -6,6 +6,7 @@ $: << 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 @@ -32,7 +33,7 @@ describe "Edit core field" do issue_new_page = @issues_page.open_new_page() issue_show_page = issue_new_page.create(:bug, 'first subject') @issue_id = issue_show_page.id - + end before(:each) do @@ -57,6 +58,20 @@ describe "Edit core field" do expect( edit_with_alert(@issue_id, :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 + 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( lastest_note(@issue_id, @issues_page.session_cookie) ).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 @@ -174,5 +189,4 @@ describe "Edit core field" do JSON.parse(res.body) end - end diff --git a/test/selenium/edit_on_mypage.rb b/test/selenium/edit_on_mypage.rb index 9c4de8a..6075f46 100644 --- a/test/selenium/edit_on_mypage.rb +++ b/test/selenium/edit_on_mypage.rb @@ -7,6 +7,7 @@ require 'spec_helper' Dir[File.dirname(__FILE__) + '/pages/page.rb'].each {|file| require file } Dir[File.dirname(__FILE__) + '/pages/quick_edit.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 @@ -59,6 +60,16 @@ describe "Edit on the mypage" do expect( edit_with_alert(@issue_id, :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 + + 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 + end + it "start_date can edit" do new_value = '1900-01-01' expect( edit(@issue_id, :start_date, new_value) ).to eq new_value diff --git a/test/selenium/helpers/issue_helper.rb b/test/selenium/helpers/issue_helper.rb new file mode 100644 index 0000000..7b66c58 --- /dev/null +++ b/test/selenium/helpers/issue_helper.rb @@ -0,0 +1,94 @@ + +# 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/issues.rb b/test/selenium/pages/issues.rb index 823bc8d..9e0d81e 100644 --- a/test/selenium/pages/issues.rb +++ b/test/selenium/pages/issues.rb @@ -67,7 +67,17 @@ module QuickEdit menu_item_element = find_element(:css, menu_selector) action.move_to(menu_element).click(menu_item_element).perform - input_text :id, "new_value", new_value + if new_value.is_a?(Hash) + if new_value[:value] == :none + click :css, '#quick_edit_input_dialog #clear' + else + input_text :id, "new_value", new_value[:value] + end + input_text :id, "notes_for_edit", new_value[:notes][:text] unless new_value[:notes].nil? + click :id, "issue_private_notes_for_edit" if new_value[:notes][:is_private] + else + input_text :id, "new_value", new_value + end buttons = find_elements(:css, "button > span") submit_button = buttons.select {|button| button.text =~ /Submit/} diff --git a/test/selenium/pages/page.rb b/test/selenium/pages/page.rb index 61caaa0..361f76d 100644 --- a/test/selenium/pages/page.rb +++ b/test/selenium/pages/page.rb @@ -131,6 +131,10 @@ module QuickEdit def current_user() find_element(:css, "a.user.active").text end + + def session_cookie() + @driver.manage.cookie_named("_redmine_session") + end end end end diff --git a/test/selenium/pages/quick_edit.rb b/test/selenium/pages/quick_edit.rb index e22943c..2b492a0 100644 --- a/test/selenium/pages/quick_edit.rb +++ b/test/selenium/pages/quick_edit.rb @@ -25,7 +25,13 @@ module QuickEdit menu_item_element = find_element(:css, menu_selector) action.move_to(menu_element).click(menu_item_element).perform - input_text :id, "new_value", new_value + if new_value.is_a?(Hash) + input_text :id, "new_value", new_value[:value] + input_text :id, "notes_for_edit", new_value[:notes][:text] unless new_value[:notes].nil? + click :id, "issue_private_notes_for_edit" if new_value[:notes][:is_private] + else + input_text :id, "new_value", new_value + end buttons = find_elements(:css, "button > span") submit_button = buttons.select {|button| button.text =~ /Submit/} @@ -84,9 +90,18 @@ module QuickEdit click :id, :replace_switcher - input_text :id, :find, find_value - input_text :css, "#quick_edit_input_dialog #replace", replace_value - click :id, :match_case if match_case + if find_value.is_a?(Hash) + input_text :id, :find, find_value[:find] + input_text :css, "#quick_edit_input_dialog #replace", find_value[:replace] + click :id, :match_case if find_value[:match_case] + + input_text :id, "notes_for_replace", find_value[:notes][:text] unless find_value[:notes].nil? + click :id, "issue_private_notes_for_replace" if find_value[:notes][:is_private] + else + input_text :id, :find, find_value + input_text :css, "#quick_edit_input_dialog #replace", replace_value + click :id, :match_case if match_case + end buttons = find_elements(:css, "button > span") submit_button = buttons.select {|button| button.text =~ /Submit/} diff --git a/test/selenium/replace_core_field.rb b/test/selenium/replace_core_field.rb index 921f7a9..81a6fd9 100644 --- a/test/selenium/replace_core_field.rb +++ b/test/selenium/replace_core_field.rb @@ -6,6 +6,7 @@ $: << 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 @@ -81,6 +82,22 @@ describe "Replace core field" do expect( replace_with_alert(@issue_id, :subject, find, replace, match_case) ).to eq new_value end + it "subject can replace with private note" do + # initialize + new_value = 'dummy' + edit(@issue_id, :subject, new_value) + + # find & replace + new_value = {:value => 'summy', + :notes => {:text => "notes\ntime=" + (Time.now.to_s), :is_private => true}} + param = {:find => 'd', + :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 + 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) @@ -96,7 +113,7 @@ describe "Replace core field" do end end - def replace(issue_id, attribute_name, find, replace, match_case) + def replace(issue_id, attribute_name, find, replace=nil, match_case=nil) 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, find, replace, match_case) diff --git a/test/selenium/replace_core_field_on_mypage.rb b/test/selenium/replace_core_field_on_mypage.rb index 7948f1e..191f856 100644 --- a/test/selenium/replace_core_field_on_mypage.rb +++ b/test/selenium/replace_core_field_on_mypage.rb @@ -6,6 +6,7 @@ $: << 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 @@ -63,6 +64,22 @@ describe "Replace core field" do expect( replace_with_alert(@issue_id, :subject, find, replace) ).to eq new_value end + it "subject can replace with private note" do + # initialize + new_value = 'dummy' + edit(@issue_id, :subject, new_value) + + # find & replace + new_value = {:value => 'summy', + :notes => {:text => "notes\ntime=" + (Time.now.to_s), :is_private => true}} + param = {:find => 'd', + :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 + 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) @@ -78,7 +95,7 @@ describe "Replace core field" do end end - def replace(issue_id, attribute_name, find, replace) + def replace(issue_id, attribute_name, find, replace=nil) 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, find, replace, false) -- 2.11.0