hunk.code_window:         cls.user_public = mail_new_test_user(cls.env, login='bert', groups='base.group_public', name='Bert Tartignole')
           cls.user_portal = mail_new_test_user(cls.env, login='chell', groups='base.group_portal', name='Chell Gladys')
           Channel = cls.env['mail.channel'].with_context(cls._test_context)
           cls.group_restricted_channel = Channel.create({
               'name': 'Channel for Groups',
               'public': 'groups',
               'group_public_id': cls.env.ref('base.group_user').id})
           cls.public_channel = Channel.create({
               'name': 'Public Channel',
               'description': 'NotFalse',
               'public': 'public'})
           cls.private_group = Channel.create({
               'name': 'Group',
               'public': 'private'})
           cls.message = cls.env['mail.message'].create({
               'body': 'My Body',
               'model': 'mail.channel',
               'res_id': cls.private_group.id,
  
hunk.labels: keep keep keep replace replace replace replace replace replace replace replace replace replace replace replace keep keep keep keep
hunk.after_edit:         cls.group_restricted_channel = cls.env['mail.channel'].browse(cls.env['mail.channel'].channel_create(name='Channel for Groups', privacy='groups', group_id=cls.env.ref('base.group_user').id)['id'])
           cls.public_channel = cls.env['mail.channel'].browse(cls.env['mail.channel'].channel_create(name='Public Channel', privacy='public')['id'])
           cls.private_group = cls.env['mail.channel'].browse(cls.env['mail.channel'].create_group(partners_to=cls.user_employee_1.partner_id.ids, name="Group")['id'])
  
hunk.file_path: addons/test_mail/tests/test_mail_message.py
hunk.type: replace
file: /**@odoo-module */
  
  import { fieldVisualFeedback } from "@web/views/fields/field";
  import { session } from "@web/session";
  import { getTooltipInfo } from "@web/views/fields/field_tooltip";
  
  const { Component, xml } = owl;
  
  export class FormLabel extends Component {
      get className() {
          const { invalid, empty } = fieldVisualFeedback(
              this.props.fieldInfo.FieldComponent,
              this.props.record,
              this.props.fieldName,
              this.props.fieldInfo
          );
          const classes = this.props.className ? [this.props.className] : [];
          if (invalid) {
              classes.push("o_field_invalid");
          }
          if (empty) {
              classes.push("o_form_label_empty");
          }
          return classes.join(" ");
      }
  
      get hasBigTooltip() {
          return Boolean(odoo.debug) || this.tooltipHelp;
      }
  
      get tooltipHelp() {
          const field = this.props.record.fields[this.props.fieldName];
          let help = field.help || "";
          if (field.company_dependent && session.display_switch_company_menu) {
              help += (help ? "\n\n" : "") + this.env._t("Values set here are company-specific.");
          }
          return help;
      }
      get tooltipInfo() {
          return getTooltipInfo({
              viewMode: "form",
              resModel: this.props.record.resModel,
              field: this.props.record.fields[this.props.fieldName],
              fieldInfo: this.props.fieldInfo,
              help: this.tooltipHelp,
          });
      }
  }
  FormLabel.template = xml`
    <label class="o_form_label" t-att-for="props.id" t-att-class="className" t-att="{'data-tooltip-template': hasBigTooltip ? 'web.FieldTooltip' : false, 'data-tooltip-info': hasBigTooltip ? tooltipInfo : false}">
      <t t-esc="props.string" />
    </label>
  `;
  