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-watchers.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 => 91; 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 45# create without requestor pull 46{ 47 flush_sd(); 48 49 my $ticket = RT::Ticket->new( $RT::SystemUser ); 50 my ($tid) = $ticket->Create( 51 Queue => 'General', Status => 'new', Subject => 'Fly Man', 52 ); 53 ok $tid, "created ticket #$tid in RT"; 54 55 my ( $ret, $out, $err ) = run_script( 'sd', [ 'pull', '--from', $sd_rt_url ] ); 56 57 my $flyman_id; 58 run_output_matches( 59 'sd', [qw(ticket list --regex .)], 60 [qr/(.*?)(?{ $flyman_id = $1 }) Fly Man new/] 61 ); 62 ok $flyman_id, 'pulled ticket'; 63 64 my ($res) = $ticket->SetStatus('deleted'); 65 ok $res, 'deleted ticket in RT'; 66} 67 68# create with requestor, pull 69{ 70 flush_sd(); 71 72 my $ticket = RT::Ticket->new( $RT::SystemUser ); 73 my ($rt_tid) = $ticket->Create( 74 Queue => 'General', Status => 'new', Subject => 'Fly Man', 75 Requestor => 'test@localhost', 76 ); 77 ok $rt_tid, "created ticket #$rt_tid in RT"; 78 79 my ( $ret, $out, $err ) = run_script( 'sd', [ 'pull', '--from', $sd_rt_url ] ); 80 81 my $sd_tid; 82 run_output_matches( 83 'sd', [qw(ticket list --regex .)], 84 [qr/(.*?)(?{ $sd_tid = $1 }) Fly Man new/] 85 ); 86 ok $sd_tid, 'pulled ticket'; 87 88 my $info = get_ticket_info($sd_tid); 89 is $info->{'metadata'}{'reporter'}, 'test@localhost', 90 'correct requestor'; 91 92 my ($res) = $ticket->SetStatus('deleted'); 93 ok $res, 'deleted ticket in RT'; 94} 95 96# create with requestor+requestor, pull 97{ 98 flush_sd(); 99 100 my $ticket = RT::Ticket->new( $RT::SystemUser ); 101 my ($rt_tid) = $ticket->Create( 102 Queue => 'General', Status => 'new', Subject => 'Fly Man', 103 Requestor => ['test@localhost', 'another@localhost'], 104 ); 105 ok $rt_tid, "created ticket #$rt_tid in RT"; 106 107 my ( $ret, $out, $err ) = run_script( 'sd', [ 'pull', '--from', $sd_rt_url ] ); 108 109 my $sd_tid; 110 run_output_matches( 111 'sd', [qw(ticket list --regex .)], 112 [qr/(.*?)(?{ $sd_tid = $1 }) Fly Man new/] 113 ); 114 ok $sd_tid, 'pulled ticket'; 115 116 my $info = get_ticket_info($sd_tid); 117 is $info->{'metadata'}{'reporter'}, 'another@localhost, test@localhost', 118 'correct requestors'; 119 120 my ($res) = $ticket->SetStatus('deleted'); 121 ok $res, 'deleted ticket in RT'; 122} 123 124# create, add requestor, pull 125{ 126 my $ticket = RT::Ticket->new( $RT::SystemUser ); 127 my ($rt_tid) = $ticket->Create( 128 Queue => 'General', Status => 'new', Subject => 'Fly Man', 129 Requestor => 'test@localhost', 130 ); 131 ok $rt_tid, "created ticket #$rt_tid in RT"; 132 133 my ($res) = $ticket->AddWatcher( Type => 'Requestor', Email => 'another@localhost' ); 134 ok $res, "added requestor"; 135 136 flush_sd(); 137 my ($ret, $out, $err) = run_script( 'sd', [ 'pull', '--from', $sd_rt_url ] ); 138 139 my $sd_tid; 140 run_output_matches( 141 'sd', [qw(ticket list --regex .)], 142 [qr/(.*?)(?{ $sd_tid = $1 }) Fly Man new/] 143 ); 144 ok $sd_tid, 'pulled ticket'; 145 146 my $info = get_ticket_info($sd_tid); 147 is $info->{'metadata'}{'reporter'}, 'another@localhost, test@localhost', 148 'correct requestor'; 149 150 ($res) = $ticket->SetStatus('deleted'); 151 ok $res, 'deleted ticket in RT'; 152} 153 154# create, pull, add requestor, pull 155{ 156 flush_sd(); 157 158 my $ticket = RT::Ticket->new( $RT::SystemUser ); 159 my ($rt_tid) = $ticket->Create( 160 Queue => 'General', Status => 'new', Subject => 'Fly Man', 161 Requestor => 'test@localhost', 162 ); 163 ok $rt_tid, "created ticket #$rt_tid in RT"; 164 165 my ($ret, $out, $err) = run_script( 'sd', [ 'pull', '--from', $sd_rt_url ] ); 166 167 my $sd_tid; 168 run_output_matches( 169 'sd', [qw(ticket list --regex .)], 170 [qr/(.*?)(?{ $sd_tid = $1 }) Fly Man new/] 171 ); 172 ok $sd_tid, 'pulled ticket'; 173 174 my $info = get_ticket_info($sd_tid); 175 is $info->{'metadata'}{'reporter'}, 'test@localhost', 176 'correct requestor'; 177 178 my ($res) = $ticket->AddWatcher( Type => 'Requestor', Email => 'another@localhost' ); 179 ok $res, "added requestor"; 180 181 ($ret, $out, $err) = run_script( 'sd', [ 'pull', '--from', $sd_rt_url ] ); 182 183 $info = get_ticket_info($sd_tid); 184 is $info->{'metadata'}{'reporter'}, 'another@localhost, test@localhost', 185 'correct requestor'; 186 187 ($res) = $ticket->SetStatus('deleted'); 188 ok $res, 'deleted ticket in RT'; 189} 190 191# create without requestor, pull, add requestor, pull 192{ 193 flush_sd(); 194 195 my $ticket = RT::Ticket->new( $RT::SystemUser ); 196 my ($rt_tid) = $ticket->Create( 197 Queue => 'General', Status => 'new', Subject => 'Fly Man', 198 ); 199 ok $rt_tid, "created ticket #$rt_tid in RT"; 200 201 my ($ret, $out, $err) = run_script( 'sd', [ 'pull', '--from', $sd_rt_url ] ); 202 203 my $sd_tid; 204 run_output_matches( 205 'sd', [qw(ticket list --regex .)], 206 [qr/(.*?)(?{ $sd_tid = $1 }) Fly Man new/] 207 ); 208 ok $sd_tid, 'pulled ticket'; 209 210 my $info = get_ticket_info($sd_tid); 211 ok !$info->{'metadata'}{'reporter'}, 'correct requestor'; 212 213 my ($res) = $ticket->AddWatcher( Type => 'Requestor', Email => 'another@localhost' ); 214 ok $res, "added requestor"; 215 216 ($ret, $out, $err) = run_script( 'sd', [ 'pull', '--from', $sd_rt_url ] ); 217 218 $info = get_ticket_info($sd_tid); 219 is $info->{'metadata'}{'reporter'}, 'another@localhost', 220 'correct requestor'; 221 222 ($res) = $ticket->SetStatus('deleted'); 223 ok $res, 'deleted ticket in RT'; 224} 225 226# create without requestor, add requestor, pull 227{ 228 flush_sd(); 229 230 my $ticket = RT::Ticket->new( $RT::SystemUser ); 231 my ($rt_tid) = $ticket->Create( 232 Queue => 'General', Status => 'new', Subject => 'Fly Man', 233 ); 234 ok $rt_tid, "created ticket #$rt_tid in RT"; 235 236 my ($res) = $ticket->AddWatcher( Type => 'Requestor', Email => 'another@localhost' ); 237 ok $res, "added requestor"; 238 239 my ($ret, $out, $err) = run_script( 'sd', [ 'pull', '--from', $sd_rt_url ] ); 240 241 my $sd_tid; 242 run_output_matches( 243 'sd', [qw(ticket list --regex .)], 244 [qr/(.*?)(?{ $sd_tid = $1 }) Fly Man new/] 245 ); 246 ok $sd_tid, 'pulled ticket'; 247 248 my $info = get_ticket_info($sd_tid); 249 is $info->{'metadata'}{'reporter'}, 'another@localhost', 250 'correct requestor'; 251 252 ($res) = $ticket->SetStatus('deleted'); 253 ok $res, 'deleted ticket in RT'; 254} 255 256# create, pull, del requestor, pull 257{ 258 flush_sd(); 259 260 my $ticket = RT::Ticket->new( $RT::SystemUser ); 261 my ($rt_tid) = $ticket->Create( 262 Queue => 'General', Status => 'new', Subject => 'Fly Man', 263 Requestor => 'test@localhost', 264 ); 265 ok $rt_tid, "created ticket #$rt_tid in RT"; 266 267 my ($ret, $out, $err) = run_script( 'sd', [ 'pull', '--from', $sd_rt_url ] ); 268 269 my $sd_tid; 270 run_output_matches( 271 'sd', [qw(ticket list --regex .)], 272 [qr/(.*?)(?{ $sd_tid = $1 }) Fly Man new/] 273 ); 274 ok $sd_tid, 'pulled ticket'; 275 276 my $info = get_ticket_info($sd_tid); 277 is $info->{'metadata'}{'reporter'}, 'test@localhost', 278 'correct requestor'; 279 280 my ($res) = $ticket->DeleteWatcher( Type => 'Requestor', Email => 'test@localhost' ); 281 ok $res, "deleted requestor"; 282 283 ($ret, $out, $err) = run_script( 'sd', [ 'pull', '--from', $sd_rt_url ] ); 284 285 $info = get_ticket_info($sd_tid); 286 ok !$info->{'metadata'}{'reporter'}, 'correct requestor'; 287 288 ($res) = $ticket->SetStatus('deleted'); 289 ok $res, 'deleted ticket in RT'; 290} 291 292# create with cc, pull 293{ 294 flush_sd(); 295 296 my $ticket = RT::Ticket->new( $RT::SystemUser ); 297 my ($rt_tid) = $ticket->Create( 298 Queue => 'General', Status => 'new', Subject => 'Fly Man', 299 Cc => 'test@localhost', 300 ); 301 ok $rt_tid, "created ticket #$rt_tid in RT"; 302 303 my ( $ret, $out, $err ) = run_script( 'sd', [ 'pull', '--from', $sd_rt_url ] ); 304 305 my $sd_tid; 306 run_output_matches( 307 'sd', [qw(ticket list --regex .)], 308 [qr/(.*?)(?{ $sd_tid = $1 }) Fly Man new/] 309 ); 310 ok $sd_tid, 'pulled ticket'; 311 312 my $info = get_ticket_info($sd_tid); 313 is $info->{'metadata'}{'cc'}, 'test@localhost', 314 'correct cc'; 315 316 my ($res) = $ticket->SetStatus('deleted'); 317 ok $res, 'deleted ticket in RT'; 318} 319 320# create with cc+cc, pull 321{ 322 flush_sd(); 323 324 my $ticket = RT::Ticket->new( $RT::SystemUser ); 325 my ($rt_tid) = $ticket->Create( 326 Queue => 'General', Status => 'new', Subject => 'Fly Man', 327 Cc => ['test@localhost', 'another@localhost'], 328 ); 329 ok $rt_tid, "created ticket #$rt_tid in RT"; 330 331 my ( $ret, $out, $err ) = run_script( 'sd', [ 'pull', '--from', $sd_rt_url ] ); 332 333 my $sd_tid; 334 run_output_matches( 335 'sd', [qw(ticket list --regex .)], 336 [qr/(.*?)(?{ $sd_tid = $1 }) Fly Man new/] 337 ); 338 ok $sd_tid, 'pulled ticket'; 339 340 my $info = get_ticket_info($sd_tid); 341 is $info->{'metadata'}{'cc'}, 'another@localhost, test@localhost', 342 'correct ccs'; 343 344 my ($res) = $ticket->SetStatus('deleted'); 345 ok $res, 'deleted ticket in RT'; 346} 347 348# create, add cc, pull 349{ 350 flush_sd(); 351 352 my $ticket = RT::Ticket->new( $RT::SystemUser ); 353 my ($rt_tid) = $ticket->Create( 354 Queue => 'General', Status => 'new', Subject => 'Fly Man', 355 Cc => 'test@localhost', 356 ); 357 ok $rt_tid, "created ticket #$rt_tid in RT"; 358 359 my ($res) = $ticket->AddWatcher( Type => 'Cc', Email => 'another@localhost' ); 360 ok $res, "added cc"; 361 362 flush_sd(); 363 my ($ret, $out, $err) = run_script( 'sd', [ 'pull', '--from', $sd_rt_url ] ); 364 365 my $sd_tid; 366 run_output_matches( 367 'sd', [qw(ticket list --regex .)], 368 [qr/(.*?)(?{ $sd_tid = $1 }) Fly Man new/] 369 ); 370 ok $sd_tid, 'pulled ticket'; 371 372 my $info = get_ticket_info($sd_tid); 373 is $info->{'metadata'}{'cc'}, 'another@localhost, test@localhost', 374 'correct cc'; 375 376 ($res) = $ticket->SetStatus('deleted'); 377 ok $res, 'deleted ticket in RT'; 378} 379 380# create, pull, add cc, pull 381{ 382 flush_sd(); 383 384 my $ticket = RT::Ticket->new( $RT::SystemUser ); 385 my ($rt_tid) = $ticket->Create( 386 Queue => 'General', Status => 'new', Subject => 'Fly Man', 387 Cc => 'test@localhost', 388 ); 389 ok $rt_tid, "created ticket #$rt_tid in RT"; 390 391 my ($ret, $out, $err) = run_script( 'sd', [ 'pull', '--from', $sd_rt_url ] ); 392 393 my $sd_tid; 394 run_output_matches( 395 'sd', [qw(ticket list --regex .)], 396 [qr/(.*?)(?{ $sd_tid = $1 }) Fly Man new/] 397 ); 398 ok $sd_tid, 'pulled ticket'; 399 400 my $info = get_ticket_info($sd_tid); 401 is $info->{'metadata'}{'cc'}, 'test@localhost', 402 'correct cc'; 403 404 my ($res) = $ticket->AddWatcher( Type => 'Cc', Email => 'another@localhost' ); 405 ok $res, "added cc"; 406 407 ($ret, $out, $err) = run_script( 'sd', [ 'pull', '--from', $sd_rt_url ] ); 408 409 $info = get_ticket_info($sd_tid); 410 is $info->{'metadata'}{'cc'}, 'another@localhost, test@localhost', 411 'correct cc'; 412 413 ($res) = $ticket->SetStatus('deleted'); 414 ok $res, 'deleted ticket in RT'; 415} 416 417# create without cc, pull, add cc, pull 418{ 419 flush_sd(); 420 421 my $ticket = RT::Ticket->new( $RT::SystemUser ); 422 my ($rt_tid) = $ticket->Create( 423 Queue => 'General', Status => 'new', Subject => 'Fly Man', 424 ); 425 ok $rt_tid, "created ticket #$rt_tid in RT"; 426 427 my ($ret, $out, $err) = run_script( 'sd', [ 'pull', '--from', $sd_rt_url ] ); 428 429 my $sd_tid; 430 run_output_matches( 431 'sd', [qw(ticket list --regex .)], 432 [qr/(.*?)(?{ $sd_tid = $1 }) Fly Man new/] 433 ); 434 ok $sd_tid, 'pulled ticket'; 435 436 my $info = get_ticket_info($sd_tid); 437 ok !$info->{'metadata'}{'cc'}, 'correct cc'; 438 439 my ($res) = $ticket->AddWatcher( Type => 'Cc', Email => 'another@localhost' ); 440 ok $res, "added cc"; 441 442 ($ret, $out, $err) = run_script( 'sd', [ 'pull', '--from', $sd_rt_url ] ); 443 444 $info = get_ticket_info($sd_tid); 445 is $info->{'metadata'}{'cc'}, 'another@localhost', 446 'correct cc'; 447 448 ($res) = $ticket->SetStatus('deleted'); 449 ok $res, 'deleted ticket in RT'; 450} 451 452# create without cc, add cc, pull 453{ 454 flush_sd(); 455 456 my $ticket = RT::Ticket->new( $RT::SystemUser ); 457 my ($rt_tid) = $ticket->Create( 458 Queue => 'General', Status => 'new', Subject => 'Fly Man', 459 ); 460 ok $rt_tid, "created ticket #$rt_tid in RT"; 461 462 my ($res) = $ticket->AddWatcher( Type => 'Cc', Email => 'another@localhost' ); 463 ok $res, "added cc"; 464 465 my ($ret, $out, $err) = run_script( 'sd', [ 'pull', '--from', $sd_rt_url ] ); 466 467 my $sd_tid; 468 run_output_matches( 469 'sd', [qw(ticket list --regex .)], 470 [qr/(.*?)(?{ $sd_tid = $1 }) Fly Man new/] 471 ); 472 ok $sd_tid, 'pulled ticket'; 473 474 my $info = get_ticket_info($sd_tid); 475 is $info->{'metadata'}{'cc'}, 'another@localhost', 476 'correct cc'; 477 478 ($res) = $ticket->SetStatus('deleted'); 479 ok $res, 'deleted ticket in RT'; 480} 481 482# create, pull, del cc, pull 483{ 484 flush_sd(); 485 486 my $ticket = RT::Ticket->new( $RT::SystemUser ); 487 my ($rt_tid) = $ticket->Create( 488 Queue => 'General', Status => 'new', Subject => 'Fly Man', 489 Cc => 'test@localhost', 490 ); 491 ok $rt_tid, "created ticket #$rt_tid in RT"; 492 493 my ($ret, $out, $err) = run_script( 'sd', [ 'pull', '--from', $sd_rt_url ] ); 494 495 my $sd_tid; 496 run_output_matches( 497 'sd', [qw(ticket list --regex .)], 498 [qr/(.*?)(?{ $sd_tid = $1 }) Fly Man new/] 499 ); 500 ok $sd_tid, 'pulled ticket'; 501 502 my $info = get_ticket_info($sd_tid); 503 is $info->{'metadata'}{'cc'}, 'test@localhost', 504 'correct cc'; 505 506 my ($res) = $ticket->DeleteWatcher( Type => 'Cc', Email => 'test@localhost' ); 507 ok $res, "deleted cc"; 508 509 ($ret, $out, $err) = run_script( 'sd', [ 'pull', '--from', $sd_rt_url ] ); 510 511 $info = get_ticket_info($sd_tid); 512 ok !$info->{'metadata'}{'cc'}, 'correct cc'; 513 514 ($res) = $ticket->SetStatus('deleted'); 515 ok $res, 'deleted ticket in RT'; 516} 517 518sub flush_sd { 519 rmtree( $ENV{'SD_REPO'} ); 520 run_script( 'sd', ['init', '--non-interactive' ] ); 521} 522 523