76 lines
2 KiB
Ruby
76 lines
2 KiB
Ruby
![]() |
require 'spec_helper'
|
||
|
require 'memory_profiler'
|
||
|
require 'tempfile'
|
||
|
|
||
|
def Process.rss; `ps -o rss= -p #{Process.pid}`.chomp.to_i; end
|
||
|
|
||
|
class TestBot < Ebooks::Bot
|
||
|
attr_accessor :twitter
|
||
|
|
||
|
def configure
|
||
|
self.username = "test_ebooks"
|
||
|
end
|
||
|
|
||
|
def on_direct_message(dm)
|
||
|
reply dm, "echo: #{dm.text}"
|
||
|
end
|
||
|
|
||
|
def on_mention(tweet, meta)
|
||
|
reply tweet, "echo: #{meta[:mentionless]}"
|
||
|
end
|
||
|
|
||
|
def on_timeline(tweet, meta)
|
||
|
reply tweet, "fine tweet good sir"
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def twitter_id
|
||
|
533295311591337984
|
||
|
end
|
||
|
|
||
|
def mock_dm(username, text)
|
||
|
Twitter::DirectMessage.new(id: twitter_id,
|
||
|
sender: { id: twitter_id, screen_name: username},
|
||
|
text: text)
|
||
|
end
|
||
|
|
||
|
def mock_tweet(username, text)
|
||
|
mentions = text.split.find_all { |x| x.start_with?('@') }
|
||
|
Twitter::Tweet.new(
|
||
|
id: twitter_id,
|
||
|
user: { id: twitter_id, screen_name: username },
|
||
|
text: text,
|
||
|
entities: {
|
||
|
user_mentions: mentions.map { |m|
|
||
|
{ screen_name: m.split('@')[1],
|
||
|
indices: [text.index(m), text.index(m)+m.length] }
|
||
|
}
|
||
|
}
|
||
|
)
|
||
|
end
|
||
|
|
||
|
describe Ebooks::Bot do
|
||
|
let(:bot) { TestBot.new }
|
||
|
|
||
|
it "responds to dms" do
|
||
|
bot.twitter = double("twitter")
|
||
|
expect(bot.twitter).to receive(:create_direct_message).with("m1sp", "echo: this is a dm", {})
|
||
|
bot.receive_event(mock_dm("m1sp", "this is a dm"))
|
||
|
end
|
||
|
|
||
|
it "responds to mentions" do
|
||
|
bot.twitter = double("twitter")
|
||
|
expect(bot.twitter).to receive(:update).with("@m1sp echo: this is a mention",
|
||
|
in_reply_to_status_id: twitter_id)
|
||
|
bot.receive_event(mock_tweet("m1sp", "@test_ebooks this is a mention"))
|
||
|
end
|
||
|
|
||
|
it "responds to timeline tweets" do
|
||
|
bot.twitter = double("twitter")
|
||
|
expect(bot.twitter).to receive(:update).with("@m1sp fine tweet good sir",
|
||
|
in_reply_to_status_id: twitter_id)
|
||
|
|
||
|
bot.receive_event(mock_tweet("m1sp", "some excellent tweet"))
|
||
|
end
|
||
|
end
|