diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/survey/tests/test_survey_invite.py | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/survey/tests/test_survey_invite.py')
| -rw-r--r-- | addons/survey/tests/test_survey_invite.py | 223 |
1 files changed, 223 insertions, 0 deletions
diff --git a/addons/survey/tests/test_survey_invite.py b/addons/survey/tests/test_survey_invite.py new file mode 100644 index 00000000..6a93ee45 --- /dev/null +++ b/addons/survey/tests/test_survey_invite.py @@ -0,0 +1,223 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from datetime import datetime +from dateutil.relativedelta import relativedelta + +from odoo import fields +from odoo.addons.survey.tests import common +from odoo.exceptions import UserError +from odoo.tests import Form +from odoo.tests.common import users + + +class TestSurveyInvite(common.TestSurveyCommon): + + def setUp(self): + res = super(TestSurveyInvite, self).setUp() + # by default signup not allowed + self.env["ir.config_parameter"].set_param('auth_signup.invitation_scope', 'b2b') + return res + + @users('survey_manager') + def test_survey_invite_action(self): + # Check correctly configured survey returns an invite wizard action + action = self.survey.action_send_survey() + self.assertEqual(action['res_model'], 'survey.invite') + + # Bad cases + surveys = [ + # no page + self.env['survey.survey'].create({'title': 'Test survey'}), + # no questions + self.env['survey.survey'].create({'title': 'Test survey', 'question_and_page_ids': [(0, 0, {'is_page': True, 'title': 'P0', 'sequence': 1})]}), + # closed + self.env['survey.survey'].with_user(self.survey_manager).create({ + 'title': 'S0', + 'state': 'closed', + 'question_and_page_ids': [ + (0, 0, {'is_page': True, 'title': 'P0', 'sequence': 1}), + (0, 0, {'title': 'Q0', 'sequence': 2, 'question_type': 'text_box'}) + ] + }) + ] + for survey in surveys: + with self.assertRaises(UserError): + survey.action_send_survey() + + @users('survey_manager') + def test_survey_invite(self): + Answer = self.env['survey.user_input'] + deadline = fields.Datetime.now() + relativedelta(months=1) + + self.survey.write({'access_mode': 'public', 'users_login_required': False}) + action = self.survey.action_send_survey() + invite_form = Form(self.env[action['res_model']].with_context(action['context'])) + + # some lowlevel checks that action is correctly configured + self.assertEqual(Answer.search([('survey_id', '=', self.survey.id)]), self.env['survey.user_input']) + self.assertEqual(invite_form.survey_id, self.survey) + + invite_form.partner_ids.add(self.customer) + invite_form.deadline = fields.Datetime.to_string(deadline) + + invite = invite_form.save() + invite.action_invite() + + answers = Answer.search([('survey_id', '=', self.survey.id)]) + self.assertEqual(len(answers), 1) + self.assertEqual( + set(answers.mapped('email')), + set([self.customer.email])) + self.assertEqual(answers.mapped('partner_id'), self.customer) + self.assertEqual(set(answers.mapped('deadline')), set([deadline])) + + @users('survey_manager') + def test_survey_invite_authentication_nosignup(self): + Answer = self.env['survey.user_input'] + + self.survey.write({'access_mode': 'public', 'users_login_required': True}) + action = self.survey.action_send_survey() + invite_form = Form(self.env[action['res_model']].with_context(action['context'])) + + with self.assertRaises(UserError): # do not allow to add customer (partner without user) + invite_form.partner_ids.add(self.customer) + invite_form.partner_ids.clear() + invite_form.partner_ids.add(self.user_portal.partner_id) + invite_form.partner_ids.add(self.user_emp.partner_id) + with self.assertRaises(UserError): + invite_form.emails = 'test1@example.com, Raoulette Vignolette <test2@example.com>' + invite_form.emails = False + + invite = invite_form.save() + invite.action_invite() + + answers = Answer.search([('survey_id', '=', self.survey.id)]) + self.assertEqual(len(answers), 2) + self.assertEqual( + set(answers.mapped('email')), + set([self.user_emp.email, self.user_portal.email])) + self.assertEqual(answers.mapped('partner_id'), self.user_emp.partner_id | self.user_portal.partner_id) + + @users('survey_manager') + def test_survey_invite_authentication_signup(self): + self.env["ir.config_parameter"].sudo().set_param('auth_signup.invitation_scope', 'b2c') + self.survey.invalidate_cache() + Answer = self.env['survey.user_input'] + + self.survey.write({'access_mode': 'public', 'users_login_required': True}) + action = self.survey.action_send_survey() + invite_form = Form(self.env[action['res_model']].with_context(action['context'])) + + invite_form.partner_ids.add(self.customer) + invite_form.partner_ids.add(self.user_portal.partner_id) + invite_form.partner_ids.add(self.user_emp.partner_id) + # TDE FIXME: not sure for emails in authentication + signup + # invite_form.emails = 'test1@example.com, Raoulette Vignolette <test2@example.com>' + + invite = invite_form.save() + invite.action_invite() + + answers = Answer.search([('survey_id', '=', self.survey.id)]) + self.assertEqual(len(answers), 3) + self.assertEqual( + set(answers.mapped('email')), + set([self.customer.email, self.user_emp.email, self.user_portal.email])) + self.assertEqual(answers.mapped('partner_id'), self.customer | self.user_emp.partner_id | self.user_portal.partner_id) + + @users('survey_manager') + def test_survey_invite_public(self): + Answer = self.env['survey.user_input'] + + self.survey.write({'access_mode': 'public', 'users_login_required': False}) + action = self.survey.action_send_survey() + invite_form = Form(self.env[action['res_model']].with_context(action['context'])) + + invite_form.partner_ids.add(self.customer) + invite_form.emails = 'test1@example.com, Raoulette Vignolette <test2@example.com>' + + invite = invite_form.save() + invite.action_invite() + + answers = Answer.search([('survey_id', '=', self.survey.id)]) + self.assertEqual(len(answers), 3) + self.assertEqual( + set(answers.mapped('email')), + set(['test1@example.com', '"Raoulette Vignolette" <test2@example.com>', self.customer.email])) + self.assertEqual(answers.mapped('partner_id'), self.customer) + + @users('survey_manager') + def test_survey_invite_token(self): + Answer = self.env['survey.user_input'] + + self.survey.write({'access_mode': 'token', 'users_login_required': False}) + action = self.survey.action_send_survey() + invite_form = Form(self.env[action['res_model']].with_context(action['context'])) + + invite_form.partner_ids.add(self.customer) + invite_form.emails = 'test1@example.com, Raoulette Vignolette <test2@example.com>' + + invite = invite_form.save() + invite.action_invite() + + answers = Answer.search([('survey_id', '=', self.survey.id)]) + self.assertEqual(len(answers), 3) + self.assertEqual( + set(answers.mapped('email')), + set(['test1@example.com', '"Raoulette Vignolette" <test2@example.com>', self.customer.email])) + self.assertEqual(answers.mapped('partner_id'), self.customer) + + @users('survey_manager') + def test_survey_invite_token_internal(self): + Answer = self.env['survey.user_input'] + + self.survey.write({'access_mode': 'token', 'users_login_required': True}) + action = self.survey.action_send_survey() + invite_form = Form(self.env[action['res_model']].with_context(action['context'])) + + with self.assertRaises(UserError): # do not allow to add customer (partner without user) + invite_form.partner_ids.add(self.customer) + with self.assertRaises(UserError): # do not allow to add portal user + invite_form.partner_ids.add(self.user_portal.partner_id) + invite_form.partner_ids.clear() + invite_form.partner_ids.add(self.user_emp.partner_id) + with self.assertRaises(UserError): + invite_form.emails = 'test1@example.com, Raoulette Vignolette <test2@example.com>' + invite_form.emails = False + + invite = invite_form.save() + invite.action_invite() + + answers = Answer.search([('survey_id', '=', self.survey.id)]) + self.assertEqual(len(answers), 1) + self.assertEqual( + set(answers.mapped('email')), + set([self.user_emp.email])) + self.assertEqual(answers.mapped('partner_id'), self.user_emp.partner_id) + + def test_survey_invite_token_by_email_nosignup(self): + """ + Case: have multiples partners with the same email address + If I set one email address, I expect one email to be sent + """ + + first_partner = self.env['res.partner'].create({ + 'name': 'Test 1', + 'email': 'test@example.com', + }) + + self.env['res.partner'].create({ + 'name': 'Test 2', + 'email': '"Raoul Poilvache" <TEST@example.COM>', + }) + + self.survey.write({'access_mode': 'token', 'users_login_required': False}) + action = self.survey.action_send_survey() + invite_form = Form(self.env[action['res_model']].with_context(action['context'])) + invite_form.emails = 'test@example.com' + invite = invite_form.save() + invite.action_invite() + + answers = self.env['survey.user_input'].search([('survey_id', '=', self.survey.id)]) + self.assertEqual(len(answers), 1) + self.assertEqual(answers.partner_id.display_name, first_partner.display_name) |
