dry_runnable_spec.rb 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. require 'spec_helper'
  2. describe DryRunnable do
  3. class Agents::SandboxedAgent < Agent
  4. default_schedule "3pm"
  5. can_dry_run!
  6. def check
  7. log "Logging"
  8. create_event payload: { test: "foo" }
  9. error "Recording error"
  10. create_event payload: { test: "bar" }
  11. self.memory = { last_status: "ok" }
  12. save!
  13. end
  14. end
  15. before do
  16. stub(Agents::SandboxedAgent).valid_type?("Agents::SandboxedAgent") { true }
  17. @agent = Agents::SandboxedAgent.create(name: "some agent") { |agent|
  18. agent.user = users(:bob)
  19. }
  20. end
  21. it "traps logging, event emission and memory updating" do
  22. results = nil
  23. expect {
  24. results = @agent.dry_run!
  25. }.not_to change {
  26. [users(:bob).agents.count, users(:bob).events.count, users(:bob).logs.count]
  27. }
  28. expect(results[:log]).to match(/\AI, .+ INFO -- : Logging\nE, .+ ERROR -- : Recording error\n/)
  29. expect(results[:events]).to eq([{ test: 'foo' }, { test: 'bar' }])
  30. expect(results[:memory]).to eq({ "last_status" => "ok" })
  31. end
  32. it "does not perform dry-run if Agent does not support dry-run" do
  33. stub(@agent).can_dry_run? { false }
  34. results = nil
  35. expect {
  36. results = @agent.dry_run!
  37. }.not_to change {
  38. [users(:bob).agents.count, users(:bob).events.count, users(:bob).logs.count]
  39. }
  40. expect(results[:log]).to match(/\AE, .+ ERROR -- : Exception during dry-run. SandboxedAgent does not support dry-run: /)
  41. expect(results[:events]).to eq([])
  42. expect(results[:memory]).to eq({})
  43. end
  44. end