OSDN Git Service

test for add note. refs #35392
[quickedit/quick_edit.git] / test / selenium / replace_core_field.rb
1 # coding: utf-8
2
3 require "json"
4 require "selenium-webdriver"
5 $: << File.expand_path('../../', __FILE__)
6 require 'spec_helper'
7 Dir[File.dirname(__FILE__) + '/pages/page.rb'].each {|file| require file }
8 Dir[File.dirname(__FILE__) + '/pages/*.rb'].each {|file| require file }
9 Dir[File.dirname(__FILE__) + '/helpers/*.rb'].each {|file| require file }
10 require "uri"
11 require "net/http"
12 include RSpec::Expectations
13
14 describe "Replace core field" do
15
16   before(:all) do
17     profile = Selenium::WebDriver::Firefox::Profile.new
18     @driver = Selenium::WebDriver.for :firefox, :profile => profile
19     @driver.manage.window.maximize
20     @base_url = "http://localhost:3000/"
21     @driver.manage.timeouts.implicit_wait = 10
22     @verification_errors = []
23     @default_project = "test"
24     @default_user = "admin"
25     @default_password = "dummy"
26
27     # open issues page
28     start_page = QuickEdit::Test::Pages::StartPage.new(@driver, @base_url, @default_project)
29     first_page = start_page.login @default_user, @default_password
30     @issues_page = first_page.open_issues
31
32     # create issue for test
33     issue_new_page = @issues_page.open_new_page()
34     issue_show_page = issue_new_page.create(:bug, 'initial text')
35     @issue_id = issue_show_page.id
36
37   end
38
39   before(:each) do
40     @issues_page = @issues_page.open_issues
41   end
42   
43   after(:each) do
44     expect(@verification_errors).to match_array []
45   end
46   
47   after(:all) do
48     @driver.quit
49   end
50   
51   it "subject can replace" do
52     new_value = 'NEW text'
53     find = 'initial'
54     replace = 'NEW'
55     match_case = false
56     expect( replace(@issue_id, :subject, find, replace, match_case) ).to eq new_value
57
58     # match case test: to lower
59     new_value = 'new text'
60     find = 'new'
61     replace = 'new'
62     match_case = true
63     expect( replace(@issue_id, :subject, find, replace, match_case) ).to eq new_value
64
65     # special chars test
66     new_value = "new<>\'\"&\\+ %text"
67     find = ' '
68     replace = "<>\'\"&\\+ %"
69     match_case = false
70     expect( replace(@issue_id, :subject, find, replace, match_case) ).to eq new_value
71
72     # escape test for meta character of regexp pattern
73     new_value = "new<>\'\"&\\++ %text"
74     find = '\\'
75     replace = "\\+"
76     match_case = false
77     expect( replace(@issue_id, :subject, find, replace, match_case) ).to eq new_value
78
79     find = ''
80     replace = ''
81     match_case = false
82     expect( replace_with_alert(@issue_id, :subject, find, replace, match_case) ).to eq new_value
83   end
84
85   it "subject can replace with private note" do
86     # initialize
87     new_value = 'dummy'
88     edit(@issue_id, :subject, new_value)
89
90     # find & replace
91     new_value = {:value => 'summy',
92                  :notes => {:text => "notes\ntime=" + (Time.now.to_s), :is_private => true}}
93     param = {:find => 'd',
94              :replace => 's',
95              :match_case => false,
96              :notes => new_value[:notes]}
97     expect( replace(@issue_id, :subject, param) ).to eq new_value[:value]
98     expect( latest_note(@issue_id, @issues_page.session_cookie) ).to eq new_value
99   end
100
101   def edit(issue_id, attribute_name, new_value)
102     quick_edit = @issues_page.open_context(issue_id)
103     menu_selector = quick_edit.menu_selector(attribute_name)
104     @issues_page = quick_edit.update_field(issue_id, menu_selector, new_value)
105
106     attribute_name = :parent if attribute_name.to_sym == :parent_issue_id
107     field_value = get_core_field(issue_id, attribute_name)
108
109     if attribute_name == :parent
110       field_value["id"]
111     else
112       field_value
113     end
114   end
115
116   def replace(issue_id, attribute_name, find, replace=nil, match_case=nil)
117     quick_edit = @issues_page.open_context(issue_id)
118     menu_selector = quick_edit.menu_selector(attribute_name)
119     @issues_page = quick_edit.replace(issue_id, menu_selector, find, replace, match_case)
120
121     attribute_name = :parent if attribute_name.to_sym == :parent_issue_id
122     field_value = get_core_field(issue_id, attribute_name)
123
124     if attribute_name == :parent
125       field_value["id"]
126     else
127       field_value
128     end
129   end
130
131   def replace_with_alert(issue_id, attribute_name, find, replace, match_case)
132     quick_edit = @issues_page.open_context(issue_id)
133     menu_selector = quick_edit.menu_selector(attribute_name)
134     quick_edit.replace(issue_id, menu_selector, find, replace, match_case, true)
135     quick_edit.alert.accept
136     quick_edit.cancel_quick_edit
137
138     attribute_name = :parent if attribute_name.to_sym == :parent_issue_id
139     field_value = get_core_field(issue_id, attribute_name)
140
141     if attribute_name == :parent
142       field_value["id"]
143     else
144       field_value
145     end
146   end
147
148   def get_core_field(issue_id, attribute_name)
149     json = get_json("issues/#{issue_id}.json")
150
151     json["issue"][attribute_name.to_s]
152   end
153
154   def get_json(path)
155     uri = URI::parse "#{@base_url}#{path}"
156     res = Net::HTTP::get_response(uri)
157     JSON.parse(res.body)
158   end
159   
160   
161 end