[Bps-public-commit] r15566 - in sd/trunk: .
sartak at bestpractical.com
sartak at bestpractical.com
Wed Aug 27 19:35:27 EDT 2008
Author: sartak
Date: Wed Aug 27 19:35:26 2008
New Revision: 15566
Added:
sd/trunk/t/no-foreign-sync.t
Modified:
sd/trunk/ (props changed)
Log:
r70609 at onn: sartak | 2008-08-27 19:35:19 -0400
Add tests for the no-foreign-sync CF/tag
Added: sd/trunk/t/no-foreign-sync.t
==============================================================================
--- (empty file)
+++ sd/trunk/t/no-foreign-sync.t Wed Aug 27 19:35:26 2008
@@ -0,0 +1,189 @@
+#!/usr/bin/env perl
+
+# to run:
+#
+# RT_DBA_USER=root RT_DBA_PASSWORD= prove -lv -I/Users/clkao/work/bps/rt-3.7/lib t/sd-rt.t
+use strict;
+use warnings;
+no warnings 'once';
+
+# setup for rt
+use Prophet::Test;
+use App::SD::Test;
+
+BEGIN {
+ unless (eval 'use RT::Test (); 1') {
+ diag $@;
+ plan skip_all => 'requires 3.7 to run tests.';
+ }
+}
+
+BEGIN {
+ unless ( $ENV{'JIFTY_APP_ROOT'} ) {
+ plan skip_all => "You must define a JIFTY_APP_ROOT environment variable which points to your hiveminder source tree";
+ }
+ require File::Temp;
+ eval "use Jifty;";
+ push @INC, File::Spec->catdir( Jifty::Util->app_root, "lib" );
+}
+
+plan tests => 11;
+
+RT::Test->import;
+use RT::Client::REST;
+use RT::Client::REST::Ticket;
+
+RT::Handle->InsertData( $RT::EtcPath . '/initialdata' );
+
+eval 'use BTDT::Test; 1;' or die "$@";
+
+my $server = BTDT::Test->make_server;
+my $URL = $server->started_ok;
+
+$URL =~ s|http://|http://onlooker\@example.com:something@|;
+my $sd_hm_url = "hm:$URL";
+
+ok( 1, "Loaded the test script" );
+
+my ( $url, $m ) = RT::Test->started_ok;
+diag("RT server started at $url");
+
+my $CF = RT::Test->load_or_create_custom_field(
+ Name => 'sd:no-foreign-sync',
+ Queue => 'General',
+ Type => 'SelectSingle',
+);
+$CF->AddValue(
+ Name => 'ForbidForeignSync',
+ Description => 'Using this flag will forbid syncing the ticket to other foreign replicas',
+);
+$CF->AddValue(
+ Name => 'AllowForeignSync',
+ Description => 'Using this flag will allow syncing the ticket to other foreign replicas',
+);
+
+my $rt = RT::Client::REST->new( server => $url );
+$rt->login( username => 'root', password => 'password' );
+
+$url =~ s|http://|http://root:password@|;
+my $sd_rt_url = "rt:$url|General|Status!='resolved'";
+
+my $ticket = RT::Client::REST::Ticket->new(
+ rt => $rt,
+ queue => 'General',
+ status => 'new',
+ subject => 'Fly Man',
+ cf => {
+ 'sd:no-foreign-sync' => 'ForbidForeignSync',
+ },
+)->store( text => "Ticket Comment" );
+
+# setup for hm
+my $root = BTDT::CurrentUser->superuser;
+my $as_root = BTDT::Model::User->new( current_user => $root );
+$as_root->load_by_cols( email => 'onlooker at example.com' );
+my ( $val, $msg ) = $as_root->set_accepted_eula_version( Jifty->config->app('EULAVersion') );
+ok( $val, $msg );
+my $GOODUSER = BTDT::CurrentUser->new( email => 'onlooker at example.com' );
+$GOODUSER->user_object->set_accepted_eula_version( Jifty->config->app('EULAVersion') );
+my $task = BTDT::Model::Task->new( current_user => $GOODUSER );
+$task->create(
+ summary => "YATTA",
+ description => '',
+ tags => 'sd:no-foreign-sync',
+);
+
+my ( $bob_yatta_id, $bob_flyman_id, $flyman_uuid, $yatta_uuid, $alice_yatta_id, $alice_flyman_id );
+my ( $ret, $out, $err );
+
+# now the tests, bob syncs with rt, alice syncs with hm
+as_alice {
+ local $ENV{SD_REPO} = $ENV{'PROPHET_REPO'};
+ ( $ret, $out, $err ) = run_script( 'sd', [ 'pull', '--from', $sd_hm_url ] );
+ diag($err) if ($err);
+ run_output_matches( 'sd', [ 'ticket', 'list', '--regex', '.' ], [qr/^(.*?)(?{ $alice_yatta_id = $1 }) YATTA .*/] );
+ $yatta_uuid = get_uuid_for_luid($alice_yatta_id);
+};
+
+as_bob {
+ local $ENV{SD_REPO} = $ENV{'PROPHET_REPO'};
+ run_output_matches( 'sd', [ 'ticket', 'list', '--regex', '.' ], [] );
+
+ diag("Bob pulling from RT");
+ ( $ret, $out, $err ) = run_script( 'sd', [ 'pull', '--from', $sd_rt_url ] );
+ diag($err) if ($err);
+ run_output_matches( 'sd', [ 'ticket', 'list', '--regex', '.' ], [qr/^(.*?)(?{ $bob_flyman_id = $1 }) Fly Man new/] );
+
+ ( $ret, $out, $err ) = run_script( 'sd', [ 'pull', '--from', repo_uri_for('alice'), '--force' ] );
+
+ $flyman_uuid = get_uuid_for_luid($bob_flyman_id);
+ my $bob_yatta_id = get_luid_for_uuid($yatta_uuid);
+
+ run_output_matches_unordered(
+ 'sd',
+ [ 'ticket', 'list', '--regex', '.' ],
+ [ reverse sort "$bob_yatta_id YATTA (no status)", "$bob_flyman_id Fly Man new" ]
+ );
+
+
+ diag("Bob pushing to RT");
+ ( $ret, $out, $err ) = run_script( 'sd', [ 'push', '--to', $sd_rt_url ] );
+ diag($err) if ($err);
+};
+
+as_alice {
+ local $ENV{SD_REPO} = $ENV{'PROPHET_REPO'};
+ ( $ret, $out, $err ) = run_script( 'sd', [ 'pull', '--from', repo_uri_for('bob'), '--force' ] );
+
+
+ $alice_flyman_id = get_luid_for_uuid($flyman_uuid);
+
+ run_output_matches_unordered(
+ 'sd',
+ [ 'ticket', 'list', '--regex', '.' ],
+ [ sort "$alice_yatta_id YATTA (no status)", "$alice_flyman_id Fly Man new" ]
+ );
+};
+
+# try pushing Fly Man to Hiveminder
+as_bob {
+ local $ENV{SD_REPO} = $ENV{'PROPHET_REPO'};
+
+ diag("Bob pushing to Hiveminder");
+ ( $ret, $out, $err ) = run_script( 'sd', [ 'push', '--to', $sd_hm_url ] );
+ diag($err) if ($err);
+};
+
+as_alice {
+ local $ENV{SD_REPO} = $ENV{'PROPHET_REPO'};
+
+ diag("Alice pushing to Hiveminder");
+ ( $ret, $out, $err ) = run_script( 'sd', [ 'push', '--to', $sd_hm_url ] );
+ diag($err) if ($err);
+};
+
+ok(!$task->load_by_cols(summary => "Fly Man"), "no 'Fly Man' ticket on HM because RT had the no-foreign-sync custom field");
+
+# try pushing YATTA to RT
+as_bob {
+ local $ENV{SD_REPO} = $ENV{'PROPHET_REPO'};
+
+ diag("Bob pushing to RT");
+ ( $ret, $out, $err ) = run_script( 'sd', [ 'push', '--to', $sd_rt_url ] );
+ diag($err) if ($err);
+};
+
+as_alice {
+ local $ENV{SD_REPO} = $ENV{'PROPHET_REPO'};
+
+ diag("Alice pushing to RT");
+ ( $ret, $out, $err ) = run_script( 'sd', [ 'push', '--to', $sd_rt_url ] );
+ diag($err) if ($err);
+};
+
+my @ids = $rt->search(
+ type => 'ticket',
+ query => "Subject LIKE 'Yatta'",
+);
+is(@ids, 0, "no YATTA ticket (from HM) in RT");
+
More information about the Bps-public-commit
mailing list