X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=t%2FAuth_with_shibboleth.t;h=60bde6896ca177b260f5e2fabc661828bc3aaae7;hb=662a98345a71fb170bc6ae5b3679e3edf4eee96f;hp=457153a0dac191aa312fdfa0131eab7b993f7d77;hpb=85a057bc5e1ff5b70bfe6a332e197a51af60bcee;p=koha.git diff --git a/t/Auth_with_shibboleth.t b/t/Auth_with_shibboleth.t index 457153a0da..60bde6896c 100644 --- a/t/Auth_with_shibboleth.t +++ b/t/Auth_with_shibboleth.t @@ -28,18 +28,31 @@ use C4::Context; BEGIN { if ( check_install( module => 'Test::DBIx::Class' ) ) { - plan tests => 9; + plan tests => 11; } else { plan skip_all => "Need Test::DBIx::Class" } } -use Test::DBIx::Class { schema_class => 'Koha::Schema', connect_info => ['dbi:SQLite:dbname=:memory:','',''] }; +use Test::DBIx::Class; # Mock Variables my $matchpoint = 'userid'; -my %mapping = ( 'userid' => { 'is' => 'uid' }, ); -$ENV{'uid'} = "test1234"; +my $autocreate = 0; +my %mapping = ( + 'userid' => { 'is' => 'uid' }, + 'surname' => { 'is' => 'sn' }, + 'dateexpiry' => { 'is' => 'exp' }, + 'categorycode' => { 'is' => 'cat' }, + 'address' => { 'is' => 'add' }, + 'city' => { 'is' => 'city' }, +); +$ENV{'uid'} = "test1234"; +$ENV{'sn'} = undef; +$ENV{'exp'} = undef; +$ENV{'cat'} = undef; +$ENV{'add'} = undef; +$ENV{'city'} = undef; # Setup Mocks ## Mock Context @@ -48,56 +61,22 @@ my $context = new Test::MockModule('C4::Context'); ### Mock ->config $context->mock( 'config', \&mockedConfig ); -sub mockedConfig { - my $param = shift; - - my %shibboleth = ( - 'matchpoint' => $matchpoint, - 'mapping' => \%mapping - ); - - return \%shibboleth; -} - ### Mock ->preference my $OPACBaseURL = "testopac.com"; $context->mock( 'preference', \&mockedPref ); -sub mockedPref { - my $param = $_[1]; - my $return; - - if ( $param eq 'OPACBaseURL' ) { - $return = $OPACBaseURL; - } - - return $return; -} - ## Mock Database my $database = new Test::MockModule('Koha::Database'); ### Mock ->schema $database->mock( 'schema', \&mockedSchema ); -sub mockedSchema { - return Schema(); -} - -## Convenience method to reset config -sub reset_config { - $matchpoint = 'userid'; - %mapping = ( 'userid' => { 'is' => 'uid' }, ); - $ENV{'uid'} = "test1234"; - - return 1; -} - # Tests ############################################################## # Can module load -use_ok('C4::Auth_with_shibboleth'); +use C4::Auth_with_shibboleth; +require_ok('C4::Auth_with_shibboleth'); $C4::Auth_with_shibboleth::debug = '0'; # Subroutine tests @@ -154,7 +133,7 @@ subtest "get_login_shib tests" => sub { ## debug off $C4::Auth_with_shibboleth::debug = '0'; warnings_are { $login = get_login_shib() }[], - "good config with debug off, no warnings recieved"; + "good config with debug off, no warnings received"; is( $login, "test1234", "good config with debug off, attribute value returned" ); @@ -165,16 +144,16 @@ subtest "get_login_shib tests" => sub { "shibboleth attribute to match: uid", "uid value: test1234" ], - "good config with debug enabled, correct warnings recieved"; + "good config with debug enabled, correct warnings received"; is( $login, "test1234", "good config with debug enabled, attribute value returned" ); -# bad config - with shib_ok implimented, we should never reach this sub with a bad config +# bad config - with shib_ok implemented, we should never reach this sub with a bad config }; ## checkpw_shib subtest "checkpw_shib tests" => sub { - plan tests => 13; + plan tests => 18; my $shib_login; my ( $retval, $retcard, $retuserid ); @@ -185,6 +164,7 @@ subtest "checkpw_shib tests" => sub { [qw/cardnumber userid surname address city/], [qw/testcardnumber test1234 renvoize myaddress johnston/], ], + 'Category' => [ [qw/categorycode default_privacy/], [qw/S never/], ] ], 'Installed some custom fixtures via the Populate fixture class'; @@ -194,7 +174,7 @@ subtest "checkpw_shib tests" => sub { # good user $shib_login = "test1234"; warnings_are { - ( $retval, $retcard, $retuserid ) = checkpw_shib( $shib_login ); + ( $retval, $retcard, $retuserid ) = checkpw_shib($shib_login); } [], "good user with no debug"; is( $retval, "1", "user authenticated" ); @@ -204,22 +184,47 @@ subtest "checkpw_shib tests" => sub { # bad user $shib_login = 'martin'; warnings_are { - ( $retval, $retcard, $retuserid ) = checkpw_shib( $shib_login ); + ( $retval, $retcard, $retuserid ) = checkpw_shib($shib_login); } [], "bad user with no debug"; is( $retval, "0", "user not authenticated" ); + # autocreate user + $autocreate = 1; + $shib_login = 'test4321'; + $ENV{'uid'} = 'test4321'; + $ENV{'sn'} = "pika"; + $ENV{'exp'} = "2017"; + $ENV{'cat'} = "S"; + $ENV{'add'} = 'Address'; + $ENV{'city'} = 'City'; + warnings_are { + ( $retval, $retcard, $retuserid ) = checkpw_shib($shib_login); + } + [], "new user added with no debug"; + is( $retval, "1", "user authenticated" ); + is( $retuserid, "test4321", "expected userid returned" ); + ok my $new_user = ResultSet('Borrower') + ->search( { 'userid' => 'test4321' }, { rows => 1 } ), "new user found"; + is_fields [qw/surname dateexpiry address city/], $new_user->next, + [qw/pika 2017 Address City/], + 'Found $new_users surname'; + $autocreate = 0; + # debug on $C4::Auth_with_shibboleth::debug = '1'; # good user $shib_login = "test1234"; warnings_exist { - ( $retval, $retcard, $retuserid ) = checkpw_shib( $shib_login ); + ( $retval, $retcard, $retuserid ) = checkpw_shib($shib_login); } - [ qr/checkpw_shib/, qr/koha borrower field to match: userid/, - qr/shibboleth attribute to match: uid/, - qr/User Shibboleth-authenticated as:/ ], + [ + qr/checkpw_shib/, + qr/koha borrower field to match: userid/, + qr/shibboleth attribute to match: uid/, + qr/User Shibboleth-authenticated as:/ + ], "good user with debug enabled"; is( $retval, "1", "user authenticated" ); is( $retcard, "testcardnumber", "expected cardnumber returned" ); @@ -228,7 +233,7 @@ subtest "checkpw_shib tests" => sub { # bad user $shib_login = "martin"; warnings_exist { - ( $retval, $retcard, $retuserid ) = checkpw_shib( $shib_login ); + ( $retval, $retcard, $retuserid ) = checkpw_shib($shib_login); } [ qr/checkpw_shib/, @@ -249,11 +254,9 @@ is( C4::Auth_with_shibboleth::_get_uri(), $OPACBaseURL = "http://testopac.com"; my $result; -warnings_are { $result = C4::Auth_with_shibboleth::_get_uri() } - [ { carped => - 'Shibboleth requires OPACBaseURL to use the https protocol!' }, - ], - "improper protocol - received expected warning"; +warning_like { $result = C4::Auth_with_shibboleth::_get_uri() } +[qr/Shibboleth requires OPACBaseURL to use the https protocol!/], + "improper protocol - received expected warning"; is( $result, "https://testopac.com", "https opac uri returned" ); $OPACBaseURL = "https://testopac.com"; @@ -261,11 +264,60 @@ is( C4::Auth_with_shibboleth::_get_uri(), "https://testopac.com", "https opac uri returned" ); $OPACBaseURL = undef; -warnings_are { $result = C4::Auth_with_shibboleth::_get_uri() } - [ { carped => 'OPACBaseURL not set!' }, - ], - "undefined OPACBaseURL - received expected warning"; +warning_like { $result = C4::Auth_with_shibboleth::_get_uri() } +[qr/OPACBaseURL not set!/], + "undefined OPACBaseURL - received expected warning"; is( $result, "https://", "https opac uri returned" ); ## _get_shib_config # Internal helper function, covered in tests above + +sub mockedConfig { + my $param = shift; + + my %shibboleth = ( + 'autocreate' => $autocreate, + 'matchpoint' => $matchpoint, + 'mapping' => \%mapping + ); + + return \%shibboleth; +} + +sub mockedPref { + my $param = $_[1]; + my $return; + + if ( $param eq 'OPACBaseURL' ) { + $return = $OPACBaseURL; + } + + return $return; +} + +sub mockedSchema { + return Schema(); +} + +## Convenience method to reset config +sub reset_config { + $matchpoint = 'userid'; + $autocreate = 0; + %mapping = ( + 'userid' => { 'is' => 'uid' }, + 'surname' => { 'is' => 'sn' }, + 'dateexpiry' => { 'is' => 'exp' }, + 'categorycode' => { 'is' => 'cat' }, + 'address' => { 'is' => 'add' }, + 'city' => { 'is' => 'city' }, + ); + $ENV{'uid'} = "test1234"; + $ENV{'sn'} = undef; + $ENV{'exp'} = undef; + $ENV{'cat'} = undef; + $ENV{'add'} = undef; + $ENV{'city'} = undef; + + return 1; +} +