#!/usr/bin/perl -T

use lib '.'; use lib 't';
use SATest; sa_t_init("freemail");

use Test::More;

plan tests => 23;

# ---------------------------------------------------------------------------

# Global
tstprefs ("
  freemail_domains gmail.com
");

## Standard + welcomelist should not hit

tstlocalrules (q{
  freemail_import_welcomelist_auth 0
  welcomelist_auth test@gmail.com
  header FREEMAIL_FROM eval:check_freemail_from()
  score FREEMAIL_FROM 3.3
  header FREEMAIL_REPLYXX eval:check_freemail_replyto('reply')
  score FREEMAIL_REPLYXX 3.3
  header FREEMAIL_REPLYTO eval:check_freemail_replyto('replyto')
  score FREEMAIL_REPLYTO 3.3
  header FREEMAIL_REPLYXX eval:check_freemail_replyto('reply')
  score FREEMAIL_REPLYXX 3.3
  header FREEMAIL_ENVFROM_END_DIGIT  eval:check_freemail_header('EnvelopeFrom', '\d@')
  score FREEMAIL_ENVFROM_END_DIGIT 3.3
  header FREEMAIL_REPLYTO_END_DIGIT  eval:check_freemail_header('Reply-To', '\d@')
  score FREEMAIL_REPLYTO_END_DIGIT 3.3
  header FREEMAIL_HDR_REPLYTO eval:check_freemail_header('Reply-To')
  score FREEMAIL_HDR_REPLYTO 3.3
});

%patterns = (
  q{ 3.3 FREEMAIL_FROM }, 'FREEMAIL_FROM',
);
%anti_patterns = (
  # No Reply-To or body
  q{ 3.3 FREEMAIL_REPLYTO }, 'FREEMAIL_REPLYTO',
  q{ 3.3 FREEMAIL_REPLYXX }, 'FREEMAIL_REPLYXX',
  q{ 3.3 FREEMAIL_ENVFROM_END_DIGIT }, 'FREEMAIL_ENVFROM_END_DIGIT',
  q{ 3.3 FREEMAIL_REPLYTO_END_DIGIT }, 'FREEMAIL_REPLYTO_END_DIGIT',
  q{ 3.3 FREEMAIL_HDR_REPLYTO }, 'FREEMAIL_HDR_REPLYTO',
);

ok sarun ("-L -t < data/spam/relayUS.eml", \&patterns_run_cb);
ok_all_patterns();
clear_pattern_counters();

## Now test with freemail_import_welcomelist_auth, should not hit

%patterns = ();
%anti_patterns = (
  q{ 3.3 FREEMAIL_FROM }, 'FREEMAIL_FROM',
);

tstlocalrules (q{
  freemail_import_welcomelist_auth 1
  welcomelist_auth test@gmail.com
  header FREEMAIL_FROM eval:check_freemail_from()
  score FREEMAIL_FROM 3.3
});

ok sarun ("-L -t < data/spam/relayUS.eml", \&patterns_run_cb);
ok_all_patterns();

## From and Reply-To different

%patterns = (
  q{ 3.3 FREEMAIL_FROM }, 'FREEMAIL_FROM',
  q{ 3.3 FREEMAIL_REPLYTO }, 'FREEMAIL_REPLYTO',
  q{ 3.3 FREEMAIL_REPLYXX }, 'FREEMAIL_REPLYXX',
  q{ 3.3 FREEMAIL_ENVFROM_END_DIGIT }, 'FREEMAIL_ENVFROM_END_DIGIT',
  q{ 3.3 FREEMAIL_REPLYTO_END_DIGIT }, 'FREEMAIL_REPLYTO_END_DIGIT',
  q{ 3.3 FREEMAIL_HDR_REPLYTO }, 'FREEMAIL_HDR_REPLYTO',
);
%anti_patterns = ();

tstlocalrules (q{
  header FREEMAIL_FROM eval:check_freemail_from()
  score FREEMAIL_FROM 3.3
  header FREEMAIL_REPLYTO eval:check_freemail_replyto('replyto')
  score FREEMAIL_REPLYTO 3.3
  header FREEMAIL_REPLYXX eval:check_freemail_replyto('reply')
  score FREEMAIL_REPLYXX 3.3
  header FREEMAIL_ENVFROM_END_DIGIT  eval:check_freemail_header('EnvelopeFrom', '\d@')
  score FREEMAIL_ENVFROM_END_DIGIT 3.3
  header FREEMAIL_REPLYTO_END_DIGIT  eval:check_freemail_header('Reply-To', '\d@')
  score FREEMAIL_REPLYTO_END_DIGIT 3.3
  header FREEMAIL_HDR_REPLYTO eval:check_freemail_header('Reply-To')
  score FREEMAIL_HDR_REPLYTO 3.3
});

ok sarun ("-L -t < data/spam/freemail1", \&patterns_run_cb);
ok_all_patterns();

## Multiple Reply-To values, no email on body

%patterns = (
  q{ 3.3 FREEMAIL_REPLYTO }, 'FREEMAIL_REPLYTO',
  q{ 3.3 FREEMAIL_REPLYXX }, 'FREEMAIL_REPLYXX',
  q{ 3.3 FREEMAIL_REPLYTO_END_DIGIT }, 'FREEMAIL_REPLYTO_END_DIGIT',
  q{ 3.3 FREEMAIL_HDR_REPLYTO }, 'FREEMAIL_HDR_REPLYTO',
);
%anti_patterns = ();

tstlocalrules (q{
  header FREEMAIL_REPLYTO eval:check_freemail_replyto('replyto')
  score FREEMAIL_REPLYTO 3.3
  header FREEMAIL_REPLYXX eval:check_freemail_replyto('reply')
  score FREEMAIL_REPLYXX 3.3
  header FREEMAIL_REPLYTO_END_DIGIT  eval:check_freemail_header('Reply-To', '\d@')
  score FREEMAIL_REPLYTO_END_DIGIT 3.3
  header FREEMAIL_HDR_REPLYTO eval:check_freemail_header('Reply-To')
  score FREEMAIL_HDR_REPLYTO 3.3
});

ok sarun ("-L -t < data/spam/freemail2", \&patterns_run_cb);
ok_all_patterns();

## No Reply-To, another freemail in body

%patterns = (
  q{ 3.3 FREEMAIL_REPLYXX }, 'FREEMAIL_REPLYXX',
);
%anti_patterns = ();

tstlocalrules (q{
  header FREEMAIL_REPLYXX eval:check_freemail_replyto('reply')
  score FREEMAIL_REPLYXX 3.3
});

ok sarun ("-L -t < data/spam/freemail3", \&patterns_run_cb);
ok_all_patterns();

