- Add the majority of the list behavioral knobs. - Add some quick helpers that can make list changes safely (write, unlink, touch) - Fix tests.
345 lines
9.1 KiB
Ruby
345 lines
9.1 KiB
Ruby
#!/usr/bin/env ruby
|
|
|
|
BEGIN {
|
|
require 'pathname'
|
|
basedir = Pathname.new( __FILE__ ).dirname.parent.parent
|
|
libdir = basedir + "lib"
|
|
$LOAD_PATH.unshift( libdir ) unless $LOAD_PATH.include?( libdir )
|
|
}
|
|
|
|
require_relative '../spec_helpers'
|
|
require 'ezmlm'
|
|
|
|
describe Ezmlm::List do
|
|
|
|
before( :each ) do
|
|
@listdir = make_listdir()
|
|
end
|
|
|
|
after( :each ) do
|
|
rm_r( @listdir )
|
|
end
|
|
|
|
let( :list ) do
|
|
described_class.new( @listdir )
|
|
end
|
|
|
|
|
|
it "can return the list name" do
|
|
expect( list.name ).to eq( TEST_LIST_NAME )
|
|
end
|
|
|
|
it "can return the list host" do
|
|
expect( list.host ).to eq( TEST_LIST_HOST )
|
|
end
|
|
|
|
it "can return the list address" do
|
|
expect( list.address ).to eq( TEST_LIST_NAME + '@' + TEST_LIST_HOST )
|
|
end
|
|
|
|
it "returns nil if the list owner isn't an email address" do
|
|
expect( list.owner ).to eq( nil )
|
|
end
|
|
|
|
it "can return an email address owner" do
|
|
expect( list ).to receive( :read ).with( 'owner' ).and_return( TEST_OWNER )
|
|
expect( list.owner ).to eq( TEST_OWNER )
|
|
end
|
|
|
|
|
|
it "can add a new subscriber" do
|
|
list.add_subscriber( *TEST_SUBSCRIBERS )
|
|
expect( list.is_subscriber?( TEST_SUBSCRIBERS.first ) ).to be_truthy
|
|
end
|
|
|
|
it "can return the list of subscibers" do
|
|
list.add_subscriber( *TEST_SUBSCRIBERS )
|
|
list.add_subscriber( 'notanemailaddress' )
|
|
expect( list.subscribers.length ).to eq( 3 )
|
|
expect( list.subscribers ).to include( TEST_SUBSCRIBERS.first )
|
|
end
|
|
|
|
it "can remove a current subscriber" do
|
|
list.add_subscriber( *TEST_SUBSCRIBERS )
|
|
list.remove_subscriber( 'notanemailaddress' )
|
|
list.remove_subscriber( TEST_MODERATORS.first )
|
|
expect( list.subscribers.length ).to eq( 2 )
|
|
end
|
|
|
|
|
|
it "can add a new moderator" do
|
|
list.add_moderator( *TEST_MODERATORS )
|
|
expect( list.is_moderator?( TEST_MODERATORS.first ) ).to be_truthy
|
|
end
|
|
|
|
it "can return the list of moderators" do
|
|
list.add_moderator( *TEST_MODERATORS )
|
|
expect( list.moderators.length ).to eq( 1 )
|
|
expect( list.moderators ).to include( TEST_MODERATORS.first )
|
|
end
|
|
|
|
it "can remove a current moderator" do
|
|
list.add_moderator( *TEST_MODERATORS )
|
|
list.remove_moderator( TEST_MODERATORS.first )
|
|
expect( list.moderators ).to be_empty
|
|
end
|
|
|
|
|
|
it "can add a blacklisted address" do
|
|
list.add_blacklisted( *TEST_MODERATORS )
|
|
expect( list.is_blacklisted?( TEST_MODERATORS.first ) ).to be_truthy
|
|
end
|
|
|
|
it "can return the list of blacklisted addresses" do
|
|
list.add_blacklisted( *TEST_MODERATORS )
|
|
expect( list.blacklisted.length ).to eq( 1 )
|
|
expect( list.blacklisted ).to include( TEST_MODERATORS.first )
|
|
end
|
|
|
|
it "can remove a blacklisted address" do
|
|
list.add_blacklisted( *TEST_MODERATORS )
|
|
list.remove_blacklisted( TEST_MODERATORS.first )
|
|
expect( list.blacklisted ).to be_empty
|
|
end
|
|
|
|
|
|
it "can add an allowed address" do
|
|
list.add_allowed( *TEST_MODERATORS )
|
|
expect( list.is_allowed?( TEST_MODERATORS.first ) ).to be_truthy
|
|
end
|
|
|
|
it "can return the list of allowed addresses" do
|
|
list.add_allowed( *TEST_MODERATORS )
|
|
expect( list.allowed.length ).to eq( 1 )
|
|
expect( list.allowed ).to include( TEST_MODERATORS.first )
|
|
end
|
|
|
|
it "can remove a allowed address" do
|
|
list.add_allowed( *TEST_MODERATORS )
|
|
list.remove_allowed( TEST_MODERATORS.first )
|
|
expect( list.allowed ).to be_empty
|
|
end
|
|
|
|
|
|
it 'can return the current threading state' do
|
|
expect( list.threaded? ).to be_falsey
|
|
end
|
|
|
|
it 'can set the threading state' do
|
|
list.threaded = true
|
|
expect( list.threaded? ).to be_truthy
|
|
end
|
|
|
|
|
|
it 'can return the current public/private state' do
|
|
expect( list.public? ).to be_truthy
|
|
expect( list.private? ).to be_falsey
|
|
end
|
|
|
|
it 'can set the privacy state' do
|
|
list.public = false
|
|
expect( list.public? ).to be_falsey
|
|
expect( list.private? ).to be_truthy
|
|
|
|
list.private = false
|
|
expect( list.private? ).to be_falsey
|
|
expect( list.public? ).to be_truthy
|
|
end
|
|
|
|
|
|
it 'can set the remote subscription state' do
|
|
expect( list.remote_subscriptions? ).to be_falsey
|
|
list.remote_subscriptions = true
|
|
expect( list.remote_subscriptions? ).to be_truthy
|
|
list.remote_subscriptions = false
|
|
expect( list.remote_subscriptions? ).to be_falsey
|
|
end
|
|
|
|
|
|
it 'can set subscription moderation state' do
|
|
expect( list.moderated_subscriptions? ).to be_falsey
|
|
list.moderated_subscriptions = true
|
|
expect( list.moderated_subscriptions? ).to be_truthy
|
|
list.moderated_subscriptions = false
|
|
expect( list.moderated_subscriptions? ).to be_falsey
|
|
end
|
|
|
|
|
|
it 'can set posting moderation state' do
|
|
expect( list.moderated? ).to be_falsey
|
|
list.moderated = true
|
|
expect( list.moderated? ).to be_truthy
|
|
list.moderated = false
|
|
expect( list.moderated? ).to be_falsey
|
|
end
|
|
|
|
|
|
it 'can set moderation-only posting' do
|
|
expect( list.moderator_posts_only? ).to be_falsey
|
|
list.moderator_posts_only = true
|
|
expect( list.moderator_posts_only? ).to be_truthy
|
|
list.moderator_posts_only = false
|
|
expect( list.moderator_posts_only? ).to be_falsey
|
|
end
|
|
|
|
|
|
it 'can set user-only posting' do
|
|
expect( list.user_posts_only? ).to be_falsey
|
|
list.user_posts_only = true
|
|
expect( list.user_posts_only? ).to be_truthy
|
|
list.user_posts_only = false
|
|
expect( list.user_posts_only? ).to be_falsey
|
|
end
|
|
|
|
|
|
it 'user+moderation together sets non-subscriber moderation' do
|
|
expect( list.user_posts_only? ).to be_falsey
|
|
expect( list.moderated? ).to be_falsey
|
|
|
|
list.moderated = true
|
|
list.user_posts_only = true
|
|
|
|
expect( list.listdir + 'noreturnposts' ).to exist
|
|
|
|
list.moderated = false
|
|
expect( list.listdir + 'noreturnposts' ).to_not exist
|
|
end
|
|
|
|
|
|
it 'can set archival status' do
|
|
expect( list.archived? ).to be_truthy
|
|
list.archive = false
|
|
expect( list.archived? ).to be_falsey
|
|
list.archive = true
|
|
expect( list.archived? ).to be_truthy
|
|
end
|
|
|
|
|
|
it 'can limit archive access to moderators only' do
|
|
expect( list.private_archive? ).to be_falsey
|
|
list.private_archive = true
|
|
expect( list.private_archive? ).to be_truthy
|
|
list.private_archive = false
|
|
expect( list.private_archive? ).to be_falsey
|
|
end
|
|
|
|
|
|
it 'can limit archive access to list subscribers only' do
|
|
expect( list.guarded_archive? ).to be_falsey
|
|
list.guarded_archive = true
|
|
expect( list.guarded_archive? ).to be_truthy
|
|
list.guarded_archive = false
|
|
expect( list.guarded_archive? ).to be_falsey
|
|
end
|
|
|
|
|
|
it 'can toggle digest status' do
|
|
expect( list.digested? ).to be_falsey
|
|
list.digest = true
|
|
expect( list.digested? ).to be_truthy
|
|
list.digest = false
|
|
expect( list.digested? ).to be_falsey
|
|
end
|
|
|
|
it 'returns a default digest kbyte size' do
|
|
expect( list.digest_kbytesize ).to eq( 64 )
|
|
end
|
|
|
|
it 'can set a new digest kbyte size' do
|
|
list.digest_kbytesize = 300
|
|
expect( list.digest_kbytesize ).to eq( 300 )
|
|
end
|
|
|
|
it 'returns a default digest message count' do
|
|
expect( list.digest_count ).to eq( 10 )
|
|
end
|
|
|
|
it 'can set a new digest message count' do
|
|
list.digest_count = 25
|
|
expect( list.digest_count ).to eq( 25 )
|
|
end
|
|
|
|
it 'returns a default digest timeout' do
|
|
expect( list.digest_timeout ).to eq( 48 )
|
|
end
|
|
|
|
it 'can set a new digest timeout' do
|
|
list.digest_timeout = 24
|
|
expect( list.digest_timeout ).to eq( 24 )
|
|
end
|
|
|
|
|
|
it 'can set subscription confirmation' do
|
|
expect( list.confirm_subscriptions? ).to be_truthy
|
|
list.confirm_subscriptions = false
|
|
expect( list.confirm_subscriptions? ).to be_falsey
|
|
list.confirm_subscriptions = true
|
|
expect( list.confirm_subscriptions? ).to be_truthy
|
|
end
|
|
|
|
it 'can set unsubscription confirmation' do
|
|
expect( list.confirm_unsubscriptions? ).to be_truthy
|
|
list.confirm_unsubscriptions = false
|
|
expect( list.confirm_unsubscriptions? ).to be_falsey
|
|
list.confirm_unsubscriptions = true
|
|
expect( list.confirm_unsubscriptions? ).to be_truthy
|
|
end
|
|
|
|
|
|
it 'can set message posting confirmation' do
|
|
expect( list.confirm_postings? ).to be_falsey
|
|
list.confirm_postings = true
|
|
expect( list.confirm_postings? ).to be_truthy
|
|
list.confirm_postings = false
|
|
expect( list.confirm_postings? ).to be_falsey
|
|
end
|
|
|
|
|
|
it 'can toggle remote subscriber lists for moderators' do
|
|
expect( list.allow_remote_listing? ).to be_falsey
|
|
list.allow_remote_listing = true
|
|
expect( list.allow_remote_listing? ).to be_truthy
|
|
list.allow_remote_listing = false
|
|
expect( list.allow_remote_listing? ).to be_falsey
|
|
end
|
|
|
|
|
|
it 'can toggle bounce management' do
|
|
expect( list.bounce_warnings? ).to be_truthy
|
|
list.bounce_warnings = false
|
|
expect( list.bounce_warnings? ).to be_falsey
|
|
list.bounce_warnings = true
|
|
expect( list.bounce_warnings? ).to be_truthy
|
|
end
|
|
|
|
|
|
it 'returns a default max message size' do
|
|
expect( list.maximum_message_size ).to eq( 0 )
|
|
end
|
|
|
|
it 'can set a new max message size' do
|
|
list.maximum_message_size = 1024 * 300
|
|
expect( list.maximum_message_size ).to eq( 307200 )
|
|
end
|
|
|
|
|
|
it 'can return the message count for a pristine list' do
|
|
expect( list.message_count ).to eq( 0 )
|
|
end
|
|
end
|
|
|
|
|
|
|
|
# it "can fetch the body of an archived post by message id"
|
|
# it "can fetch the header of an archived post by message id"
|
|
|
|
# it "can return a hash of the subjects of all archived posts to message ids"
|
|
# it "can return an Array of the subjects of all archived posts"
|
|
|
|
# it "can return a hash of the threads of all archived posts to message ids"
|
|
# it "can return an Array of the threads of all archived posts"
|
|
|
|
# it "can return a hash of the authors of all archived posts to message ids"
|
|
# it "can return an Array of the authors of all archived posts"
|
|
|
|
|