Commit 37024235645ce4258b53dc5b8f931a2ebf4d31bb

Authored by Victor Costa
1 parent 1100d1b7
Exists in master

Display pairwise content in read only mode

controllers/profile/pairwise_plugin_profile_controller.rb
@@ -31,6 +31,7 @@ class PairwisePluginProfileController < ProfileController @@ -31,6 +31,7 @@ class PairwisePluginProfileController < ProfileController
31 31
32 def choose 32 def choose
33 @pairwise_content = find_content(params) 33 @pairwise_content = find_content(params)
  34 + return render_access_denied if @pairwise_content.archived?
34 vote = @pairwise_content.vote_to(params[:prompt_id], params[:direction], user_identifier, params[:appearance_id]) 35 vote = @pairwise_content.vote_to(params[:prompt_id], params[:direction], user_identifier, params[:appearance_id])
35 if request.xhr? 36 if request.xhr?
36 render 'content_viewer/load_prompt.rjs' 37 render 'content_viewer/load_prompt.rjs'
@@ -153,4 +154,3 @@ class PairwisePluginProfileController < ProfileController @@ -153,4 +154,3 @@ class PairwisePluginProfileController < ProfileController
153 154
154 155
155 end 156 end
156 -  
lib/pairwise_plugin/pairwise_content.rb
@@ -54,15 +54,24 @@ class PairwisePlugin::PairwiseContent < Article @@ -54,15 +54,24 @@ class PairwisePlugin::PairwiseContent < Article
54 'Question managed by pairwise' 54 'Question managed by pairwise'
55 end 55 end
56 56
  57 + def css_class_name
  58 + cl = "pairwise-plugin_pairwise-content"
  59 + cl += archived? ? " archived" : " active"
  60 + end
  61 +
57 def to_html(options = {}) 62 def to_html(options = {})
58 source = options["source"] 63 source = options["source"]
59 embeded = options.has_key? "embeded" 64 embeded = options.has_key? "embeded"
60 prompt_id = options["prompt_id"] 65 prompt_id = options["prompt_id"]
61 pairwise_content = self 66 pairwise_content = self
62 - if not Environment.default.enabled_plugins.include? "PairwisePlugin" 67 + if not environment.plugin_enabled?(PairwisePlugin)
63 proc do 68 proc do
64 render :file => 'content_viewer/closed_pool' 69 render :file => 'content_viewer/closed_pool'
65 end 70 end
  71 + elsif pairwise_content.archived?
  72 + proc do
  73 + render :file => 'content_viewer/read_only', :locals => {:pairwise_content => pairwise_content}
  74 + end
66 else 75 else
67 proc do 76 proc do
68 locals = {:pairwise_content => pairwise_content, :source => source, :embeded => embeded, :prompt_id => prompt_id } 77 locals = {:pairwise_content => pairwise_content, :source => source, :embeded => embeded, :prompt_id => prompt_id }
public/style.css
@@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
2 width: 94%; 2 width: 94%;
3 } 3 }
4 4
5 -.pairwise-plugin_pairwise-content #article-header .title { 5 +.pairwise-plugin_pairwise-content.active #article-header .title {
6 display: none; 6 display: none;
7 } 7 }
8 8
test/functional/profile/pairwise_plugin_profile_controller_test.rb
@@ -271,4 +271,20 @@ class PairwisePluginProfileControllerTest < ActionController::TestCase @@ -271,4 +271,20 @@ class PairwisePluginProfileControllerTest < ActionController::TestCase
271 assert_redirected_to @content.url 271 assert_redirected_to @content.url
272 assert_equal "Only logged user could suggest new ideas", flash[:error] 272 assert_equal "Only logged user could suggest new ideas", flash[:error]
273 end 273 end
  274 +
  275 + should 'not register a vote when pairwise is archived' do
  276 + login_as(@user.user.login)
  277 + @content.update_attribute(:archived, true)
  278 + PairwisePluginProfileController.any_instance.expects(:find_content).returns(@content).at_least_once
  279 +
  280 + get :choose,
  281 + :profile => @profile.identifier,
  282 + :id => @content.id,
  283 + :question_id => @question.id,
  284 + :prompt_id => @question.prompt.id,
  285 + :appearance_id => @question.appearance_id,
  286 + :direction => 'left'
  287 + assert_response 403
  288 + end
  289 +
274 end 290 end
test/unit/pairwise_plugin/pairwise_content_test.rb
@@ -18,7 +18,7 @@ class PairwisePlugin::PairwiseContentTest < ActiveSupport::TestCase @@ -18,7 +18,7 @@ class PairwisePlugin::PairwiseContentTest < ActiveSupport::TestCase
18 18
19 def setup 19 def setup
20 pairwise_env_settings = { :api_host => "http://localhost:3030/", 20 pairwise_env_settings = { :api_host => "http://localhost:3030/",
21 - :username => "abner.oliveira@serpro.gov.br", 21 + :username => "abner.oliveira@serpro.gov.br",
22 :password => "serpro" 22 :password => "serpro"
23 } 23 }
24 @profile = create_user('testing').person 24 @profile = create_user('testing').person
@@ -39,7 +39,7 @@ class PairwisePlugin::PairwiseContentTest < ActiveSupport::TestCase @@ -39,7 +39,7 @@ class PairwisePlugin::PairwiseContentTest < ActiveSupport::TestCase
39 question = @http_stub_fixtures.create_question(2, 'Question 2', 'Choice X\nChoice Y') 39 question = @http_stub_fixtures.create_question(2, 'Question 2', 'Choice X\nChoice Y')
40 assert_not_nil question 40 assert_not_nil question
41 assert_equal 2, question.id 41 assert_equal 2, question.id
42 - assert_equal 'Question 2', question.name 42 + assert_equal 'Question 2', question.name
43 end 43 end
44 44
45 should 'provide proper short description' do 45 should 'provide proper short description' do
@@ -77,7 +77,7 @@ class PairwisePlugin::PairwiseContentTest < ActiveSupport::TestCase @@ -77,7 +77,7 @@ class PairwisePlugin::PairwiseContentTest < ActiveSupport::TestCase
77 end 77 end
78 78
79 should 'add error to base when the question does not exist' do 79 should 'add error to base when the question does not exist' do
80 - Response = Struct.new(:code, :message) 80 + Response = Struct.new(:code, :message)
81 81
82 @response = Response.new(422, "Any error") 82 @response = Response.new(422, "Any error")
83 83
@@ -97,15 +97,15 @@ class PairwisePlugin::PairwiseContentTest < ActiveSupport::TestCase @@ -97,15 +97,15 @@ class PairwisePlugin::PairwiseContentTest < ActiveSupport::TestCase
97 #expectations 97 #expectations
98 pairwise_content = PairwiseContentFixtures.new_pairwise_content 98 pairwise_content = PairwiseContentFixtures.new_pairwise_content
99 pairwise_content.profile = @profile 99 pairwise_content.profile = @profile
100 - pairwise_content.expects(:valid?).returns(true) 100 + pairwise_content.expects(:valid?).returns(true)
101 pairwise_content.expects(:create_pairwise_question).returns(question) 101 pairwise_content.expects(:create_pairwise_question).returns(question)
102 pairwise_content.expects(:toggle_autoactivate_ideas).at_least_once 102 pairwise_content.expects(:toggle_autoactivate_ideas).at_least_once
103 #save should call before_save which sends the question to pairwise 103 #save should call before_save which sends the question to pairwise
104 pairwise_content.save! 104 pairwise_content.save!
105 - 105 +
106 #after save pairwise_question_id should store question id generated by pairwise 106 #after save pairwise_question_id should store question id generated by pairwise
107 assert_equal question.id, pairwise_content.pairwise_question_id 107 assert_equal question.id, pairwise_content.pairwise_question_id
108 - end 108 + end
109 109
110 should 'send changes in choices to pairwise service' do 110 should 'send changes in choices to pairwise service' do
111 @question = Pairwise::Question.new(:id => @pairwise_content.pairwise_question_id, :name => 'Question 1', :active => false) 111 @question = Pairwise::Question.new(:id => @pairwise_content.pairwise_question_id, :name => 'Question 1', :active => false)
@@ -121,7 +121,7 @@ class PairwisePlugin::PairwiseContentTest < ActiveSupport::TestCase @@ -121,7 +121,7 @@ class PairwisePlugin::PairwiseContentTest < ActiveSupport::TestCase
121 end 121 end
122 122
123 should 'send new choices to pairwise_service' do 123 should 'send new choices to pairwise_service' do
124 - @question = Pairwise::Question.new(:id => @pairwise_content.pairwise_question_id, :name => 'Question 1', :active => false) 124 + @question = Pairwise::Question.new(:id => @pairwise_content.pairwise_question_id, :name => 'Question 1', :active => false)
125 @pairwise_content.expects('new_record?').returns(false).at_least_once 125 @pairwise_content.expects('new_record?').returns(false).at_least_once
126 @pairwise_content.expects('valid?').returns(true).at_least_once 126 @pairwise_content.expects('valid?').returns(true).at_least_once
127 127
@@ -170,7 +170,7 @@ class PairwisePlugin::PairwiseContentTest < ActiveSupport::TestCase @@ -170,7 +170,7 @@ class PairwisePlugin::PairwiseContentTest < ActiveSupport::TestCase
170 pairwise_content.stubs(:valid? => true) 170 pairwise_content.stubs(:valid? => true)
171 pairwise_content.stubs(:send_question_to_service => true) 171 pairwise_content.stubs(:send_question_to_service => true)
172 pairwise_content.join_choices(choices_to_join, parent_choice, user=nil) 172 pairwise_content.join_choices(choices_to_join, parent_choice, user=nil)
173 - 173 +
174 choices_related = PairwisePlugin::ChoicesRelated.related_choices_for(parent_choice) 174 choices_related = PairwisePlugin::ChoicesRelated.related_choices_for(parent_choice)
175 assert_equal 2, choices_related.size 175 assert_equal 2, choices_related.size
176 assert_equal 1, choices_related.select { |c| c.choice_id == 2}.size 176 assert_equal 1, choices_related.select { |c| c.choice_id == 2}.size
@@ -182,12 +182,12 @@ class PairwisePlugin::PairwiseContentTest < ActiveSupport::TestCase @@ -182,12 +182,12 @@ class PairwisePlugin::PairwiseContentTest < ActiveSupport::TestCase
182 # end 182 # end
183 183
184 should 'ask skip prompt reasons' do 184 should 'ask skip prompt reasons' do
185 - prompt = Pairwise::Prompt.new({"left_choice_text"=>"Choice 1", "right_choice_text"=>"New inactive choice", "left_choice_id"=>1300, "right_choice_id"=>1302, "id"=>194, "tracking"=>nil, "votes_count"=>0}) 185 + prompt = Pairwise::Prompt.new({"left_choice_text"=>"Choice 1", "right_choice_text"=>"New inactive choice", "left_choice_id"=>1300, "right_choice_id"=>1302, "id"=>194, "tracking"=>nil, "votes_count"=>0})
186 reasons = @pairwise_content.ask_skip_reasons(prompt) 186 reasons = @pairwise_content.ask_skip_reasons(prompt)
187 187
188 assert_not_nil reasons 188 assert_not_nil reasons
189 assert_equal 7, reasons.size 189 assert_equal 7, reasons.size
190 - 190 +
191 assert reasons[0].include? PairwisePlugin::PairwiseContent::REASONS_ARRAY[0][:text] 191 assert reasons[0].include? PairwisePlugin::PairwiseContent::REASONS_ARRAY[0][:text]
192 assert reasons[1].include? PairwisePlugin::PairwiseContent::REASONS_ARRAY[1][:text] 192 assert reasons[1].include? PairwisePlugin::PairwiseContent::REASONS_ARRAY[1][:text]
193 assert reasons[2].include? PairwisePlugin::PairwiseContent::REASONS_ARRAY[2][:text] 193 assert reasons[2].include? PairwisePlugin::PairwiseContent::REASONS_ARRAY[2][:text]
@@ -196,4 +196,35 @@ class PairwisePlugin::PairwiseContentTest < ActiveSupport::TestCase @@ -196,4 +196,35 @@ class PairwisePlugin::PairwiseContentTest < ActiveSupport::TestCase
196 assert reasons[5].include? PairwisePlugin::PairwiseContent::REASONS_ARRAY[4][:text] 196 assert reasons[5].include? PairwisePlugin::PairwiseContent::REASONS_ARRAY[4][:text]
197 assert reasons[6].include? PairwisePlugin::PairwiseContent::REASONS_ARRAY[5][:text] 197 assert reasons[6].include? PairwisePlugin::PairwiseContent::REASONS_ARRAY[5][:text]
198 end 198 end
  199 +
  200 + should 'append active class in article view when it is not archived' do
  201 + @pairwise_content.expects(:archived?).returns(false)
  202 + assert_equal 'pairwise-plugin_pairwise-content active', @pairwise_content.css_class_name
  203 + end
  204 +
  205 + should 'append archived class in article view when it is archived' do
  206 + @pairwise_content.expects(:archived?).returns(true)
  207 + assert_equal 'pairwise-plugin_pairwise-content archived', @pairwise_content.css_class_name
  208 + end
  209 +
  210 + should 'render read only view when the pairwise content is archived' do
  211 + @profile.environment.enable_plugin(PairwisePlugin)
  212 + expects(:render).with(:file => 'content_viewer/read_only', :locals => {:pairwise_content => @pairwise_content})
  213 + @pairwise_content.expects(:archived?).returns(true)
  214 + instance_eval(&@pairwise_content.to_html)
  215 + end
  216 +
  217 + should 'render normal view when the pairwise content is not archived' do
  218 + @profile.environment.enable_plugin(PairwisePlugin)
  219 + expects(:render).with(:file => 'content_viewer/prompt', :locals => {:pairwise_content => @pairwise_content, :source => nil, :embeded => false, :prompt_id => nil })
  220 + @pairwise_content.expects(:archived?).returns(false)
  221 + instance_eval(&@pairwise_content.to_html)
  222 + end
  223 +
  224 + should 'render nothing when the plugin is not enabled' do
  225 + @profile.environment.disable_plugin(PairwisePlugin)
  226 + expects(:render).with(:file => 'content_viewer/closed_pool')
  227 + instance_eval(&@pairwise_content.to_html)
  228 + end
  229 +
199 end 230 end
views/content_viewer/_menu.html.erb
1 <% extend PairwisePlugin::Helpers::ViewerHelper %> 1 <% extend PairwisePlugin::Helpers::ViewerHelper %>
2 2
3 <ul class="pairwise_menu"> 3 <ul class="pairwise_menu">
4 - <li>  
5 - <%= pairwise_tab_remote_link _('Pairwise Vote'), pairwise_content.prompt_url, pairwise_content, embeded, :class => active_tab == :prompt ? 'active' : '' %>  
6 - </li> 4 + <% unless pairwise_content.archived? %>
  5 + <li>
  6 + <%= pairwise_tab_remote_link _('Pairwise Vote'), pairwise_content.prompt_url, pairwise_content, embeded, :class => active_tab == :prompt ? 'active' : '' %>
  7 + </li>
  8 + <% end %>
7 <li><%= pairwise_tab_remote_link _('Results'), pairwise_content.result_url, pairwise_content, embeded, :class => active_tab == :results ? 'active' : '' %></li> 9 <li><%= pairwise_tab_remote_link _('Results'), pairwise_content.result_url, pairwise_content, embeded, :class => active_tab == :results ? 'active' : '' %></li>
8 <% if !embeded && pairwise_content.allow_edit?(user) %> 10 <% if !embeded && pairwise_content.allow_edit?(user) %>
9 <li><%= pairwise_edit_link _('Edit'), pairwise_content %></li> 11 <li><%= pairwise_edit_link _('Edit'), pairwise_content %></li>
views/content_viewer/_result.html.erb
@@ -58,4 +58,3 @@ @@ -58,4 +58,3 @@
58 58
59 </div> 59 </div>
60 </div> 60 </div>
61 -  
views/content_viewer/read_only.html.erb 0 → 100644
@@ -0,0 +1,2 @@ @@ -0,0 +1,2 @@
  1 +<%= pairwise_content.body %>
  2 +<%= render :partial => 'content_viewer/result', :locals => {pairwise_content: pairwise_content, embeded: true} %>