Commit a4158284 authored by Rafael Monnerat's avatar Rafael Monnerat

slapos_subscription_request: Prefer use the language from the Subscription Request

   ... rather them the user's language
parent a080668b
......@@ -15,10 +15,12 @@ portal = context.getPortalObject()
sender = context.getSourceSectionValue(portal_type="Person")
recipient = context.getDestinationSectionValue(portal_type="Person")
language = context.getLanguage(recipient.getLanguage())
# Get message from catalog
notification_reference = 'subscription_request-instance-is-ready'
notification_message = portal.portal_notifications.getDocumentValue(
reference=notification_reference, language=recipient.getLanguage())
reference=notification_reference, language=language)
if notification_message is None:
raise ValueError, 'Unable to found Notification Message with reference "%s".' % notification_reference
......
......@@ -11,9 +11,11 @@ recipient = context.getDestinationSectionValue(portal_type="Person")
# Get message from catalog
notification_reference = 'subscription_request-payment-is-ready'
language = context.getLanguage(recipient.getLanguage())
# This implies the language to notify.
notification_message = portal.portal_notifications.getDocumentValue(
reference=notification_reference, language=recipient.getLanguage())
reference=notification_reference, language=language)
if notification_message is None:
raise ValueError, 'Unable to found Notification Message with reference "%s".' % notification_reference
......
......@@ -7,10 +7,12 @@ notification_type = "without-password"
if password:
notification_type = "with-password"
language = context.getLanguage(recipient.getLanguage())
#Get message from catalog
notification_reference = 'subscription_request-confirmation-%s' % notification_type
notification_message = portal.portal_notifications.getDocumentValue(reference=notification_reference,
language=recipient.getLanguage())
language=language)
if notification_message is None:
raise ValueError, 'Unable to found Notification Message with reference "%s".' % notification_reference
......@@ -36,7 +38,7 @@ else:
mail_text = notification_message.asText(
substitution_method_parameter_dict={'mapping_dict':notification_mapping_dict})
#Send email
# Send email
portal.portal_notifications.sendMessage(
sender=sender,
recipient=recipient,
......
......@@ -34,8 +34,20 @@ class TestSlapOSSubscriptionChineseScenario(TestSlapOSSubscriptionScenarioMixin)
self.expected_reservation_quantity_tax = 0
self.expected_reservation_tax = 0
self.expected_price_currency = "currency_module/CNY"
self.normal_user = None
self.expected_notification_language = "zh"
self.login()
self.createNotificationMessage("subscription_request-confirmation-with-password", language="zh",
text_content='CHINESE! ${name} ${login_name} ${login_password}')
self.createNotificationMessage("subscription_request-confirmation-without-password", language="zh",
text_content='CHINESE! ${name} ${login_name}')
self.createNotificationMessage("subscription_request-instance-is-ready", language="zh",
text_content='CHINESE! ${name} ${subscription_title} ${hosting_subscription_relative_url}')
self.createNotificationMessage("subscription_request-payment-is-ready", language="zh",
text_content='CHINESE! ${name} ${subscription_title} ${payment_relative_relative_url}')
def _simulatePaymentTransaction_getVADSUrlDict(self):
script_name = 'PaymentTransaction_getVADSUrlDict'
if script_name in self.portal.portal_skins.custom.objectIds():
......@@ -69,6 +81,7 @@ return dict(vads_url_already_registered="%s/already_registered" % (payment_trans
self._simulatePaymentTransaction_getVADSUrlDict()
try:
self.portal.portal_secure_payments.slapos_wechat_test.setWechatMode("UNITTEST")
self.logout()
return self.web_site.hateoas.SubscriptionRequestModule_requestSubscription(**kw)
finally:
self._dropPaymentTransaction_getVADSUrlDict()
......@@ -170,3 +183,11 @@ return dict(vads_url_already_registered="%s/already_registered" % (payment_trans
def test_two_subscription_scenario(self):
self._test_two_subscription_scenario(amount=1)
def test_subscription_scenario_with_existing_user(self):
self._test_subscription_scenario_with_existing_user(amount=1, language="zh")
def test_subscription_scenario_with_existing_english_user(self):
# Messages are in chinese, when subscribed via chinese website. Even if the english language is
# english
self._test_subscription_scenario_with_existing_user(amount=1, language="en")
......@@ -100,25 +100,28 @@
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary>
</list>
<none/>
</tuple>
<dictionary>
<item>
<key> <string>_log</string> </key>
<value>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
......@@ -26,6 +26,7 @@ from DateTime import DateTime
class TestSlapOSSubscriptionScenarioMixin(DefaultScenarioMixin):
def afterSetUp(self):
self.normal_user = None
self.expected_individual_price_without_tax = 162.50
self.expected_individual_price_with_tax = 195.00
self.expected_reservation_fee = 25.00
......@@ -33,6 +34,7 @@ class TestSlapOSSubscriptionScenarioMixin(DefaultScenarioMixin):
self.expected_reservation_quantity_tax = 20.833333333333333
self.expected_reservation_tax = 4.166666666666667
self.expected_price_currency = "currency_module/EUR"
self.expected_notification_language = "en"
self.login()
self.portal.portal_alarms.slapos_subscription_request_process_draft.setEnabled(True)
......@@ -52,7 +54,9 @@ class TestSlapOSSubscriptionScenarioMixin(DefaultScenarioMixin):
# One user to create computers to deploy the subscription
self.createAdminUser()
self.cleanUpNotificationMessage()
self.tic()
self.createNotificationMessage("subscription_request-confirmation-with-password")
self.createNotificationMessage("subscription_request-confirmation-without-password",
text_content='${name} ${login_name}')
......@@ -74,7 +78,7 @@ class TestSlapOSSubscriptionScenarioMixin(DefaultScenarioMixin):
def cleanUpSubscriptionRequest(self):
for subscription_request in self.portal.portal_catalog(
portal_type="Subscription Request",
simulation_state=["draft", "planned", "ordered"],
simulation_state=["draft", "planned", "ordered", "confirmed"],
title="Test Subscription Request %"):
if subscription_request.getSimulationState() == "draft":
subscription_request.cancel()
......@@ -82,19 +86,31 @@ class TestSlapOSSubscriptionScenarioMixin(DefaultScenarioMixin):
subscription_request.order()
if subscription_request.getSimulationState() == "ordered":
subscription_request.confirm()
if subscription_request.getSimulationState() == "confirmed":
subscription_request.start()
if subscription_request.getSimulationState() == "started":
subscription_request.stop()
def cleanUpNotificationMessage(self):
for notification_message in self.portal.portal_catalog(
portal_type="Notification Message",
validation_state=["validated"],
title="TestSubscriptionSkins %"):
if str(notification_message.getVersion("")) == "999":
notification_message.invalidate()
def createNotificationMessage(self, reference,
content_type='text/html', text_content='${name} ${login_name} ${login_password}'):
content_type='text/html', language="en", text_content='${name} ${login_name} ${login_password}'):
notification_message = self.portal.notification_message_module.newContent(
portal_type="Notification Message",
text_content_substitution_mapping_method_id='NotificationMessage_getSubstitutionMappingDictFromArgument',
title='TestSubscriptionSkins Notification Message %s' % reference,
title='TestSubscriptionSkins Notification Message %s %s' % (language, reference),
text_content=text_content,
content_type=content_type,
reference=reference,
version=999,
language="en"
language=language
)
notification_message.validate()
return notification_message
......@@ -129,6 +145,37 @@ class TestSlapOSSubscriptionScenarioMixin(DefaultScenarioMixin):
else:
self.admin_user = admin_user_login.getParentValue()
def createNormalUser(self, email, name, language):
""" Create a Normal user """
normal_user_login = self.portal.portal_catalog.getResultValue(
portal_type="ERP5 Login",
reference=email,
validation_state="validated"
)
if normal_user_login is None:
normal_user = self.portal.person_module.template_member.\
Base_createCloneDocument(batch_mode=1)
normal_user.newContent(
portal_type="ERP5 Login",
reference=email).validate()
normal_user.edit(
first_name=name,
reference=email,
default_email_text=email,
)
for assignment in normal_user.contentValues(portal_type="Assignment"):
assignment.open()
normal_user.validate()
self.normal_user = normal_user
else:
self.normal_user = normal_user_login.getParentValue()
self.normal_user.setLanguage(language)
def createSubscriptionCondition(self, slave=False):
self.subscription_condition = self.portal.subscription_condition_module.newContent(
portal_type="Subscription Condition",
......@@ -349,13 +396,21 @@ class TestSlapOSSubscriptionScenarioMixin(DefaultScenarioMixin):
def checkEmailNotification(self, subscription_request,
notification_message="subscription_request-confirmation-with-password"):
expected_amount = 1
if self.normal_user is not None:
# If user already exists we do not expect to send an email
expected_amount = 0
mail_message_list = [i for i in subscription_request.getFollowUpRelatedValueList(
portal_type="Mail Message") if notification_message in i.getTitle()]
self.assertEqual(len(mail_message_list), 1)
self.assertEqual(len(mail_message_list), expected_amount)
if not expected_amount:
return
mail_message = mail_message_list[0]
self.assertEqual(
"TestSubscriptionSkins Notification Message %s" % notification_message,
"TestSubscriptionSkins Notification Message %s %s" % (self.expected_notification_language, notification_message),
mail_message.getTitle())
self.assertTrue(subscription_request.getDefaultEmailText() in \
mail_message.getTextContent())
......@@ -370,7 +425,7 @@ class TestSlapOSSubscriptionScenarioMixin(DefaultScenarioMixin):
self.assertEqual(len(mail_message_list), 1)
mail_message = mail_message_list[0]
self.assertEqual(
"TestSubscriptionSkins Notification Message %s" % notification_message,
"TestSubscriptionSkins Notification Message %s %s" % (self.expected_notification_language, notification_message),
mail_message.getTitle())
payment = subscription_request.SubscriptionRequest_verifyPaymentBalanceIsReady()
self.assertEqual(payment.getSimulationState(), 'started')
......@@ -388,7 +443,7 @@ class TestSlapOSSubscriptionScenarioMixin(DefaultScenarioMixin):
self.assertEqual(len(mail_message_list), 1)
mail_message = mail_message_list[0]
self.assertEqual(
"TestSubscriptionSkins Notification Message %s" % notification_message,
"TestSubscriptionSkins Notification Message %s %s" % (self.expected_notification_language, notification_message),
mail_message.getTitle())
hosting_subscription = subscription_request.getAggregateValue()
self.assertEqual(hosting_subscription.getSlapState(), 'start_requested')
......@@ -514,6 +569,7 @@ class TestSlapOSSubscriptionScenarioMixin(DefaultScenarioMixin):
amount=amount,
name=name,
default_email_text=default_email_text,
confirmation_required=False,
REQUEST=self.portal.REQUEST)
self.login()
......@@ -825,7 +881,6 @@ class TestSlapOSSubscriptionScenarioMixin(DefaultScenarioMixin):
self.checkStartedSubscriptionRequest(subscription_request,
default_email_text, self.subscription_condition)
def _test_subscription_scenario(self, amount=1):
""" The admin creates an computer, user can request instances on it"""
......@@ -841,8 +896,32 @@ class TestSlapOSSubscriptionScenarioMixin(DefaultScenarioMixin):
self.checkSubscriptionDeploymentAndSimulation(
default_email_text, subscription_server)
def _test_subscription_scenario_with_existing_user(self, amount=1, language=None):
""" The admin creates an computer, user can request instances on it"""
# Call as anonymous... check response?
default_email_text = "abc%s@nexedi.com" % self.new_id
name="ABC %s" % self.new_id
self.login()
self.createNormalUser(default_email_text, name, language)
self.tic()
subscription_server = self.createPublicServerForAdminUser()
self.requestAndCheckHostingSubscription(
amount, name, default_email_text)
self.checkSubscriptionDeploymentAndSimulation(
default_email_text, subscription_server)
subscription_request = self.getSubscriptionRequest(
default_email_text, self.subscription_condition)
self.assertEqual(self.normal_user,
subscription_request.getDestinationSectionValue())
def _test_two_subscription_scenario(self, amount=1):
""" The admin creates an computer, user can request instances on it"""
......@@ -954,7 +1033,6 @@ class TestSlapOSSubscriptionScenarioMixin(DefaultScenarioMixin):
default_email_text, subscription_server)
class TestSlapOSSubscriptionScenario(TestSlapOSSubscriptionScenarioMixin):
def test_subscription_scenario_with_single_vm(self):
......@@ -967,4 +1045,12 @@ class TestSlapOSSubscriptionScenario(TestSlapOSSubscriptionScenarioMixin):
self._test_subscription_scenario(amount=3)
def test_two_subscription_scenario(self):
self._test_two_subscription_scenario(amount=1)
\ No newline at end of file
self._test_two_subscription_scenario(amount=1)
def test_subscription_scenario_with_existing_user(self):
self._test_subscription_scenario_with_existing_user(amount=1, language="en")
def test_subscription_scenario_with_existing_chinese_user(self):
# Messages are in english, when subscribed via english website. Even if the chinese language is
# defined at user level.
self._test_subscription_scenario_with_existing_user(amount=1, language="zh")
......@@ -100,25 +100,28 @@
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary>
</list>
<none/>
</tuple>
<dictionary>
<item>
<key> <string>_log</string> </key>
<value>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment