require File.dirname(__FILE__) + '/../test_helper' require 'notifications' class TestController < ActionController::Base end class NotificationsTest < Test::Unit::TestCase FIXTURES_PATH = File.dirname(__FILE__) + '/../fixtures' CHARSET = 'utf-8' include ActionMailer::Quoting fixtures :users, :tickets, :ticket_changes, :statuses, :priorities def setup RetroCM.reload ActionMailer::Base.delivery_method = :test ActionMailer::Base.perform_deliveries = true ActionMailer::Base.deliveries = [] @expected = TMail::Mail.new @expected.set_content_type 'text', 'plain', { 'charset' => CHARSET } @expected.mime_version = '1.0' @request = ActionController::TestRequest.new @response = ActionController::TestResponse.new @controller = TestController.new @controller.process(@request, @response) end def test_account_validation user = User.find_by_admin(true) replacements = { '###CODE###' => user.activation_code } from = 'Notifier ' @expected.subject = "[#{site_name}] Account validation" @expected.body = read_fixture('account_validation', replacements) @expected.to = user.email @expected.from = from @expected.date = Time.now options = {:from => from, :sent_on => @expected.date} assert_equal @expected.encoded, Notifications.create_account_validation(user, options).encoded end def test_account_activation_note user = User.find_by_admin(true) @expected.subject = "[#{site_name}] Account activation" @expected.body = read_fixture('account_activation_note') @expected.to = user.email @expected.from = 'notifier@localdomain' @expected.date = Time.now options = {:from => @expected.from, :sent_on => @expected.date} assert_equal @expected.encoded, Notifications.create_account_activation_note(user, options).encoded end def test_password_reset_note user = User.find_by_admin(true) from = 'Notifier XYZ ' @expected.subject = "[#{site_name}] Password reset" @expected.body = read_fixture('password_reset_note') @expected.to = user.email @expected.from = from @expected.date = Time.now options = {:from => from, :sent_on => @expected.date} assert_equal @expected.encoded, Notifications.create_password_reset_note(user, 'some_password', options).encoded end def test_ticket_creation_note user = User.find_by_admin(true) from = 'Notifier XYZ ' ticket = Ticket.find(2) @expected.subject = "[#{site_name}] #{ticket.previewable.title}" @expected.body = read_fixture('ticket_creation_note') @expected.to = user.email @expected.from = from @expected.date = Time.now options = {:from => from, :sent_on => @expected.date, :recipients => user.email} assert_equal @expected.encoded, Notifications.create_ticket_creation_note(ticket, options).encoded end def test_ticket_update_note user = User.find_by_admin(true) from = 'Notifier XYZ ' ticket_change = Ticket.find(2).ticket_changes.last @expected.subject = "[#{site_name}] #{ticket_change.previewable.title}" @expected.body = read_fixture('ticket_update_note') @expected.to = user.email @expected.from = from @expected.date = Time.now options = {:from => from, :sent_on => @expected.date, :recipients => user.email} assert_equal @expected.encoded, Notifications.create_ticket_update_note(ticket_change, options).encoded end def test_relative_url_generations user = User.find_by_admin(true) from = 'Notifier XYZ ' ticket = Ticket.find(2) options = {:from => from, :sent_on => Time.now, :recipients => user.email} RetroCM[:general][:basic][:site_url] = 'http://dev.test.com' mail_str = Notifications.create_ticket_creation_note(ticket, options).encoded assert_match(/#{Regexp.escape('http://dev.test.com/ticket/2')}/, mail_str) RetroCM[:general][:basic][:site_url] = 'http://dev.test.com/retro' mail_str = Notifications.create_ticket_creation_note(ticket, options).encoded assert_match(/#{Regexp.escape('http://dev.test.com/retro/ticket/2')}/, mail_str) RetroCM[:general][:basic][:site_url] = 'http://dev.test.com/my/retro' mail_str = Notifications.create_ticket_creation_note(ticket, options).encoded assert_match(/#{Regexp.escape('http://dev.test.com/my/retro/ticket/2')}/, mail_str) end private def read_fixture(action, replacements = {}) IO.readlines("#{FIXTURES_PATH}/notifications/#{action}").collect do |line| replacements.each_pair do |k,v| line = line.gsub(Regexp.new(Regexp.escape(k)), v) end line end end def site_name RetroCM[:general][:basic][:site_name] end def encode(subject) quoted_printable(subject, CHARSET) end end