1#!/usr/bin/perl -w 2 3# to run: 4# RT_DBA_USER=root RT_DBA_PASSWORD= prove -lv -I/opt/rt3/lib t/pull-owner.t 5use strict; 6use warnings; 7 8use Prophet::Test; 9use File::Path qw(rmtree); 10 11BEGIN { 12 unless (eval 'use RT::Test tests => "no_declare"; 1') { 13 diag $@ if $ENV{'TEST_VERBOSE'}; 14 plan skip_all => 'requires RT 3.8 or newer to run tests.'; 15 } 16} 17 18plan tests => 26; 19use App::SD::Test; 20 21no warnings 'once'; 22 23RT::Handle->InsertData( $RT::EtcPath . '/initialdata' ); 24use Prophet::Test; 25 26BEGIN { 27 require File::Temp; 28 $ENV{'PROPHET_REPO'} = $ENV{'SD_REPO'} 29 = File::Temp::tempdir( CLEANUP => 1 ) . '/_svb'; 30 diag "export SD_REPO=" . $ENV{'PROPHET_REPO'} . "\n"; 31} 32 33my $IMAGE_FILE = qw|t/data/bplogo.gif|; 34 35my ( $url, $m ) = RT::Test->started_ok; 36 37use RT::Client::REST; 38use RT::Client::REST::Ticket; 39my $rt = RT::Client::REST->new( server => $url ); 40$rt->login( username => 'root', password => 'password' ); 41 42$url =~ s|http://|http://root:password@|; 43my $sd_rt_url = "rt:$url|General|Status!='resolved'"; 44 45my $root = RT::User->new( $RT::SystemUser ); 46$root->LoadByEmail('root@localhost'); 47ok $root->id, 'loaded root'; 48 49{ 50 flush_sd(); 51 52 my $ticket = RT::Ticket->new( $RT::SystemUser ); 53 my ($tid) = $ticket->Create( 54 Queue => 'General', Status => 'new', Subject => 'Fly Man', 55 ); 56 ok $tid, "created ticket #$tid in RT"; 57 58 my ( $ret, $out, $err ) = run_script( 'sd', [ 'pull', '--from', $sd_rt_url ] ); 59 60 my $sd_tid; 61 run_output_matches( 62 'sd', [qw(ticket list --regex .)], 63 [qr/(.*?)(?{ $sd_tid = $1 }) Fly Man new/] 64 ); 65 ok $sd_tid, 'pulled ticket'; 66 67 my $info = get_ticket_info($sd_tid); 68 ok !$info->{'metadata'}{'owner'}, 'no owner'; 69 70 my ($res) = $ticket->SetStatus('deleted'); 71 ok $res, 'deleted ticket in RT'; 72} 73 74{ 75 flush_sd(); 76 77 my $ticket = RT::Ticket->new( $RT::SystemUser ); 78 my ($tid) = $ticket->Create( 79 Queue => 'General', Status => 'new', Subject => 'Fly Man', 80 Owner => $root->id, 81 ); 82 ok $tid, "created ticket #$tid in RT"; 83 is $ticket->Owner, $root->id, 'owner is set'; 84 85 my ( $ret, $out, $err ) = run_script( 'sd', [ 'pull', '--from', $sd_rt_url ] ); 86 87 my $sd_tid; 88 run_output_matches( 89 'sd', [qw(ticket list --regex .)], 90 [qr/(.*?)(?{ $sd_tid = $1 }) Fly Man new/] 91 ); 92 ok $sd_tid, 'pulled ticket'; 93 94 my $info = get_ticket_info($sd_tid); 95 is $info->{'metadata'}{'owner'}, 'root@localhost', 'owner is set'; 96 97 my ($res) = $ticket->SetStatus('deleted'); 98 ok $res, 'deleted ticket in RT'; 99} 100 101{ 102 flush_sd(); 103 104 my $ticket = RT::Ticket->new( $root ); 105 my ($tid) = $ticket->Create( 106 Queue => 'General', Status => 'new', Subject => 'Fly Man', 107 Owner => $root->id, 108 ); 109 ok $tid, "created ticket #$tid in RT"; 110 is $ticket->Owner, $root->id, 'owner is set'; 111 112 my ( $ret, $out, $err ) = run_script( 'sd', [ 'pull', '--from', $sd_rt_url ] ); 113 114 my $sd_tid; 115 run_output_matches( 116 'sd', [qw(ticket list --regex .)], 117 [qr/(.*?)(?{ $sd_tid = $1 }) Fly Man new/] 118 ); 119 ok $sd_tid, 'pulled ticket'; 120 121 my ($res, $msg) = $ticket->SetOwner( $RT::Nobody->id ); 122 ok $res, 'unset owner in RT' or diag "error: $msg"; 123 124 ( $ret, $out, $err ) = run_script( 'sd', [ 'pull', '--from', $sd_rt_url ] ); 125 126 my $info = get_ticket_info($sd_tid); 127 ok !$info->{'metadata'}{'owner'}, 'owner is not set'; 128 129 ($res) = $ticket->SetStatus('deleted'); 130 ok $res, 'deleted ticket in RT'; 131} 132 133 134{ 135 flush_sd(); 136 137 my $ticket = RT::Ticket->new( $root ); 138 my ($tid) = $ticket->Create( 139 Queue => 'General', Status => 'new', Subject => 'Fly Man', 140 ); 141 ok $tid, "created ticket #$tid in RT"; 142 143 my ( $ret, $out, $err ) = run_script( 'sd', [ 'pull', '--from', $sd_rt_url ] ); 144 145 my $sd_tid; 146 run_output_matches( 147 'sd', [qw(ticket list --regex .)], 148 [qr/(.*?)(?{ $sd_tid = $1 }) Fly Man new/] 149 ); 150 ok $sd_tid, 'pulled ticket'; 151 152 my ($res, $msg) = $ticket->SetOwner( $root->id ); 153 ok $res, 'set owner in RT' or diag "error: $msg"; 154 155 ( $ret, $out, $err ) = run_script( 'sd', [ 'pull', '--from', $sd_rt_url ] ); 156 157 my $info = get_ticket_info($sd_tid); 158 is $info->{'metadata'}{'owner'}, 'root@localhost', 'owner is set'; 159 160 ($res) = $ticket->SetStatus('deleted'); 161 ok $res, 'deleted ticket in RT'; 162} 163 164sub flush_sd { 165 rmtree( $ENV{'SD_REPO'} ); 166 run_script( 'sd', ['init', '--non-interactive' ] ); 167} 168 169