diff --git a/docs/upgrades/packages-7.5.3/shopping-cart-collateral-items-1.wgpkg b/docs/upgrades/packages-7.5.3/shopping-cart-collateral-items-1.wgpkg index 7a3a59c81..f19fdad66 100644 Binary files a/docs/upgrades/packages-7.5.3/shopping-cart-collateral-items-1.wgpkg and b/docs/upgrades/packages-7.5.3/shopping-cart-collateral-items-1.wgpkg differ diff --git a/lib/WebGUI/Shop/Cart.pm b/lib/WebGUI/Shop/Cart.pm index 8bd49398a..837fee2e5 100644 --- a/lib/WebGUI/Shop/Cart.pm +++ b/lib/WebGUI/Shop/Cart.pm @@ -345,7 +345,7 @@ Calls onCompletePurchase() on all the items in the cart. Then deletes all the it sub onCompletePurchase { my $self = shift; foreach my $item (@{$self->getItems}) { - $item->getSku->completePurchase($item); + $item->getSku->onCompletePurchase($item); $item->delete; } $self->delete; @@ -459,6 +459,12 @@ sub www_update { } } } + + my $cartProperties; + $cartProperties->{ shipperId } = $form->process( 'shipperId' ) if $form->process( 'shipperId' ); + $cartProperties->{ couponId } = $form->process( 'couponId' ) if $form->process( 'couponId' ); + $self->update( $cartProperties ); + return $self->www_view; } @@ -520,7 +526,7 @@ sub www_view { formFooter => WebGUI::Form::formFooter($session), updateButton => WebGUI::Form::submit($session, {value=>$i18n->get("update cart button")}), checkoutButton => WebGUI::Form::submit($session, {value=>$i18n->get("checkout button"), - extras=>q|onclick="this.form.shop.value='pay';this.form.methodvalue='viewOptions';this.form.submit;"|}), + extras=>q|onclick="this.form.shop.value='pay';this.form.method.value='selectPaymentGateway';this.form.submit;"|}), continueShoppingButton => WebGUI::Form::submit($session, {value=>$i18n->get("continue shopping button"), extras=>q|onclick="this.form.method.value='continueShopping';this.form.submit;"|}), chooseShippingButton => WebGUI::Form::submit($session, {value=>$i18n->get("choose shipping button"), diff --git a/lib/WebGUI/Shop/CartItem.pm b/lib/WebGUI/Shop/CartItem.pm index 31ce96f2b..bd17139e7 100644 --- a/lib/WebGUI/Shop/CartItem.pm +++ b/lib/WebGUI/Shop/CartItem.pm @@ -159,7 +159,9 @@ Returns the WebGUI::Shop::Address object that is attached to this item for shipp sub getShippingAddress { my $self = shift; - return $self->cart->getAddressBook->getAddress($self->get("shippingAddressId")); + + my $addressId = $self->get("shippingAddressId") || $self->cart->get("shippingAddressId"); + return $self->cart->getAddressBook->getAddress($addressId); } #------------------------------------------------------------------- diff --git a/lib/WebGUI/Shop/Pay.pm b/lib/WebGUI/Shop/Pay.pm index 302933ee6..88ec7811b 100644 --- a/lib/WebGUI/Shop/Pay.pm +++ b/lib/WebGUI/Shop/Pay.pm @@ -66,6 +66,7 @@ sub addPaymentGateway { WebGUI::Error::InvalidParam->throw(error => q{You must pass a hashref of options to create a new PayDriver object}) unless defined($options) and ref $options eq 'HASH' and scalar keys %{ $options }; my $driver = eval { WebGUI::Pluggable::instanciate($requestedClass, 'create', [ $self->session, $label, $options ]) }; + return $driver; } @@ -103,13 +104,15 @@ A WebGUI::Shop::Cart object. A WebGUI::Error::InvalidParam exception will be th sub getOptions { my ($self, $cart) = @_; WebGUI::Error::InvalidParam->throw(error => q{Need a cart.}) unless defined $cart and $cart->isa("WebGUI::Shop::Cart"); + my $session = $cart->session; my %options = (); - foreach my $gateway (@{$self->getPaymentGateways()}) { + + foreach my $gateway (@{ $self->getPaymentGateways() }) { $options{$gateway->getId} = { - label => $gateway->get("label"), - button => $gateway->getButton($cart), - }; + label => $gateway->get("label"), + button => $gateway->getButton($cart), + }; } return \%options; } @@ -192,6 +195,39 @@ Returns a reference to the current session. =cut +#------------------------------------------------------------------- +sub www_addPaymentGateway { + my $self = shift; + my $session = $self->session; + + my $className = $session->form->process('className') + || WebGUI::Error::InvalidParam->throw(error => 'No class name passed'); + + my $payDriver = $self->addPaymentGateway( $className, $className->getName( $session ), { enabled => 0 } ); + return $payDriver->www_edit; +} + +#------------------------------------------------------------------- + +=head2 www_deletePaymentGateway () + +Deletes a payment gateway from the shop. + +=cut + +sub www_deletePaymentGateway { + my $self = shift; + my $session = $self->session; + + my $paymentGatewayId = $session->form->process('paymentGatewayId') + || WebGUI::Error::InvalidParam->throw(error => q{www_deletePaymentGateway requires a paymentGatewayId to be passed}); + + my $payDriver = $self->getPaymentGateway( $paymentGatewayId ); + $payDriver->delete; + + return $self->www_manage; +} + #------------------------------------------------------------------- =head2 www_do ( ) @@ -203,13 +239,18 @@ Let's payment gateway drivers do method calls. Requires a driver param in the po sub www_do { my ($self) = @_; my $form = $self->session->form; - WebGUI::Error::InvalidParam->throw(error => q{must have a form var called driver with a driver id }) if ($form->get("driver") eq ""); - WebGUI::Error::InvalidParam->throw(error => q{must have a form var called do with a www_ method to call }) if ($form->get("do") eq ""); - my $driver = $self->getPaymentGateway($form->get("driver")); + my $paymentGatewayId = $form->get("paymentGatewayId") + || WebGUI::Error::InvalidParam->throw(error => q{must have a form var called driver with a payment gateway id}); + + my $do = $form->get("do") + || WebGUI::Error::InvalidParam->throw(error => q{must have a form var called do with a www_ method to call}); + + my $payDriver = $self->getPaymentGateway( $paymentGatewayId ); + my $output = undef; - my $method = "www_". ( $form->get("do")); - if ($driver->can($method)) { - $output = $driver->$method(); + my $method = "www_$do"; + if ($payDriver->can($method)) { + $output = $payDriver->$method(); } return $output; } @@ -223,22 +264,76 @@ The main management screen for payment gateways. =cut sub www_manage { - my ($self) = @_; + my $self = shift; my $session = $self->session; + my $admin = WebGUI::Shop::Admin->new($session); + my $i18n = WebGUI::International->new($session, "Pay"); + return $session->privilege->adminOnly() unless ($session->user->isInGroup("3")); - my $admin = WebGUI::Shop::Admin->new($session); - my $i18n = WebGUI::International->new($session, "Shop"); + + # Button for adding a payment gateway my $output = WebGUI::Form::formHeader($session) - .WebGUI::Form::hidden($session, {name=>"shop", value=>"pay"}) - .WebGUI::Form::hidden($session, {name=>"method", value=>"addDriver"}) - .WebGUI::Form::selectBox($session, {name=>"className", options=>$self->getDrivers}) - .WebGUI::Form::submit($session, {value=>$i18n->get("add payment method")}) + .WebGUI::Form::hidden($session, { name => "shop", value => "pay" }) + .WebGUI::Form::hidden($session, { name => "method", value => "addPaymentGateway" }) + .WebGUI::Form::selectBox($session, { name => "className", options => $self->getDrivers }) + .WebGUI::Form::submit($session, { value => $i18n->echo("add payment method") }) .WebGUI::Form::formFooter($session); - foreach my $payer (@{$self->getPaymentGateways}) { - + + # Add a row with edit/delete buttons for each payment gateway. + foreach my $paymentGateway (@{$self->getPaymentGateways}) { + $output .= '
' + # Delete button for the current payment gateway. + .WebGUI::Form::formHeader($session, {extras=>'style="float: left;"' }) + .WebGUI::Form::hidden($session, { name => "shop", value => "pay" }) + .WebGUI::Form::hidden($session, { name => "method", value => "deletePaymentGateway" }) + .WebGUI::Form::hidden($session, { name => "paymentGatewayId", value => $paymentGateway->getId }) + .WebGUI::Form::submit($session, { value => $i18n->echo("delete"), extras => 'class="backwardButton"' }) + .WebGUI::Form::formFooter($session) + + # Edit button for current payment gateway + .WebGUI::Form::formHeader($session, {extras=>'style="float: left;"' }) + .WebGUI::Form::hidden($session, { name => "shop", value => "pay" }) + .WebGUI::Form::hidden($session, { name => "method", value => "do" }) + .WebGUI::Form::hidden($session, { name => "do", value => "edit" }) + .WebGUI::Form::hidden($session, { name => "paymentGatewayId", value => $paymentGateway->getId }) + .WebGUI::Form::submit($session, { value => $i18n->echo("edit"), extras => 'class="normalButton"' }) + .WebGUI::Form::formFooter($session) + + # Append payment gateway label + .' '. $paymentGateway->get("label") + .'
'; } + + # Wrap in admin console my $console = $admin->getAdminConsole; - return $console->render($output, $i18n->get("payment methods")); + return $console->render($output, $i18n->echo("payment methods")); +} + +#------------------------------------------------------------------- + +=head2 www_selectPaymentGateway ( ) + +The screen in which a customer chooses a payment gateway. + +TODO: Template this screen. +=cut + +sub www_selectPaymentGateway { + my $self = shift; + my $session = $self->session; + + my $cart = WebGUI::Shop::Cart->getCartBySession( $session ); + my $i18n = WebGUI::International->new( $session, 'Shop' ); + + # All the output stuff is just a placeholder until it's templated. + my $output .= $i18n->echo('Choose one of the following payment gateways to check out:'); + $output .= ''; + foreach my $payOption ( values %{$self->getOptions( $cart )} ) { + $output .= ''; + } + $output .= '
' . $payOption->{label} . '' . $payOption->{button} . '
'; + + return $session->style->userStyle( $output ); } 1; diff --git a/lib/WebGUI/Shop/PayDriver.pm b/lib/WebGUI/Shop/PayDriver.pm index 76e2aba4d..b5e88fda4 100644 --- a/lib/WebGUI/Shop/PayDriver.pm +++ b/lib/WebGUI/Shop/PayDriver.pm @@ -118,8 +118,8 @@ sub create { $class, ]); - # Set the options via the set method because set() will automatically serialize the options hash - $self->set($options); + # Set the options via the update method because update() will automatically serialize the options hash + $self->update($options); return $self; } @@ -172,8 +172,8 @@ sub definition { ); my %properties = ( - name => 'Payment Driver', - fields => \%fields, + name => 'Payment Driver', + properties => \%fields, ); push @{ $definition }, \%properties; @@ -254,6 +254,41 @@ sub getCart { return $cart; } +#------------------------------------------------------------------- + +=head2 getDoFormTags ( $method, $htmlForm ) + +Returns a string containing the required form fields for doing a www_do method call. If an HTMLForm object is +passed the fields are automatically added to it. In that case no form tags a returned by this method. + +=head3 $htmlForm + +The HTMLForm object you want to add the fields to. This is optional. + +=cut + +sub getDoFormTags { + my $self = shift; + my $doMethod = shift; + my $htmlForm = shift; + my $session = $self->session; + + if ($htmlForm) { + $htmlForm->hidden(name => 'shop', value => 'pay'); + $htmlForm->hidden(name => 'method', value => 'do'); + $htmlForm->hidden(name => 'do', value => $doMethod); + $htmlForm->hidden(name => 'paymentGatewayId', value => $self->getId); + + return undef; + } + else { + return WebGUI::Form::hidden($session, { name => 'shop', value => 'pay' }) + . WebGUI::Form::hidden($session, { name => 'method', value => 'do' }) + . WebGUI::Form::hidden($session, { name => 'do', value => $doMethod }) + . WebGUI::Form::hidden($session, { name => 'paymentGatewayId', value => $self->getId }) + } +} + #------------------------------------------------------------------- @@ -269,15 +304,30 @@ sub getEditForm { my $definition = $self->definition($self->session); my $form = WebGUI::HTMLForm->new($self->session); $form->submit; - $form->hidden( - name => 'paymentGatewayId', - value => $self->getId, - ); +# $form->hidden( +# -name => 'shop', +# -value => 'pay', +# ); +# $form->hidden( +# -name => 'method', +# -value => 'do', +# ); +# $form->hidden( +# -name => 'do', +# -value => 'editSave', +# ); +# +# $form->hidden( +# name => 'paymentGatewayId', +# value => $self->getId, +# ); + + $self->getDoFormTags('editSave', $form); $form->hidden( name => 'className', value => $self->className, ); - $form->dynamicForm($definition, 'fields', $self); + $form->dynamicForm($definition, 'properties', $self); return $form; } @@ -362,6 +412,33 @@ the C method. =cut +#------------------------------------------------------------------- + +=head2 processPropertiesFromFormPost ( ) + +Updates ship driver with data from Form. + +=cut + +sub processPropertiesFromFormPost { + my $self = shift; + my %properties; + my $fullDefinition = $self->definition($self->session); + + foreach my $definition (@{$fullDefinition}) { + foreach my $property (keys %{$definition->{properties}}) { + $properties{$property} = $self->session->form->process( + $property, + $definition->{properties}{$property}{fieldType}, + $definition->{properties}{$property}{defaultValue} + ); + } + } + $properties{title} = $fullDefinition->[0]{name} if ($properties{title} eq "" || lc($properties{title}) eq "untitled"); + $self->update(\%properties); +} + + #------------------------------------------------------------------- =head2 session ( ) @@ -372,7 +449,7 @@ Accessor for the session object. Returns the session object. #------------------------------------------------------------------- -=head2 set ( $options ) +=head2 update ( $options ) Setter for user configurable options in the payment objects. @@ -383,10 +460,10 @@ flattened into JSON and stored in the database as text. There is no content che =cut -sub set { +sub update { my $self = shift; my $properties = shift; - WebGUI::Error::InvalidParam->throw(error => 'set was not sent a hashref of options to store in the database') + WebGUI::Error::InvalidParam->throw(error => 'update was not sent a hashref of options to store in the database') unless ref $properties eq 'HASH' and scalar keys %{ $properties }; my $jsonOptions = to_json($properties); @@ -407,4 +484,46 @@ a GUID. =cut +#------------------------------------------------------------------- + +=head2 www_edit ( ) + +Generates an edit form. + +=cut + +sub www_edit { + my $self = shift; + my $session = $self->session; + my $admin = WebGUI::Shop::Admin->new($session); + my $i18n = WebGUI::International->new($session, "Pay"); + + return $session->privilege->insufficient() unless $session->user->isInGroup(3); + + my $form = $self->getEditForm; + $form->submit; + + return $admin->getAdminConsole->render($form->print, $i18n->echo("payment methods")); +} + +#------------------------------------------------------------------- + +=head2 www_editSave ( ) + +Saves the data from the post. + +=cut + +sub www_editSave { + my $self = shift; + my $session = $self->session; + return $session->privilege->insufficient() unless $session->user->isInGroup(3); + + $self->processPropertiesFromFormPost; + $session->http->setRedirect("/?shop=pay;method=manage"); + + return undef; +} + + 1; diff --git a/lib/WebGUI/Shop/PayDriver/Cash.pm b/lib/WebGUI/Shop/PayDriver/Cash.pm index 1fe9067a3..fd24194a4 100644 --- a/lib/WebGUI/Shop/PayDriver/Cash.pm +++ b/lib/WebGUI/Shop/PayDriver/Cash.pm @@ -20,30 +20,96 @@ sub definition { %fields = ( sendReceipt => { fieldType => 'yesNo', - label => $i18n->echo('sendReceipt'), - hoverHelp => $i18n->echo('sendReceipt help'), + label => $i18n->echo('send receipt'), + hoverHelp => $i18n->echo('send receipt help'), defaultValue => 0, }, + receiptSubject => { + fieldType => 'text', + label => $i18n->echo('receipt subject'), + hoverHelp => $i18n->echo('receipt subject help'), + }, + receiptTemplate => { + fieldType => 'template', + label => $i18n->echo('receipt template'), + hoverHelp => $i18n->echo('receipt template help'), + namespace => 'PayDriver/Cash/Receipt', + defaultValue => undef, + }, ); push @{ $definition }, { - name => $i18n->echo('Cash'), - fields => \%fields, + name => $i18n->echo('Cash'), + properties => \%fields, }; return $class->SUPER::definition($session, $definition); } #------------------------------------------------------------------- +sub getBillingAddress { + my $self = shift; + my $session = $self->session; -sub getButton { - + my $addressId = $session->scratch->get('ShopPayDriverCash_billingAddress'); + if ($addressId) { + return $self->getCart->getAddressBook->getAddress( $addressId ); + } + + # No billing address selected yet so return undef. + return undef; } #------------------------------------------------------------------- -sub www_collectPaymentInfo { +sub getButton { + my $self = shift; + my $session = $self->session; + my $i18n = WebGUI::International->new($session, 'PayDriver_Cash'); + my $payForm = WebGUI::Form::formHeader($session) + . $self->getDoFormTags('getCredentials') + . WebGUI::Form::submit($session, {value => $i18n->echo('Cash') }) + . WebGUI::Form::formFooter($session); + + return $payForm; +} + +#------------------------------------------------------------------- +sub getCartTemplateVariables { + my $self = shift; + my $cart = $self->getCart; + my @itemLoop; + + # Process items in cart + foreach my $item (@{ $cart->getItems }) { + my $sku = $item->getSku; + $sku->applyOptions( $item->get('options') ); + + my $itemProperties = $item->get; + $itemProperties->{ itemName } = $sku->get('title'); + $itemProperties->{ itemUrl } = $sku->getUrl; + $itemProperties->{ itemPrice } = $cart->formatCurrency( $sku->getPrice ); + $itemProperties->{ totalItemPrice } = $cart->formatCurrency( $sku->getPrice * $item->get('quantity') ); + + my $address = eval { $item->getShippingAddress }; + $itemProperties->{ itemShippingAddres } = $address->getHtmlFormatted unless (WebGUI::Error->caught); + + push @itemLoop, $itemProperties; + } + + my $cartProperties = $cart->get; + $cartProperties->{ totalPrice } = $cart->calculateSubtotal; + $cartProperties->{ tax } = $cart->getTaxes; + + # Include shipping address + my $address = eval { $cart->getShippingAddress }; + $cartProperties->{ shippingAddress } = $address->getHtmlFormatted unless (WebGUI::Error->caught); +# $cartProperties->{ shippingPrice } = + + $cartProperties->{ item_loop } = \@itemLoop; + + return $cartProperties; } #------------------------------------------------------------------- @@ -52,5 +118,106 @@ sub www_displayStatus { } +#------------------------------------------------------------------- +sub www_getCredentials { + my $self = shift; + my $session = $self->session; + + # Generate the json string that defines where the address book posts the selected address + my $callbackParams = { + url => $session->url->page, + params => [ + { name => 'shop', value => 'pay' }, + { name => 'method', value => 'do' }, + { name => 'do', value => 'setBillingAddress' }, + { name => 'paymentGatewayId', value => $self->getId }, + ], + }; + my $callbackJson = JSON::to_json( $callbackParams ); + + # Generate 'Choose billing address' button + my $addressButton = WebGUI::Form::formHeader( $session ) + . WebGUI::Form::hidden( $session, { name => 'shop', value => 'address' } ) + . WebGUI::Form::hidden( $session, { name => 'method', value => 'view' } ) + . WebGUI::Form::hidden( $session, { name => 'callback', value => $callbackJson } ) + . WebGUI::Form::submit( $session, { value => 'Choose billing address' } ) + . WebGUI::Form::formFooter( $session); + + # Get billing address + my $billingAddress = eval { $self->getBillingAddress }; + if ( WebGUI::Error->caught('WebGUI::Error::ObjectNotFound') ) { + # The stored address id is invalid, so remove it + $session->scratch->delete('ShopPayDriverCash_billingAddress'); + } + + my $billingAddressHtml; + if ($billingAddress) { + $billingAddressHtml = $billingAddress->getHtmlFormatted; + } + + # Generate 'Proceed' button + my $proceedButton = WebGUI::Form::formHeader( $session ) + . $self->getDoFormTags('pay') + . WebGUI::Form::submit( $session, { value => 'Pay' } ) + . WebGUI::Form::formFooter( $session); + + return $session->style->userStyle($addressButton.'
'.$billingAddressHtml.'
'.$proceedButton); +} + +#------------------------------------------------------------------- + +sub www_pay { + my $self = shift; + my $session = $self->session; + my $cart = $self->getCart; + my $i18n = WebGUI::International->new($session, 'PayDriver_Cash'); + my $var; + + my $billingAddress = $self->getBillingAddress( $session->scratch->get( 'ShopPayDriverCash_billingAddressId' ) ); + + # Create a transaction and complete the purchase + my $transaction = WebGUI::Shop::Transaction->create( $session, { + cart => $cart, + paymentAddress => $billingAddress, + paymentMethod => $self, + }); + $transaction->completePurchase( $cart, 'CASH', 'OK', 'Cash payment' ); + + # Generate a receipt and send it if enabled. + if ( $self->get('sendReceipt') ) { + # Setup receipt tmpl_vars + my $var = $self->getCartTemplateVariables; + + # Instanciate receipt template + my $template = WebGUI::Asset::Template->new( $session, $self->get('receiptTemplate') ); + WebGUI::Error::ObjectNotFound->throw( id => $self->get('receiptTemplate') ) + unless $template; + + # Send receipt + my $receipt = WebGUI::Mail::Send->create( $session, { + to => $session->user->profileField('email'), + from => 'martin@oqapi.nl', + subject => $self->get('receiptSubject'), + }); + $receipt->addText( $template->process( $var ) ); +# $receipt->addText( 'Thank you for ordering' ); + $receipt->queue; + + } + + return $session->style->userStyle('Thank you for ordering'); +} + +#------------------------------------------------------------------- + +sub www_setBillingAddress { + my $self = shift; + my $session = $self->session; + + $session->scratch->set( 'ShopPayDriverCash_billingAddress', $session->form->process('addressId') ); + + return $self->www_getCredentials; +} + 1; diff --git a/lib/WebGUI/Shop/Transaction.pm b/lib/WebGUI/Shop/Transaction.pm index eb7eefca9..62b3ee045 100644 --- a/lib/WebGUI/Shop/Transaction.pm +++ b/lib/WebGUI/Shop/Transaction.pm @@ -91,7 +91,8 @@ The extended status message that came back from the payment gateway when trying sub completePurchase { my ($self, $cart, $transactionCode, $statusCode, $statusMessage) = @_; - $cart->completePurchase; + $cart->onCompletePurchase; + #$cart->completePurchase; $self->update({ transactionCode => $transactionCode, isSuccessful => 1, @@ -372,7 +373,7 @@ sub update { $newProperties->{couponId} = $cart->get('couponId'); $newProperties->{couponTitle} = ''; $newProperties->{couponDiscount} = ''; - $newProperties->{amount} = $cart->getSubtotal + $newProperties->{couponDiscount} + $newProperties->{shippingPrice} + $newProperties->{taxes}; + $newProperties->{amount} = $cart->calculateSubtotal + $newProperties->{couponDiscount} + $newProperties->{shippingPrice} + $newProperties->{taxes}; foreach my $item (@{$cart->getItems}) { $self->addItem({item=>$item}); } diff --git a/t/Shop/Pay.t b/t/Shop/Pay.t index fbc8a03ed..cff4ee13e 100644 --- a/t/Shop/Pay.t +++ b/t/Shop/Pay.t @@ -169,6 +169,8 @@ throws_deeply( sub { $drivers = $pay->getOptions(); }, 'getOptions takes exception to not giving it a cart', ); +#TODO: Check th crap getOptions returns + ####################################################################### # # getPaymentGateway diff --git a/t/Shop/PayDriver.t b/t/Shop/PayDriver.t index 70ffab7ed..e2393e168 100644 --- a/t/Shop/PayDriver.t +++ b/t/Shop/PayDriver.t @@ -71,8 +71,8 @@ $definition = WebGUI::Shop::PayDriver->definition($session); cmp_deeply ( $definition, [ { - name => 'Payment Driver', - fields => { + name => 'Payment Driver', + properties => { label => { fieldType => 'text', label => ignore(), @@ -109,11 +109,11 @@ cmp_deeply ( $definition, [ { - name => 'Red', + name => 'Red', }, { - name => 'Payment Driver', - fields => ignore(), + name => 'Payment Driver', + properties => ignore(), } ], , @@ -299,7 +299,7 @@ my @forms = HTML::Form->parse($html, 'http://www.webgui.org'); is (scalar @forms, 1, 'getEditForm generates just 1 form'); my @inputs = $forms[0]->inputs; -is (scalar @inputs, 7, 'getEditForm: the form has 7 controls'); +is (scalar @inputs, 10, 'getEditForm: the form has 10 controls'); my @interestingFeatures; foreach my $input (@inputs) { @@ -315,6 +315,18 @@ cmp_deeply( name => undef, type => 'submit', }, + { + name => 'shop', + type => 'hidden', + }, + { + name => 'method', + type => 'hidden', + }, + { + name => 'do', + type => 'hidden', + }, { name => 'paymentGatewayId', type => 'hidden', @@ -400,19 +412,19 @@ TODO: { ####################################################################### # -# set +# update # ####################################################################### -eval { $driver->set(); }; +eval { $driver->update(); }; $e = Exception::Class->caught(); -isa_ok ($e, 'WebGUI::Error::InvalidParam', 'set takes exception to not giving it a hashref of options'); +isa_ok ($e, 'WebGUI::Error::InvalidParam', 'update takes exception to not giving it a hashref of options'); cmp_deeply ( $e, methods( - error => 'set was not sent a hashref of options to store in the database', + error => 'update was not sent a hashref of options to store in the database', ), - 'set takes exception to not giving it a hashref of options', + 'update takes exception to not giving it a hashref of options', ); my $newOptions = { @@ -422,7 +434,7 @@ my $newOptions = { receiptMessage => 'Dropjes!', }; -$driver->set($newOptions); +$driver->update($newOptions); my $storedOptions = $session->db->quickScalar('select options from paymentGateway where paymentGatewayId=?', [ $driver->getId, ]); @@ -430,7 +442,7 @@ cmp_deeply( $newOptions, from_json($storedOptions), , - 'set() actually stores data', + 'update() actually stores data', );