Commit 4ab1ad9c850b57becd62e460ddfc69c3f653a6fe
Committed by
Daniela Feitosa
1 parent
fd59bb99
Exists in
master
and in
29 other branches
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>
Showing
5 changed files
with
78 additions
and
0 deletions
Show diff stats
app/controllers/public/content_viewer_controller.rb
| ... | ... | @@ -7,6 +7,7 @@ class ContentViewerController < 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 < 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"> | ... | ... |
| ... | ... | @@ -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 "([^\"]*)" is updated by "([^\"]*)"$/ 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 < 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') | ... | ... |