-
diff --git a/addons/microsoft_calendar/utils/microsoft_event.py b/addons/microsoft_calendar/utils/microsoft_event.py
index e137aa0ebd0..0d50c3ae8bb 100644
--- a/addons/microsoft_calendar/utils/microsoft_event.py
+++ b/addons/microsoft_calendar/utils/microsoft_event.py
@@ -109,12 +109,12 @@ class MicrosoftEvent(abc.Set):
def owner(self, env):
# Owner/organizer could be desynchronised between Microsoft and Odoo.
# Let userA, userB be two new users (never synced to Microsoft before).
- # UserA creates an event in Odoo (he is the owner) but userB syncs first.
+ # UserA creates an event in Odoo (they are the owner) but userB syncs first.
# There is no way to insert the event into userA's calendar since we don't have
# any authentication access. The event is therefore inserted into userB's calendar
- # (he is the orginizer in Microsoft). The "real" owner (in Odoo) is stored as an
+ # (they are the organizer in Microsoft). The "real" owner (in Odoo) is stored as an
# extended property. There is currently no support to "transfert" ownership when
- # userA syncs his calendar the first time.
+ # userA syncs their calendar the first time.
if self.singleValueExtendedProperties:
microsoft_guid = env['ir.config_parameter'].sudo().get_param('microsoft_calendar.microsoft_guid', False)
real_owner_id = [prop['value'] for prop in self.singleValueExtendedProperties if prop['id'] == 'String {%s} Name owner_odoo_id' % microsoft_guid][0]
diff --git a/addons/portal/controllers/mail.py b/addons/portal/controllers/mail.py
index 44bc004cd34..ffe9c83cfc4 100644
--- a/addons/portal/controllers/mail.py
+++ b/addons/portal/controllers/mail.py
@@ -218,7 +218,7 @@ class MailController(mail.MailController):
@classmethod
def _redirect_to_record(cls, model, res_id, access_token=None, **kwargs):
""" If the current user doesn't have access to the document, but provided
- a valid access token, redirect him to the front-end view.
+ a valid access token, redirect them to the front-end view.
If the partner_id and hash parameters are given, add those parameters to the redirect url
to authentify the recipient in the chatter, if any.
diff --git a/addons/project_mail_plugin/controllers/mail_plugin.py b/addons/project_mail_plugin/controllers/mail_plugin.py
index 7236034e9ee..f7be93255b8 100644
--- a/addons/project_mail_plugin/controllers/mail_plugin.py
+++ b/addons/project_mail_plugin/controllers/mail_plugin.py
@@ -19,7 +19,7 @@ class MailPluginController(mail_plugin.MailPluginController):
This is structured this way to enable the "project" feature on the Outlook side only if the Odoo version
supports it.
- Return the tasks key only if the current user can create tasks. So, if he can not
+ Return the tasks key only if the current user can create tasks. So, if they can not
create tasks, the section won't be visible on the addin side (like if the project
module was not installed on the database).
"""
diff --git a/addons/survey/controllers/survey_session_manage.py b/addons/survey/controllers/survey_session_manage.py
index fd355462012..ab40a893de8 100644
--- a/addons/survey/controllers/survey_session_manage.py
+++ b/addons/survey/controllers/survey_session_manage.py
@@ -84,8 +84,8 @@ class UserInputSession(http.Controller):
Frontend should take the delay into account by displaying the appropriate animations.
Writing the next question on the survey is sudo'ed to avoid potential access right issues.
- e.g: a survey user can create a live session from any survey but he can only write
- on its own survey.
+ e.g: a survey user can create a live session from any survey but they can only write
+ on their own survey.
In addition to return a pre-rendered html template with the next question, we also return the background
to display. Background image depends on the next question to display and cannot be extracted from the
diff --git a/addons/survey/models/survey_survey.py b/addons/survey/models/survey_survey.py
index 19df1658a1c..2ff6778a74d 100644
--- a/addons/survey/models/survey_survey.py
+++ b/addons/survey/models/survey_survey.py
@@ -126,7 +126,7 @@ class Survey(models.Model):
certification_mail_template_id = fields.Many2one(
'mail.template', 'Certified Email Template',
domain="[('model', '=', 'survey.user_input')]",
- help="Automated email sent to the user when he succeeds the certification, containing his certification document.")
+ help="Automated email sent to the user when they succeed the certification, containing their certification document.")
certification_report_layout = fields.Selection([
('modern_purple', 'Modern Purple'),
('modern_blue', 'Modern Blue'),
@@ -993,7 +993,7 @@ class Survey(models.Model):
def action_start_session(self):
""" Sets the necessary fields for the session to take place and starts it.
The write is sudo'ed because a survey user can start a session even if it's
- not his own survey. """
+ not their own survey. """
if not self.env.user.has_group('survey.group_survey_user'):
raise AccessError(_('Only survey users can manage sessions.'))
@@ -1019,7 +1019,7 @@ class Survey(models.Model):
def action_end_session(self):
""" The write is sudo'ed because a survey user can end a session even if it's
- not his own survey. """
+ not their own survey. """
if not self.env.user.has_group('survey.group_survey_user'):
raise AccessError(_('Only survey users can manage sessions.'))
diff --git a/addons/survey/models/survey_user_input.py b/addons/survey/models/survey_user_input.py
index 29faf9dc5a8..f0d85ffba53 100644
--- a/addons/survey/models/survey_user_input.py
+++ b/addons/survey/models/survey_user_input.py
@@ -45,7 +45,7 @@ class SurveyUserInput(models.Model):
invite_token = fields.Char('Invite token', readonly=True, copy=False) # no unique constraint, as it identifies a pool of attempts
partner_id = fields.Many2one('res.partner', string='Contact', readonly=True)
email = fields.Char('Email', readonly=True)
- nickname = fields.Char('Nickname', help="Attendee nickname, mainly used to identify him in the survey session leaderboard.")
+ nickname = fields.Char('Nickname', help="Attendee nickname, mainly used to identify them in the survey session leaderboard.")
# questions / answers
user_input_line_ids = fields.One2many('survey.user_input.line', 'user_input_id', string='Answers', copy=True)
predefined_question_ids = fields.Many2many('survey.question', string='Predefined Questions', readonly=True)
@@ -554,11 +554,11 @@ class SurveyUserInput(models.Model):
- ensure correct scoring
- if the selected answer triggers another question later in the survey, if the answer is not cleared,
a question that should not be displayed to the user will be.
-
- TODO DBE: Maybe this can be the only cleaning method, even for section_per_page or one_page where
- conditional questions are, for now, cleared in JS directly. But this can be annoying if user typed a long
- answer, changed his mind unchecking depending answer and changed again his mind by rechecking the depending
- answer -> For now, the long answer will be lost. If we use this as the master cleaning method,
+
+ TODO DBE: Maybe this can be the only cleaning method, even for section_per_page or one_page where
+ conditional questions are, for now, cleared in JS directly. But this can be annoying if user typed a long
+ answer, changed their mind unchecking depending answer and changed again their mind by rechecking the depending
+ answer -> For now, the long answer will be lost. If we use this as the master cleaning method,
long answer will be cleared only during submit.
"""
inactive_questions = self._get_inactive_conditional_questions()
diff --git a/addons/survey/static/src/js/survey_session_chart.js b/addons/survey/static/src/js/survey_session_chart.js
index a4e74555193..416c6763da3 100644
--- a/addons/survey/static/src/js/survey_session_chart.js
+++ b/addons/survey/static/src/js/survey_session_chart.js
@@ -98,7 +98,7 @@ publicWidget.registry.SurveySessionChart = publicWidget.Widget.extend({
* (see _getBackgroundColor for details)
* - The ticks are bigger and bolded to be able to see them better on a big screen (projector)
* - We don't use tooltips to keep it as simple as possible
- * - We don't set a suggestedMin or Max so that Chart will adapt automatically himself based on the given data
+ * - We don't set a suggestedMin or Max so that Chart will adapt automatically based on the given data
* The '+1' part is a small trick to avoid the datalabels to be clipped in height
* - We use a custom 'datalabels' plugin to be able to display the number value on top of the
* associated bar of the chart.
diff --git a/addons/test_mail/tests/test_mail_activity.py b/addons/test_mail/tests/test_mail_activity.py
index dbee2bde2f7..83f5e9f96f7 100644
--- a/addons/test_mail/tests/test_mail_activity.py
+++ b/addons/test_mail/tests/test_mail_activity.py
@@ -49,7 +49,7 @@ class TestActivityRights(TestActivityCommon):
@mute_logger('odoo.addons.mail.models.mail_mail')
def test_activity_security_user_noaccess_automated(self):
def _employee_crash(*args, **kwargs):
- """ If employee is test employee, consider he has no access on document """
+ """ If employee is test employee, consider they have no access on document """
recordset = args[0]
if recordset.env.uid == self.user_employee.id:
raise exceptions.AccessError('Hop hop hop Ernest, please step back.')
@@ -65,7 +65,7 @@ class TestActivityRights(TestActivityCommon):
def test_activity_security_user_noaccess_manual(self):
def _employee_crash(*args, **kwargs):
- """ If employee is test employee, consider he has no access on document """
+ """ If employee is test employee, consider they have no access on document """
recordset = args[0]
if recordset.env.uid == self.user_employee.id:
raise exceptions.AccessError('Hop hop hop Ernest, please step back.')
diff --git a/addons/test_mail/tests/test_mail_gateway.py b/addons/test_mail/tests/test_mail_gateway.py
index 6963e94c4dc..dbaa8e7ee92 100644
--- a/addons/test_mail/tests/test_mail_gateway.py
+++ b/addons/test_mail/tests/test_mail_gateway.py
@@ -604,7 +604,7 @@ class TestMailgateway(TestMailCommon):
@mute_logger('odoo.addons.mail.models.mail_thread')
def test_message_process_create_uid_crash(self):
def _employee_crash(*args, **kwargs):
- """ If employee is test employee, consider he has no access on document """
+ """ If employee is test employee, consider they have no access on document """
recordset = args[0]
if recordset.env.uid == self.user_employee.id and not recordset.env.su:
if kwargs.get('raise_exception', True):
diff --git a/addons/test_mail/tests/test_mail_message.py b/addons/test_mail/tests/test_mail_message.py
index 831a5010a28..de217dae950 100644
--- a/addons/test_mail/tests/test_mail_message.py
+++ b/addons/test_mail/tests/test_mail_message.py
@@ -363,7 +363,7 @@ class TestMessageAccess(TestMailCommon):
self.message.write({'attachment_ids': [(4, attachment.id)]})
self.message.write({'partner_ids': [(4, self.user_employee.partner_id.id)]})
self.message.with_user(self.user_employee).read()
- # Test: Bert has access to attachment, ok because he can read message
+ # Test: Bert has access to attachment, ok because they can read message
attachment.with_user(self.user_employee).read(['name', 'datas'])
def test_mail_message_access_read_author(self):
@@ -372,7 +372,7 @@ class TestMessageAccess(TestMailCommon):
def test_mail_message_access_read_doc(self):
self.message.write({'model': 'mail.channel', 'res_id': self.group_public.id})
- # Test: Bert reads the message, ok because linked to a doc he is allowed to read
+ # Test: Bert reads the message, ok because linked to a doc they are allowed to read
self.message.with_user(self.user_employee).read()
# --------------------------------------------------
diff --git a/addons/test_mail/tests/test_mail_thread_internals.py b/addons/test_mail/tests/test_mail_thread_internals.py
index 8a28bfbe37a..a86f2b30bb4 100644
--- a/addons/test_mail/tests/test_mail_thread_internals.py
+++ b/addons/test_mail/tests/test_mail_thread_internals.py
@@ -117,7 +117,7 @@ class TestDiscuss(TestMailCommon, TestRecipients):
@mute_logger('openerp.addons.mail.models.mail_mail')
def test_mark_all_as_read(self):
def _employee_crash(*args, **kwargs):
- """ If employee is test employee, consider he has no access on document """
+ """ If employee is test employee, consider they have no access on document """
recordset = args[0]
if recordset.env.uid == self.user_employee.id and not recordset.env.su:
if kwargs.get('raise_exception', True):
diff --git a/addons/test_mail/tests/test_message_track.py b/addons/test_mail/tests/test_message_track.py
index bc3226a03e8..c0c90e81ef1 100644
--- a/addons/test_mail/tests/test_message_track.py
+++ b/addons/test_mail/tests/test_message_track.py
@@ -359,7 +359,7 @@ class TestTrackingInternals(TestMailCommon):
self.record.clear_caches()
record_form = Form(self.record.with_user(self.user_employee))
record_form.name = 'TestDoNoCrash'
- # the employee user must be able to save the fields on which he can write
+ # the employee user must be able to save the fields on which they can write
# if we fetch all the tracked fields, ignoring the group of the current user
# it will crash and it shouldn't
record = record_form.save()
diff --git a/addons/test_website_slides_full/tests/tours/slides_certification_member.js b/addons/test_website_slides_full/tests/tours/slides_certification_member.js
index 6381747ec74..f74caa70922 100644
--- a/addons/test_website_slides_full/tests/tours/slides_certification_member.js
+++ b/addons/test_website_slides_full/tests/tours/slides_certification_member.js
@@ -11,12 +11,12 @@ const tourUtils = require('website_sale.tour_utils');
* -> clicks on "buy course"
* -> is redirected to webshop on the product page
* -> buys the course
- * -> fails 3 times, exhausting his attempts
+ * -> fails 3 times, exhausting their attempts
* -> is removed to the members of the course
* -> buys the course again
* -> succeeds the certification
* -> has the course marked as completed
- * -> has the certification in his user profile
+ * -> has the certification in their user profile
*
*/
diff --git a/addons/website_event_track_quiz/models/event_quiz.py b/addons/website_event_track_quiz/models/event_quiz.py
index e11ada616c3..c5784f09a7b 100644
--- a/addons/website_event_track_quiz/models/event_quiz.py
+++ b/addons/website_event_track_quiz/models/event_quiz.py
@@ -62,6 +62,6 @@ class QuizAnswer(models.Model):
is_correct = fields.Boolean('Correct', default=False)
comment = fields.Text(
'Extra Comment', translate=True,
- help='''This comment will be displayed to the user if he selects this answer, after submitting the quiz.
+ help='''This comment will be displayed to the user if they select this answer, after submitting the quiz.
It is used as a small informational text helping to understand why this answer is correct / incorrect.''')
awarded_points = fields.Integer('Points', default=0)
diff --git a/addons/website_event_track_quiz/static/src/js/event_quiz.js b/addons/website_event_track_quiz/static/src/js/event_quiz.js
index 47b37b0c1df..b9fbc3d003e 100644
--- a/addons/website_event_track_quiz/static/src/js/event_quiz.js
+++ b/addons/website_event_track_quiz/static/src/js/event_quiz.js
@@ -68,7 +68,7 @@ var Quiz = publicWidget.Widget.extend({
* Overridden to add custom rendering behavior upon start of the widget.
*
* If the user has answered the quiz before having joined the course, we check
- * his answers (saved into his session) here as well.
+ * their answers (saved into their session) here as well.
*
* @override
*/
diff --git a/addons/website_livechat/models/mail_channel.py b/addons/website_livechat/models/mail_channel.py
index 16a6b983141..76d67de88ae 100644
--- a/addons/website_livechat/models/mail_channel.py
+++ b/addons/website_livechat/models/mail_channel.py
@@ -13,7 +13,7 @@ class MailChannel(models.Model):
def channel_pin(self, pinned=False):
""" Override to clean an empty livechat channel.
This is typically called when the operator send a chat request to a website.visitor
- but don't speak to him and closes the chatter.
+ but don't speak to them and closes the chatter.
This allows operators to send the visitor a new chat request.
If active empty livechat channel,
delete mail_channel as not useful to keep empty chat
diff --git a/addons/website_slides/models/res_partner.py b/addons/website_slides/models/res_partner.py
index d1001e492b7..069367ea95f 100644
--- a/addons/website_slides/models/res_partner.py
+++ b/addons/website_slides/models/res_partner.py
@@ -58,7 +58,7 @@ class ResPartner(models.Model):
def action_view_courses(self):
""" View partners courses. In singleton mode, return courses followed
- by all its contacts (if company) or by himself (if not a company).
+ by all its contacts (if company) or by themselves (if not a company).
Otherwise simply set a domain on required partners. """
action = self.env["ir.actions.actions"]._for_xml_id("website_slides.slide_channel_partner_action")
action['name'] = _('Followed Courses')
diff --git a/addons/website_slides/models/slide_channel.py b/addons/website_slides/models/slide_channel.py
index 7b90e509eb6..abfb661dab4 100644
--- a/addons/website_slides/models/slide_channel.py
+++ b/addons/website_slides/models/slide_channel.py
@@ -105,7 +105,7 @@ class ChannelUsersRelation(models.Model):
users.add_karma(partner_karma[user.partner_id.id])
def _send_completed_mail(self):
- """ Send an email to the attendee when he has successfully completed a course. """
+ """ Send an email to the attendee when they have successfully completed a course. """
template_to_records = dict()
for record in self:
template = record.channel_id.completed_template_id
@@ -403,7 +403,7 @@ class Channel(models.Model):
@api.depends_context('uid')
def _compute_can_publish(self):
""" For channels of type 'training', only the responsible (see user_id field) can publish slides.
- The 'sudo' user needs to be handled because he's the one used for uploads done on the front-end when the
+ The 'sudo' user needs to be handled because they are the one used for uploads done on the front-end when the
logged in user is not publisher but fulfills the upload_group_ids condition. """
for record in self:
if not record.can_upload:
@@ -481,7 +481,7 @@ class Channel(models.Model):
@api.model_create_multi
def create(self, vals_list):
for vals in vals_list:
- # Ensure creator is member of its channel it is easier for him to manage it (unless it is odoobot)
+ # Ensure creator is member of its channel it is easier for them to manage it (unless it is odoobot)
if not vals.get('channel_partner_ids') and not self.env.is_superuser():
vals['channel_partner_ids'] = [(0, 0, {
'partner_id': self.env.user.partner_id.id
diff --git a/addons/website_slides/models/slide_question.py b/addons/website_slides/models/slide_question.py
index e716f0d8f08..f50ca6f8978 100644
--- a/addons/website_slides/models/slide_question.py
+++ b/addons/website_slides/models/slide_question.py
@@ -56,4 +56,4 @@ class SlideAnswer(models.Model):
question_id = fields.Many2one('slide.question', string="Question", required=True, ondelete='cascade')
text_value = fields.Char("Answer", required=True, translate=True)
is_correct = fields.Boolean("Is correct answer")
- comment = fields.Text("Comment", translate=True, help='This comment will be displayed to the user if he selects this answer')
+ comment = fields.Text("Comment", translate=True, help='This comment will be displayed to the user if they select this answer')
diff --git a/addons/website_slides/static/src/js/slides_course_quiz.js b/addons/website_slides/static/src/js/slides_course_quiz.js
index a02d907630d..175300f8fa4 100644
--- a/addons/website_slides/static/src/js/slides_course_quiz.js
+++ b/addons/website_slides/static/src/js/slides_course_quiz.js
@@ -91,7 +91,7 @@
* Overridden to add custom rendering behavior upon start of the widget.
*
* If the user has answered the quiz before having joined the course, we check
- * his answers (saved into his session) here as well.
+ * their answers (saved into their session) here as well.
*
* @override
*/
diff --git a/addons/website_slides/static/tests/tours/slide_course_publisher_standard.js b/addons/website_slides/static/tests/tours/slide_course_publisher_standard.js
index ca95353a403..287c7ff6db7 100644
--- a/addons/website_slides/static/tests/tours/slide_course_publisher_standard.js
+++ b/addons/website_slides/static/tests/tours/slide_course_publisher_standard.js
@@ -6,9 +6,9 @@ import slidesTourTools from '@website_slides/../tests/tours/slides_tour_tools';
/**
* Global use case:
* a user (website publisher) creates a course;
- * he updates it;
- * he creates some lessons in it;
- * he publishes it;
+ * they update it;
+ * they create some lessons in it;
+ * they publish it;
*/
tour.register('course_publisher_standard', {
url: '/slides',
diff --git a/addons/website_slides/static/tests/tours/slides_course_member.js b/addons/website_slides/static/tests/tours/slides_course_member.js
index bd506a40988..33c851724d8 100644
--- a/addons/website_slides/static/tests/tours/slides_course_member.js
+++ b/addons/website_slides/static/tests/tours/slides_course_member.js
@@ -6,10 +6,10 @@ import tour from 'web_tour.tour';
* Global use case:
* an user (either employee, website publisher or portal) joins a public
course;
- * he has access to the full course content when he's a member of the
+ * they have access to the full course content when they are a member of the
course;
- * he uses fullscreen player to complete the course;
- * he rates the course;
+ * they use fullscreen player to complete the course;
+ * they rate the course;
*/
tour.register('course_member', {
url: '/slides',
diff --git a/addons/website_slides/static/tests/tours/slides_course_member_yt.js b/addons/website_slides/static/tests/tours/slides_course_member_yt.js
index 8982a72d414..e88ea9c37b2 100644
--- a/addons/website_slides/static/tests/tours/slides_course_member_yt.js
+++ b/addons/website_slides/static/tests/tours/slides_course_member_yt.js
@@ -23,10 +23,10 @@ FullScreen.include({
* Global use case:
* an user (either employee, website publisher or portal) joins a public
course;
- * he has access to the full course content when he's a member of the
+ * they have access to the full course content when they are a member of the
course;
- * he uses fullscreen player to complete the course;
- * he rates the course;
+ * they use fullscreen player to complete the course;
+ * they rate the course;
*/
tour.register('course_member_youtube', {
url: '/slides',
diff --git a/addons/website_slides/static/tests/tours/slides_course_publisher.js b/addons/website_slides/static/tests/tours/slides_course_publisher.js
index 7d3f32eef00..32980016fda 100644
--- a/addons/website_slides/static/tests/tours/slides_course_publisher.js
+++ b/addons/website_slides/static/tests/tours/slides_course_publisher.js
@@ -6,9 +6,9 @@ import slidesTourTools from '@website_slides/../tests/tours/slides_tour_tools';
/**
* Global use case:
* a user (website publisher) creates a course;
- * he updates it;
- * he creates some lessons in it;
- * he publishes it;
+ * they update it;
+ * they create some lessons in it;
+ * they publishe it;
*/
tour.register('course_publisher', {
url: '/slides',
diff --git a/addons/website_slides/static/tests/tours/slides_full_screen_web_editor.js b/addons/website_slides/static/tests/tours/slides_full_screen_web_editor.js
index bc97aef11d8..2aa132ad9ab 100644
--- a/addons/website_slides/static/tests/tours/slides_full_screen_web_editor.js
+++ b/addons/website_slides/static/tests/tours/slides_full_screen_web_editor.js
@@ -5,8 +5,8 @@ import tour from 'web_tour.tour';
/**
* Global use case:
* - a user (website publisher) lands on the fullscreen view of a course ;
- * - he clicks on the website editor "Edit" button ;
- * - he is redirected to the non-fullscreen view with the editor opened.
+ * - they click on the website editor "Edit" button ;
+ * - they are redirected to the non-fullscreen view with the editor opened.
*
* This tour tests a fix made when editing a course in fullscreen view.
* See "Fullscreen#_onWebEditorClick" for more information.
diff --git a/addons/website_slides/tests/test_security.py b/addons/website_slides/tests/test_security.py
index 9dddaa7e4e3..78fad40b505 100644
--- a/addons/website_slides/tests/test_security.py
+++ b/addons/website_slides/tests/test_security.py
@@ -292,7 +292,7 @@ class TestAccessFeatures(common.SlidesCase):
self.assertTrue(channel_manager.can_upload)
self.assertTrue(channel_manager.can_publish)
- # superuser should always be able to publish even if he's not the responsible
+ # superuser should always be able to publish even if they are not the responsible
channel_superuser = self.channel.sudo()
channel_superuser.invalidate_cache(['can_upload', 'can_publish'])
self.assertTrue(channel_superuser.can_upload)
diff --git a/addons/website_slides_survey/models/survey_user.py b/addons/website_slides_survey/models/survey_user.py
index 120a6049cc9..5d23035dae0 100644
--- a/addons/website_slides_survey/models/survey_user.py
+++ b/addons/website_slides_survey/models/survey_user.py
@@ -26,10 +26,10 @@ class SurveyUserInput(models.Model):
return res
def _check_for_failed_attempt(self):
- """ If the user fails his last attempt at a course certification,
- we remove him from the members of the course (and he has to enroll again).
- He receives an email in the process notifying him of his failure and suggesting
- he enrolls to the course again.
+ """ If the user fails their last attempt at a course certification,
+ we remove them from the members of the course (and they have to enroll again).
+ They receive an email in the process notifying them of their failure and suggesting
+ they enroll to the course again.
The purpose is to have a 'certification flow' where the user can re-purchase the
certification when they have failed it."""
diff --git a/addons/website_slides_survey/tests/test_course_certification_failure.py b/addons/website_slides_survey/tests/test_course_certification_failure.py
index 72c88c6e9f3..60f5eca9dc6 100644
--- a/addons/website_slides_survey/tests/test_course_certification_failure.py
+++ b/addons/website_slides_survey/tests/test_course_certification_failure.py
@@ -70,7 +70,7 @@ class TestCourseCertificationFailureFlow(TestSurveyCommon):
self.assertFalse(slide_partner.survey_scoring_success, 'Quizz should not be marked as passed with wrong answers')
# forces recompute of partner_ids as we delete directly in relation
self.channel.invalidate_cache()
- self.assertIn(self.user_public.partner_id, self.channel.partner_ids, 'Public user should still be a member of the course because he still has attempts left')
+ self.assertIn(self.user_public.partner_id, self.channel.partner_ids, 'Public user should still be a member of the course because they still have attempts left')
# Step 5: simulate a 'retry'
retry_user_input = self.slide_certification.survey_id.sudo()._create_answer(
@@ -85,7 +85,7 @@ class TestCourseCertificationFailureFlow(TestSurveyCommon):
self.fill_in_answer(retry_user_input, certification.question_ids)
# forces recompute of partner_ids as we delete directly in relation
self.channel.invalidate_cache()
- self.assertNotIn(self.user_public.partner_id, self.channel.partner_ids, 'Public user should have been kicked out of the course because he failed his last attempt')
+ self.assertNotIn(self.user_public.partner_id, self.channel.partner_ids, 'Public user should have been kicked out of the course because they failed their last attempt')
# Step 7: add public user as member of the channel once again
self.channel._action_add_members(self.user_public.partner_id)