dropbox_file_url_agent_spec.rb 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. require 'rails_helper'
  2. describe Agents::DropboxFileUrlAgent do
  3. before(:each) do
  4. @agent = Agents::DropboxFileUrlAgent.new(
  5. name: 'dropbox file to url',
  6. options: {}
  7. )
  8. @agent.user = users(:bob)
  9. @agent.service = services(:generic)
  10. @agent.save!
  11. end
  12. it 'cannot be scheduled' do
  13. expect(@agent.cannot_be_scheduled?).to eq true
  14. end
  15. it 'has agent description' do
  16. expect(@agent.description).to_not be_nil
  17. end
  18. it 'has event description' do
  19. expect(@agent.event_description).to_not be_nil
  20. end
  21. describe "#receive" do
  22. def event(payload)
  23. event = Event.new(payload: payload)
  24. event.agent = agents(:bob_manual_event_agent)
  25. event
  26. end
  27. context 'with temporaty urls' do
  28. let(:first_dropbox_url_payload) { { 'url' => 'http://dropbox.com/first/path/url' } }
  29. let(:second_dropbox_url_payload) { { 'url' => 'http://dropbox.com/second/path/url' } }
  30. let(:third_dropbox_url_payload) { { 'url' => 'http://dropbox.com/third/path/url' } }
  31. before(:each) do
  32. stub.proxy(Dropbox::API::Client).new do |api|
  33. stub(api).find('/first/path') { stub(Dropbox::API::File.new).direct_url { first_dropbox_url_payload } }
  34. stub(api).find('/second/path') { stub(Dropbox::API::File.new).direct_url { second_dropbox_url_payload } }
  35. stub(api).find('/third/path') { stub(Dropbox::API::File.new).direct_url { third_dropbox_url_payload } }
  36. end
  37. end
  38. context 'with a single path' do
  39. before(:each) { @event = event(paths: '/first/path') }
  40. it 'creates one event with the temporary dropbox link' do
  41. expect { @agent.receive([@event]) }.to change(Event, :count).by(1)
  42. expect(Event.last.payload).to eq(first_dropbox_url_payload)
  43. end
  44. end
  45. context 'with multiple comma-separated paths' do
  46. before(:each) { @event = event(paths: '/first/path, /second/path, /third/path') }
  47. it 'creates one event with the temporary dropbox link for each path' do
  48. expect { @agent.receive([@event]) }.to change(Event, :count).by(3)
  49. last_events = Event.last(3)
  50. expect(last_events[0].payload).to eq(first_dropbox_url_payload)
  51. expect(last_events[1].payload).to eq(second_dropbox_url_payload)
  52. expect(last_events[2].payload).to eq(third_dropbox_url_payload)
  53. end
  54. end
  55. end
  56. context 'with permanent urls' do
  57. def response_for(url)
  58. Dropbox::API::Object.new(
  59. url: "https://www.dropbox.com/s/#{url}?dl=0",
  60. expires: "Tue, 01 Jan 2030 00:00:00 +0000",
  61. visibility: "PUBLIC"
  62. )
  63. end
  64. let(:first_dropbox_url_payload) { response_for('/first/path') }
  65. let(:second_dropbox_url_payload) { response_for('/second/path') }
  66. let(:third_dropbox_url_payload) { response_for('/third/path') }
  67. before(:each) do
  68. stub.proxy(Dropbox::API::Client).new do |api|
  69. stub(api).find('/first/path') { stub(Dropbox::API::File.new).share_url { first_dropbox_url_payload } }
  70. stub(api).find('/second/path') { stub(Dropbox::API::File.new).share_url { second_dropbox_url_payload } }
  71. stub(api).find('/third/path') { stub(Dropbox::API::File.new).share_url { third_dropbox_url_payload } }
  72. end
  73. @agent.options['link_type'] = 'permanent'
  74. end
  75. it 'creates one event with a single path' do
  76. expect { @agent.receive([event(paths: '/first/path')]) }.to change(Event, :count).by(1)
  77. expect(Event.last.payload).to eq(first_dropbox_url_payload.to_h)
  78. end
  79. it 'creates one event with the permanent dropbox link for each path' do
  80. event = event(paths: '/first/path, /second/path, /third/path')
  81. expect { @agent.receive([event]) }.to change(Event, :count).by(3)
  82. last_events = Event.last(3)
  83. expect(last_events[0].payload).to eq(first_dropbox_url_payload.to_h)
  84. expect(last_events[1].payload).to eq(second_dropbox_url_payload.to_h)
  85. expect(last_events[2].payload).to eq(third_dropbox_url_payload.to_h)
  86. end
  87. end
  88. end
  89. end