Index: main/waeup.ikoba/branches/uli-payments/src/waeup/ikoba/customers/browser.py
===================================================================
--- main/waeup.ikoba/branches/uli-payments/src/waeup/ikoba/customers/browser.py	(revision 12689)
+++ main/waeup.ikoba/branches/uli-payments/src/waeup/ikoba/customers/browser.py	(revision 12690)
@@ -50,4 +50,5 @@
 from waeup.ikoba.browser.interfaces import ICaptchaManager
 from waeup.ikoba.mandates.mandate import PasswordMandate
+from waeup.ikoba.payments.interfaces import IPaymentGatewayServicesLister
 from waeup.ikoba.widgets.hrefwidget import HREFDisplayWidget
 from waeup.ikoba.utils.helpers import (
@@ -1513,13 +1514,13 @@
         payment gateway.
         """
-        from waeup.ikoba.payments.interfaces import IPaymentGatewayServicesLister
         lister = getUtility(IPaymentGatewayServicesLister)
         for name, service in lister().items():
             yield {'name': name, 'title': service.title}
 
-    def update(self, CANCEL=None):
+    def update(self, CANCEL=None, gw=None):
         if self.context.state != CREATED or not self.context.fee_based:
             emit_lock_message(self)
             return
+        self.gw = gw
         super(SelectPaymentMethodPage, self).update()
         return
@@ -1529,6 +1530,10 @@
             style='primary', warning=WARNING_CON,)
     def confirm(self, **data):
-        IWorkflowInfo(self.context).fireTransition('await')
-        self.flash(_('Payment has been initiated.'))
+        if self.gw is None:
+            self.flash(_('Please pick a payment method.'),
+                       type='warning')
+        else:
+            IWorkflowInfo(self.context).fireTransition('await')
+            self.flash(_('Payment has been initiated.'))
         return
 
Index: main/waeup.ikoba/branches/uli-payments/src/waeup/ikoba/customers/tests/test_browser.py
===================================================================
--- main/waeup.ikoba/branches/uli-payments/src/waeup/ikoba/customers/tests/test_browser.py	(revision 12689)
+++ main/waeup.ikoba/branches/uli-payments/src/waeup/ikoba/customers/tests/test_browser.py	(revision 12690)
@@ -1501,6 +1501,5 @@
         contract.product_options = [prodoption,]
 
-    def test_select_payment(self):
-        # select payment
+    def prepare_payment_select(self):
         IWorkflowState(self.customer).setState('approved')
         IWorkflowState(self.document).setState('verified')
@@ -1513,5 +1512,8 @@
         self.browser.getControl(name="form.password").value = 'cpwd'
         self.browser.getControl("Login").click()
-        # go to our contract
+
+    def test_select_payment(self):
+        # select payment
+        self.prepare_payment_select()
         self.browser.open('%s/CON1/edit' % self.contracts_path)
         self.browser.getControl("Proceed to checkout").click()
@@ -1520,2 +1522,28 @@
         self.assertTrue(
             'Credit Card (Demo Payments)' in self.browser.contents)
+
+    def test_select_payment_no_choice(self):
+        # we get warned if no payment was selected
+        self.prepare_payment_select()
+        never_ending_button_text = (
+            'Select payment method and proceed to payment gateway'
+            ' (final submission)')
+        self.browser.open(
+            '%s/CON1/select_payment_method' % self.contracts_path)
+        self.browser.getControl(never_ending_button_text).click()
+        self.assertTrue(
+            'Please pick a payment method' in self.browser.contents)
+
+    def test_select_payment_demo_provider(self):
+        # we can proceed with payments if we select a payment method
+        self.prepare_payment_select()
+        never_ending_button_text = (
+            'Select payment method and proceed to payment gateway'
+            ' (final submission)')
+        self.browser.open(
+            '%s/CON1/select_payment_method' % self.contracts_path)
+        radio_ctrl = self.browser.getControl(name='gw')
+        radio_ctrl.displayValue = ['Credit Card (Demo Payments)']
+        self.browser.getControl(never_ending_button_text).click()
+        self.assertTrue(
+            'Payment has been initiated.' in self.browser.contents)
