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
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
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"]
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
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
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
JSON.parse(res.body)
end
-
end
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
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
--- /dev/null
+
+# 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
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/}
def current_user()
find_element(:css, "a.user.active").text
end
+
+ def session_cookie()
+ @driver.manage.cookie_named("_redmine_session")
+ end
end
end
end
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/}
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/}
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
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)
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)
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
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)
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)