sms-spec 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/Guardfile +5 -0
- data/README.markdown +55 -0
- data/Rakefile +1 -0
- data/lib/generators/text_spec/steps/USAGE +6 -0
- data/lib/generators/text_spec/steps/steps_generator.rb +14 -0
- data/lib/generators/text_spec/steps/templates/text_message_steps.rb +44 -0
- data/lib/sms-spec.rb +1 -0
- data/lib/sms_spec.rb +17 -0
- data/lib/sms_spec/cucumber.rb +6 -0
- data/lib/sms_spec/data.rb +43 -0
- data/lib/sms_spec/drivers/twilio-ruby.rb +31 -0
- data/lib/sms_spec/helpers.rb +40 -0
- data/lib/sms_spec/matchers.rb +33 -0
- data/lib/sms_spec/message.rb +11 -0
- data/lib/sms_spec/mobile_device.rb +10 -0
- data/lib/sms_spec/util.rb +7 -0
- data/lib/sms_spec/version.rb +3 -0
- data/rails_generators/text_spec/templates/text_message_steps.rb +36 -0
- data/rails_generators/text_spec_generator.rb +14 -0
- data/sms-spec.gemspec +27 -0
- data/spec/drivers_spec.rb +31 -0
- data/spec/helpers_spec.rb +124 -0
- data/spec/matchers_spec.rb +70 -0
- data/spec/spec_helper.rb +4 -0
- metadata +130 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Guardfile
ADDED
data/README.markdown
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
# SMS Spec
|
2
|
+
|
3
|
+
An RSpec DSL and Cucumber steps to test SMS interactions with your
|
4
|
+
Ruby on Rails application.
|
5
|
+
|
6
|
+
Currently this gem only supports testing SMS messageing using the
|
7
|
+
[twilio-ruby](https://github.com/twilio/twilio-ruby) gem.
|
8
|
+
|
9
|
+
##Setup
|
10
|
+
Add the sms\_spec gem to your Gemfile:
|
11
|
+
<pre>
|
12
|
+
group :test do
|
13
|
+
gem 'sms_spec'
|
14
|
+
end
|
15
|
+
</pre>
|
16
|
+
|
17
|
+
## RSpec
|
18
|
+
In your spec\_helper.rb file add the following:
|
19
|
+
<pre>
|
20
|
+
require 'sms_spec'
|
21
|
+
</pre>
|
22
|
+
|
23
|
+
If you want to have the helpers available in all of your example groups,
|
24
|
+
you can add the following to your spec_helper.rb:
|
25
|
+
<pre>
|
26
|
+
Spec::Runner.configure do |config|
|
27
|
+
config.include(SmsSpec::Helpers)
|
28
|
+
config.include(SmsSpec::Matchers)
|
29
|
+
end
|
30
|
+
</pre>
|
31
|
+
|
32
|
+
Otherwise you will have to incliude the helpers and matchers in any
|
33
|
+
example where you use them:
|
34
|
+
|
35
|
+
<pre>
|
36
|
+
describe "MyController" do
|
37
|
+
include SmsSpec::Helpers
|
38
|
+
include SmsSpec::Matchers
|
39
|
+
end
|
40
|
+
</pre>
|
41
|
+
|
42
|
+
## Cucumber
|
43
|
+
Add the folloing to you env.rb file:
|
44
|
+
|
45
|
+
<pre>
|
46
|
+
require 'sms_spec'
|
47
|
+
require 'sms_spec/cucumber'
|
48
|
+
</pre>
|
49
|
+
|
50
|
+
This loads the sms\_spec RSpec helpers into your cucumber wold. Then,
|
51
|
+
run the following to generate the text\_messsage\_steps.rb file:
|
52
|
+
|
53
|
+
<pre>
|
54
|
+
rails generate sms_spec:steps
|
55
|
+
</pre>
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
|
3
|
+
module SmsSpec
|
4
|
+
class StepsGenerator < Rails::Generators::Base
|
5
|
+
def generate
|
6
|
+
copy_file 'text_message_steps.rb', 'features/step_definitions/text_message_steps.rb'
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.source_root
|
10
|
+
File.join(File.dirname(__FILE__), 'templates')
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# -------------------------------------------
|
2
|
+
# Available methods
|
3
|
+
# -------------------------------------------
|
4
|
+
|
5
|
+
# messages
|
6
|
+
# add_message
|
7
|
+
# set_current_number
|
8
|
+
# current_number
|
9
|
+
# clear_messages
|
10
|
+
# current_text_message
|
11
|
+
# open_last_text_message_for
|
12
|
+
|
13
|
+
|
14
|
+
Given /^no text messages have been sent$/ do
|
15
|
+
clear_messages
|
16
|
+
end
|
17
|
+
|
18
|
+
Given /^all text messages have been read$/ do
|
19
|
+
clear_messages
|
20
|
+
end
|
21
|
+
|
22
|
+
Then /^"([^"]*)" should receive a text message$/ do |phone_number|
|
23
|
+
messages_for(phone_number).should_not be_empty
|
24
|
+
end
|
25
|
+
|
26
|
+
Then /^"([^"]*)" should receive no text messages$/ do |phone_number|
|
27
|
+
messages_for(phone_number).should be_empty
|
28
|
+
end
|
29
|
+
|
30
|
+
When /^"([^"]*?)" opens? the text message$/ do |mobile_number|
|
31
|
+
open_last_text_message_for(mobile_number)
|
32
|
+
end
|
33
|
+
|
34
|
+
Then /^I should see "([^"]*)" in the text message body$/ do |content|
|
35
|
+
current_text_message.should have_body(content)
|
36
|
+
end
|
37
|
+
|
38
|
+
Then /^I should see "([^"]*)" in the text message body$/ do |content|
|
39
|
+
current_text_message.should have_body(content)
|
40
|
+
end
|
41
|
+
|
42
|
+
Then /^I should see the following in the text message body:$/ do |content|
|
43
|
+
current_text_message.should have_body(content)
|
44
|
+
end
|
data/lib/sms-spec.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'sms_spec'
|
data/lib/sms_spec.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'rspec'
|
2
|
+
require "sms_spec/version"
|
3
|
+
require "sms_spec/helpers"
|
4
|
+
require "sms_spec/data"
|
5
|
+
require "sms_spec/message"
|
6
|
+
require "sms_spec/util"
|
7
|
+
require "sms_spec/mobile_device"
|
8
|
+
require "sms_spec/matchers"
|
9
|
+
#require "sms_spec/drivers/twilio-ruby"
|
10
|
+
|
11
|
+
module SmsSpec
|
12
|
+
def self.driver=(driver_sym)
|
13
|
+
require "sms_spec/drivers/#{driver_sym.to_s}"
|
14
|
+
end
|
15
|
+
|
16
|
+
SmsSpec.driver = :"twilio-ruby"
|
17
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'sms_spec/util'
|
2
|
+
|
3
|
+
module SmsSpec
|
4
|
+
class Data
|
5
|
+
extend SmsSpec::Util
|
6
|
+
|
7
|
+
def self.add_message message
|
8
|
+
@@messages ||= []
|
9
|
+
@@messages << message
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.clear_messages
|
13
|
+
@@messages = []
|
14
|
+
@@current_text_message = nil
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.messages
|
18
|
+
@@messages ||= []
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.set_current_number(number)
|
22
|
+
@@current_number = sanitize number
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.current_number
|
26
|
+
@@current_number
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.current_text_message
|
30
|
+
@@current_text_message ||= nil
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.open_last_text_message_for(phone_number)
|
34
|
+
message = messages_for(phone_number).first
|
35
|
+
@@current_text_message = @@messages.delete(message)
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.messages_for(phone_number)
|
39
|
+
@@messages.select {|m| m.number == sanitize(phone_number)}
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
class Twilio::REST::Client
|
2
|
+
|
3
|
+
def initialize(account_sid, auth_token)
|
4
|
+
end
|
5
|
+
|
6
|
+
class Messages
|
7
|
+
include SmsSpec::Helpers
|
8
|
+
|
9
|
+
def create(opts={})
|
10
|
+
to = opts[:to]
|
11
|
+
body = opts[:body]
|
12
|
+
add_message Message.new(:number => to, :body => body)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class Sms
|
17
|
+
def messages
|
18
|
+
return Messages.new
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class Account
|
23
|
+
def sms
|
24
|
+
return Sms.new
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def account
|
29
|
+
return Account.new
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
|
3
|
+
module SmsSpec
|
4
|
+
module Helpers
|
5
|
+
extend Forwardable
|
6
|
+
|
7
|
+
def_delegators :"SmsSpec::Data",
|
8
|
+
:messages,
|
9
|
+
:add_message,
|
10
|
+
:set_current_number,
|
11
|
+
:current_number,
|
12
|
+
:clear_messages,
|
13
|
+
:current_text_message,
|
14
|
+
:messages_for,
|
15
|
+
:open_last_text_message_for
|
16
|
+
|
17
|
+
def twiml_message(from, body, opts={})
|
18
|
+
base_options = {
|
19
|
+
"AccountSid"=>"1234567812345678",
|
20
|
+
"Body"=> body,
|
21
|
+
"ToZip"=>"94949",
|
22
|
+
"FromState"=>"MI",
|
23
|
+
"ToCity"=>"NOVATO",
|
24
|
+
"SmsSid"=>"1234567812345678",
|
25
|
+
"ToState"=>"CA",
|
26
|
+
"To"=>"8155552671",
|
27
|
+
"ToCountry"=>"US",
|
28
|
+
"FromCountry"=>"US",
|
29
|
+
"SmsMessageSid"=>"123456712345671234567",
|
30
|
+
"ApiVersion"=>"2008-08-01",
|
31
|
+
"FromCity"=>"GRAND RAPIDS",
|
32
|
+
"SmsStatus"=>"received",
|
33
|
+
"From"=> from,
|
34
|
+
"FromZip"=>"49507"
|
35
|
+
}
|
36
|
+
|
37
|
+
base_options.merge! opts
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module SmsSpec
|
2
|
+
module Matchers
|
3
|
+
|
4
|
+
RSpec::Matchers.define :have_text_messages do
|
5
|
+
match do |mobile_device|
|
6
|
+
mobile_device.messages.count > 0
|
7
|
+
end
|
8
|
+
|
9
|
+
failure_message_for_should do |mobile_device|
|
10
|
+
"expected the mobile device '#{mobile_device.number}' to have text messages but it did not"
|
11
|
+
end
|
12
|
+
|
13
|
+
failure_message_for_should_not do |mobile_device|
|
14
|
+
"expected the mobile device '#{mobile_device.number}' to have no text messages but it did"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
RSpec::Matchers.define :have_body do |expected_body|
|
19
|
+
match do |message|
|
20
|
+
message.body == expected_body
|
21
|
+
end
|
22
|
+
|
23
|
+
#failure_message_for_should do |mobile_device|
|
24
|
+
#"expected the mobile device '#{mobile_device.number}' to have text messages but it did not"
|
25
|
+
#end
|
26
|
+
|
27
|
+
#failure_message_for_should_not do |mobile_device|
|
28
|
+
#"expected the mobile device '#{mobile_device.number}' to have no text messages but it did"
|
29
|
+
#end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# -------------------------------------------
|
2
|
+
# Available methods
|
3
|
+
# -------------------------------------------
|
4
|
+
|
5
|
+
# messages
|
6
|
+
# add_message
|
7
|
+
# set_current_number
|
8
|
+
# current_number
|
9
|
+
# clear_messages
|
10
|
+
# current_text_message
|
11
|
+
# open_last_text_message_for
|
12
|
+
|
13
|
+
|
14
|
+
Given /^no text messages have been sent$/ do
|
15
|
+
clear_messages
|
16
|
+
end
|
17
|
+
|
18
|
+
Given /^all text messages have been read$/ do
|
19
|
+
clear_messages
|
20
|
+
end
|
21
|
+
|
22
|
+
Then /^"([^"]*)" should receive a text message$/ do |phone_number|
|
23
|
+
messages_for(phone_number).should_not be_empty
|
24
|
+
end
|
25
|
+
|
26
|
+
Then /^"([^"]*)" should receive no text messages$/ do |phone_number|
|
27
|
+
messages_for(phone_number).should be_empty
|
28
|
+
end
|
29
|
+
|
30
|
+
When /^"([^"]*?)" opens? the text message$/ do |mobile_number|
|
31
|
+
open_last_text_message_for(mobile_number)
|
32
|
+
end
|
33
|
+
|
34
|
+
Then /^I should see "([^"]*)" in the text message body$/ do |content|
|
35
|
+
current_text_message.should have_body(content)
|
36
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
base = defined?(Rails) ? Rails::Generator::Base : RubiGen::Base
|
2
|
+
|
3
|
+
class SmsSpecGenerator < base
|
4
|
+
def manifest
|
5
|
+
m.directory 'features/step_definitions'
|
6
|
+
m.file 'text_message_steps.rb', 'features/step_definitions/text_message_steps.rb'
|
7
|
+
end
|
8
|
+
|
9
|
+
protected
|
10
|
+
|
11
|
+
def banner
|
12
|
+
"Usage: #{0} sms_spec"
|
13
|
+
end
|
14
|
+
end
|
data/sms-spec.gemspec
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "sms_spec/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "sms-spec"
|
7
|
+
s.version = SmsSpec::VERSION
|
8
|
+
s.authors = ["Chris Rittersdorf"]
|
9
|
+
s.email = ["manlycode@gmail.com"]
|
10
|
+
s.homepage = "https://github.com/mhs/sms_spec"
|
11
|
+
s.summary = %q{Test SMS interactions with RSpec and Cucumber}
|
12
|
+
s.description = %q{Text Spec gives you an RSpec DSL and Cucumber steps to test SMS interactions.}
|
13
|
+
|
14
|
+
s.rubyforge_project = "sms_spec"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
s.add_dependency 'rspec'
|
22
|
+
|
23
|
+
s.add_development_dependency "rspec"
|
24
|
+
s.add_development_dependency "twilio-ruby"
|
25
|
+
s.add_development_dependency "guard-rspec"
|
26
|
+
s.add_development_dependency "pry"
|
27
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'twilio-ruby'
|
2
|
+
require File.join(File.dirname(__FILE__), *%w[spec_helper])
|
3
|
+
|
4
|
+
describe SmsSpec do
|
5
|
+
include SmsSpec::Helpers
|
6
|
+
|
7
|
+
before :each do
|
8
|
+
SmsSpec::Data.clear_messages
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "the twilio-ruby driver" do
|
12
|
+
it "is assignable" do
|
13
|
+
SmsSpec.driver = :"twilio-ruby"
|
14
|
+
end
|
15
|
+
|
16
|
+
it "intercepts calls to twilio's sms client" do
|
17
|
+
account_sid = 'ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
|
18
|
+
auth_token = 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'
|
19
|
+
|
20
|
+
@client = Twilio::REST::Client.new account_sid, auth_token
|
21
|
+
@client.account.sms.messages.create(
|
22
|
+
:from => '+14159341234',
|
23
|
+
:to => '+16105557069',
|
24
|
+
:body => 'Hey there!'
|
25
|
+
)
|
26
|
+
|
27
|
+
open_last_text_message_for("+16105557069")
|
28
|
+
current_text_message.should_not be_nil
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), *%w[spec_helper])
|
2
|
+
|
3
|
+
describe SmsSpec::Helpers do
|
4
|
+
include SmsSpec::Helpers
|
5
|
+
|
6
|
+
before :each do
|
7
|
+
SmsSpec::Data.clear_messages
|
8
|
+
end
|
9
|
+
|
10
|
+
describe ".messages" do
|
11
|
+
describe "before any messages have been sent" do
|
12
|
+
it "is empty" do
|
13
|
+
messages.should be_empty
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "after a message has been sent" do
|
18
|
+
it "adds a message" do
|
19
|
+
lambda {
|
20
|
+
add_message Message.new :number => "5555555512", :body => "Hello there"
|
21
|
+
}.should change(messages, :count).by(1)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe ".set_current_number" do
|
27
|
+
it "assigns the current number" do
|
28
|
+
set_current_number "555551234"
|
29
|
+
current_number.should == "555551234"
|
30
|
+
end
|
31
|
+
|
32
|
+
it "sanitizes phone nubmers" do
|
33
|
+
set_current_number "+1555551234"
|
34
|
+
current_number.should == "555551234"
|
35
|
+
|
36
|
+
set_current_number "1-616-555-2929"
|
37
|
+
current_number.should == "6165552929"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe ".clear_sms_messages" do
|
42
|
+
it "removes all messages" do
|
43
|
+
add_message Message.new :number => "5555555512", :body => "Hello there"
|
44
|
+
add_message Message.new :number => "5555555512", :body => "Hello there"
|
45
|
+
add_message Message.new :number => "5555555512", :body => "Hello there"
|
46
|
+
|
47
|
+
messages.should have(3).messages
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe ".current_text_message" do
|
52
|
+
describe "when there are not text messages yet" do
|
53
|
+
before :each do
|
54
|
+
SmsSpec::Data.clear_messages
|
55
|
+
end
|
56
|
+
|
57
|
+
it "returns nil" do
|
58
|
+
current_text_message.should be_nil
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe "when there are messages" do
|
63
|
+
let(:message1) { Message.new :number => "5555555513", :body => "Hi" }
|
64
|
+
let(:message2) { Message.new :number => "5555555512", :body => "Hello there" }
|
65
|
+
|
66
|
+
before do
|
67
|
+
add_message message1
|
68
|
+
add_message message2
|
69
|
+
end
|
70
|
+
|
71
|
+
describe "and no messages have been opened" do
|
72
|
+
it "should be nil" do
|
73
|
+
current_text_message.should be_nil
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
describe "and a message has been opened" do
|
78
|
+
before do
|
79
|
+
open_last_text_message_for("5555555513")
|
80
|
+
end
|
81
|
+
|
82
|
+
it "returns the last open text message" do
|
83
|
+
current_text_message.should == message1
|
84
|
+
|
85
|
+
open_last_text_message_for("5555555513")
|
86
|
+
current_text_message.should be_nil
|
87
|
+
|
88
|
+
open_last_text_message_for("5555555512")
|
89
|
+
current_text_message.should == message2
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
describe ".twiml_message" do
|
96
|
+
context "with defaults" do
|
97
|
+
let(:message) {
|
98
|
+
twiml_message("+16165559982", "Ahoy!")
|
99
|
+
}
|
100
|
+
|
101
|
+
it "modifies the From attribute" do
|
102
|
+
message["From"].should eql("+16165559982")
|
103
|
+
end
|
104
|
+
|
105
|
+
it "Modifies the Body attribute" do
|
106
|
+
message["Body"].should eql("Ahoy!")
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
describe "Overriding options" do
|
111
|
+
let(:message) {
|
112
|
+
twiml_message("+16165559982", "Ahoy!", "ToZip" => "49506", "ToCity" => "Detroit")
|
113
|
+
}
|
114
|
+
|
115
|
+
it "overrides the specified attributes" do
|
116
|
+
message["ToZip"].should eql("49506")
|
117
|
+
message["ToCity"].should eql("Detroit")
|
118
|
+
message["Body"].should eql("Ahoy!")
|
119
|
+
message["From"].should eql("+16165559982")
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), *%w[spec_helper])
|
2
|
+
|
3
|
+
describe SmsSpec::Matchers do
|
4
|
+
include SmsSpec::Helpers
|
5
|
+
include SmsSpec::Matchers
|
6
|
+
|
7
|
+
let(:mobile_number) { "5555555512" }
|
8
|
+
|
9
|
+
class MatcherMatch
|
10
|
+
def initialize(object_to_test_match)
|
11
|
+
@object_to_test_match = object_to_test_match
|
12
|
+
end
|
13
|
+
|
14
|
+
def description
|
15
|
+
"match when provided #{@object_to_test_match.inspect}"
|
16
|
+
end
|
17
|
+
|
18
|
+
def matches?(matcher)
|
19
|
+
@matcher = matcher
|
20
|
+
matcher.matches?(@object_to_test_match)
|
21
|
+
end
|
22
|
+
|
23
|
+
def failure_message
|
24
|
+
"expected #{@matcher.inspect} to match when provided #{@object_to_test_match.inspect}, but it did not"
|
25
|
+
end
|
26
|
+
|
27
|
+
def negative_failure_message
|
28
|
+
"expected #{@matcher.inspect} not to match when provided #{@object_to_test_match.inspect}, but it did"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def match(object_to_test_match)
|
33
|
+
if object_to_test_match.is_a?(Regexp)
|
34
|
+
super # delegate to rspec's built in 'match' matcher
|
35
|
+
else
|
36
|
+
MatcherMatch.new(object_to_test_match)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe ".have_text_messages" do
|
41
|
+
include SmsSpec::Matchers
|
42
|
+
|
43
|
+
describe "when the mobile device has no text messages" do
|
44
|
+
it "should not match" do
|
45
|
+
device = MobileDevice.new(:number => mobile_number)
|
46
|
+
have_text_messages.should_not match(device)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "when the mobile device has text messages" do
|
51
|
+
it "should match" do
|
52
|
+
add_message Message.new(:number => mobile_number, :body => "something")
|
53
|
+
|
54
|
+
device = MobileDevice.new(mobile_number)
|
55
|
+
have_text_messages.should match(device)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe ".have_body" do
|
61
|
+
describe "when bodies match" do
|
62
|
+
it "matches" do
|
63
|
+
message = Message.new(:number => mobile_number, :body => "something")
|
64
|
+
|
65
|
+
have_body("something").should match(message)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,130 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sms-spec
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.9
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Chris Rittersdorf
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-03-18 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rspec
|
16
|
+
requirement: &2157261680 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *2157261680
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rspec
|
27
|
+
requirement: &2157260980 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *2157260980
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: twilio-ruby
|
38
|
+
requirement: &2157260320 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *2157260320
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: guard-rspec
|
49
|
+
requirement: &2157259700 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *2157259700
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: pry
|
60
|
+
requirement: &2157259140 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *2157259140
|
69
|
+
description: Text Spec gives you an RSpec DSL and Cucumber steps to test SMS interactions.
|
70
|
+
email:
|
71
|
+
- manlycode@gmail.com
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- .gitignore
|
77
|
+
- Gemfile
|
78
|
+
- Guardfile
|
79
|
+
- README.markdown
|
80
|
+
- Rakefile
|
81
|
+
- lib/generators/text_spec/steps/USAGE
|
82
|
+
- lib/generators/text_spec/steps/steps_generator.rb
|
83
|
+
- lib/generators/text_spec/steps/templates/text_message_steps.rb
|
84
|
+
- lib/sms-spec.rb
|
85
|
+
- lib/sms_spec.rb
|
86
|
+
- lib/sms_spec/cucumber.rb
|
87
|
+
- lib/sms_spec/data.rb
|
88
|
+
- lib/sms_spec/drivers/twilio-ruby.rb
|
89
|
+
- lib/sms_spec/helpers.rb
|
90
|
+
- lib/sms_spec/matchers.rb
|
91
|
+
- lib/sms_spec/message.rb
|
92
|
+
- lib/sms_spec/mobile_device.rb
|
93
|
+
- lib/sms_spec/util.rb
|
94
|
+
- lib/sms_spec/version.rb
|
95
|
+
- rails_generators/text_spec/templates/text_message_steps.rb
|
96
|
+
- rails_generators/text_spec_generator.rb
|
97
|
+
- sms-spec.gemspec
|
98
|
+
- spec/drivers_spec.rb
|
99
|
+
- spec/helpers_spec.rb
|
100
|
+
- spec/matchers_spec.rb
|
101
|
+
- spec/spec_helper.rb
|
102
|
+
homepage: https://github.com/mhs/sms_spec
|
103
|
+
licenses: []
|
104
|
+
post_install_message:
|
105
|
+
rdoc_options: []
|
106
|
+
require_paths:
|
107
|
+
- lib
|
108
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
109
|
+
none: false
|
110
|
+
requirements:
|
111
|
+
- - ! '>='
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: '0'
|
114
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
115
|
+
none: false
|
116
|
+
requirements:
|
117
|
+
- - ! '>='
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '0'
|
120
|
+
requirements: []
|
121
|
+
rubyforge_project: sms_spec
|
122
|
+
rubygems_version: 1.8.6
|
123
|
+
signing_key:
|
124
|
+
specification_version: 3
|
125
|
+
summary: Test SMS interactions with RSpec and Cucumber
|
126
|
+
test_files:
|
127
|
+
- spec/drivers_spec.rb
|
128
|
+
- spec/helpers_spec.rb
|
129
|
+
- spec/matchers_spec.rb
|
130
|
+
- spec/spec_helper.rb
|