facebook_spec.rb 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. # Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
  2. require 'rails_helper'
  3. RSpec.describe Channel::Driver::Facebook, use_vcr: true, performs_jobs: true, required_envs: %w[FACEBOOK_ADMIN_USER_ID FACEBOOK_ADMIN_FIRSTNAME FACEBOOK_ADMIN_LASTNAME FACEBOOK_PAGE_1_ACCCESS_TOKEN FACEBOOK_PAGE_1_ID FACEBOOK_PAGE_1_NAME FACEBOOK_PAGE_1_POST_ID FACEBOOK_PAGE_1_POST_COMMENT_ID FACEBOOK_PAGE_2_ACCCESS_TOKEN FACEBOOK_PAGE_2_ID FACEBOOK_PAGE_2_NAME FACEBOOK_CUSTOMER_ID FACEBOOK_CUSTOMER_FIRSTNAME FACEBOOK_CUSTOMER_LASTNAME] do
  4. before do
  5. travel_to '2021-02-13 13:37 +0100'
  6. end
  7. let!(:channel) { create(:facebook_channel) }
  8. # This test requires ENV variables to run
  9. # Yes, it runs off VCR cassette
  10. # But it requires following ENV variables to be present:
  11. #
  12. # export FACEBOOK_CUSTOMER_ID=placeholder
  13. # export FACEBOOK_CUSTOMER_FIRSTNAME=placeholder
  14. # export FACEBOOK_CUSTOMER_LASTNAME=placeholder
  15. # export FACEBOOK_PAGE_1_ACCCESS_TOKEN=placeholder
  16. # export FACEBOOK_PAGE_1_ID=123
  17. # export FACEBOOK_PAGE_1_NAME=placeholder
  18. # export FACEBOOK_PAGE_1_POST_ID=placeholder
  19. # export FACEBOOK_PAGE_1_POST_COMMENT_ID=placeholder
  20. #
  21. it 'tests full run' do # rubocop:disable RSpec/MultipleExpectations, RSpec/ExampleLength
  22. allow(ApplicationHandleInfo).to receive('context=')
  23. ExternalCredential.create name: :facebook, credentials: { application_id: ENV['FACEBOOK_APPLICATION_ID'], application_secret: ENV['FACEBOOK_APPLICATION_SECRET'] }
  24. channel.fetch
  25. ticket = Ticket.last
  26. ticket_initial_count = ticket.articles.count
  27. expect(ticket.preferences['channel_fb_object_id']).to be_present
  28. message_id = "#{ENV['FACEBOOK_PAGE_1_POST_ID']}_#{ENV['FACEBOOK_PAGE_1_POST_COMMENT_ID']}"
  29. post_article = ticket.articles.find_by(message_id: message_id)
  30. article = Ticket::Article.find_by(message_id: post_article.message_id)
  31. ticket = article.ticket
  32. expect(ticket.state.name).to eq 'new'
  33. expect(article).to be_present
  34. customer = ticket.customer
  35. expect("#{customer.firstname} #{customer.lastname}").to eq "#{ENV['FACEBOOK_CUSTOMER_FIRSTNAME']} #{ENV['FACEBOOK_CUSTOMER_LASTNAME']}"
  36. outbound_article = Ticket::Article.create(
  37. ticket_id: ticket.id,
  38. body: "What's your issue Bernd?",
  39. in_reply_to: post_article.message_id,
  40. type: Ticket::Article::Type.find_by(name: 'facebook feed comment'),
  41. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  42. internal: false,
  43. updated_by_id: 1,
  44. created_by_id: 1,
  45. )
  46. perform_enqueued_jobs
  47. expect(ticket.reload.state.name).to eq 'open'
  48. outbound_article = Ticket::Article.find(outbound_article.id)
  49. expect(outbound_article).to be_present
  50. expect(outbound_article.from).to eq ENV['FACEBOOK_PAGE_1_NAME']
  51. expect(outbound_article.ticket.articles.count).to be ticket_initial_count + 1
  52. expect(ApplicationHandleInfo).to have_received('context=').with('facebook').at_least(1)
  53. end
  54. end