#!/usr/bin/perl 


use lib qw(./t ./ ./DADA/perllib ../ ../DADA/perllib ../../ ../../DADA/perllib 


/Users/justin/Documents/DadaMail/build/tmp/dada/DADA/perllib/ 


); 


use strict;

use Carp; 

use Test::More qw(no_plan);
use dada_test_config; 



my $list = dada_test_config::create_test_list;


use DADA::MailingList::Subscribers; 


# Filter stuff

my @email_list = qw(

    user@example.com
    user
    example.com
    @example.com
    
);

#diag("Blah blah blah"); 

my $lh = DADA::MailingList::Subscribers->new(-List => $list); 


my ($subscribed, $not_subscribed, $black_listed, $not_white_listed, $invalid) 
    = $lh->filter_subscribers(
            -Email_Ref => [@email_list]
        );



ok(eq_array($subscribed,     []                  ) == 1, "Subscribed"); 
ok(eq_array($not_subscribed, ['user@example.com']) == 1, "Not Subscribed"); 
ok(eq_array($black_listed,   []                  ) == 1, "Black Listed"); 
ok(eq_array([sort(@$invalid)],   [sort('user', 'example.com', '@example.com')]) == 1, "Invalid"); 


undef($subscribed);
undef($not_subscribed);
undef($black_listed);
undef($not_white_listed);
undef($invalid);







my $count = $lh->add_to_email_list(-Email_Ref => [qw(
                                            user@example.com
                                                 )], 
                                   -Type     => 'list',
                          );
                    
ok($count == 1, "added one address");                           
undef($count); 

my ($subscribed, $not_subscribed, $black_listed, $not_white_listed, $invalid) 
    = $lh->filter_subscribers(
            -Email_Ref => [@email_list]
        );



ok(eq_array($subscribed,     ['user@example.com']                  ) == 1, "Subscribed"); 
ok(eq_array($not_subscribed, []) == 1, "Not Subscribed"); 
ok(eq_array($black_listed,   []                  ) == 1, "Black Listed"); 
ok(eq_array([sort(@$invalid)],   [sort('user', 'example.com', '@example.com')]) == 1, "Invalid"); 


undef($subscribed);
undef($not_subscribed);
undef($black_listed);
undef($not_white_listed);
undef($invalid);

my $r_count = $lh->remove_from_list(-Email_List => ['user@example.com']); 
ok($r_count == 1, "removed one address");                           
undef($r_count); 








use DADA::MailingList::Settings; 
my $ls = DADA::MailingList::Settings->new(-List => $list); 
   $ls->save({black_list => 1}); 
my $li = $ls->get(); 
ok($li->{black_list} == 1, "black list enabled."); 



foreach my $blacklist_this('user', 'example.com', 'user@', '@example.com', 'user@example.com', 'u', '@'){ 

    my $count = $lh->add_to_email_list(-Email_Ref => [
                                                $blacklist_this
                                                     ], 
                                       -Type     => 'black_list',
                              );
    
    ok($count == 1, "added one address");                           
    undef($count); 
    
    
    my ($subscribed, $not_subscribed, $black_listed, $not_white_listed, $invalid) 
        = $lh->filter_subscribers(
                -Email_Ref => [@email_list],
            );
    
    ok(eq_array($subscribed,     []                  ) == 1, "Subscribed"); 
    ok(eq_array($not_subscribed, []) == 1, "Not Subscribed"); 
    ok(eq_array($black_listed,   ['user@example.com']                  ) == 1, "Black Listed"); 
    ok(eq_array([sort(@$invalid)],   [sort('user', 'example.com', '@example.com')]) == 1, "Invalid"); 
    
    
    undef($subscribed);
    undef($not_subscribed);
    undef($black_listed);
    undef($not_white_listed);
    undef($invalid);
    
    my $r_count = $lh->remove_from_list(-Email_List => [$blacklist_this], -Type => 'black_list'); 
    ok($r_count == 1, "removed one address from blacklist");                           
    undef($r_count); 

}
   $ls->save({black_list => 0}); 
   $li = $ls->get(); 
ok($li->{black_list} == 0, "black list disabled."); 


# Oh geez. This should have a million tests. 
my @good_addresses = ('user@example.com', 'another@here.com', 'blah@somewhere.co.uk');
foreach my $good_address(@good_addresses){
    my ($status, $errors) = $lh->subscription_check(-Email => $good_address);
    ok($status == 1, "Status is 1"); 
    ok($errors->{invalid_email} != 1, "Address seen as valid");
}
 


my @bad_addresses = qw(These are all bad addresses yup);
foreach my $bad_address(@bad_addresses){
    my ($status, $errors) = $lh->subscription_check(-Email => $bad_address);
    ok($status == 0, "Status is 0"); 
    ok($errors->{invalid_email} == 1, "Address seen as invalid");
}
 

# These things are poorly doc'd and test'd:


dada_test_config::remove_test_list;
