facebook_spec.rb 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. require 'rails_helper'
  2. RSpec.describe Facebook, use_vcr: true, current_user_id: 1 do
  3. before do
  4. VCR.configure do |c|
  5. %w[
  6. FACEBOOK_ADMIN_USER_ID
  7. FACEBOOK_ADMIN_FIRSTNAME
  8. FACEBOOK_ADMIN_LASTNAME
  9. FACEBOOK_ADMIN_ACCESS_TOKEN
  10. FACEBOOK_PAGE_1_ACCCESS_TOKEN
  11. FACEBOOK_PAGE_1_ID
  12. FACEBOOK_PAGE_1_NAME
  13. FACEBOOK_PAGE_1_POST_ID
  14. FACEBOOK_PAGE_1_POST_MESSAGE
  15. FACEBOOK_PAGE_1_POST_COMMENT_ID
  16. FACEBOOK_PAGE_2_ACCCESS_TOKEN
  17. FACEBOOK_PAGE_2_ID
  18. FACEBOOK_PAGE_2_NAME
  19. FACEBOOK_CUSTOMER_ID
  20. FACEBOOK_CUSTOMER_FIRSTNAME
  21. FACEBOOK_CUSTOMER_LASTNAME
  22. ].each do |env_key|
  23. c.filter_sensitive_data("<#{env_key}>") { ENV[env_key] }
  24. end
  25. end
  26. travel_to '2021-02-13 13:37 +0100'
  27. end
  28. let(:page_access_token) { ENV['FACEBOOK_PAGE_1_ACCCESS_TOKEN'] }
  29. let(:page_client) { described_class.new page_access_token }
  30. let(:admin_access_token) { ENV['FACEBOOK_ADMIN_ACCESS_TOKEN'] }
  31. let(:admin_client) { described_class.new admin_access_token }
  32. let(:post) do
  33. page_client
  34. .client
  35. .get_connection('me', 'feed', fields: 'id,from,to,message,created_time,permalink_url,comments{id,from,to,message,created_time}')
  36. .first
  37. end
  38. let(:page) { admin_client.pages.first }
  39. describe '#connect' do
  40. it 'works' do
  41. expect(page_client.client.get_object('me')['name']).to eq ENV['FACEBOOK_PAGE_1_NAME']
  42. end
  43. end
  44. describe '#pages' do
  45. it 'works' do
  46. expect(admin_client.pages.pluck(:name)).to eq [ENV['FACEBOOK_PAGE_1_NAME'], ENV['FACEBOOK_PAGE_2_NAME']]
  47. end
  48. end
  49. describe '#current_user' do
  50. it 'works for user' do
  51. expect(admin_client.current_user['name']).to eq "#{ENV['FACEBOOK_ADMIN_FIRSTNAME']} #{ENV['FACEBOOK_ADMIN_LASTNAME']}"
  52. end
  53. it 'works for page' do
  54. expect(page_client.current_user['name']).to eq ENV['FACEBOOK_PAGE_1_NAME']
  55. end
  56. end
  57. describe '#to_user' do
  58. let(:posts) { page_client.client.get_connection('me', 'feed', fields: 'id,from,to,message,created_time,permalink_url,comments{id,from,to,message,created_time}') }
  59. let(:user) { page_client.to_user(posts.first) }
  60. it 'works' do
  61. expect(user).to have_attributes(
  62. firstname: ENV['FACEBOOK_CUSTOMER_FIRSTNAME'],
  63. lastname: ENV['FACEBOOK_CUSTOMER_LASTNAME']
  64. )
  65. end
  66. end
  67. describe '#to_ticket' do
  68. it 'works' do
  69. ticket = page_client.to_ticket(post, Group.first.id, Channel.first, page)
  70. expect(ticket.title).to eq ENV['FACEBOOK_PAGE_1_POST_MESSAGE']
  71. end
  72. end
  73. describe '#to_article' do
  74. it 'works' do
  75. ticket = page_client.to_ticket(post, Group.first.id, Channel.first, page)
  76. articles = page_client.to_article(post, ticket, page)
  77. expect(articles.first[:body]).to eq ENV['FACEBOOK_PAGE_1_POST_MESSAGE']
  78. end
  79. end
  80. describe '#to_group' do
  81. let(:ticket) { page_client.to_group(post, Group.first.id, Channel.first, page) }
  82. it 'parses title correctly' do
  83. expect(ticket.title).to eq ENV['FACEBOOK_PAGE_1_POST_MESSAGE']
  84. end
  85. it 'parses body correctly', current_user_id: 1 do
  86. expect(ticket.articles.first.body).to eq ENV['FACEBOOK_PAGE_1_POST_MESSAGE']
  87. end
  88. end
  89. describe '#from_article' do
  90. let(:ticket) { page_client.to_group(post, Group.first.id, Channel.first, page) }
  91. let(:article) { create(:ticket_article, ticket: ticket, type_name: 'facebook feed comment', in_reply_to: ticket.articles.last.message_id) }
  92. let(:response) do
  93. page_client.from_article(
  94. type: article.type.name,
  95. to: article.to,
  96. body: article.body,
  97. in_reply_to: article.in_reply_to,
  98. )
  99. end
  100. it 'works' do
  101. expect(response['id']).to be_present
  102. end
  103. end
  104. end