OSDN Git Service

test for add note. refs #35392
authorakrstjp <akrst@users.osdn.me>
Fri, 1 Apr 2016 13:28:14 +0000 (22:28 +0900)
committerakrstjp <akrst@users.osdn.me>
Fri, 1 Apr 2016 13:28:14 +0000 (22:28 +0900)
test/selenium/clear_core_field.rb
test/selenium/edit_core_field.rb
test/selenium/edit_on_mypage.rb
test/selenium/helpers/issue_helper.rb [new file with mode: 0644]
test/selenium/pages/issues.rb
test/selenium/pages/page.rb
test/selenium/pages/quick_edit.rb
test/selenium/replace_core_field.rb
test/selenium/replace_core_field_on_mypage.rb

index 93205bc..040628f 100644 (file)
@@ -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"]
index 488f26e..c9b7f44 100644 (file)
@@ -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
index 9c4de8a..6075f46 100644 (file)
@@ -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 (file)
index 0000000..7b66c58
--- /dev/null
@@ -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 <entry> 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 <id>
+    result[:notes][:journal_id] = entry.css("id").text
+
+    # parse <content>
+    src = entry.css("content").text
+    #p "content=" + src
+    html = Nokogiri::HTML(src)
+
+    # get change field from <content>
+    # - 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 <content>
+    # - attension - not support wiki format
+    #p "inner html=" + html.inner_html
+    notes = Nokogiri::HTML(html.inner_html).css("p").inner_html.gsub(/<br>/, "\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(/<content type="html">/, "<content>") # 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
index 823bc8d..9e0d81e 100644 (file)
@@ -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/}
index 61caaa0..361f76d 100644 (file)
@@ -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
index e22943c..2b492a0 100644 (file)
@@ -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/}
index 921f7a9..81a6fd9 100644 (file)
@@ -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)
index 7948f1e..191f856 100644 (file)
@@ -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)