Wrap text
Report abuse
require 'mocha'
require 'spam_cannon'
require 'test/unit'
class SpamCannonTest < Test::Unit::TestCase
def setup
setup_client
setup_newsletters
setup_users
end
def setup_client
SpamCannon.client = mock
end
def setup_newsletters
Object.const_set(:FakeNewsletter, Struct.new(:list_id, :title, :summary, :frequency)) unless defined? FakeNewsletter
@letters = []
@letters << [ 'n313', 'The Daily Rubyist', "A daily recap of what's hot and what's not.", 'daily' ]
@letters << [ 'n421', 'Gently Mockin', "A weekly reader on mocking and related stories.", 'weekly' ]
@letters.map! { |s| FakeNewsletter.new(*s) }
SpamCannon.client.stubs(:getNewsletters).returns(@letters)
end
def setup_users
Object.const_set(:FakeUser, Struct.new(:email, :vitals, :subscriptions)) unless defined? FakeUser
@users = {
:err => [ 'err@theblog.com', { :age => 31, :state => 'CA' }, ['n313'] ],
:nic => [ 'dr@nic.com', { :age => 19, :state => 'N/A' }, %w[n313 n421] ],
:evn => [ 'evan@weaver.com', { :age => 37, :state => 'PA' }, ['n421'] ]
}
@users = @users.inject({}) { |hash, (name, user)| hash.merge(name => FakeUser.new(*user)) }
end
def test_get_user_does_something
user = @users[:err]
SpamCannon.client.expects(:getUser).with(user.email).returns(user)
assert_equal user, SpamCannon.get_user(user.email)
end
def test_create_user_works
user = @users[:nic]
SpamCannon.client.expects(:createUser).with(user.email, user.vitals, user.subscriptions).returns(true)
assert SpamCannon.create_user(user.email, user.vitals, user.subscriptions)
end
def test_update_user_is_okay
user, unsubscribe = @users[:evn], %w[e353]
SpamCannon.client.expects(:updateUser).with(user.email, user.vitals, user.subscriptions, unsubscribe).returns(true)
assert SpamCannon.update_user(user.email, user.vitals, user.subscriptions, unsubscribe)
end
def test_newsletters_returns_hash
assert_equal Hash, SpamCannon.newsletters.class
assert_equal 2, SpamCannon.newsletters.size
end
def test_newsletters_has_the_key
assert_equal %w[n313 n421].sort, SpamCannon.newsletters.keys.sort
end
def test_newsletters_hash_is_properly_indexed
assert_equal @letters.last, SpamCannon.newsletters[@letters.last.list_id]
end
def test_newsletters_hash_is_cached
object_id = SpamCannon.newsletters.object_id
assert_equal object_id, SpamCannon.newsletters.object_id
assert_equal object_id, SpamCannon.newsletters.object_id
end
def test_user_exists_works
email = 'err@theblog.com'
SpamCannon.client.expects(:doesUserExist).with(email).returns(true)
assert SpamCannon.user_exists?(email)
end
end