2015-10-11 10:41:23 +01:00
require 'rails_helper'
2013-02-05 14:16:51 -05:00
require 'score_calculator'
describe ScoreCalculator do
2013-03-22 15:43:57 -04:00
let! ( :post ) { Fabricate ( :post , reads : 111 ) }
let! ( :another_post ) { Fabricate ( :post , topic : post . topic , reads : 222 ) }
let ( :topic ) { post . topic }
2013-02-05 14:16:51 -05:00
context 'with weightings' do
before do
ScoreCalculator . new ( reads : 3 ) . calculate
2013-03-22 15:43:57 -04:00
post . reload
another_post . reload
2013-02-05 14:16:51 -05:00
end
it 'takes the supplied weightings into effect' do
2015-01-09 13:34:37 -03:00
expect ( post . score ) . to eq ( 333 )
expect ( another_post . score ) . to eq ( 666 )
2013-03-22 15:43:57 -04:00
end
it " creates the percent_ranks " do
2015-01-09 13:34:37 -03:00
expect ( another_post . percent_rank ) . to eq ( 0 . 0 )
expect ( post . percent_rank ) . to eq ( 1 . 0 )
2013-02-05 14:16:51 -05:00
end
2013-03-28 13:02:59 -04:00
it " gives the topic a score " do
2015-01-09 13:34:37 -03:00
expect ( topic . score ) . to be_present
2013-03-28 13:02:59 -04:00
end
it " gives the topic a percent_rank " do
2015-01-09 13:34:37 -03:00
expect ( topic . percent_rank ) . not_to eq ( 1 . 0 )
2013-03-28 13:02:59 -04:00
end
2013-02-05 14:16:51 -05:00
end
2013-11-18 12:48:26 -05:00
context 'summary' do
2013-02-05 14:16:51 -05:00
it " won't update the site settings when the site settings don't match " do
ScoreCalculator . new ( reads : 3 ) . calculate
2013-03-22 15:43:57 -04:00
topic . reload
2015-01-09 13:34:37 -03:00
expect ( topic . has_summary ) . to eq ( false )
2013-02-05 14:16:51 -05:00
end
2013-11-18 12:48:26 -05:00
it " removes the summary flag if the topic no longer qualifies " do
topic . update_column ( :has_summary , true )
2013-02-05 14:16:51 -05:00
ScoreCalculator . new ( reads : 3 ) . calculate
2013-03-22 15:43:57 -04:00
topic . reload
2015-01-09 13:34:37 -03:00
expect ( topic . has_summary ) . to eq ( false )
2013-02-05 14:16:51 -05:00
end
2016-07-22 09:48:26 +10:00
it " respects the min_topic_age " do
topic . update_columns ( has_summary : true , bumped_at : 1 . month . ago )
ScoreCalculator . new ( reads : 3 ) . calculate ( min_topic_age : 20 . days . ago )
expect ( topic . has_summary ) . to eq ( true )
end
it " respects the max_topic_length " do
Fabricate ( :post , topic_id : topic . id )
topic . update_columns ( has_summary : true )
ScoreCalculator . new ( reads : 3 ) . calculate ( max_topic_length : 1 )
expect ( topic . has_summary ) . to eq ( true )
end
2013-02-05 14:16:51 -05:00
it " won't update the site settings when the site settings don't match " do
2013-11-18 12:48:26 -05:00
SiteSetting . expects ( :summary_likes_required ) . returns ( 0 )
SiteSetting . expects ( :summary_posts_required ) . returns ( 1 )
SiteSetting . expects ( :summary_score_threshold ) . returns ( 100 )
2013-02-05 14:16:51 -05:00
ScoreCalculator . new ( reads : 3 ) . calculate
2013-03-22 15:43:57 -04:00
topic . reload
2015-01-09 13:34:37 -03:00
expect ( topic . has_summary ) . to eq ( true )
2013-02-05 14:16:51 -05:00
end
end
end