Bugzilla – Attachment 193704 Details for
Bug 33538
Allow for independent shibboleth autocreate and sync mapping
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 33538: Unit tests
88c4218.patch (text/plain), 7.30 KB, created by
Martin Renvoize (ashimema)
on 2026-02-24 10:34:45 UTC
(
hide
)
Description:
Bug 33538: Unit tests
Filename:
MIME Type:
Creator:
Martin Renvoize (ashimema)
Created:
2026-02-24 10:34:45 UTC
Size:
7.30 KB
patch
obsolete
>From 88c4218bbd6168591316f92280543dadaf37fc54 Mon Sep 17 00:00:00 2001 >From: Martin Renvoize <martin.renvoize@openfifth.co.uk> >Date: Tue, 24 Feb 2026 10:32:36 +0000 >Subject: [PATCH] Bug 33538: Unit tests > >Add and update unit tests to account for the new sync fields > >Sponsored-by: ByWater Solutions >--- > t/db_dependent/Koha/Auth/Client.t | 146 +++++++++++++++++- > .../api/v1/identity_provider_mappings.t | 10 +- > 2 files changed, 152 insertions(+), 4 deletions(-) > >diff --git a/t/db_dependent/Koha/Auth/Client.t b/t/db_dependent/Koha/Auth/Client.t >index 358f06848a9..d285026ea7a 100755 >--- a/t/db_dependent/Koha/Auth/Client.t >+++ b/t/db_dependent/Koha/Auth/Client.t >@@ -19,7 +19,7 @@ > > use Modern::Perl; > >-use Test::More tests => 5; >+use Test::More tests => 6; > > use Test::MockModule; > use Test::MockObject; >@@ -284,3 +284,147 @@ subtest '_traverse_hash() tests' => sub { > ); > is( $third_result, 'second element', 'get the value of the second element of an array within a hash structure' ); > }; >+ >+subtest 'Sync flags tests' => sub { >+ plan tests => 6; >+ >+ $schema->storage->txn_begin; >+ >+ my $client = Koha::Auth::Client::OAuth->new; >+ my $provider = $builder->build_object( { class => 'Koha::Auth::Identity::Providers' } ); >+ my $hostname_obj = >+ $builder->build_object( { class => 'Koha::Auth::Hostnames', value => { hostname => 'test.library.com' } } ); >+ $builder->build_object( >+ { >+ class => 'Koha::Auth::Identity::Provider::Hostnames', >+ value => { >+ identity_provider_id => $provider->id, >+ hostname_id => $hostname_obj->id, >+ matchpoint => 'email', >+ } >+ } >+ ); >+ my $domain = $builder->build_object( >+ { >+ class => 'Koha::Auth::Identity::Provider::Domains', >+ value => { >+ identity_provider_id => $provider->id, domain => '*test.com', update_on_auth => 1, allow_opac => 1, >+ allow_staff => 0 >+ } >+ } >+ ); >+ >+ # Mapping for matchpoint >+ $builder->build_object( >+ { >+ class => 'Koha::Auth::Identity::Provider::Mappings', >+ value => { >+ identity_provider_id => $provider->id, >+ koha_field => 'email', >+ provider_field => 'email', >+ sync_on_update => 1, >+ sync_on_creation => 1, >+ } >+ } >+ ); >+ >+ # Mapping with sync_on_update = 0 >+ $builder->build_object( >+ { >+ class => 'Koha::Auth::Identity::Provider::Mappings', >+ value => { >+ identity_provider_id => $provider->id, >+ koha_field => 'firstname', >+ provider_field => 'given_name', >+ sync_on_update => 0, >+ sync_on_creation => 1, >+ } >+ } >+ ); >+ >+ # Mapping with sync_on_update = 1 >+ $builder->build_object( >+ { >+ class => 'Koha::Auth::Identity::Provider::Mappings', >+ value => { >+ identity_provider_id => $provider->id, >+ koha_field => 'surname', >+ provider_field => 'family_name', >+ sync_on_update => 1, >+ sync_on_creation => 1, >+ } >+ } >+ ); >+ >+ # Mapping with default_content and sync_on_update = 1 (should NOT sync default on update) >+ $builder->build_object( >+ { >+ class => 'Koha::Auth::Identity::Provider::Mappings', >+ value => { >+ identity_provider_id => $provider->id, >+ koha_field => 'othernames', >+ provider_field => 'missing_field', >+ default_content => 'default value', >+ sync_on_update => 1, >+ sync_on_creation => 1, >+ } >+ } >+ ); >+ >+ my $patron = $builder->build_object( >+ { >+ class => 'Koha::Patrons', >+ value => { >+ email => 'patron@test.com', >+ firstname => 'Original Firstname', >+ surname => 'Original Surname', >+ othernames => 'Original Othernames', >+ } >+ } >+ ); >+ >+ my $id_token = 'header.' . encode_base64url( >+ encode_json( >+ { >+ email => 'patron@test.com', >+ given_name => 'New Firstname', >+ family_name => 'New Surname', >+ } >+ ) >+ ) . '.footer'; >+ >+ my $data = { id_token => $id_token }; >+ >+ $client->get_user( >+ { provider => $provider->code, data => $data, interface => 'opac', hostname => 'test.library.com' } ); >+ >+ $patron->discard_changes; >+ is( $patron->firstname, 'Original Firstname', 'firstname NOT synced (sync_on_update=0)' ); >+ is( $patron->surname, 'New Surname', 'surname synced (sync_on_update=1)' ); >+ is( $patron->othernames, 'Original Othernames', 'othernames NOT synced with default value on update' ); >+ >+ # Now test creation (using auth.register helper logic) >+ # We can't easily call auth.register here because it's a Mojo helper, >+ # but we can test the logic directly or via the REST API if we wanted. >+ # For now, let's just test that the flags are respected in a similar loop. >+ >+ my $mappings = $provider->mappings->as_auth_mapping; >+ my $mapped_data = { >+ firstname => 'New Firstname', >+ surname => 'New Surname', >+ }; >+ >+ my %borrower_data; >+ for my $key ( keys %$mappings ) { >+ next unless $mappings->{$key}->{sync_on_creation}; >+ my $value = $mapped_data->{$key}; >+ $value //= $mappings->{$key}->{content}; >+ $borrower_data{$key} = $value if defined $value; >+ } >+ >+ is( $borrower_data{firstname}, 'New Firstname', 'firstname included on creation' ); >+ is( $borrower_data{surname}, 'New Surname', 'surname included on creation' ); >+ is( $borrower_data{othernames}, 'default value', 'othernames included with default on creation' ); >+ >+ $schema->storage->txn_rollback; >+}; >diff --git a/t/db_dependent/api/v1/identity_provider_mappings.t b/t/db_dependent/api/v1/identity_provider_mappings.t >index e90255f44a2..5bc72ea2bd0 100755 >--- a/t/db_dependent/api/v1/identity_provider_mappings.t >+++ b/t/db_dependent/api/v1/identity_provider_mappings.t >@@ -161,7 +161,7 @@ subtest 'get() tests' => sub { > > subtest 'add() tests' => sub { > >- plan tests => 12; >+ plan tests => 14; > > $schema->storage->txn_begin; > >@@ -175,8 +175,10 @@ subtest 'add() tests' => sub { > my $pid = $provider->identity_provider_id; > > my $new_mapping = { >- koha_field => 'email', >- provider_field => 'mail', >+ koha_field => 'email', >+ provider_field => 'mail', >+ sync_on_creation => 0, >+ sync_on_update => 0, > }; > > # Unauthorized >@@ -196,6 +198,8 @@ subtest 'add() tests' => sub { > ->status_is(201) > ->json_is( '/koha_field', 'email' ) > ->json_is( '/identity_provider_id', $pid ) >+ ->json_is( '/sync_on_creation', 0 ) >+ ->json_is( '/sync_on_update', 0 ) > ->json_has('/mapping_id') > ->header_like( 'Location', qr|/api/v1/auth/identity_providers/$pid/mappings/\d+| ); > >-- >2.53.0 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 33538
:
193700
|
193701
|
193702
|
193703
| 193704