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?
