From 281fc11b95c1685907bcdf35477492d8afd4bcc9 Mon Sep 17 00:00:00 2001 From: Martin Renvoize Date: Thu, 23 Mar 2017 14:54:38 +0000 Subject: [PATCH] Add Tests for autocreate https://bugs.koha-community.org/show_bug.cgi?id=12026 --- t/Auth_with_shibboleth.t | 163 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 111 insertions(+), 52 deletions(-) diff --git a/t/Auth_with_shibboleth.t b/t/Auth_with_shibboleth.t index 7ce3b47..828bfef 100644 --- a/t/Auth_with_shibboleth.t +++ b/t/Auth_with_shibboleth.t @@ -29,17 +29,34 @@ use C4::Context; BEGIN { if ( check_install( module => 'Test::DBIx::Class' ) ) { plan tests => 11; - } else { - plan skip_all => "Need Test::DBIx::Class" + } + 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 { + schema_class => 'Koha::Schema', + connect_info => [ 'dbi:SQLite:dbname=:memory:', '', '' ] +}; # 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,51 +65,16 @@ 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 ############################################################## @@ -175,7 +157,7 @@ subtest "get_login_shib tests" => sub { ## checkpw_shib subtest "checkpw_shib tests" => sub { - plan tests => 13; + plan tests => 18; my $shib_login; my ( $retval, $retcard, $retuserid ); @@ -186,6 +168,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'; @@ -195,7 +178,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" ); @@ -205,22 +188,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 } ); + 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" ); @@ -229,7 +237,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/, @@ -251,8 +259,8 @@ is( C4::Auth_with_shibboleth::_get_uri(), $OPACBaseURL = "http://testopac.com"; my $result; warning_like { $result = C4::Auth_with_shibboleth::_get_uri() } - [ qr/Shibboleth requires OPACBaseURL to use the https protocol!/ ], - "improper protocol - received expected warning"; +[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,9 +269,60 @@ is( C4::Auth_with_shibboleth::_get_uri(), $OPACBaseURL = undef; warning_like { $result = C4::Auth_with_shibboleth::_get_uri() } - [ qr/OPACBaseURL not set!/ ], - "undefined OPACBaseURL - received expected warning"; +[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; +} + +1; -- 2.1.4