Bugzilla – Attachment 41525 Details for
Bug 14536
PageObject-pattern base implementation
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 14536: (follow-up) Add more functionalty for handling messaging preferences
Bug-14536-follow-up-Add-more-functionalty-for-hand.patch (text/plain), 16.94 KB, created by
Lari Taskula
on 2015-08-17 07:57:56 UTC
(
hide
)
Description:
Bug 14536: (follow-up) Add more functionalty for handling messaging preferences
Filename:
MIME Type:
Creator:
Lari Taskula
Created:
2015-08-17 07:57:56 UTC
Size:
16.94 KB
patch
obsolete
>From 64207bc9f18fcd8d4924147921d60c2fedac67cd Mon Sep 17 00:00:00 2001 >From: Lari Taskula <larit@student.uef.fi> >Date: Mon, 17 Aug 2015 10:44:39 +0300 >Subject: [PATCH] Bug 14536: (follow-up) Add more functionalty for handling > messaging preferences > >- Fixes memberentry form submit to return Circulation PageObject. >- Prevents missing element errors at different steps of memberentry page. Patron >modification has multiple different steps (full edit, information edit, sms number edit, >library use edit, alternate address edit, alternative contact edit). Some of the input fields >required for validation are not always present in each step of these modifications. >- Adds functionality to check checkboxes and validate if they are checked or not >- Adds navigation to moremember edit links. >- Adds navigation to opac-messaging >--- > t/lib/Page/Intra.pm | 13 ++++ > t/lib/Page/Members/Memberentry.pm | 144 ++++++++++++++++++++++++++++++++----- > t/lib/Page/Members/Moremember.pm | 120 ++++++++++++++++++++++++++++++- > t/lib/Page/Opac/LeftNavigation.pm | 22 ++++++ > t/lib/Page/Opac/OpacMemberentry.pm | 2 +- > 5 files changed, 281 insertions(+), 20 deletions(-) > >diff --git a/t/lib/Page/Intra.pm b/t/lib/Page/Intra.pm >index 464b45a..79636f3 100644 >--- a/t/lib/Page/Intra.pm >+++ b/t/lib/Page/Intra.pm >@@ -43,6 +43,19 @@ See. Selenium documentation best practices for UI element mapping to common lang > =cut > ################################################################################ > >+=head _getBreadcrumbLinks >+ >+@RETURNS List of all breadcrumb links >+=cut >+ >+sub _getBreadcrumbLinks { >+ my ($self) = @_; >+ my $d = $self->getDriver(); >+ >+ my $breadcrumbLinks = $d->find_elements("div#breadcrumbs a"); >+ return ($breadcrumbLinks); >+} >+ > =head _getHeaderElements > > @RETURNS HASHRef of all the Intranet header clickables. >diff --git a/t/lib/Page/Members/Memberentry.pm b/t/lib/Page/Members/Memberentry.pm >index 2599042..2e7aee2 100644 >--- a/t/lib/Page/Members/Memberentry.pm >+++ b/t/lib/Page/Members/Memberentry.pm >@@ -21,10 +21,12 @@ use Modern::Perl; > use Scalar::Util qw(blessed); > use Test::More; > >-use base qw(t::lib::Page::Intra t::lib::Page::Members::Toolbar); >+use base qw(t::lib::Page::Intra t::lib::Page::Members::Toolbar t::lib::Page::Members::LeftNavigation); > > use Koha::Exception::BadParameter; > >+use t::lib::Page::Circulation::Circulation; >+ > > sub new { > my ($class, $params) = @_; >@@ -61,15 +63,41 @@ sub _getInputFieldsForValidation { > my ($self) = @_; > my $d = $self->getDriver(); > >- my $emailInput = $d->find_element('#email'); >- my $emailProInput = $d->find_element('#emailpro'); >- my $email_BInput = $d->find_element('#B_email'); >+ my ($emailInput, $emailProInput, $email_BInput, $phoneInput, $phoneProInput, $phone_BInput, $SMSnumber); >+ eval { >+ $emailInput = $d->find_element('#email'); >+ }; >+ eval { >+ $emailProInput = $d->find_element('#emailpro'); >+ }; >+ eval { >+ $email_BInput = $d->find_element('#B_email'); >+ }; >+ eval { >+ $phoneInput = $d->find_element('#phone'); >+ }; >+ eval { >+ $phoneProInput = $d->find_element('#phonepro'); >+ }; >+ eval { >+ $phone_BInput = $d->find_element('#B_phone'); >+ }; >+ eval { >+ $SMSnumber = $d->find_element('#SMSnumber'); >+ }; > >- my $phoneInput = $d->find_element('#phone'); >- my $phoneProInput = $d->find_element('#phonepro'); >- my $phone_BInput = $d->find_element('#B_phone'); >+ return ($emailInput, $emailProInput, $email_BInput, $phoneInput, $phoneProInput, $phone_BInput, $SMSnumber); >+} >+ >+sub _getMessagingPreferenceCheckboxes { >+ my ($self) = @_; >+ my $d = $self->getDriver(); >+ >+ my @email_prefs = $d->find_elements('input[type="checkbox"][id^="email"]'); >+ my @phone_prefs = $d->find_elements('input[type="checkbox"][id^="phone"]'); >+ my @sms_prefs = $d->find_elements('input[type="checkbox"][id^="sms"]'); > >- return ($emailInput, $emailProInput, $email_BInput, $phoneInput, $phoneProInput, $phone_BInput); >+ return { email => \@email_prefs, phone => \@phone_prefs, sms => \@sms_prefs }; > } > > >@@ -79,12 +107,85 @@ sub _getInputFieldsForValidation { > =cut > ################################################################################ > >+sub checkMessagingPreferencesSet { >+ my ($self, $valid, @prefs) = @_; >+ my $d = $self->getDriver(); >+ $self->debugTakeSessionSnapshot(); >+ >+ foreach my $type (@prefs){ >+ my @this_pref = $d->find_elements('input[type="checkbox"][id^="'.$type.'"]'); >+ >+ my $ok = 0; >+ >+ foreach my $checkbox (@this_pref){ >+ ok(0, "Intra Memberentry $type messaging checkbox ".$checkbox->get_attribute('id')." not checked") if !$checkbox->is_selected() and $valid; >+ ok(0, "Intra Memberentry $type messaging checkbox ".$checkbox->get_attribute('id')." checked (not supposed to be)") if $checkbox->is_selected() and !$valid; >+ $ok = 1; >+ } >+ ok($ok, "Intra Memberentry $type messaging checkboxes ok (all " . (($valid) ? 'checked':'unchecked') . ")"); >+ } >+ >+ return $self; >+} >+ >+sub clearMessagingContactFields { >+ my ($self, @fields) = @_; >+ my $d = $self->getDriver(); >+ $self->debugTakeSessionSnapshot(); >+ >+ my ($emailInput, $emailProInput, $email_BInput, $phoneInput, $phoneProInput, $phone_BInput, $SMSnumber) = $self->_getInputFieldsForValidation(); >+ >+ if (@fields) { >+ for my $field (@fields){ >+ $emailInput->clear() if $field eq "email"; >+ $emailProInput->clear() if $field eq "emailpro"; >+ $email_BInput->clear() if $field eq "B_email"; >+ $phoneInput->clear() if $field eq "phone"; >+ $phoneProInput->clear() if $field eq "phonepro"; >+ $phone_BInput->clear() if $field eq "B_phone"; >+ $SMSnumber->clear() if $field eq "SMSnumber"; >+ } >+ ok(1, "Intra Memberentry contact fields (@fields) cleared"); >+ } else { >+ $emailInput->clear(); >+ $emailProInput->clear(); >+ $email_BInput->clear(); >+ $phoneInput->clear(); >+ $phoneProInput->clear(); >+ $phone_BInput->clear(); >+ $SMSnumber->clear(); >+ ok(1, "Intra Memberentry contact fields (email, emailpro, email_B, phone, phonepro, phone_B, SMSnumber) cleared"); >+ } >+ >+ return $self; >+} >+ >+sub checkPreferences { >+ my ($self, $valid, $type) = @_; >+ my $d = $self->getDriver(); >+ $self->debugTakeSessionSnapshot(); >+ >+ my $checkboxes = $self->_getMessagingPreferenceCheckboxes(); >+ >+ ok (0, "Intra $type checkboxes not defined") if not defined $checkboxes->{$type}; >+ return 0 if not defined $checkboxes->{$type}; >+ >+ foreach my $checkbox (@{ $checkboxes->{$type} }){ >+ ok(0, "Intra Memberentry $type messaging checkbox ".$checkbox->get_attribute('id')." not available") if !$checkbox->is_enabled() and $valid; >+ ok(0, "Intra Memberentry $type messaging checkbox ".$checkbox->get_attribute('id')." available (not supposed to be)") if $checkbox->is_enabled() and !$valid; >+ >+ $checkbox->click() if not $checkbox->is_selected(); >+ } >+ ok (1, "Intra Memberentry $type messaging checkboxes checked") if $valid; >+ >+ return $self; >+} > sub setEmail { > my ($self, $input) = @_; > my $d = $self->getDriver(); > $self->debugTakeSessionSnapshot(); > >- my ($emailInput, $emailProInput, $email_BInput, $phoneInput, $phoneProInput, $phone_BInput) = $self->_getInputFieldsForValidation(); >+ my ($emailInput, $emailProInput, $email_BInput, $phoneInput, $phoneProInput, $phone_BInput, $SMSnumber) = $self->_getInputFieldsForValidation(); > > $emailInput->clear(); > $emailProInput->clear(); >@@ -102,7 +203,7 @@ sub setPhone { > my $d = $self->getDriver(); > $self->debugTakeSessionSnapshot(); > >- my ($emailInput, $emailProInput, $email_BInput, $phoneInput, $phoneProInput, $phone_BInput) = $self->_getInputFieldsForValidation(); >+ my ($emailInput, $emailProInput, $email_BInput, $phoneInput, $phoneProInput, $phone_BInput, $SMSnumber) = $self->_getInputFieldsForValidation(); > > $phoneInput->clear(); > $phoneProInput->clear(); >@@ -115,20 +216,33 @@ sub setPhone { > return $self; > } > >+sub setSMSNumber { >+ my ($self, $input) = @_; >+ my $d = $self->getDriver(); >+ $self->debugTakeSessionSnapshot(); >+ >+ my ($emailInput, $emailProInput, $email_BInput, $phoneInput, $phoneProInput, $phone_BInput, $SMSnumber) = $self->_getInputFieldsForValidation(); >+ >+ $SMSnumber->clear(); >+ $SMSnumber->send_keys($input); >+ ok(1, "Intra Memberentry Wrote \"$input\" to SMSnumber."); >+ >+ return $self; >+} >+ > sub submitForm { > my ($self, $valid) = @_; > my $d = $self->getDriver(); > $self->debugTakeSessionSnapshot(); > > my $submitButton = $d->find_element('form#entryform input[type="submit"]'); >- $submitButton->click(); >- >+ $submitButton->submit(); > $self->debugTakeSessionSnapshot(); > > if ($valid) { > my $submitted = $d->find_element("#editpatron", 'css'); > ok(1, "Intra Memberentry Submit changes success"); >- return t::lib::Page::Members::Moremember->rebrandFromPageObject($self); >+ return t::lib::Page::Circulation::Circulation->rebrandFromPageObject($self); > } else { > my @notsubmitted = $d->find_elements('form#entryform label[class="error"]', 'css'); > my $error_ids = ""; >@@ -142,10 +256,6 @@ sub submitForm { > $d->refresh(); > return $self; > } >- >- >- >- > } > > 1; >\ No newline at end of file >diff --git a/t/lib/Page/Members/Moremember.pm b/t/lib/Page/Members/Moremember.pm >index 456fd19..f52cfe3 100644 >--- a/t/lib/Page/Members/Moremember.pm >+++ b/t/lib/Page/Members/Moremember.pm >@@ -19,8 +19,9 @@ package t::lib::Page::Members::Moremember; > > use Modern::Perl; > use Scalar::Util qw(blessed); >+use Test::More; > >-use base qw(t::lib::Page::Intra t::lib::Page::Members::Toolbar); >+use base qw(t::lib::Page::Intra t::lib::Page::Members::Toolbar t::lib::Page::Members::LeftNavigation); > > use t::lib::Page::Members::ApiKeys; > >@@ -74,9 +75,35 @@ See. Selenium documentation best practices for UI element mapping to common lang > =cut > ################################################################################ > >+sub _getEditLinks { >+ my ($self) = @_; >+ my $d = $self->getDriver(); >+ >+ my $patron_info_edit = $d->find_element("div#patron-information div.action a[href*='memberentry.pl?op=modify'][href*='step=1']", 'css'); >+ my $sms_number_edit = $d->find_element("div.action a[href*='memberentry.pl?op=modify'][href*='step=5']", 'css'); >+ my $library_use_edit = $d->find_element("div.action a[href*='memberentry.pl?op=modify'][href*='step=3']", 'css'); >+ my $alternate_addr_edit = $d->find_element("div.action a[href*='memberentry.pl?op=modify'][href*='step=6']", 'css'); >+ my $alternative_contact_edit = $d->find_element("div.action a[href*='memberentry.pl?op=modify'][href*='step=2']", 'css'); >+ >+ my $e = {}; >+ $e->{patron_information} = $patron_info_edit if $patron_info_edit; >+ $e->{smsnumber} = $sms_number_edit if $sms_number_edit; >+ $e->{library_use} = $library_use_edit if $library_use_edit; >+ $e->{alternate_address} = $alternate_addr_edit if $alternate_addr_edit; >+ $e->{alternative_contact} = $alternative_contact_edit if $alternative_contact_edit; >+ return $e; >+} > >+sub _getMessagingPreferenceCheckboxes { >+ my ($self) = @_; >+ my $d = $self->getDriver(); > >- >+ my @email_prefs = $d->find_elements('input[type="checkbox"][id^="email"]'); >+ my @phone_prefs = $d->find_elements('input[type="checkbox"][id^="phone"]'); >+ my @sms_prefs = $d->find_elements('input[type="checkbox"][id^="sms"]'); >+ >+ return { email => \@email_prefs, phone => \@phone_prefs, sms => \@sms_prefs }; >+} > > ################################################################################ > =head PageObject Services >@@ -84,7 +111,96 @@ See. Selenium documentation best practices for UI element mapping to common lang > =cut > ################################################################################ > >+sub checkMessagingPreferencesSet { >+ my ($self, $valid, @prefs) = @_; >+ my $d = $self->getDriver(); >+ $self->debugTakeSessionSnapshot(); >+ >+ foreach my $type (@prefs){ >+ my @this_pref = $d->find_elements('input[type="checkbox"][id^="'.$type.'"]'); >+ >+ my $ok = 0; >+ >+ foreach my $checkbox (@this_pref){ >+ ok(0, "Intra Moremember $type messaging checkbox ".$checkbox->get_attribute('id')." not checked") if !$checkbox->is_selected() and $valid; >+ ok(0, "Intra Moremember $type messaging checkbox ".$checkbox->get_attribute('id')." checked (not supposed to be)") if $checkbox->is_selected() and !$valid; >+ $ok = 1; >+ } >+ ok($ok, "Intra Moremember $type messaging checkboxes ok (all " . (($valid) ? 'checked':'unchecked') . ")"); >+ } >+ >+ return $self; >+} >+ >+sub navigateToPatronInformationEdit { >+ my ($self) = @_; >+ my $d = $self->getDriver(); >+ $self->debugTakeSessionSnapshot(); >+ >+ my $elements = $self->_getEditLinks(); >+ $elements->{patron_information}->click(); >+ ok($d->get_title() =~ m/Modify patron/, "Intra Navigate to Modify patron information"); >+ >+ $self->debugTakeSessionSnapshot(); >+ >+ return t::lib::Page::Members::Memberentry->rebrandFromPageObject($self); >+} >+ >+sub navigateToSMSnumberEdit { >+ my ($self) = @_; >+ my $d = $self->getDriver(); >+ $self->debugTakeSessionSnapshot(); >+ >+ my $elements = $self->_getEditLinks(); >+ $elements->{smsnumber}->click(); >+ ok($d->get_title() =~ m/Modify patron/, "Intra Navigate to Modify patron SMS number"); >+ >+ $self->debugTakeSessionSnapshot(); >+ >+ return t::lib::Page::Members::Memberentry->rebrandFromPageObject($self); >+} >+ >+sub navigateToLibraryUseEdit { >+ my ($self) = @_; >+ my $d = $self->getDriver(); >+ $self->debugTakeSessionSnapshot(); >+ >+ my $elements = $self->_getEditLinks(); >+ $elements->{library_use}->click(); >+ ok($d->get_title() =~ m/Modify patron/, "Intra Navigate to Modify patron Library use"); >+ >+ $self->debugTakeSessionSnapshot(); >+ >+ return t::lib::Page::Members::Memberentry->rebrandFromPageObject($self); >+} >+ >+sub navigateToAlternateAddressEdit { >+ my ($self) = @_; >+ my $d = $self->getDriver(); >+ $self->debugTakeSessionSnapshot(); >+ >+ my $elements = $self->_getEditLinks(); >+ $elements->{alternate_address}->click(); >+ ok($d->get_title() =~ m/Modify patron/, "Intra Navigate to Modify patron Alternate address"); > >+ $self->debugTakeSessionSnapshot(); >+ >+ return t::lib::Page::Members::Memberentry->rebrandFromPageObject($self); >+} >+ >+sub navigateToAlternativeContactEdit { >+ my ($self) = @_; >+ my $d = $self->getDriver(); >+ $self->debugTakeSessionSnapshot(); >+ >+ my $elements = $self->_getEditLinks(); >+ $elements->{alternative_contact}->click(); >+ ok($d->get_title() =~ m/Modify patron/, "Intra Navigate to Modify patron Alternative contact"); >+ >+ $self->debugTakeSessionSnapshot(); >+ >+ return t::lib::Page::Members::Memberentry->rebrandFromPageObject($self); >+} > > > >diff --git a/t/lib/Page/Opac/LeftNavigation.pm b/t/lib/Page/Opac/LeftNavigation.pm >index 2f344a8..ae10de5 100644 >--- a/t/lib/Page/Opac/LeftNavigation.pm >+++ b/t/lib/Page/Opac/LeftNavigation.pm >@@ -22,6 +22,7 @@ use Scalar::Util qw(blessed); > use Test::More; > > use t::lib::Page::Opac::OpacApiKeys; >+use t::lib::Page::Opac::OpacMessaging; > > =head NAME t::lib::Page::Opac::LeftNavigation > >@@ -72,6 +73,9 @@ sub _getLeftNavigationActionElements { > $e->{yourPurchaseSuggestions} = $d->find_element("a[href*='opac-suggestions.pl']", 'css'); > }; > eval { >+ $e->{yourMessaging} = $d->find_element("a[href*='opac-messaging.pl']", 'css'); >+ }; >+ eval { > $e->{yourLists} = $d->find_element("a[href*='opac-shelves.pl']", 'css'); > }; > eval { >@@ -106,6 +110,24 @@ sub navigateYourAPIKeys { > return t::lib::Page::Opac::OpacApiKeys->rebrandFromPageObject($self); > } > >+sub navigateYourMessaging { >+ my ($self) = @_; >+ my $d = $self->getDriver(); >+ $self->debugTakeSessionSnapshot(); >+ >+ my $elements = $self->_getLeftNavigationActionElements(); >+ $elements->{yourMessaging}->click(); >+ $self->debugTakeSessionSnapshot(); >+ >+ my $breadcrumbs = $self->_getBreadcrumbLinks(); >+ >+ ok(ref($breadcrumbs) eq 'ARRAY' && >+ $breadcrumbs->[scalar(@$breadcrumbs)-1]->get_text() =~ m/Your messaging/i, >+ "Opac Navigate to Your messaging"); >+ >+ return t::lib::Page::Opac::OpacMessaging->rebrandFromPageObject($self); >+} >+ > sub navigateYourPersonalDetails { > my ($self) = @_; > my $d = $self->getDriver(); >diff --git a/t/lib/Page/Opac/OpacMemberentry.pm b/t/lib/Page/Opac/OpacMemberentry.pm >index 2dc3a21..343e25e 100644 >--- a/t/lib/Page/Opac/OpacMemberentry.pm >+++ b/t/lib/Page/Opac/OpacMemberentry.pm >@@ -23,7 +23,7 @@ use Test::More; > > use t::lib::Page::Opac::OpacUser; > >-use base qw(t::lib::Page::Opac); >+use base qw(t::lib::Page::Opac t::lib::Page::Opac::LeftNavigation); > > use Koha::Exception::BadParameter; > >-- >1.9.1
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 14536
:
41023
|
41052
|
41057
|
41121
|
41156
|
41254
|
41460
|
41524
|
41525
|
41534
|
41678
|
42060
|
42111
|
42118
|
42136
|
42160
|
42433
|
42435
|
42716
|
44410
|
47254
|
63245