require 'rails_helper' describe Agents::SchedulerAgent do let(:valid_params) { { name: 'Example', options: { 'action' => 'run', 'schedule' => '0 * * * *' }, } } let(:agent) { described_class.create!(valid_params) { |agent| agent.user = users(:bob) } } it_behaves_like AgentControllerConcern describe "validation" do it "should validate schedule" do expect(agent).to be_valid agent.options.delete('schedule') expect(agent).not_to be_valid agent.options['schedule'] = nil expect(agent).not_to be_valid agent.options['schedule'] = '' expect(agent).not_to be_valid agent.options['schedule'] = '0' expect(agent).not_to be_valid agent.options['schedule'] = '*/15 * * * * * *' expect(agent).not_to be_valid agent.options['schedule'] = '*/1 * * * *' expect(agent).to be_valid agent.options['schedule'] = '*/1 * * *' expect(agent).not_to be_valid allow(agent).to receive(:second_precision_enabled) { true } agent.options['schedule'] = '*/15 * * * * *' expect(agent).to be_valid allow(agent).to receive(:second_precision_enabled) { false } agent.options['schedule'] = '*/10 * * * * *' expect(agent).not_to be_valid agent.options['schedule'] = '5/30 * * * * *' expect(agent).not_to be_valid agent.options['schedule'] = '*/15 * * * * *' expect(agent).to be_valid agent.options['schedule'] = '15,45 * * * * *' expect(agent).to be_valid agent.options['schedule'] = '0 * * * * *' expect(agent).to be_valid end end describe "save" do it "should delete memory['scheduled_at'] if and only if options is changed" do time = Time.now.to_i agent.memory['scheduled_at'] = time agent.save expect(agent.memory['scheduled_at']).to eq(time) agent.memory['scheduled_at'] = time # Currently agent.options[]= is not detected agent.options = { 'action' => 'run', 'schedule' => '*/5 * * * *' } agent.save expect(agent.memory['scheduled_at']).to be_nil end end end