# -*- coding: utf-8 -*-
require 'spec_helper'
require 'mail'
describe Shortener::ShortenUrlInterceptor do
def create_email(body)
Mail.new(:from => 'test@mbln.jp', :to => 'test@mbln.jp', :body => body).tap do |m|
m.encoded
Shortener::ShortenUrlInterceptor.new.delivering_email(m)
end
end
TEXTS = [ "Test with URL: %{url}",
"Test with URL: %{url}!",
"Test with URL: %{url}, hu!",
"Test with URL: %{url}. hu!",
"Test with URL: test",
"Test with URL: test" ]
shared_examples_for "shortens URL in text" do |url|
TEXTS.each do |raw_email_body_text|
email_body_text = raw_email_body_text % {:url => url}
it("shortens for #{email_body_text}") do
email = create_email(email_body_text)
short_url = Shortener::ShortenedUrl.find_by_url(url)
short_url.should_not be_nil
email.body.should == (raw_email_body_text % {:url => "http://mbln.jp/#{short_url.unique_key}"})
end
end
end
shared_examples_for "does not shorten URL" do |url|
TEXTS.each do |raw_email_body_text|
email_body_text = raw_email_body_text % {:url => url}
it("keeps URL for #{email_body_text}") do
email = create_email(email_body_text)
short_url = Shortener::ShortenedUrl.find_by_url(url)
short_url.should be_nil
email.body.should == email_body_text
end
end
end
[ "http://client.doorkeeper.jp/events/124-title",
"http://client.doorkeeper.jp/events/124-",
"http://client.doorkeeper.jp/events/124-title?auth_token=xabagangs",
"http://client.doorkeeper.jp/events/124-%E4%F6%A0",
].each do |url|
it_should_behave_like "shortens URL in text", url
end
# we won't shorten certain URLs:
[ "http://t.co/asdvk", # short URL
"http://twitter.com/doorkeeper_app", # twitter URL
"http://facebook.com/doorkeeper_app", # facebook URL
"http://d1dqic1fklzs1z.cloudfront.net/assets/doorkeeper_group_normal-3a3292fd09e39a70084c247aef60cba9.gif" # asset URL
].each do |url|
it_should_behave_like "does not shorten URL", url
end
end