Commit 4ab1ad9c850b57becd62e460ddfc69c3f653a6fe

Authored by Daniel
Committed by Daniela Feitosa
1 parent fd59bb99

Add links to articles versions.

(ActionItem2822)

Signed-off-by: Daniela Feitosa
Signed-off-by: Ana Losnak <analosnak@gmail.com>
Signed-off-by: Daniel Bucher <daniel.bucher88@gmail.com>
app/controllers/public/content_viewer_controller.rb
... ... @@ -7,6 +7,7 @@ class ContentViewerController &lt; ApplicationController
7 7  
8 8 def view_page
9 9 path = params[:page].join('/')
  10 + version = params[:rev]
10 11  
11 12 if path.blank?
12 13 @page = profile.home_page
... ... @@ -22,6 +23,10 @@ class ContentViewerController &lt; ApplicationController
22 23 redirect_to profile.url.merge(:page => page_from_old_path.explode_path)
23 24 return
24 25 end
  26 + else
  27 + if version
  28 + @page = @page.versions.find_by_version version
  29 + end
25 30 end
26 31 end
27 32  
... ...
app/views/content_viewer/view_page.rhtml
... ... @@ -85,6 +85,10 @@
85 85 </div>
86 86 <% end %>
87 87  
  88 +<div id="article-versions">
  89 + <%= @page.versions.map {|v| link_to("r#{v.version}", @page.url.merge(:rev => v.version))} %>
  90 +</div>
  91 +
88 92 <%= display_source_info(@page) %>
89 93  
90 94 <div class="comments" id="comments_list">
... ...
features/article_versioning.feature 0 → 100644
... ... @@ -0,0 +1,41 @@
  1 +Feature: article versioning
  2 + As a user
  3 + I want to see article versions
  4 + In order to be able to change between versions of an article
  5 +
  6 + Background:
  7 + Given the following users
  8 + | login | name |
  9 + | joaosilva | Joao Silva |
  10 + And "joaosilva" has no articles
  11 + And the following articles
  12 + | owner | name | body |
  13 + | joaosilva | Sample Article | This is the first version of the article |
  14 + And the article "Sample Article" is updated with
  15 + | name | body |
  16 + | Edited Article | This is the second version of the article |
  17 + And I am logged in as "joaosilva"
  18 +
  19 + Scenario: display only link for original version
  20 + Given the following articles
  21 + | owner | name | body |
  22 + | joaosilva | One version article | This is the first published article |
  23 + And I am on joaosilva's control panel
  24 + And I follow "Manage Content"
  25 + When I follow "One version article"
  26 + Then I should see "r1" within "#article-versions"
  27 + And I should not see "r2" within "#article-versions"
  28 +
  29 + Scenario: display links for versions
  30 + Given I am on joaosilva's control panel
  31 + And I follow "Manage Content"
  32 + When I follow "Edited Article"
  33 + Then I should see "r1" within "#article-versions"
  34 + And I should see "r2" within "#article-versions"
  35 +
  36 + Scenario: display links for versions
  37 + Given I am on joaosilva's control panel
  38 + And I follow "Manage Content"
  39 + And I follow "Edited Article"
  40 + When I follow "r2" within "#article-versions"
  41 + Then I should see "This is the first version of the article" within ".article-body"
... ...
features/step_definitions/noosfero_steps.rb
... ... @@ -687,6 +687,14 @@ Given /^the article &quot;([^\&quot;]*)&quot; is updated by &quot;([^\&quot;]*)&quot;$/ do |article, person|
687 687 a.save!
688 688 end
689 689  
  690 +Given /^the article "([^\"]*)" is updated with$/ do |article, table|
  691 + a = Article.find_by_name article
  692 +
  693 + row = table.hashes.first
  694 +
  695 + a.update_attributes(row)
  696 +end
  697 +
690 698 Given /^the cache is turned (on|off)$/ do |state|
691 699 ActionController::Base.perform_caching = (state == 'on')
692 700 end
... ...
test/functional/content_viewer_controller_test.rb
... ... @@ -369,6 +369,26 @@ class ContentViewerControllerTest &lt; ActionController::TestCase
369 369 assert_redirected_to :host => p.default_hostname, :controller => 'content_viewer', :action => 'view_page', :profile => p.identifier, :page => a2.explode_path
370 370 end
371 371  
  372 + should "display current article's versions" do
  373 + page = profile.articles.create!(:name => 'myarticle', :body => 'test article')
  374 + page.body = 'test article edited'; page.save
  375 +
  376 + get :view_page, :profile => profile.identifier, :page => [ 'myarticle' ]
  377 + assert_tag :tag => 'div', :attributes => { :id => 'article-versions' }, :descendant => {
  378 + :tag => 'a',
  379 + :attributes => { :href => "http://#{profile.environment.default_hostname}/#{profile.identifier}/#{page.path}?rev=1" }
  380 + }
  381 + end
  382 +
  383 + should "fetch correct article version" do
  384 + page = profile.articles.create!(:name => 'myarticle', :body => 'test article')
  385 + page.body = 'test article edited'; page.save
  386 +
  387 + get :view_page, :profile => profile.identifier, :page => [ 'myarticle' ], :rev => 1
  388 +
  389 + assert_equal 1, assigns(:page).version
  390 + end
  391 +
372 392 should 'not return an article of a different user' do
373 393 p1 = create_user('test_user').person
374 394 a = p1.articles.create!(:name => 'old-name')
... ...