channel_spec.rb 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. require 'rails_helper'
  2. RSpec.describe Channel do
  3. describe '#fetch' do
  4. around do |example|
  5. VCR.use_cassette(cassette, match_requests_on: %i[method uri oauth_headers]) { example.run }
  6. end
  7. context 'for Twitter driver' do
  8. subject(:twitter_channel) { create(:twitter_channel) }
  9. context 'with invalid token' do
  10. let(:cassette) { 'models/channel/driver/twitter/fetch_channel_invalid' }
  11. it 'returns false' do
  12. expect(twitter_channel.fetch(true)).to be(false)
  13. end
  14. it 'sets error/nil status attributes' do
  15. expect { twitter_channel.fetch(true) }
  16. .to change { twitter_channel.reload.attributes }
  17. .to hash_including(
  18. 'status_in' => 'error',
  19. 'last_log_in' => "Can't use Channel::Driver::Twitter: " \
  20. '#<Twitter::Error::Unauthorized: Invalid or expired token.>',
  21. 'status_out' => nil,
  22. 'last_log_out' => nil
  23. )
  24. end
  25. end
  26. context 'with valid token' do
  27. let(:cassette) { 'models/channel/driver/twitter/fetch_channel_valid' }
  28. it 'returns true' do
  29. expect(twitter_channel.fetch(true)).to be(true)
  30. end
  31. it 'sets successful status attributes' do
  32. expect { twitter_channel.fetch(true) }
  33. .to change { twitter_channel.reload.attributes }
  34. .to hash_including(
  35. 'status_in' => 'ok',
  36. 'last_log_in' => '',
  37. 'status_out' => nil,
  38. 'last_log_out' => nil
  39. )
  40. end
  41. it 'adds tickets as appropriate' do
  42. expect { twitter_channel.fetch(true) }
  43. .to change(Ticket, :count).by(26)
  44. expect(Ticket.last.attributes).to include(
  45. 'title' => 'Wir haben unsere DMs deaktiviert. ' \
  46. 'Leider können wir dank der neuen Twitter API k...',
  47. 'preferences' => { 'channel_id' => twitter_channel.id,
  48. 'channel_screen_name' => twitter_channel.options[:user][:screen_name] },
  49. 'customer_id' => User.find_by(firstname: 'Ccc', lastname: 'Event Logistics').id
  50. )
  51. end
  52. end
  53. end
  54. end
  55. end