require File.dirname(__FILE__) + '/../test_helper' require 'net-smtp-stub' class MailinglistTest < Test::Unit::TestCase fixtures :mailinglists, :addresses_mailinglists, :addresses, :confirmationcodes, :users, :admin_messages, :domains, :messages, :proxy_links def setup @ml=Mailinglist.find 1 @addr1=Address.find 1 @addr2=Address.find 2 end def test_subscribing assert @ml.subscribe("brandnewuser@foo.test") assert addr=Address.find_by_address("brandnewuser@foo.test") assert @ml.addresses.member?(addr) assert @ml.pending_addresses.member?(addr) assert !@ml.confirmed_addresses.member?(addr) end def test_confirming assert_equal [@addr1],@ml.confirmed_addresses assert_equal [@addr2],@ml.pending_addresses confirmationcode=@loaded_fixtures["confirmationcodes"] \ ["confirmationcode_testuser_address2"] \ ["code"] assert_nothing_raised do @ml.confirm(@addr2,confirmationcode) end assert_equal [@addr1, @addr2], @ml.confirmed_addresses.sort_by { |a| a.id } assert_equal [], @ml.pending_addresses end def test_confirming_by_addr_string confirmationcode=@loaded_fixtures["confirmationcodes"] \ ["confirmationcode_testuser_address2"] \ ["code"] assert_nothing_raised do @ml.confirm(@addr2.address,confirmationcode) end assert_equal [@addr1, @addr2], @ml.confirmed_addresses.sort_by { |a| a.id } assert_equal [], @ml.pending_addresses end def test_new_confirmation @ml.subscribe 'brandnewuser@foo.test' addr=Address.find_by_address("brandnewuser@foo.test") assert @ml.addresses.member?(addr) assert @ml.pending_addresses.member?(addr) assert !@ml.confirmed_addresses.member?(addr) assert Confirmationcode.find_by_address_id(addr.id) end def test_creating ml=Mailinglist.new ml.name="testing-new-mailing-list" ml.user=User.find 1 ml.description="Testing new mailing list" ml.mailinglist_class=MailinglistClass.find 2 assert ml.save assert_equal 1, ml.welcome_admin_message_id assert_equal 2, ml.confirmed_admin_message_id assert_equal 3, ml.sayonara_admin_message_id end def test_creating_nonexistent_user ml=Mailinglist.new ml.name="testing-new-mailing-list" ml.user_id=999 ml.description="Testing new mailing list" ml.mailinglist_class=MailinglistClass.find 2 assert_equal false, ml.save assert_equal [["user", "can't be blank"]], ml.errors.to_a end def test_creating_name_collision ml=Mailinglist.new ml.name="testml" ml.user_id=1 ml.description="Testing new mailing list" ml.mailinglist_class=MailinglistClass.find 2 assert_equal false, ml.save assert_equal [["name", "Address already exists: testml@test.domain"]], ml.errors.to_a end def test_canonical ml=Mailinglist.find 1 assert ml.canonical_address? ml=Mailinglist.find 3 assert_equal false, ml.canonical_address? end def has_address ml=Mailinglist.find 1 assert ml.has_address?(@loaded_fixtures["addresses"]["address_1"]\ ["address"]) end def messages ml=Mailinglist.find 1 assert_equal 3, ml.messages_count end def test_expanded_addresses ml=Mailinglist.find 4 addrs=ml.addresses assert Mailinglist.find_by_address(addrs[0].address) assert Mailinglist.find_by_address(addrs[1].address) assert_equal [ Address.find_by_address("address1@foo.test"), Address.find_by_address("address2@foo.test") ], ml.expand_addresses . sort_by { |a| a.address } end def test_has_address ml=Mailinglist.find 4 assert_equal true, ml.has_address?("address1@foo.test") assert_equal false, ml.has_address?("address3@foo.test") end def test_find_by_address ml, cmd, realaddress = Mailinglist.find_by_address("testuser-42@test.domain") assert_equal :proxy, cmd assert_equal 1, ml.id assert_equal Address.find_by_address("addressmessage1@foo.test"), realaddress info = Mailinglist.find_by_address("testuser-10@test.domain") assert_nil info # assert_nil ml.id # assert_equal 42, proxy.id ml, cmd = Mailinglist.find_by_address("testuser-bounces@test.domain") assert_equal :bounces, cmd assert_equal 1, ml.id ml, cmd = Mailinglist.find_by_address("testuser-request@test.domain") assert_equal :request, cmd assert_equal 1, ml.id end end