Comment `educate_until_posts` interagit-il avec les récentes modifications de `check_education_message` ?

Suite à la discussion dans « Merci de votre contribution » : la fenêtre contextuelle dans les publications apparaît même après le dépassement de la limite ? :

J’ai une question concernant ce changement. J’ai l’impression de passer à côté de quelque chose ou de mal comprendre le fonctionnement attendu lors des tests.

Mon attente est que la bannière éducative apparaisse sur les premières publications, avec le nombre contrôlé par le paramètre du site educate_until_posts. Par défaut, cette valeur est de 2.

Pour les tests, je l’ai modifié à 5 simplement pour être plus prudent. Cependant, mon utilisateur de test n’a vu le message éducatif qu’une seule fois.

J’ai également examiné le code :

Comme je le comprends, la méthode exclut d’abord les messages privés et les utilisateurs qui ont déjà un enregistrement indiquant que le message éducatif a été affiché. Cette partie est logique pour moi.

Ensuite, elle détermine si l’utilisateur crée un sujet ou une réponse et calcule le nombre total de sujets/publications de l’utilisateur.

La partie suivante est ce qui me pose problème. Si le nombre total de publications est inférieur à la limite configurée, nous créons l’enregistrement qui empêche l’affichage à nouveau du message éducatif — puis nous affichons le message.

Qu’est-ce que je rate ici ?

Par exemple, si educate_until_posts est laissé à sa valeur par défaut de 2, je m’attendrais à ce que le message soit affiché pour les deux premières publications de l’utilisateur.

L’utilisateur commence à créer sa toute première publication. Ce n’est pas un MP, et il n’existe pas encore d’enregistrement UserHistory, donc le message est affiché — cela a du sens.

Mais pourquoi l’enregistrement UserHistory est-il créé immédiatement après ? Cela ne devrait-il pas empêcher le message d’être affiché à nouveau ?

Je m’attendrais plutôt à quelque chose comme ceci :

  count = @user.topic_count + @user.post_count


  if count >= SiteSetting.educate_until_posts
    UserHistory.create!(
      action: UserHistory.actions[:notified_about_composer_education],
      target_user_id: @user.id,
    )
  elsif count < SiteSetting.educate_until_posts
      return (

Mais si cela était réellement un problème, je suppose que les tests liés à ce paramètre auraient échoué. Depuis que la PR a été fusionnée, ils n’ont apparemment pas échoué.

Quelqu’un peut-il m’aider à comprendre ce que je néglige ici ?

1 « J'aime »