Commit c9e090d97e8706e4681a1118464e05107b377425
Committed by
Thiago Ribeiro
1 parent
c7e9ad9e
Exists in
master
and in
29 other branches
Fixed post view hits for same visitor
- Refreshing page no longer counts visits - Unlogged in users counts only once - Added test to page hits - Refactor already_visited? method Signed-off-by: Luciano Prestes Cavalcanti <lucianopcbr@gmail.com> Signed-off-by: Pedro de Lyra <pedrodelyra@gmail.com> Signed-off-by: Simiao Carvalho <simiaosimis@gmail.com> Signed-off-by: Tallys Martins <tallysmartins@gmail.com>
Showing
2 changed files
with
45 additions
and
1 deletions
Show diff stats
app/controllers/public/content_viewer_controller.rb
@@ -8,6 +8,7 @@ class ContentViewerController < ApplicationController | @@ -8,6 +8,7 @@ class ContentViewerController < ApplicationController | ||
8 | helper TagsHelper | 8 | helper TagsHelper |
9 | 9 | ||
10 | def view_page | 10 | def view_page |
11 | + | ||
11 | path = get_path(params[:page], params[:format]) | 12 | path = get_path(params[:page], params[:format]) |
12 | 13 | ||
13 | @version = params[:version].to_i | 14 | @version = params[:version].to_i |
@@ -38,7 +39,7 @@ class ContentViewerController < ApplicationController | @@ -38,7 +39,7 @@ class ContentViewerController < ApplicationController | ||
38 | end | 39 | end |
39 | 40 | ||
40 | # At this point the page will be showed | 41 | # At this point the page will be showed |
41 | - @page.hit unless user_is_a_bot? | 42 | + @page.hit unless user_is_a_bot? || already_visited?(@page) |
42 | 43 | ||
43 | @page = FilePresenter.for @page | 44 | @page = FilePresenter.for @page |
44 | 45 | ||
@@ -272,4 +273,18 @@ class ContentViewerController < ApplicationController | @@ -272,4 +273,18 @@ class ContentViewerController < ApplicationController | ||
272 | @comment_order = params[:comment_order].nil? ? 'oldest' : params[:comment_order] | 273 | @comment_order = params[:comment_order].nil? ? 'oldest' : params[:comment_order] |
273 | end | 274 | end |
274 | 275 | ||
276 | + private | ||
277 | + | ||
278 | + def already_visited?(element) | ||
279 | + user_id = if user.nil? then -1 else current_user.id end | ||
280 | + user_id = "#{user_id}_#{element.id}_#{element.class}" | ||
281 | + | ||
282 | + if cookies.signed[:visited] == user_id | ||
283 | + return true | ||
284 | + else | ||
285 | + cookies.permanent.signed[:visited] = user_id | ||
286 | + return false | ||
287 | + end | ||
288 | + end | ||
289 | + | ||
275 | end | 290 | end |
test/functional/content_viewer_controller_test.rb
@@ -1587,4 +1587,33 @@ class ContentViewerControllerTest < ActionController::TestCase | @@ -1587,4 +1587,33 @@ class ContentViewerControllerTest < ActionController::TestCase | ||
1587 | assert_tag :tag => 'div', :attributes => { :class => 'article-compact-image' } | 1587 | assert_tag :tag => 'div', :attributes => { :class => 'article-compact-image' } |
1588 | assert_tag :tag => 'div', :attributes => { :class => 'article-compact-abstract-with-image' } | 1588 | assert_tag :tag => 'div', :attributes => { :class => 'article-compact-abstract-with-image' } |
1589 | end | 1589 | end |
1590 | + | ||
1591 | + should 'not count a visit twice for the same user' do | ||
1592 | + profile = create_user('someone').person | ||
1593 | + login_as(@profile.identifier) | ||
1594 | + page = profile.articles.build(:name => 'myarticle', :body => 'the body of the text') | ||
1595 | + page.save! | ||
1596 | + | ||
1597 | + get :view_page, :profile => profile.identifier, :page => 'myarticle' | ||
1598 | + page.reload | ||
1599 | + assert_equal 1, page.hits | ||
1600 | + | ||
1601 | + get :view_page, :profile => profile.identifier, :page => 'myarticle' | ||
1602 | + page.reload | ||
1603 | + assert_equal 1, page.hits | ||
1604 | + end | ||
1605 | + | ||
1606 | + should 'not count a visit twice for unlogged users' do | ||
1607 | + profile = create_user('someone').person | ||
1608 | + page = profile.articles.build(:name => 'myarticle', :body => 'the body of the text') | ||
1609 | + page.save! | ||
1610 | + | ||
1611 | + get :view_page, :profile => profile.identifier, :page => 'myarticle' | ||
1612 | + page.reload | ||
1613 | + assert_equal 1, page.hits | ||
1614 | + | ||
1615 | + get :view_page, :profile => profile.identifier, :page => 'myarticle' | ||
1616 | + page.reload | ||
1617 | + assert_equal 1, page.hits | ||
1618 | + end | ||
1590 | end | 1619 | end |