Como `educate_until_posts` interage com as recentes mudanças em `check_education_message`?

Continuando a discussão de “Thanks for Contributing” Popup in Posts Appearing Even After Limit Passed?:

Tenho uma dúvida sobre essa alteração. Sinto que estou perdendo algo ou entendendo mal como isso deveria funcionar ao testar.

Minha expectativa é que o banner educacional apareça nas primeiras postagens, com a quantidade controlada pela configuração do site educate_until_posts. Por padrão, esse valor é 2.

Para os testes, mudei para 5 apenas para ter certeza extra. No entanto, meu usuário de teste viu a mensagem educacional apenas uma vez.

Também examinei o código:

Pelo que entendi, o método primeiro descarta mensagens privadas e usuários que já possuem um registro indicando que a mensagem educacional foi exibida. Essa parte faz sentido para mim.

Em seguida, ele determina se o usuário está criando um tópico ou uma resposta e calcula o número total de postagens/tópicos do usuário.

A próxima parte é o que me confunde. Se a contagem total de postagens for menor que o limite configurado, criamos o registro que impede que a mensagem educacional seja exibida novamente — e então exibimos a mensagem.

O que estou perdendo aqui?

Por exemplo, se educate_until_posts for mantido no valor padrão de 2, eu esperaria que a mensagem fosse exibida nas duas primeiras postagens do usuário.

O usuário começa a criar sua primeira postagem. Não é uma MP e ainda não há um registro UserHistory existente, então a mensagem é exibida — isso faz sentido.

Mas por que o registro UserHistory é criado imediatamente após? Isso não impediria que a mensagem fosse exibida novamente?

Eu esperaria algo mais parecido com isso:

  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 (

Mas se isso fosse realmente um problema, imagino que os testes relacionados a essa configuração teriam falhado. Como o PR foi mesclado, aparentemente não foi o caso.

Alguém pode me ajudar a entender o que estou ignorando aqui?

1 curtida