test/unit/cleaner_test.rb in foreman-tasks-0.15.4 vs test/unit/cleaner_test.rb in foreman-tasks-0.15.5
- old
+ new
@@ -30,9 +30,30 @@
ForemanTasks.dynflow.world.persistence
.find_execution_plans(filters: { 'uuid' => tasks_to_keep.map(&:external_id) }).size.must_equal tasks_to_keep.size
end
+ describe "#orphaned_dynflow_tasks" do
+ # We can't use transactional tests because we're using Sequel for the cleanup query
+ self.use_transactional_tests = false
+ before do
+ skip "Sqlite is running testing Dynlfow DB in memory" if ActiveRecord::Base.connection.adapter_name == 'SQLite'
+ @existing_task = FactoryBot.create(:dynflow_task, :user_create_task)
+ @missing_task = FactoryBot.create(:dynflow_task, :user_create_task)
+ @cleaner = ForemanTasks::Cleaner.new(filter: "id ^ (#{@existing_task.id}, #{@missing_task.id})")
+ @missing_task.destroy
+ end
+
+ after do
+ @cleaner.delete if @cleaner
+ end
+
+ it 'is able to find orphaned execution plans (without corresponding task object)' do
+ assert(@cleaner.orphaned_dynflow_tasks.any? { |t| t[:uuid] == @missing_task.external_id })
+ assert_not(@cleaner.orphaned_dynflow_tasks.any? { |t| t[:uuid] == @existing_task.external_id })
+ end
+ end
+
it 'deletes all tasks matching the filter when the time limit is not specified' do
cleaner = ForemanTasks::Cleaner.new(:filter => 'label = "Actions::User::Create"')
tasks_to_delete = [FactoryBot.create(:dynflow_task, :user_create_task),
FactoryBot.create(:dynflow_task, :user_create_task) do |task|
task.started_at = task.ended_at = Time.zone.now