[REF] payment* : state based publishing

Replace website_published and environment by a generic state on
payment.acquirer

Payment acquirers aren't enabled by default.  When setting their state to 'enabled' or 'test', it is verified the required fields for the provider are set.
This commit is contained in:
Victor Feyens
2019-08-12 08:45:50 +00:00
parent 611fde6c88
commit f0e059e601
48 changed files with 190 additions and 204 deletions
+2 -2
View File
@@ -111,7 +111,7 @@ class WebsitePayment(http.Controller):
@http.route(['/my/payment_method'], type='http', auth="user", website=True)
def payment_method(self, **kwargs):
acquirers = list(request.env['payment.acquirer'].search([
('website_published', '=', True), ('registration_view_template_id', '!=', False),
('state', '=', 'enabled'), ('registration_view_template_id', '!=', False),
('payment_flow', '=', 's2s'), ('company_id', '=', request.env.company.id)
]))
partner = request.env.user.partner_id
@@ -178,7 +178,7 @@ class WebsitePayment(http.Controller):
if acquirer_id:
acquirers = env['payment.acquirer'].browse(int(acquirer_id))
if not acquirers:
acquirers = env['payment.acquirer'].search([('website_published', '=', True), ('company_id', '=', user.company_id.id)])
acquirers = env['payment.acquirer'].search([('state', '=', 'enabled'), ('company_id', '=', user.company_id.id)])
# Check partner
partner_id = user.partner_id.id if not user._is_public() else False
+33 -28
View File
@@ -59,12 +59,13 @@ class PaymentAcquirer(models.Model):
"""
_name = 'payment.acquirer'
_description = 'Payment Acquirer'
_order = 'website_published desc, sequence, name'
_order = 'state desc, sequence, name'
def _get_default_view_template_id(self):
return self.env.ref('payment.default_acquirer_button', raise_if_not_found=False)
name = fields.Char('Name', required=True, translate=True)
color = fields.Integer('Color', compute='_compute_color', store=True)
description = fields.Html('Description')
sequence = fields.Integer('Sequence', default=10, help="Determine the display order")
provider = fields.Selection(
@@ -91,14 +92,14 @@ class PaymentAcquirer(models.Model):
registration_view_template_id = fields.Many2one(
'ir.ui.view', 'S2S Form Template', domain=[('type', '=', 'qweb')],
help="Template for method registration")
environment = fields.Selection([
('test', 'Test'),
('prod', 'Production')], string='Environment',
default='test', required=True)
website_published = fields.Boolean(
'Visible in Portal / Website', copy=False,
help="Make this payment acquirer available (Customer invoices, etc.)")
# Formerly associated to `authorize` option from auto_confirm
state = fields.Selection([
('disabled', 'Disabled'),
('enabled', 'Enabled'),
('test', 'Test Mode')], required=True, default='disabled',
help="""In test mode, a fake payment is processed through a test
payment interface. This mode is advised when setting up the
acquirer. Watch out, test and production modes require
different credentials.""")
capture_manually = fields.Boolean(string="Capture Amount Manually",
help="Capture the amount from Odoo, when the delivery is completed.")
journal_id = fields.Many2one(
@@ -154,7 +155,7 @@ class PaymentAcquirer(models.Model):
# TDE FIXME: remove that brol
module_id = fields.Many2one('ir.module.module', string='Corresponding Module')
module_state = fields.Selection(selection=ir_module.STATES, string='Installation State', related='module_id.state', readonly=False)
module_state = fields.Selection(selection=ir_module.STATES, string='Installation State', related='module_id.state', store=True)
image_128 = fields.Image("Image", max_width=128, max_height=128)
@@ -174,12 +175,18 @@ class PaymentAcquirer(models.Model):
elif electronic in self.inbound_payment_method_ids:
self.inbound_payment_method_ids = [(2, electronic.id)]
@api.onchange('state')
def onchange_state(self):
"""Disable dashboard display for test acquirer journal."""
self.journal_id.update({'show_on_dashboard': self.state == 'enabled'})
def _search_is_tokenized(self, operator, value):
tokenized = self._get_feature_support()['tokenize']
if (operator, value) in [('=', True), ('!=', False)]:
return [('provider', 'in', tokenized)]
return [('provider', 'not in', tokenized)]
@api.depends('provider')
def _compute_feature_support(self):
feature_support = self._get_feature_support()
for acquirer in self:
@@ -187,15 +194,28 @@ class PaymentAcquirer(models.Model):
acquirer.authorize_implemented = acquirer.provider in feature_support['authorize']
acquirer.token_implemented = acquirer.provider in feature_support['tokenize']
@api.depends('state', 'module_state')
def _compute_color(self):
for acquirer in self:
if acquirer.module_id and not acquirer.module_state == 'installed':
acquirer.color = 4 # blue
elif acquirer.state == 'disabled':
acquirer.color = 3 # yellow
elif acquirer.state == 'test':
acquirer.color = 2 # orange
elif acquirer.state == 'enabled':
acquirer.color = 7 # green
def _check_required_if_provider(self):
""" If the field has 'required_if_provider="<provider>"' attribute, then it
required if record.provider is <provider>. """
field_names = []
enabled_acquirers = self.filtered(lambda acq: acq.state in ['enabled', 'test'])
for k, f in self._fields.items():
provider = getattr(f, 'required_if_provider', None)
if provider and any(
acquirer.provider == provider and not acquirer[k]
for acquirer in self
for acquirer in enabled_acquirers
):
ir_field = self.env['ir.model.fields']._get(self._name, k)
field_names.append(ir_field.field_description)
@@ -234,7 +254,7 @@ class PaymentAcquirer(models.Model):
'default_debit_account_id': account.id,
'default_credit_account_id': account.id,
# Show the journal on dashboard if the acquirer is published on the website.
'show_on_dashboard': self.website_published,
'show_on_dashboard': self.state == 'enabled',
# Don't show payment methods in the backend.
'inbound_payment_method_ids': inbound_payment_method_ids,
'outbound_payment_method_ids': [],
@@ -277,16 +297,6 @@ class PaymentAcquirer(models.Model):
self._check_required_if_provider()
return result
def toggle_website_published(self):
''' When clicking on the website publish toggle button, the website_published is reversed and
the acquirer journal is set or not in favorite on the dashboard.
'''
self.ensure_one()
self.website_published = not self.website_published
if self.journal_id:
self.journal_id.show_on_dashboard = self.website_published
return True
def get_acquirer_extra_fees(self, amount, currency_id, country_id):
extra_fees = {
'currency_id': currency_id
@@ -318,7 +328,7 @@ class PaymentAcquirer(models.Model):
company = self.env.company
if not partner:
partner = self.env.user.partner_id
active_acquirers = self.sudo().search([('website_published', '=', True), ('company_id', '=', company.id)])
active_acquirers = self.sudo().search([('state', '=', 'enabled'), ('company_id', '=', company.id)])
acquirers = active_acquirers.filtered(lambda acq: (acq.payment_flow == 'form' and acq.view_template_id) or
(acq.payment_flow == 's2s' and acq.registration_view_template_id))
return {
@@ -481,11 +491,6 @@ class PaymentAcquirer(models.Model):
return method(data)
return True
def toggle_environment_value(self):
prod = self.filtered(lambda acquirer: acquirer.environment == 'prod')
prod.write({'environment': 'test'})
(self-prod).write({'environment': 'prod'})
def button_immediate_install(self):
# TDE FIXME: remove that brol
if self.module_id and self.module_state != 'installed':
@@ -33,7 +33,7 @@
<!-- TDE FIXME: was customize_show=True -->
<template id="pay_meth_link" inherit_id="portal.portal_layout">
<xpath expr="//div[hasclass('o_portal_my_details')]" position="inside">
<t t-if="request.env['payment.acquirer'].search([('website_published', '=', True), ('registration_view_template_id', '!=', False), ('payment_flow', '=', 's2s'), ('company_id', '=', request.env.company.id)])">
<t t-if="request.env['payment.acquirer'].search([('state', 'in', ['enabled', 'test']), ('registration_view_template_id', '!=', False), ('payment_flow', '=', 's2s'), ('company_id', '=', request.env.company.id)])">
<div class='manage_payment_method mt16'><a href="/my/payment_method">Manage payment methods</a></div>
</t>
</xpath>
+14 -53
View File
@@ -14,66 +14,29 @@
<field name="model">payment.acquirer</field>
<field name="arch" type="xml">
<form string="Payment Acquirer">
<field name="environment" invisible='1'/>
<field name="fees_implemented" invisible='1'/>
<field name="token_implemented" invisible='1'/>
<field name="authorize_implemented" invisible="1"/>
<field name="website_published" invisible="1"/>
<sheet>
<field name="module_id" invisible="1"/>
<field name="module_state" invisible="1"/>
<field name="inbound_payment_method_ids" invisible="1"/>
<div class="oe_button_box" name="button_box" attrs="{'invisible': ['&amp;', ('module_id', '!=', False), ('module_state', '!=', 'installed')]}">
<!-- transfer referenced here due to view inheritance issue in current master (post-saas-16) -->
<button name="toggle_environment_value"
attrs="{'invisible': ['|', ('environment', '=', 'test'), ('provider', '=', 'transfer')]}"
class="oe_stat_button"
type="object" icon="fa-play">
<div class="o_stat_info o_field_widget">
<span class="text-success">Production</span>
<span class="o_stat_text">Environment</span>
</div>
</button>
<!-- transfer referenced here due to view inheritance issue in current master (post-saas-16) -->
<button name="toggle_environment_value"
attrs="{'invisible': ['|', ('environment', '=', 'prod'), ('provider', '=', 'transfer')]}"
class="oe_stat_button"
type="object" icon="fa-stop">
<div class="o_stat_info o_field_widget">
<span class="o_warning_text">Test</span>
<span class="o_stat_text">Environment</span>
</div>
</button>
<button name="toggle_website_published"
attrs="{'invisible': [('website_published', '=', True)]}"
class="oe_stat_button"
type="object" icon="fa-globe">
<div class="o_stat_info o_field_widget">
<span class="text-danger">Unpublished</span>
</div>
</button>
<button name="toggle_website_published"
attrs="{'invisible': [('website_published', '=', False)]}"
class="oe_stat_button"
type="object" icon="fa-globe">
<div class="o_stat_info o_field_widget">
<span class="text-success">Published</span>
</div>
</button>
</div>
<field name="image_128" widget="image" class="oe_avatar"/>
<div class="oe_title">
<h1><field name="name" placeholder="Name"/></h1>
<div attrs="{'invisible': ['|', ('module_state', '=', 'installed'), ('module_id', '=', False)]}">
<button type="object" class="btn btn-primary" name="button_immediate_install" string="Install"/>
</div>
</div>
<div attrs="{'invisible': ['|', ('module_state', '=', 'installed'), ('module_id', '=', False)]}">
<button type="object" class="btn btn-primary" name="button_immediate_install" string="Install"/>
<div class="o_payment_acquirer_desc">
<field name="description"/>
</div>
</div>
<group name="acquirer_base" col="2" attrs="{'invisible': ['&amp;', ('module_id', '!=', False), ('module_state', '!=', 'installed')]}">
<group name="acquirer_left">
<group>
<group name="payment_state">
<field name="provider" groups="base.group_no_one" attrs="{'invisible': [('module_id', '!=', False), ('module_state', '!=', 'installed')]}"/>
<field name="state" widget="radio"/>
<field name="company_id" groups="base.group_multi_company" options='{"no_open":True}'/>
</group>
</group>
@@ -111,7 +74,7 @@
<field name="fees_int_var" attrs="{'invisible': [('fees_active', '=', False)]}"/>
</group>
</page>
<page string="Messages">
<page string="Messages" attrs="{'invisible': [('module_id', '=', True), ('module_state', '!=', 'installed')]}">
<group>
<field name="pre_msg" invisible="1"/>
<field name="post_msg"/>
@@ -137,15 +100,14 @@
<field name="id"/>
<field name="name"/>
<field name="description"/>
<field name="environment"/>
<field name="provider"/>
<field name="module_id"/>
<field name="module_state"/>
<field name="website_published"/>
<field name="color"/>
<templates>
<t t-name="kanban-box">
<t t-set="installed" t-value="!record.module_id.value || (record.module_id.value &amp;&amp; record.module_state.raw_value === 'installed')"/>
<div t-attf-class="oe_kanban_global_click #{installed and record.website_published.raw_value ? 'oe_kanban_color_5' : 'oe_kanban_color_white'}">
<div t-attf-class="oe_kanban_global_click #{kanban_color(record.color.raw_value)}">
<div class="o_kanban_image">
<img type="open" t-att-src="kanban_image('payment.acquirer', 'image_128', record.id.raw_value)" alt="Acquirer"/>
</div>
@@ -155,11 +117,11 @@
</div>
<div class="o_payment_acquirer_bottom">
<t t-if="installed">
<field name="environment" widget="label_selection" options="{'classes': {'test': 'warning', 'production': 'success'}}"/>
<field name="state" widget="label_selection" options="{'classes': {'enabled': 'success', 'test': 'warning', 'disabled' : 'danger'}}"/>
</t>
<button t-if="!installed and !selection_mode" type="object" class="btn btn-secondary float-right" name="button_immediate_install">Install</button>
<button t-if="installed and !record.website_published.raw_value and !selection_mode" type="edit" class="btn btn-primary float-right">Activate</button>
<button t-if="installed and record.website_published.raw_value and !selection_mode" type="edit" class="btn btn-primary float-right">Configure</button>
<button t-if="installed and record.state.raw_value == 'disabled' and !selection_mode" type="edit" class="btn btn-primary float-right">Activate</button>
<button t-if="installed and record.state.raw_value in ['enabled', 'test'] and !selection_mode" type="edit" class="btn btn-primary float-right">Configure</button>
</div>
</div>
</t>
@@ -176,8 +138,7 @@
<field name="sequence" widget="handle"/>
<field name="name"/>
<field name="provider"/>
<field name="website_published"/>
<field name="environment"/>
<field name="state"/>
<field name="country_ids" widget="many2many_tags" optional="hide"/>
<field name="company_id" groups="base.group_multi_company"/>
</tree>
@@ -194,7 +155,7 @@
<filter name="acquirer_installed" string="Installed" domain="[('provider', '!=', 'manual')]"/>
<group expand="0" string="Group By">
<filter string="Provider" name="provider" domain="[]" context="{'group_by': 'provider'}"/>
<filter string="Environment" name="environment" domain="[]" context="{'group_by': 'environment'}"/>
<filter string="State" name="state" domain="[]" context="{'group_by': 'state'}"/>
</group>
</search>
</field>
@@ -115,15 +115,13 @@ class PaymentWizard(models.TransientModel):
'paypal_email_account': self.paypal_email_account,
'paypal_seller_account': self.paypal_seller_account,
'paypal_pdt_token': self.paypal_pdt_token,
'website_published': True,
'environment': 'prod',
'state': 'enabled',
})
if self.payment_method == 'stripe':
new_env.ref('payment.payment_acquirer_stripe').write({
'stripe_secret_key': self.stripe_secret_key,
'stripe_publishable_key': self.stripe_publishable_key,
'website_published': True,
'environment': 'prod',
'state': 'enabled',
})
if self.payment_method == 'manual':
manual_acquirer = self._get_manual_payment_acquirer(new_env)
@@ -134,8 +132,7 @@ class PaymentWizard(models.TransientModel):
))
manual_acquirer.name = self.manual_name
manual_acquirer.post_msg = self.manual_post_msg
manual_acquirer.website_published = True
manual_acquirer.environment = 'prod'
manual_acquirer.state = 'enabled'
journal = manual_acquirer.journal_id
if journal:
@@ -8,12 +8,8 @@
<field name="provider">adyen</field>
<field name="company_id" ref="base.main_company"/>
<field name="view_template_id" ref="adyen_form"/>
<field name="environment">test</field>
<field name="pre_msg"><![CDATA[
<p>You will be redirected to the Adyen website after clicking on the payment button.</p>]]></field>
<field name="adyen_merchant_account">dummy</field>
<field name="adyen_skin_code">dummy</field>
<field name="adyen_skin_hmac_key">dummy</field>
</record>
</data>
+3 -1
View File
@@ -191,7 +191,9 @@ class AcquirerAdyen(models.Model):
return values
def adyen_get_form_action_url(self):
return self._get_adyen_urls(self.environment)['adyen_form_url']
self.ensure_one()
environment = 'prod' if self.state == 'enabled' else 'test'
return self._get_adyen_urls(environment)['adyen_form_url']
class TxAdyen(models.Model):
+9 -2
View File
@@ -28,6 +28,13 @@ class AdyenCommon(PaymentAcquirerCommon):
self.dsmastercard = (('521234567890 1234', '737', 'user', 'password'))
self.dsvisa = (('4212345678901237', '737', 'user', 'password'))
self.mistercash = (('6703444444444449', None, 'user', 'password'))
self.adyen = self.env.ref('payment.payment_acquirer_adyen')
self.adyen.write({
'adyen_merchant_account': 'dummy',
'adyen_skin_code': 'dummy',
'adyen_skin_hmac_key': 'dummy',
'state': 'test',
})
@odoo.tests.tagged('post_install', '-at_install', 'external', '-standard')
@@ -35,8 +42,8 @@ class AdyenForm(AdyenCommon):
def test_10_adyen_form_render(self):
# be sure not to do stupid things
adyen = self.env.ref('payment.payment_acquirer_adyen')
self.assertEqual(adyen.environment, 'test', 'test without test environment')
adyen = self.adyen
self.assertEqual(adyen.state, 'test', 'test without test environment')
# ----------------------------------------
# Test: button direct rendering
+3 -3
View File
@@ -9,9 +9,9 @@
<field name="arch" type="xml">
<xpath expr='//group[@name="acquirer"]' position='inside'>
<group attrs="{'invisible': [('provider', '!=', 'adyen')]}">
<field name="adyen_merchant_account"/>
<field name="adyen_skin_code"/>
<field name="adyen_skin_hmac_key"/>
<field name="adyen_merchant_account" attrs="{'required':[('provider', '=', 'adyen'), ('state', '!=', 'disabled')]}"/>
<field name="adyen_skin_code" attrs="{'required':[('provider', '=', 'adyen'), ('state', '!=', 'disabled')]}"/>
<field name="adyen_skin_hmac_key" attrs="{'required':[('provider', '=', 'adyen'), ('state', '!=', 'disabled')]}"/>
<a colspan="2" href="https://www.adyen.com/home/payment-services/online-payments" target="_blank">How to configure your Adyen account?</a>
</group>
</xpath>
+1 -1
View File
@@ -40,7 +40,7 @@ class AlipayController(http.Controller):
'partner': alipay.alipay_merchant_partner_id,
'notify_id': post['notify_id']
}
response = requests.post(alipay._get_alipay_urls(alipay.environment), val)
response = requests.post(alipay.alipay_get_form_action_url(), val)
response.raise_for_status()
_logger.info('Validate alipay Notification %s' % response.text)
# After program is executed, the page must print “success” (without quote). If not, Alipay server would keep re-sending notification, until over 24 hour 22 minutes Generally, there are 8 notifications within 25 hours (Frequency: 2m,10m,15m,1h,2h,6h,15h)
@@ -5,14 +5,10 @@
<field name="provider">alipay</field>
<field name="company_id" ref="base.main_company"/>
<field name="view_template_id" ref="alipay_form"/>
<field name="environment">test</field>
<field name="pre_msg" type="html">
<p>
You will be redirected to the Alipay website after clicking on the payment button.
</p>
</field>
<field name="alipay_merchant_partner_id">dummy</field>
<field name="alipay_md5_signature_key">dummy</field>
<field name="alipay_seller_email">dummy</field>
</record>
</odoo>
+3 -1
View File
@@ -110,7 +110,9 @@ class PaymentAcquirer(models.Model):
return values
def alipay_get_form_action_url(self):
return self._get_alipay_urls(self.environment)
self.ensure_one()
environment = 'prod' if self.state == 'enabled' else 'test'
return self._get_alipay_urls(environment)
class PaymentTransaction(models.Model):
+10 -4
View File
@@ -22,10 +22,16 @@ class AlipayTest(PaymentAcquirerCommon):
('active', '=', True),
('active', '=', False)], limit=1)
self.alipay = self.env.ref('payment.payment_acquirer_alipay')
self.alipay.write({
'alipay_merchant_partner_id': 'dummy',
'alipay_md5_signature_key': 'dummy',
'alipay_seller_email': 'dummy',
'state': 'test',
})
def test_10_alipay_form_render(self):
base_url = self.env['ir.config_parameter'].get_param('web.base.url')
self.assertEqual(self.alipay.environment, 'test', 'test without test environment')
self.assertEqual(self.alipay.state, 'test', 'test without test environment')
# ----------------------------------------
# Test: button direct rendering
@@ -73,7 +79,7 @@ class AlipayTest(PaymentAcquirerCommon):
self.assertEqual(form_input.get('value'), form_values[form_input.get('name')], 'alipay: wrong value for input %s: received %s instead of %s' % (form_input.get('name'), form_input.get('value'), form_values[form_input.get('name')]))
def test_11_alipay_form_with_fees(self):
self.assertEqual(self.alipay.environment, 'test', 'test without test environment')
self.assertEqual(self.alipay.state, 'test', 'test without test environment')
# update acquirer: compute fees
self.alipay.write({
@@ -106,7 +112,7 @@ class AlipayTest(PaymentAcquirerCommon):
self._test_20_alipay_form_management()
def _test_20_alipay_form_management(self):
self.assertEqual(self.alipay.environment, 'test', 'test without test environment')
self.assertEqual(self.alipay.state, 'test', 'test without test environment')
# typical data posted by alipay after client has successfully paid
alipay_post_data = {
@@ -192,4 +198,4 @@ class AlipayTest(PaymentAcquirerCommon):
'currency_id': self.currency_yuan.id,
'reference': 'test_ref_2',
'partner_country_id': self.country_france.id
})
})
@@ -9,12 +9,8 @@
<field name="company_id" ref="base.main_company"/>
<field name="view_template_id" ref="authorize_form"/>
<field name="registration_view_template_id" ref="authorize_s2s_form"/>
<field name="environment">test</field>
<field name="pre_msg"><![CDATA[
<p>You will be redirected to the Authorize website after clicking on the payment button.</p>]]></field>
<field name='authorize_login'>dummy</field>
<field name="authorize_transaction_key">dummy</field>
<field name="authorize_signature_key">dummy</field>
</record>
</data>
@@ -30,12 +30,12 @@ class AuthorizeAPI():
:param record acquirer: payment.acquirer account that will be contacted
"""
if acquirer.environment == 'test':
if acquirer.state == 'test':
self.url = 'https://apitest.authorize.net/xml/v1/request.api'
else:
self.url = 'https://api.authorize.net/xml/v1/request.api'
self.environment = acquirer.environment
self.state = acquirer.state
self.name = acquirer.authorize_login
self.transaction_key = acquirer.authorize_transaction_key
@@ -99,7 +99,7 @@ class AuthorizeAPI():
}
}
},
'validationMode': 'liveMode' if self.environment == 'prod' else 'testMode'
'validationMode': 'liveMode' if self.state == 'enabled' else 'testMode'
}
}
+2 -1
View File
@@ -125,7 +125,8 @@ class PaymentAcquirerAuthorize(models.Model):
def authorize_get_form_action_url(self):
self.ensure_one()
return self._get_authorize_urls(self.environment)['authorize_form_url']
environment = 'prod' if self.state == 'enabled' else 'test'
return self._get_authorize_urls(environment)['authorize_form_url']
@api.model
def authorize_s2s_form_process(self, data):
@@ -37,7 +37,7 @@ PaymentForm.include({
console.warn('payment_form: unset partner_id when adding new token; things could go wrong');
}
var AcceptJs = false;
if (formData.acquirer_environment === 'prod') {
if (formData.acquirer_state === 'enabled') {
AcceptJs = 'https://js.authorize.net/v3/AcceptUI.js';
} else {
AcceptJs = 'https://jstest.authorize.net/v3/AcceptUI.js';
@@ -20,6 +20,12 @@ class AuthorizeCommon(PaymentAcquirerCommon):
self.currency_usd = self.env['res.currency'].search([('name', '=', 'USD')], limit=1)[0]
# get the authorize account
self.authorize = self.env.ref('payment.payment_acquirer_authorize')
self.authorize.write({
'authorize_login': 'dummy',
'authorize_transaction_key': 'dummy',
'authorize_signature_key': 'dummy',
'state': 'test',
})
# Be sure to be in 'capture' mode
# self.authorize.auto_confirm = 'confirm_so'
@@ -28,7 +34,7 @@ class AuthorizeCommon(PaymentAcquirerCommon):
class AuthorizeForm(AuthorizeCommon):
def test_10_Authorize_form_render(self):
self.assertEqual(self.authorize.environment, 'test', 'test without test environment')
self.assertEqual(self.authorize.state, 'test', 'test without test environment')
# ----------------------------------------
# Test: button direct rendering
@@ -92,7 +98,7 @@ class AuthorizeForm(AuthorizeCommon):
@mute_logger('odoo.addons.payment_authorize.models.payment', 'ValidationError')
def test_20_authorize_form_management(self):
# be sure not to do stupid thing
self.assertEqual(self.authorize.environment, 'test', 'test without test environment')
self.assertEqual(self.authorize.state, 'test', 'test without test environment')
# typical data posted by authorize after client has successfully paid
authorize_post_data = {
@@ -183,7 +189,7 @@ class AuthorizeS2s(AuthorizeCommon):
def test_30_authorize_s2s(self):
# be sure not to do stupid thing
authorize = self.authorize
self.assertEqual(authorize.environment, 'test', 'test without test environment')
self.assertEqual(authorize.state, 'test', 'test without test environment')
# add credential
# FIXME: put this test in master-nightly on odoo/odoo + create sandbox account
@@ -53,7 +53,7 @@
<template id="authorize_s2s_form">
<input type="hidden" name="data_set" value="/payment/authorize/s2s/create_json_3ds"/>
<input type="hidden" name="acquirer_id" t-att-value="id"/>
<input type="hidden" name="acquirer_environment" t-att-value="acq.environment"/>
<input type="hidden" name="acquirer_state" t-att-value="acq.state"/>
<input type="hidden" name="login_id" t-att-value="acq.sudo().authorize_login"/>
<input type="hidden" name="client_key" t-att-value="acq.sudo().authorize_client_key"/>
<input class="d-none" name="csrf_token" t-att-value="request.csrf_token()"/>
@@ -7,9 +7,9 @@
<field name="arch" type="xml">
<xpath expr='//group[@name="acquirer"]' position='inside'>
<group attrs="{'invisible': [('provider', '!=', 'authorize')]}">
<field name="authorize_login"/>
<field name="authorize_transaction_key" password="True"/>
<field name="authorize_signature_key" password="True"/>
<field name="authorize_login" attrs="{'required':[ ('provider', '=', 'authorize'), ('state', '!=', 'disabled')]}"/>
<field name="authorize_transaction_key" password="True" attrs="{'required':[ ('provider', '=', 'authorize'), ('state', '!=', 'disabled')]}"/>
<field name="authorize_signature_key" password="True" attrs="{'required':[ ('provider', '=', 'authorize'), ('state', '!=', 'disabled')]}"/>
<label for="authorize_client_key"/>
<div>
<field name="authorize_client_key" password="True"/>
@@ -8,11 +8,8 @@
<field name="provider">buckaroo</field>
<field name="company_id" ref="base.main_company"/>
<field name="view_template_id" ref="buckaroo_form"/>
<field name="environment">test</field>
<field name="pre_msg"><![CDATA[
<p>You will be redirected to the Buckaroo website after clicking on the payment button.</p>]]></field>
<field name="brq_websitekey">dummy</field>
<field name="brq_secretkey">dummy</field>
</record>
</data>
+4 -2
View File
@@ -89,7 +89,7 @@ class AcquirerBuckaroo(models.Model):
'Brq_amount': values['amount'],
'Brq_currency': values['currency'] and values['currency'].name or '',
'Brq_invoicenumber': values['reference'],
'brq_test': False if self.environment == 'prod' else True,
'brq_test': True if self.state == 'test' else False,
'Brq_return': urls.url_join(base_url, BuckarooController._return_url),
'Brq_returncancel': urls.url_join(base_url, BuckarooController._cancel_url),
'Brq_returnerror': urls.url_join(base_url, BuckarooController._exception_url),
@@ -101,7 +101,9 @@ class AcquirerBuckaroo(models.Model):
return buckaroo_tx_values
def buckaroo_get_form_action_url(self):
return self._get_buckaroo_urls(self.environment)['buckaroo_form_url']
self.ensure_one()
environment = 'prod' if self.state == 'enabled' else 'test'
return self._get_buckaroo_urls(environment)['buckaroo_form_url']
class TxBuckaroo(models.Model):
@@ -17,7 +17,11 @@ class BuckarooCommon(PaymentAcquirerCommon):
super(BuckarooCommon, self).setUp()
# get the buckaroo account
self.buckaroo = self.env.ref('payment.payment_acquirer_buckaroo')
self.buckaroo.write({
'brq_websitekey': 'dummy',
'brq_secretkey': 'dummy',
'state': 'test',
})
@odoo.tests.tagged('post_install', '-at_install', 'external', '-standard')
class BuckarooForm(BuckarooCommon):
@@ -25,7 +29,7 @@ class BuckarooForm(BuckarooCommon):
def test_10_Buckaroo_form_render(self):
base_url = self.env['ir.config_parameter'].get_param('web.base.url')
# be sure not to do stupid things
self.assertEqual(self.buckaroo.environment, 'test', 'test without test environment')
self.assertEqual(self.buckaroo.state, 'test', 'test without test environment')
# ----------------------------------------
# Test: button direct rendering
@@ -101,7 +105,7 @@ class BuckarooForm(BuckarooCommon):
@mute_logger('odoo.addons.payment_buckaroo.models.payment', 'ValidationError')
def test_20_buckaroo_form_management(self):
# be sure not to do stupid thing
self.assertEqual(self.buckaroo.environment, 'test', 'test without test environment')
self.assertEqual(self.buckaroo.state, 'test', 'test without test environment')
# typical data posted by buckaroo after client has successfully paid
buckaroo_post_data = {
@@ -9,8 +9,8 @@
<field name="arch" type="xml">
<xpath expr='//group[@name="acquirer"]' position='inside'>
<group attrs="{'invisible': [('provider', '!=', 'buckaroo')]}">
<field name="brq_websitekey"/>
<field name="brq_secretkey"/>
<field name="brq_websitekey" attrs="{'required':[ ('provider', '=', 'buckaroo'), ('state', '!=', 'disabled')]}"/>
<field name="brq_secretkey" attrs="{'required':[ ('provider', '=', 'buckaroo'), ('state', '!=', 'disabled')]}"/>
</group>
</xpath>
</field>
@@ -4,19 +4,13 @@
<record id="payment.payment_acquirer_ingenico" model="payment.acquirer">
<field name="name">Ingenico</field>
<field name="image_128" type="base64" file="payment_ogone/static/src/img/ogone_icon.png"/>
<field name="image_128" type="base64" file="payment_ingenico/static/src/img/ingenico_icon.png"/>
<field name="provider">ogone</field>
<field name="company_id" ref="base.main_company"/>
<field name="view_template_id" ref="ogone_form"/>
<field name="registration_view_template_id" ref="ogone_s2s_form"/>
<field name="environment">test</field>
<field name="pre_msg"><![CDATA[
<p>You will be redirected to the Ingenico website after clicking on the payment button.</p>]]></field>
<field name='ogone_pspid'>dummy</field>
<field name='ogone_userid'>dummy</field>
<field name='ogone_password'>dummy</field>
<field name="ogone_shakey_in">dummy</field>
<field name="ogone_shakey_out">dummy</field>
</record>
</data>
+7 -5
View File
@@ -184,7 +184,9 @@ class PaymentAcquirerOgone(models.Model):
return ogone_tx_values
def ogone_get_form_action_url(self):
return self._get_ogone_urls(self.environment)['ogone_standard_order_url']
self.ensure_one()
environment = 'prod' if self.state == 'enabled' else 'test'
return self._get_ogone_urls(environment)['ogone_standard_order_url']
def ogone_s2s_form_validate(self, data):
error = dict()
@@ -380,7 +382,7 @@ class PaymentTxOgone(models.Model):
data['SHASIGN'] = self.acquirer_id._ogone_generate_shasign('in', data)
direct_order_url = 'https://secure.ogone.com/ncol/%s/orderdirect.asp' % (self.acquirer_id.environment)
direct_order_url = 'https://secure.ogone.com/ncol/%s/orderdirect.asp' % ('prod' if self.acquirer_id.state == 'enabled' else 'test')
logged_data = data.copy()
logged_data.pop('PSWD')
@@ -414,7 +416,7 @@ class PaymentTxOgone(models.Model):
}
data['SHASIGN'] = self.acquirer_id._ogone_generate_shasign('in', data)
direct_order_url = 'https://secure.ogone.com/ncol/%s/maintenancedirect.asp' % (self.acquirer_id.environment)
direct_order_url = 'https://secure.ogone.com/ncol/%s/maintenancedirect.asp' % ('prod' if self.acquirer_id.state == 'enabled' else 'test')
logged_data = data.copy()
logged_data.pop('PSWD')
@@ -506,7 +508,7 @@ class PaymentTxOgone(models.Model):
'PSWD': account.ogone_password,
}
query_direct_url = 'https://secure.ogone.com/ncol/%s/querydirect.asp' % (self.acquirer_id.environment)
query_direct_url = 'https://secure.ogone.com/ncol/%s/querydirect.asp' % ('prod' if self.acquirer_id.state == 'enabled' else 'test')
logged_data = data.copy()
logged_data.pop('PSWD')
@@ -553,7 +555,7 @@ class PaymentToken(models.Model):
'PROCESS_MODE': 'CHECKANDPROCESS',
}
url = 'https://secure.ogone.com/ncol/%s/AFU_agree.asp' % (acquirer.environment,)
url = 'https://secure.ogone.com/ncol/%s/AFU_agree.asp' % ('prod' if self.acquirer_id.state == 'enabled' else 'test')
_logger.info("ogone_create: Creating new alias %s via url %s", alias, url)
result = requests.post(url, data=data).content
+12 -4
View File
@@ -17,11 +17,19 @@ class OgonePayment(PaymentAcquirerCommon):
super(OgonePayment, self).setUp()
self.ogone = self.env.ref('payment.payment_acquirer_ogone')
self.ogone.write({
'ogone_pspid': 'dummy',
'ogone_userid': 'dummy',
'ogone_password': 'dummy',
'ogone_shakey_in': 'dummy',
'ogone_shakey_out': 'dummy',
'state': 'test',
})
def test_10_ogone_form_render(self):
base_url = self.env['ir.config_parameter'].get_param('web.base.url')
# be sure not to do stupid thing
self.assertEqual(self.ogone.environment, 'test', 'test without test environment')
self.assertEqual(self.ogone.state, 'test', 'test without test environment')
# ----------------------------------------
# Test: button direct rendering + shasign
@@ -92,13 +100,13 @@ class OgonePayment(PaymentAcquirerCommon):
self.assertEqual(
form_input.get('value'),
form_values[form_input.get('name')],
'ogone: wrong value for form input %s: received %s instead of %s' % (form_input.get('name'), form_input.get('value'), form_values[form_input.get('name')])
'ingenico: wrong value for form input %s: received %s instead of %s' % (form_input.get('name'), form_input.get('value'), form_values[form_input.get('name')])
)
@mute_logger('odoo.addons.payment_ingenico.models.payment', 'ValidationError')
def test_20_ogone_form_management(self):
# be sure not to do stupid thing
self.assertEqual(self.ogone.environment, 'test', 'test without test environment')
self.assertEqual(self.ogone.state, 'test', 'test without test environment')
# typical data posted by ogone after client has successfully paid
ogone_post_data = {
@@ -161,7 +169,7 @@ class OgonePayment(PaymentAcquirerCommon):
def test_30_ogone_s2s(self):
test_ref = 'test_ref_%.15f' % time.time()
# be sure not to do stupid thing
self.assertEqual(self.ogone.environment, 'test', 'test without test environment')
self.assertEqual(self.ogone.state, 'test', 'test without test environment')
# create a new draft tx
tx = self.env['payment.transaction'].create({
@@ -9,11 +9,11 @@
<field name="arch" type="xml">
<xpath expr='//group[@name="acquirer"]' position='inside'>
<group attrs="{'invisible': [('provider', '!=', 'ogone')]}">
<field name="ogone_pspid"/>
<field name="ogone_userid"/>
<field name="ogone_password"/>
<field name="ogone_shakey_in"/>
<field name="ogone_shakey_out"/>
<field name="ogone_pspid" attrs="{'required':[ ('provider', '=', 'ogone'), ('state', '!=', 'disabled')]}"/>
<field name="ogone_userid" attrs="{'required':[ ('provider', '=', 'ogone'), ('state', '!=', 'disabled')]}"/>
<field name="ogone_password" attrs="{'required':[ ('provider', '=', 'ogone'), ('state', '!=', 'disabled')]}"/>
<field name="ogone_shakey_in" attrs="{'required':[ ('provider', '=', 'ogone'), ('state', '!=', 'disabled')]}"/>
<field name="ogone_shakey_out" attrs="{'required':[ ('provider', '=', 'ogone'), ('state', '!=', 'disabled')]}"/>
<field name="ogone_alias_usage"/>
</group>
</xpath>
+1 -1
View File
@@ -60,7 +60,7 @@ class PaypalController(http.Controller):
tx = None
if reference:
tx = request.env['payment.transaction'].search([('reference', '=', reference)])
paypal_urls = request.env['payment.acquirer']._get_paypal_urls(tx and tx.acquirer_id.environment or 'prod')
paypal_urls = tx.acquirer_id.paypal_get_form_action_url()
pdt_request = bool(post.get('amt')) # check for spefific pdt param
if pdt_request:
# this means we are in PDT instead of DPN like before
@@ -8,7 +8,6 @@
<field name="provider">paypal</field>
<field name="company_id" ref="base.main_company"/>
<field name="view_template_id" ref="paypal_form"/>
<field name="environment">test</field>
<field name="pre_msg"><![CDATA[
<p>You will be redirected to the Paypal website after clicking on the payment button.</p>]]></field>
</record>
+4 -2
View File
@@ -20,7 +20,7 @@ class AcquirerPaypal(models.Model):
_inherit = 'payment.acquirer'
provider = fields.Selection(selection_add=[('paypal', 'Paypal')])
paypal_email_account = fields.Char('Email', required_if_provider='paypal', groups='base.group_user', default=lambda self: self.env.user.email or 'dummy')
paypal_email_account = fields.Char('Email', required_if_provider='paypal', groups='base.group_user', default=lambda self: self.env.user.email or '')
paypal_seller_account = fields.Char(
'Merchant Account ID', groups='base.group_user',
help='The Merchant ID is used to ensure communications coming from Paypal are valid and secured.')
@@ -110,7 +110,9 @@ class AcquirerPaypal(models.Model):
return paypal_tx_values
def paypal_get_form_action_url(self):
return self._get_paypal_urls(self.environment)['paypal_form_url']
self.ensure_one()
environment = 'prod' if self.state == 'enabled' else 'test'
return self._get_paypal_urls(environment)['paypal_form_url']
class TxPaypal(models.Model):
+7 -3
View File
@@ -18,6 +18,10 @@ class PaypalCommon(PaymentAcquirerCommon):
super(PaypalCommon, self).setUp()
self.paypal = self.env.ref('payment.payment_acquirer_paypal')
self.paypal.write({
'paypal_email_account': 'dummy',
'state': 'test',
})
# some CC
self.amex = (('378282246310005', '123'), ('371449635398431', '123'))
@@ -39,7 +43,7 @@ class PaypalForm(PaypalCommon):
base_url = self.env['ir.config_parameter'].get_param('web.base.url')
# be sure not to do stupid things
self.paypal.write({'paypal_email_account': 'tde+paypal-facilitator@odoo.com', 'fees_active': False})
self.assertEqual(self.paypal.environment, 'test', 'test without test environment')
self.assertEqual(self.paypal.state, 'test', 'test without test environment')
# ----------------------------------------
# Test: button direct rendering
@@ -88,7 +92,7 @@ class PaypalForm(PaypalCommon):
def test_11_paypal_form_with_fees(self):
# be sure not to do stupid things
self.assertEqual(self.paypal.environment, 'test', 'test without test environment')
self.assertEqual(self.paypal.state, 'test', 'test without test environment')
# update acquirer: compute fees
self.paypal.write({
@@ -120,7 +124,7 @@ class PaypalForm(PaypalCommon):
@mute_logger('odoo.addons.payment_paypal.models.payment', 'ValidationError')
def test_20_paypal_form_management(self):
# be sure not to do stupid things
self.assertEqual(self.paypal.environment, 'test', 'test without test environment')
self.assertEqual(self.paypal.state, 'test', 'test without test environment')
# typical data posted by paypal after client has successfully paid
paypal_post_data = {
@@ -9,10 +9,10 @@
<field name="arch" type="xml">
<xpath expr='//group[@name="acquirer"]' position='inside'>
<group attrs="{'invisible': [('provider', '!=', 'paypal')]}">
<field name="paypal_email_account"/>
<field name="paypal_seller_account"/>
<field name="paypal_pdt_token"/>
<field name="paypal_use_ipn"/>
<field name="paypal_email_account" attrs="{'required':[ ('provider', '=', 'paypal'), ('state', '!=', 'disabled')]}"/>
<field name="paypal_seller_account" attrs="{'required':[ ('provider', '=', 'paypal'), ('state', '!=', 'disabled')]}"/>
<field name="paypal_pdt_token" attrs="{'required':[ ('provider', '=', 'paypal'), ('state', '!=', 'disabled')]}"/>
<field name="paypal_use_ipn" attrs="{'required':[ ('provider', '=', 'paypal'), ('state', '!=', 'disabled')]}"/>
<a colspan="2" href="https://www.odoo.com/documentation/user/online/ecommerce/shopper_experience/paypal.html" target="_blank">How to configure your paypal account?</a>
</group>
</xpath>
@@ -5,13 +5,9 @@
<field name="provider">payulatam</field>
<field name="company_id" ref="base.main_company"/>
<field name="view_template_id" ref="payulatam_form"/>
<field name="environment">test</field>
<field name="pre_msg" type="html">
<p>You will be redirected to the PayU Latam website after clicking on the payment button.</p>
</field>
<field name="payulatam_account_id">dummy</field>
<field name="payulatam_merchant_id">dummy</field>
<field name="payulatam_api_key">dummy</field>
</record>
</data>
</odoo>
+2 -1
View File
@@ -66,7 +66,8 @@ class PaymentAcquirerPayulatam(models.Model):
def payulatam_get_form_action_url(self):
self.ensure_one()
return self._get_payulatam_urls(self.environment)
environment = 'prod' if self.state == 'enabled' else 'test'
return self._get_payulatam_urls(environment)
class PaymentTransactionPayulatam(models.Model):
@@ -12,6 +12,12 @@ class PayUlatamCommon(PaymentAcquirerCommon):
def setUp(self):
super(PayUlatamCommon, self).setUp()
self.payulatam = self.env.ref('payment.payment_acquirer_payulatam')
self.payulatam.write({
'payulatam_account_id': 'dummy',
'payulatam_merchant_id': 'dummy',
'payulatam_api_key': 'dummy',
'state': 'test',
})
@tagged('post_install', '-at_install', 'external', '-standard')
@@ -19,7 +25,7 @@ class PayUlatamForm(PayUlatamCommon):
def test_10_payulatam_form_render(self):
base_url = self.env['ir.config_parameter'].get_param('web.base.url')
self.assertEqual(self.payulatam.environment, 'test', 'test without test environment')
self.assertEqual(self.payulatam.state, 'test', 'test without test environment')
self.payulatam.write({
'payulatam_merchant_id': 'dummy',
'payulatam_account_id': 'dummy',
@@ -71,7 +77,7 @@ class PayUlatamForm(PayUlatamCommon):
)
def test_20_payulatam_form_management(self):
self.assertEqual(self.payulatam.environment, 'test', 'test without test environment')
self.assertEqual(self.payulatam.state, 'test', 'test without test environment')
# typical data posted by payulatam after client has successfully paid
payulatam_post_data = {
@@ -7,12 +7,9 @@
<field name="provider">payumoney</field>
<field name="company_id" ref="base.main_company"/>
<field name="view_template_id" ref="payumoney_form"/>
<field name="environment">test</field>
<field name="pre_msg"><![CDATA[
<p>You will be redirected to the PayUmoney website after clicking on the payment button.</p>]]>
</field>
<field name="payumoney_merchant_key">dummy</field>
<field name="payumoney_merchant_salt">dummy</field>
</record>
</data>
</odoo>
+2 -1
View File
@@ -75,7 +75,8 @@ class PaymentAcquirerPayumoney(models.Model):
def payumoney_get_form_action_url(self):
self.ensure_one()
return self._get_payumoney_urls(self.environment)['payumoney_form_url']
environment = 'prod' if self.state == 'enabled' else 'test'
return self._get_payumoney_urls(environment)['payumoney_form_url']
class PaymentTransactionPayumoney(models.Model):
@@ -7,8 +7,8 @@
<field name="arch" type="xml">
<xpath expr='//group[@name="acquirer"]' position='inside'>
<group attrs="{'invisible': [('provider', '!=', 'payumoney')]}">
<field name="payumoney_merchant_key"/>
<field name="payumoney_merchant_salt" password="True"/>
<field name="payumoney_merchant_key" attrs="{'required':[ ('provider', '=', 'payumoney'), ('state', '!=', 'disabled')]}"/>
<field name="payumoney_merchant_salt" attrs="{'required':[ ('provider', '=', 'payumoney'), ('state', '!=', 'disabled')]}" password="True"/>
</group>
</xpath>
</field>
@@ -8,11 +8,8 @@
<field name="provider">sips</field>
<field name="company_id" ref="base.main_company"/>
<field name="view_template_id" ref="payment_sips.sips_form"/>
<field name="environment">test</field>
<field name="pre_msg"><![CDATA[
<p>You will be redirected to the Sips website after clicking on payment button.</p>]]></field>
<field name="sips_merchant_id">****</field>
<field name="sips_secret">****</field>
</record>
</data>
+3 -3
View File
@@ -60,7 +60,7 @@ class AcquirerSips(models.Model):
# Test key provided by Worldine
key = u'002001000000001_KEY1'
if self.environment == 'prod':
if self.state == 'enabled':
key = getattr(self, 'sips_secret')
shasign = sha256((data + key).encode('utf-8'))
@@ -74,7 +74,7 @@ class AcquirerSips(models.Model):
if not currency_code:
raise ValidationError(_('Currency not supported by Wordline'))
amount = int(values['amount'] * 100)
if self.environment == 'prod':
if self.state == 'enabled':
# For production environment, key version 2 is required
merchant_id = getattr(self, 'sips_merchant_id')
key_version = self.env['ir.config_parameter'].sudo().get_param('sips.key_version', '2')
@@ -108,7 +108,7 @@ class AcquirerSips(models.Model):
def sips_get_form_action_url(self):
self.ensure_one()
return self.environment == 'prod' and self.sips_prod_url or self.sips_test_url
return self.state == 'enabled' and self.sips_prod_url or self.sips_test_url
class TxSips(models.Model):
+5 -5
View File
@@ -9,11 +9,11 @@
<field name="arch" type="xml">
<xpath expr='//group[@name="acquirer"]' position='inside'>
<group attrs="{'invisible': [('provider', '!=', 'sips')]}">
<field name="sips_merchant_id"/>
<field name="sips_secret"/>
<field name="sips_test_url"/>
<field name="sips_prod_url"/>
<field name="sips_version"/>
<field name="sips_merchant_id" attrs="{'required':[ ('provider', '=', 'sips'), ('state', '!=', 'disabled')]}"/>
<field name="sips_secret" attrs="{'required':[ ('provider', '=', 'sips'), ('state', '!=', 'disabled')]}"/>
<field name="sips_test_url" attrs="{'required':[ ('provider', '=', 'sips'), ('state', '!=', 'disabled')]}"/>
<field name="sips_prod_url" attrs="{'required':[ ('provider', '=', 'sips'), ('state', '!=', 'disabled')]}"/>
<field name="sips_version" attrs="{'required':[ ('provider', '=', 'sips'), ('state', '!=', 'disabled')]}"/>
</group>
</xpath>
</field>
@@ -8,11 +8,8 @@
<field name="company_id" ref="base.main_company"/>
<field name="view_template_id" ref="stripe_form"/>
<field name="registration_view_template_id" ref="stripe_s2s_form"/>
<field name="environment">test</field>
<field name="pre_msg"><![CDATA[
<p>You will be prompted with Stripe Payment page for payment information.</p>]]></field>
<field name="stripe_secret_key">dummy</field>
<field name="stripe_publishable_key">dummy</field>
</record>
</data>
</odoo>
+8 -3
View File
@@ -10,13 +10,18 @@ class StripeCommon(PaymentAcquirerCommon):
def setUp(self):
super(StripeCommon, self).setUp()
self.stripe = self.env.ref('payment.payment_acquirer_stripe')
self.stripe.write({
'stripe_secret_key': 'dummy',
'stripe_publishable_key': 'dummy',
'state': 'test',
})
@odoo.tests.tagged('post_install', '-at_install', '-standard', 'external')
class StripeTest(StripeCommon):
def test_10_stripe_s2s(self):
self.assertEqual(self.stripe.environment, 'test', 'test without test environment')
self.assertEqual(self.stripe.state, 'test', 'test without test environment')
# Add Stripe credentials
self.stripe.write({
@@ -51,7 +56,7 @@ class StripeTest(StripeCommon):
self.assertEqual(tx.state, 'done', 'Stripe: Transcation has been discarded.')
def test_20_stripe_form_render(self):
self.assertEqual(self.stripe.environment, 'test', 'test without test environment')
self.assertEqual(self.stripe.state, 'test', 'test without test environment')
# ----------------------------------------
# Test: button direct rendering
@@ -63,7 +68,7 @@ class StripeTest(StripeCommon):
self.assertIn(self.buyer_values.get('partner_email'), res, 'Stripe: email input not found in rendered template')
def test_30_stripe_form_management(self):
self.assertEqual(self.stripe.environment, 'test', 'test without test environment')
self.assertEqual(self.stripe.state, 'test', 'test without test environment')
# typical data posted by Stripe after client has successfully paid
stripe_post_data = {
@@ -7,8 +7,8 @@
<field name="arch" type="xml">
<xpath expr='//group[@name="acquirer"]' position='inside'>
<group attrs="{'invisible': [('provider', '!=', 'stripe')]}">
<field name="stripe_secret_key" password="True"/>
<field name="stripe_publishable_key" password="True"/>
<field name="stripe_secret_key" attrs="{'required':[ ('provider', '=', 'stripe'), ('state', '!=', 'disabled')]}" password="True"/>
<field name="stripe_publishable_key" attrs="{'required':[ ('provider', '=', 'stripe'), ('state', '!=', 'disabled')]}" password="True"/>
</group>
</xpath>
<xpath expr='//group[@name="acquirer_config"]' position='after'>
@@ -6,10 +6,9 @@
<field name="name">Wire Transfer</field>
<field name="image_128" type="base64" file="payment_transfer/static/src/img/transfer_icon.png"/>
<field name="provider">transfer</field>
<field name="state">enabled</field>
<field name="company_id" ref="base.main_company"/>
<field name="view_template_id" ref="transfer_form"/>
<field name="environment">test</field>
<field name="website_published" eval="True"/>
<field name="pre_msg"><![CDATA[
<p>Transfer information will be provided when clicking 'Pay Now'.</p>]]>
</field>
+1 -1
View File
@@ -175,7 +175,7 @@ class CustomerPortal(CustomerPortal):
if order_sudo.has_to_be_paid():
domain = expression.AND([
['&', ('website_published', '=', True), ('company_id', '=', order_sudo.company_id.id)],
['&', ('state', 'in', ['enabled', 'test']), ('company_id', '=', order_sudo.company_id.id)],
['|', ('country_ids', '=', False), ('country_ids', 'in', [order_sudo.partner_id.country_id.id])]
])
acquirers = request.env['payment.acquirer'].sudo().search(domain)
+1 -1
View File
@@ -839,7 +839,7 @@ class WebsiteSale(http.Controller):
)
domain = expression.AND([
['&', ('website_published', '=', True), ('company_id', '=', order.company_id.id)],
['&', ('state', 'in', ['enabled', 'test']), ('company_id', '=', order.company_id.id)],
['|', ('website_id', '=', False), ('website_id', '=', request.website.id)],
['|', ('country_ids', '=', False), ('country_ids', 'in', [order.partner_id.country_id.id])]
])