Testing: Migrate Channel specs to channel-driver spec file
This commit is contained in:
parent
a6ee25e15e
commit
71dad38129
10 changed files with 5440 additions and 6747 deletions
|
@ -39,7 +39,6 @@ FactoryBot.define do
|
|||
},
|
||||
sync: {
|
||||
webhook_id: '',
|
||||
track_retweets: true,
|
||||
mentions: {
|
||||
group_id: Group.first.id
|
||||
},
|
||||
|
|
|
@ -772,4 +772,101 @@ RSpec.describe Channel::Driver::Twitter do
|
|||
include_examples 'for #send'
|
||||
end
|
||||
end
|
||||
|
||||
describe '#fetch', :use_vcr do
|
||||
describe 'Twitter API authentication' do
|
||||
let(:consumer_credentials) do
|
||||
{
|
||||
consumer_key: external_credential.credentials[:consumer_key],
|
||||
consumer_secret: external_credential.credentials[:consumer_secret],
|
||||
}
|
||||
end
|
||||
|
||||
let(:oauth_credentials) do
|
||||
{
|
||||
access_token: channel.options[:auth][:oauth_token],
|
||||
access_token_secret: channel.options[:auth][:oauth_token_secret],
|
||||
}
|
||||
end
|
||||
|
||||
it 'uses consumer key/secret stored on ExternalCredential' do
|
||||
expect(Twitter::REST::Client)
|
||||
.to receive(:new).with(hash_including(consumer_credentials))
|
||||
.and_call_original
|
||||
|
||||
channel.fetch
|
||||
end
|
||||
|
||||
it 'uses OAuth token/secret stored on #options hash' do
|
||||
expect(Twitter::REST::Client)
|
||||
.to receive(:new).with(hash_including(oauth_credentials))
|
||||
.and_call_original
|
||||
|
||||
channel.fetch
|
||||
end
|
||||
end
|
||||
|
||||
describe 'Twitter API activity' do
|
||||
# travel back in time when VCR was recorded
|
||||
before { travel_to '2020-02-06 13:37 +0100' }
|
||||
|
||||
it 'sets successful status attributes' do
|
||||
expect { channel.fetch(true) }
|
||||
.to change { channel.reload.attributes }
|
||||
.to hash_including(
|
||||
'status_in' => 'ok',
|
||||
'last_log_in' => '',
|
||||
'status_out' => nil,
|
||||
'last_log_out' => nil
|
||||
)
|
||||
end
|
||||
|
||||
it 'adds tickets based on .options[:sync][:search] parameters' do
|
||||
expect { channel.fetch(true) }
|
||||
.to change(Ticket, :count).by(8)
|
||||
|
||||
expect(Ticket.last.attributes).to include(
|
||||
'title' => "Come and join our team to bring Zammad even further forward! It's gonna be ama...",
|
||||
'preferences' => { 'channel_id' => channel.id,
|
||||
'channel_screen_name' => channel.options[:user][:screen_name] },
|
||||
'customer_id' => User.find_by(firstname: 'Mr.Generation', lastname: '').id
|
||||
)
|
||||
end
|
||||
|
||||
it 'skips tweets more than 15 days older than channel itself'
|
||||
|
||||
context 'and "track_retweets" option' do
|
||||
subject(:channel) { create(:twitter_channel, custom_options: { sync: { track_retweets: true } }) }
|
||||
|
||||
it 'adds tickets based on .options[:sync][:search] parameters' do
|
||||
expect { channel.fetch(true) }
|
||||
.to change(Ticket, :count).by(21)
|
||||
|
||||
expect(Ticket.last.attributes).to include(
|
||||
'title' => 'RT @BarackObama: Kobe was a legend on the court and just getting started in what...',
|
||||
'preferences' => { 'channel_id' => channel.id,
|
||||
'channel_screen_name' => channel.options[:user][:screen_name] },
|
||||
'customer_id' => User.find_by(firstname: 'Zammad', lastname: 'Ali').id
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
context 'and legacy "import_older_tweets" option' do
|
||||
subject(:channel) { create(:twitter_channel, :legacy) }
|
||||
|
||||
it 'adds tickets based on .options[:sync][:search] parameters' do
|
||||
expect { channel.fetch(true) }
|
||||
.to change(Ticket, :count).by(21)
|
||||
|
||||
expect(Ticket.last.attributes).to include(
|
||||
'title' => 'Wir haben unsere DMs deaktiviert. ' \
|
||||
'Leider können wir dank der neuen Twitter API k...',
|
||||
'preferences' => { 'channel_id' => channel.id,
|
||||
'channel_screen_name' => channel.options[:user][:screen_name] },
|
||||
'customer_id' => User.find_by(firstname: 'Ccc', lastname: 'Event Logistics').id
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,78 +0,0 @@
|
|||
require 'rails_helper'
|
||||
|
||||
RSpec.describe Channel do
|
||||
describe '#fetch', use_vcr: :with_oauth_headers do
|
||||
context 'for Twitter driver' do
|
||||
context 'with valid token' do
|
||||
subject(:twitter_channel) { create(:twitter_channel) }
|
||||
|
||||
# travel back in time when VCR was recorded
|
||||
before { travel_to '2020-02-06 13:37 +0100' }
|
||||
|
||||
it 'returns true' do
|
||||
expect(twitter_channel.fetch(true)).to be(true)
|
||||
end
|
||||
|
||||
it 'sets successful status attributes' do
|
||||
expect { twitter_channel.fetch(true) }
|
||||
.to change { twitter_channel.reload.attributes }
|
||||
.to hash_including(
|
||||
'status_in' => 'ok',
|
||||
'last_log_in' => '',
|
||||
'status_out' => nil,
|
||||
'last_log_out' => nil
|
||||
)
|
||||
end
|
||||
|
||||
it 'adds tickets based on config parameters (mention/DM/search)' do
|
||||
expect { twitter_channel.fetch(true) }
|
||||
.to change(Ticket, :count).by(21)
|
||||
|
||||
expect(Ticket.last.attributes).to include(
|
||||
'title' => 'RT @BarackObama: Kobe was a legend on the court and just getting started in what...',
|
||||
'preferences' => { 'channel_id' => twitter_channel.id,
|
||||
'channel_screen_name' => twitter_channel.options[:user][:screen_name] },
|
||||
'customer_id' => User.find_by(firstname: 'Zammad', lastname: 'Ali').id
|
||||
)
|
||||
end
|
||||
|
||||
context 'and legacy "import_older_tweets" option' do
|
||||
subject(:twitter_channel) { create(:twitter_channel, :legacy) }
|
||||
|
||||
it 'adds tickets based on config parameters (mention/DM/search)' do
|
||||
expect { twitter_channel.fetch(true) }
|
||||
.to change(Ticket, :count).by(26)
|
||||
|
||||
expect(Ticket.last.attributes).to include(
|
||||
'title' => 'Wir haben unsere DMs deaktiviert. ' \
|
||||
'Leider können wir dank der neuen Twitter API k...',
|
||||
'preferences' => { 'channel_id' => twitter_channel.id,
|
||||
'channel_screen_name' => twitter_channel.options[:user][:screen_name] },
|
||||
'customer_id' => User.find_by(firstname: 'Ccc', lastname: 'Event Logistics').id
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'with invalid token' do
|
||||
subject(:twitter_channel) { create(:twitter_channel, :invalid) }
|
||||
|
||||
it 'returns false' do
|
||||
expect(twitter_channel.fetch(true)).to be(false)
|
||||
end
|
||||
|
||||
it 'sets error/nil status attributes' do
|
||||
expect { twitter_channel.fetch(true) }
|
||||
.to change { twitter_channel.reload.attributes }
|
||||
.to hash_including(
|
||||
'status_in' => 'error',
|
||||
'last_log_in' => "Can't use Channel::Driver::Twitter: " \
|
||||
'#<Twitter::Error::Unauthorized: Invalid or expired token.>',
|
||||
'status_out' => nil,
|
||||
'last_log_out' => nil
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
File diff suppressed because one or more lines are too long
|
@ -1,51 +0,0 @@
|
|||
---
|
||||
http_interactions:
|
||||
- request:
|
||||
method: get
|
||||
uri: https://api.twitter.com/1.1/search/tweets.json?count=100&q=zammad&result_type=mixed
|
||||
body:
|
||||
encoding: UTF-8
|
||||
string: ''
|
||||
headers:
|
||||
User-Agent:
|
||||
- TwitterRubyGem/6.2.0
|
||||
Authorization:
|
||||
- OAuth oauth_consumer_key="q7K8GEkhyCHs9jHLtkmD9Kod4", oauth_nonce="b5b77e1667355db2efc64e178b8a0aaa",
|
||||
oauth_signature="tybPhlz3I5fMRF5%2BE12Pwx3U5XM%3D", oauth_signature_method="HMAC-SHA1",
|
||||
oauth_timestamp="1543796201", oauth_token="7783712304-H9s75r2d532diPmJYK6JrvUWxu9gTDZ6ocjfToL", oauth_version="1.0"
|
||||
Connection:
|
||||
- close
|
||||
Host:
|
||||
- api.twitter.com
|
||||
response:
|
||||
status:
|
||||
code: 401
|
||||
message: Unauthorized
|
||||
headers:
|
||||
Connection:
|
||||
- close
|
||||
Content-Length:
|
||||
- '62'
|
||||
Content-Type:
|
||||
- application/json; charset=utf-8
|
||||
Date:
|
||||
- Mon, 03 Dec 2018 00:16:41 GMT
|
||||
Server:
|
||||
- tsa_o
|
||||
Set-Cookie:
|
||||
- guest_id=v1%3A154379620109191613; Expires=Wed, 02 Dec 2020 00:16:41 GMT; Path=/;
|
||||
Domain=.twitter.com
|
||||
- personalization_id="v1_i2UDOt8QXhYvnNAv90Q8jA=="; Expires=Wed, 02 Dec 2020
|
||||
00:16:41 GMT; Path=/; Domain=.twitter.com
|
||||
Strict-Transport-Security:
|
||||
- max-age=631138519
|
||||
X-Connection-Hash:
|
||||
- 8af740bd8d5f98022086657c7172b7ee
|
||||
X-Response-Time:
|
||||
- '114'
|
||||
body:
|
||||
encoding: UTF-8
|
||||
string: '{"errors":[{"code":89,"message":"Invalid or expired token."}]}'
|
||||
http_version:
|
||||
recorded_at: Mon, 03 Dec 2018 00:16:41 GMT
|
||||
recorded_with: VCR 4.0.0
|
|
@ -1,51 +0,0 @@
|
|||
---
|
||||
http_interactions:
|
||||
- request:
|
||||
method: get
|
||||
uri: https://api.twitter.com/1.1/search/tweets.json?count=100&q=zammad&result_type=mixed
|
||||
body:
|
||||
encoding: UTF-8
|
||||
string: ''
|
||||
headers:
|
||||
User-Agent:
|
||||
- TwitterRubyGem/6.2.0
|
||||
Authorization:
|
||||
- OAuth oauth_consumer_key="q7K8GEkhyCHs9jHLtkmD9Kod4", oauth_nonce="b5b77e1667355db2efc64e178b8a0aaa",
|
||||
oauth_signature="tybPhlz3I5fMRF5%2BE12Pwx3U5XM%3D", oauth_signature_method="HMAC-SHA1",
|
||||
oauth_timestamp="1543796201", oauth_token="7783712304-H9s75r2d532diPmJYK6JrvUWxu9gTDZ6ocjfToL", oauth_version="1.0"
|
||||
Connection:
|
||||
- close
|
||||
Host:
|
||||
- api.twitter.com
|
||||
response:
|
||||
status:
|
||||
code: 401
|
||||
message: Unauthorized
|
||||
headers:
|
||||
Connection:
|
||||
- close
|
||||
Content-Length:
|
||||
- '62'
|
||||
Content-Type:
|
||||
- application/json; charset=utf-8
|
||||
Date:
|
||||
- Mon, 03 Dec 2018 00:16:41 GMT
|
||||
Server:
|
||||
- tsa_o
|
||||
Set-Cookie:
|
||||
- guest_id=v1%3A154379620109191613; Expires=Wed, 02 Dec 2020 00:16:41 GMT; Path=/;
|
||||
Domain=.twitter.com
|
||||
- personalization_id="v1_i2UDOt8QXhYvnNAv90Q8jA=="; Expires=Wed, 02 Dec 2020
|
||||
00:16:41 GMT; Path=/; Domain=.twitter.com
|
||||
Strict-Transport-Security:
|
||||
- max-age=631138519
|
||||
X-Connection-Hash:
|
||||
- 8af740bd8d5f98022086657c7172b7ee
|
||||
X-Response-Time:
|
||||
- '114'
|
||||
body:
|
||||
encoding: UTF-8
|
||||
string: '{"errors":[{"code":89,"message":"Invalid or expired token."}]}'
|
||||
http_version:
|
||||
recorded_at: Mon, 03 Dec 2018 00:16:41 GMT
|
||||
recorded_with: VCR 4.0.0
|
File diff suppressed because one or more lines are too long
Loading…
Reference in a new issue