twitter-ebooks/spec/bot_spec.rb

76 lines
2 KiB
Ruby
Raw Normal View History

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