ranking_job_test.rb 1.52 KB
require_relative '../test_helper'

class RankingJobTest < ActiveSupport::TestCase

  def setup
    @job = ProposalsDiscussionPlugin::RankingJob.new
    @topic = fast_create(ProposalsDiscussionPlugin::Topic)
    @proposal = fast_create(ProposalsDiscussionPlugin::Proposal, :parent_id => topic.id)
  end

  attr_accessor :job, :topic, :proposal

  should 'create ranking job in initialization' do
    assert job.class.find_job.exists?
  end

  should 'do not create duplicated ranking job' do
    Delayed::Job.destroy_all
    job.schedule
    job.schedule
    assert_equal 1, job.class.find_job.count
  end

  should 'schedule topic jobs when performed' do
    job.perform
    assert ProposalsDiscussionPlugin::RankingJob::TopicRankingJob.new(topic.id).find_job.exists?
  end

  should 'reschedule job when performed' do
    process_delayed_job_queue
    new_job = job.class.find_job.first
    assert new_job.present?
    assert new_job.run_at > 20.minutes.from_now
  end

  should 'schedule topic job' do
    topic_job = ProposalsDiscussionPlugin::RankingJob::TopicRankingJob.new(topic.id)
    topic_job.schedule
    assert topic_job.find_job.exists?
  end

  should 'do not schedule duplicated topic job' do
    topic_job = ProposalsDiscussionPlugin::RankingJob::TopicRankingJob.new(topic.id)
    topic_job.schedule
    topic_job.schedule
    assert_equal 1, topic_job.find_job.count
  end

  should 'perform topic job' do
    job.schedule
    assert_equal 0, topic.ranking.count
    process_delayed_job_queue
    assert_equal 1, topic.ranking.count
  end

end