OSDN Git Service

test for add note. refs #35392
[quickedit/quick_edit.git] / test / selenium / helpers / issue_helper.rb
1
2 # coding: utf-8
3
4 require "nokogiri"
5 require "uri"
6 require "net/http"
7
8   def latest_note(issue_id, session_cookie)
9     result = {:value => nil, :notes => {:text => nil, :is_private => nil}}
10
11     feed = get_feed("issues/#{issue_id}.atom", session_cookie).css("entry")
12     feed_limitted = get_feed("issues/#{issue_id}.atom").css("entry")
13
14     entry = feed.pop
15     entry_limitted = feed_limitted.pop
16
17     parsed_entry = parse_feed_entry(entry)
18     parsed_entry_limitted = parse_feed_entry(entry_limitted)
19     #p "parsed_entry---"
20     #p parsed_entry.inspect
21     #p "parsed_entry_for_guest---"
22     #p parsed_entry_limitted.inspect
23
24     # private notes?
25     if parsed_entry[:notes][:journal_id].to_s != parsed_entry_limitted[:notes][:journal_id].to_s
26       result[:notes][:is_private] = true
27     else
28       result[:notes][:is_private] = false
29     end
30
31     # The <entry> was splitted if notes is private.
32     if result[:notes][:is_private]
33       result[:value] = parsed_entry_limitted[:value]
34       result[:notes][:text] = parsed_entry[:notes][:text]
35     else
36       result[:value] = parsed_entry[:value]
37       result[:notes][:text] = parsed_entry[:notes][:text]
38     end
39
40     result
41   end
42
43   def parse_feed_entry(entry)
44     result = {:value => nil, :notes => {:journal_id => nil, :text => nil, :is_private => nil}}
45
46     # parse <id>
47     result[:notes][:journal_id] = entry.css("id").text
48
49     # parse <content>
50     src = entry.css("content").text
51     #p "content=" + src
52     html = Nokogiri::HTML(src)
53
54     # get change field from <content>
55     # - attension - one field only.
56     unless html.css("li").empty?
57       change_desc = html.css("li").first
58       #p "li=" + change_desc.inner_html
59
60       field_name = change_desc.css("strong").first.text
61       if change_desc.css("i").length == 2
62         result[:value] = change_desc.css("i").last.text
63       else
64         result[:value] = :none
65       end
66     end
67
68     # get notes from <content>
69     # - attension - not support wiki format
70     #p "inner html=" + html.inner_html
71     notes = Nokogiri::HTML(html.inner_html).css("p").inner_html.gsub(/<br>/, "\n")
72     #p "text=" + notes
73     result[:notes][:text] = notes
74
75     result
76   end
77   
78   def get_feed(path, session_cookie=nil)
79     uri = URI::parse "#{@base_url}#{path}"
80     if session_cookie.nil?
81       headers = {}
82     else
83       headers = {'Cookie' => cookie_hash_to_header_string(session_cookie)}
84     end
85     res = Net::HTTP.start(uri.host, uri.port) do |http|
86       http.get(uri.path, headers)
87     end
88     src = res.body.gsub(/<content type="html">/, "<content>") # To avoid erroneous decisions made by Nokogiri
89     Nokogiri::Slop(src)
90   end
91
92   def cookie_hash_to_header_string(cookie)
93     "#{cookie[:name]}=#{cookie[:value]};path=#{cookie[:path]}"
94   end