Merge branch 'master' of https://github.com/jgoodman/Freeside
[freeside.git] / rt / t / web / gnupg-select-keys-on-create.t
index deee6b2..8c1ae44 100644 (file)
@@ -1,35 +1,8 @@
-#!/usr/bin/perl -w
 use strict;
 use warnings;
 
-use RT::Test tests => 60;
-
-plan skip_all => 'GnuPG required.'
-    unless eval 'use GnuPG::Interface; 1';
-plan skip_all => 'gpg executable is required.'
-    unless RT::Test->find_executable('gpg');
-
-
+use RT::Test::GnuPG tests => 83, gnupg_options => { passphrase => 'rt-test' };
 use RT::Action::SendEmail;
-use File::Temp qw(tempdir);
-
-RT::Test->set_mail_catcher;
-
-use_ok('RT::Crypt::GnuPG');
-
-RT->Config->Set( GnuPG =>
-    Enable => 1,
-    OutgoingMessagesFormat => 'RFC',
-);
-
-RT->Config->Set( GnuPGOptions =>
-    homedir => scalar tempdir( CLEANUP => 0 ),
-    passphrase => 'rt-test',
-    'no-permission-warning' => undef,
-);
-diag "GnuPG --homedir ". RT->Config->Get('GnuPGOptions')->{'homedir'} if $ENV{TEST_VERBOSE};
-
-RT->Config->Set( 'MailPlugins' => 'Auth::MailFrom', 'Auth::GnuPG' );
 
 my $queue = RT::Test->load_or_create_queue(
     Name              => 'Regression',
@@ -38,28 +11,24 @@ my $queue = RT::Test->load_or_create_queue(
 );
 ok $queue && $queue->id, 'loaded or created queue';
 
-RT::Test->set_rights(
-    Principal => 'Everyone',
-    Right => ['CreateTicket', 'ShowTicket', 'SeeQueue', 'ReplyToTicket', 'ModifyTicket'],
-);
-
 my ($baseurl, $m) = RT::Test->started_ok;
 ok $m->login, 'logged in';
 
-diag "check that signing doesn't work if there is no key" if $ENV{TEST_VERBOSE};
+diag "check that signing doesn't work if there is no key";
 {
     RT::Test->clean_caught_mails;
 
     ok $m->goto_create_ticket( $queue ), "UI -> create ticket";
-    $m->form_number(3);
+    $m->form_name('TicketCreate');
     $m->tick( Sign => 1 );
     $m->field( Requestors => 'rt-test@example.com' );
     $m->field( Content => 'Some content' );
     $m->submit;
-    $m->content_like(
-        qr/unable to sign outgoing email messages/i,
+    $m->content_contains(
+        'unable to sign outgoing email messages',
         'problems with passphrase'
     );
+    $m->warning_like(qr/signing failed: secret key not available/);
 
     my @mail = RT::Test->fetch_caught_mails;
     ok !@mail, 'there are no outgoing emails';
@@ -72,33 +41,40 @@ diag "check that signing doesn't work if there is no key" if $ENV{TEST_VERBOSE};
     is $res{'info'}[0]{'TrustTerse'}, 'ultimate', 'ultimately trusted key';
 }
 
-diag "check that things don't work if there is no key" if $ENV{TEST_VERBOSE};
+diag "check that things don't work if there is no key";
 {
     RT::Test->clean_caught_mails;
 
     ok $m->goto_create_ticket( $queue ), "UI -> create ticket";
-    $m->form_number(3);
+    $m->form_name('TicketCreate');
     $m->tick( Encrypt => 1 );
     $m->field( Requestors => 'rt-test@example.com' );
     $m->field( Content => 'Some content' );
     $m->submit;
-    $m->content_like(
-        qr/You are going to encrypt outgoing email messages/i,
+    $m->content_contains(
+        'You are going to encrypt outgoing email messages',
         'problems with keys'
     );
-    $m->content_like(
-        qr/There is no key suitable for encryption/i,
+    $m->content_contains(
+        'There is no key suitable for encryption',
         'problems with keys'
     );
 
-    my $form = $m->form_number(3);
+    my $form = $m->form_name('TicketCreate');
     ok !$form->find_input( 'UseKey-rt-test@example.com' ), 'no key selector';
 
     my @mail = RT::Test->fetch_caught_mails;
     ok !@mail, 'there are no outgoing emails';
+
+    for (1 .. 4) {
+        $m->next_warning_like(qr/public key not found/) ;
+        $m->next_warning_like(qr/above error may result from an unconfigured RT\/GPG/);
+    }
+
+    $m->no_leftover_warnings_ok;
 }
 
-diag "import first key of rt-test\@example.com" if $ENV{TEST_VERBOSE};
+diag "import first key of rt-test\@example.com";
 my $fpr1 = '';
 {
     RT::Test->import_gnupg_key('rt-test@example.com', 'public');
@@ -107,45 +83,47 @@ my $fpr1 = '';
     $fpr1 = $res{'info'}[0]{'Fingerprint'};
 }
 
-diag "check that things still doesn't work if key is not trusted" if $ENV{TEST_VERBOSE};
+diag "check that things still doesn't work if key is not trusted";
 {
     RT::Test->clean_caught_mails;
 
     ok $m->goto_create_ticket( $queue ), "UI -> create ticket";
-    $m->form_number(3);
+    $m->form_name('TicketCreate');
     $m->tick( Encrypt => 1 );
     $m->field( Requestors => 'rt-test@example.com' );
     $m->field( Content => 'Some content' );
     $m->submit;
-    $m->content_like(
-        qr/You are going to encrypt outgoing email messages/i,
+    $m->content_contains(
+        'You are going to encrypt outgoing email messages',
         'problems with keys'
     );
-    $m->content_like(
-        qr/There is one suitable key, but trust level is not set/i,
+    $m->content_contains(
+        'There is one suitable key, but trust level is not set',
         'problems with keys'
     );
 
-    my $form = $m->form_number(3);
+    my $form = $m->form_name('TicketCreate');
     ok my $input = $form->find_input( 'UseKey-rt-test@example.com' ), 'found key selector';
     is scalar $input->possible_values, 1, 'one option';
 
     $m->select( 'UseKey-rt-test@example.com' => $fpr1 );
     $m->submit;
-    $m->content_like(
-        qr/You are going to encrypt outgoing email messages/i,
+    $m->content_contains(
+        'You are going to encrypt outgoing email messages',
         'problems with keys'
     );
-    $m->content_like(
-        qr/Selected key either is not trusted/i,
+    $m->content_contains(
+        'Selected key either is not trusted',
         'problems with keys'
     );
 
     my @mail = RT::Test->fetch_caught_mails;
     ok !@mail, 'there are no outgoing emails';
+
+    $m->no_warnings_ok;
 }
 
-diag "import a second key of rt-test\@example.com" if $ENV{TEST_VERBOSE};
+diag "import a second key of rt-test\@example.com";
 my $fpr2 = '';
 {
     RT::Test->import_gnupg_key('rt-test@example.com.2', 'public');
@@ -154,42 +132,44 @@ my $fpr2 = '';
     $fpr2 = $res{'info'}[2]{'Fingerprint'};
 }
 
-diag "check that things still doesn't work if two keys are not trusted" if $ENV{TEST_VERBOSE};
+diag "check that things still doesn't work if two keys are not trusted";
 {
     RT::Test->clean_caught_mails;
 
     ok $m->goto_create_ticket( $queue ), "UI -> create ticket";
-    $m->form_number(3);
+    $m->form_name('TicketCreate');
     $m->tick( Encrypt => 1 );
     $m->field( Requestors => 'rt-test@example.com' );
     $m->field( Content => 'Some content' );
     $m->submit;
-    $m->content_like(
-        qr/You are going to encrypt outgoing email messages/i,
+    $m->content_contains(
+        'You are going to encrypt outgoing email messages',
         'problems with keys'
     );
-    $m->content_like(
-        qr/There are several keys suitable for encryption/i,
+    $m->content_contains(
+        'There are several keys suitable for encryption',
         'problems with keys'
     );
 
-    my $form = $m->form_number(3);
+    my $form = $m->form_name('TicketCreate');
     ok my $input = $form->find_input( 'UseKey-rt-test@example.com' ), 'found key selector';
     is scalar $input->possible_values, 2, 'two options';
 
     $m->select( 'UseKey-rt-test@example.com' => $fpr1 );
     $m->submit;
-    $m->content_like(
-        qr/You are going to encrypt outgoing email messages/i,
+    $m->content_contains(
+        'You are going to encrypt outgoing email messages',
         'problems with keys'
     );
-    $m->content_like(
-        qr/Selected key either is not trusted/i,
+    $m->content_contains(
+        'Selected key either is not trusted',
         'problems with keys'
     );
 
     my @mail = RT::Test->fetch_caught_mails;
     ok !@mail, 'there are no outgoing emails';
+
+    $m->no_warnings_ok;
 }
 
 {
@@ -204,26 +184,28 @@ diag "check that we see key selector even if only one key is trusted but there a
     RT::Test->clean_caught_mails;
 
     ok $m->goto_create_ticket( $queue ), "UI -> create ticket";
-    $m->form_number(3);
+    $m->form_name('TicketCreate');
     $m->tick( Encrypt => 1 );
     $m->field( Requestors => 'rt-test@example.com' );
     $m->field( Content => 'Some content' );
     $m->submit;
-    $m->content_like(
-        qr/You are going to encrypt outgoing email messages/i,
+    $m->content_contains(
+        'You are going to encrypt outgoing email messages',
         'problems with keys'
     );
-    $m->content_like(
-        qr/There are several keys suitable for encryption/i,
+    $m->content_contains(
+        'There are several keys suitable for encryption',
         'problems with keys'
     );
 
-    my $form = $m->form_number(3);
+    my $form = $m->form_name('TicketCreate');
     ok my $input = $form->find_input( 'UseKey-rt-test@example.com' ), 'found key selector';
     is scalar $input->possible_values, 2, 'two options';
 
     my @mail = RT::Test->fetch_caught_mails;
     ok !@mail, 'there are no outgoing emails';
+
+    $m->no_warnings_ok;
 }
 
 diag "check that key selector works and we can select trusted key";
@@ -231,21 +213,21 @@ diag "check that key selector works and we can select trusted key";
     RT::Test->clean_caught_mails;
 
     ok $m->goto_create_ticket( $queue ), "UI -> create ticket";
-    $m->form_number(3);
+    $m->form_name('TicketCreate');
     $m->tick( Encrypt => 1 );
     $m->field( Requestors => 'rt-test@example.com' );
     $m->field( Content => 'Some content' );
     $m->submit;
-    $m->content_like(
-        qr/You are going to encrypt outgoing email messages/i,
+    $m->content_contains(
+        'You are going to encrypt outgoing email messages',
         'problems with keys'
     );
-    $m->content_like(
-        qr/There are several keys suitable for encryption/i,
+    $m->content_contains(
+        'There are several keys suitable for encryption',
         'problems with keys'
     );
 
-    my $form = $m->form_number(3);
+    my $form = $m->form_name('TicketCreate');
     ok my $input = $form->find_input( 'UseKey-rt-test@example.com' ), 'found key selector';
     is scalar $input->possible_values, 2, 'two options';
 
@@ -256,6 +238,8 @@ diag "check that key selector works and we can select trusted key";
     my @mail = RT::Test->fetch_caught_mails;
     ok @mail, 'there are some emails';
     check_text_emails( { Encrypt => 1 }, @mail );
+
+    $m->no_warnings_ok;
 }
 
 diag "check encrypting of attachments";
@@ -263,22 +247,22 @@ diag "check encrypting of attachments";
     RT::Test->clean_caught_mails;
 
     ok $m->goto_create_ticket( $queue ), "UI -> create ticket";
-    $m->form_number(3);
+    $m->form_name('TicketCreate');
     $m->tick( Encrypt => 1 );
     $m->field( Requestors => 'rt-test@example.com' );
     $m->field( Content => 'Some content' );
     $m->field( Attach => $0 );
     $m->submit;
-    $m->content_like(
-        qr/You are going to encrypt outgoing email messages/i,
+    $m->content_contains(
+        'You are going to encrypt outgoing email messages',
         'problems with keys'
     );
-    $m->content_like(
-        qr/There are several keys suitable for encryption/i,
+    $m->content_contains(
+        'There are several keys suitable for encryption',
         'problems with keys'
     );
 
-    my $form = $m->form_number(3);
+    my $form = $m->form_name('TicketCreate');
     ok my $input = $form->find_input( 'UseKey-rt-test@example.com' ), 'found key selector';
     is scalar $input->possible_values, 2, 'two options';
 
@@ -289,37 +273,7 @@ diag "check encrypting of attachments";
     my @mail = RT::Test->fetch_caught_mails;
     ok @mail, 'there are some emails';
     check_text_emails( { Encrypt => 1, Attachment => 1 }, @mail );
-}
 
-sub check_text_emails {
-    my %args = %{ shift @_ };
-    my @mail = @_;
-
-    ok scalar @mail, "got some mail";
-    for my $mail (@mail) {
-        for my $type ('email', 'attachment') {
-            next if $type eq 'attachment' && !$args{'Attachment'};
-
-            my $content = $type eq 'email'
-                        ? "Some content"
-                        : "Attachment content";
-
-            if ( $args{'Encrypt'} ) {
-                unlike $mail, qr/$content/, "outgoing $type was encrypted";
-            } else {
-                like $mail, qr/$content/, "outgoing $type was not encrypted";
-            } 
-
-            next unless $type eq 'email';
-
-            if ( $args{'Sign'} && $args{'Encrypt'} ) {
-                like $mail, qr/BEGIN PGP MESSAGE/, 'outgoing email was signed';
-            } elsif ( $args{'Sign'} ) {
-                like $mail, qr/SIGNATURE/, 'outgoing email was signed';
-            } else {
-                unlike $mail, qr/SIGNATURE/, 'outgoing email was not signed';
-            }
-        }
-    }
+    $m->no_warnings_ok;
 }