Skip to content

Commit

Permalink
Extend test coverage of OpenID.pm
Browse files Browse the repository at this point in the history
Cover setup_needed handling of OpenID respond.

Signed-off-by: Ioannis Bonatakis <[email protected]>
  • Loading branch information
b10n1k committed Oct 1, 2024
1 parent f06dd6d commit 11e55fa
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 6 deletions.
12 changes: 7 additions & 5 deletions lib/OpenQA/WebAPI/Auth/OpenID.pm
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
package OpenQA::WebAPI::Auth::OpenID;
use Mojo::Base -base, -signatures;

use OpenQA::Log qw(log_error log_warning);
use OpenQA::Log qw(log_error log_warning log_debug);
use LWP::UserAgent;
use Net::OpenID::Consumer;
use MIME::Base64 qw(encode_base64url decode_base64url);
Expand Down Expand Up @@ -112,17 +112,19 @@ sub auth_response ($c) {
my $txt
= 'Likely, OpenID message is not considered a valid object. It is missing, at least, "openqa.mode" value';
log_warning("Invalid OpenID provided. $txt");
$c->flash(error => "Invalid OpenID provided: $txt");
},
setup_needed => sub ($setup_url) {
# Redirect the user to $setup_url
$setup_url = URI::Escape::uri_unescape($setup_url);
$c->app->log->debug(qq{setup_url[$setup_url]});
log_debug(qq{setup_url[$setup_url]});

return (redirect => $setup_url, error => 0);
},
cancelled => sub () { }, # Do something appropriate when the user hits "cancel" at the OP
verified => sub ($vident) { _handle_verified($c, $vident) },
error => sub (@args) { $err_handler->(@args) },
# Do something appropriate when the user hits "cancel" at the OP
cancelled => sub () { }, # uncoverable statement
verified => sub ($vident) { _handle_verified($c, $vident) }, # uncoverable statement
error => sub (@args) { $err_handler->(@args) }, # uncoverable statement
);

return (redirect => decode_base64url($csr->args('return_page'), error => 0)) if $csr->args('return_page');
Expand Down
16 changes: 15 additions & 1 deletion t/03-auth-openid.t
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
# SPDX-License-Identifier: GPL-2.0-or-later

use Test::Most;
use Mojo::Base -signatures;
use Test::Output;
use Test::Warnings ':report_warnings';
use Test::MockModule;
Expand All @@ -26,7 +27,6 @@ $c->set_always(session => \%session);
ok OpenQA::WebAPI::Auth::OpenID::_handle_verified($c, $vident), 'can call _handle_verified';
$users->called_ok('create_user', 'new user is created for initial login');
is(($users->call_args(2))[1], 'mordred', 'new user created with details');

$c->set_always(
req => Test::MockObject->new->set_always(params => Test::MockObject->new->set_always(pairs => [1, 2]))
->set_always(url => Test::MockObject->new->set_always(base => 'openqa')))
Expand All @@ -38,4 +38,18 @@ stderr_like {
}
qr/Invalid OpenID/, 'warning about invalid OpenID is displayed';

my $mock_openid_consumer = Test::MockModule->new('Net::OpenID::Consumer');
$mock_openid_consumer->redefine(
'handle_server_response',
sub ($self, %res_handlers) {
return $res_handlers{setup_needed} ?
$res_handlers{setup_needed}->("https://www.opensuse.org/openid/setup") : undef;
});

stdout_like {
my $ret = OpenQA::WebAPI::Auth::OpenID::auth_response($c);
is_deeply($ret, 0, 'can handle setup_needed response');
}
qr/setup_url\[https:\/\/www.opensuse.org\/openid\/setup\]/, 'debug log is displayed when setup_needed';

done_testing;

0 comments on commit 11e55fa

Please sign in to comment.