Как `educate_until_posts` взаимодействует с недавними изменениями в `check_education_message`?

Продолжение обсуждения из темы “Thanks for Contributing” Popup in Posts Appearing Even After Limit Passed?:

У меня возник вопрос по поводу этого изменения. Мне кажется, что я что-то упускаю или неправильно понимаю, как это должно работать при тестировании.

Я ожидал, что образовательный баннер будет появляться на первых нескольких постах, причём количество постов контролируется настройкой сайта educate_until_posts. По умолчанию это значение равно 2.

Для тестирования я изменил это значение на 5, чтобы перестраховаться. Однако мой тестовый пользователь увидел образовательное сообщение только один раз.

Я также изучил код:

Насколько я понимаю, метод сначала исключает личные сообщения и пользователей, у которых уже есть запись, указывающая на то, что образовательное сообщение было показано. Эта часть для меня понятна.

Затем определяется, создаёт ли пользователь тему или ответ, и вычисляется общее количество постов/тем пользователя.

Следующая часть вызывает у меня недоумение. Если общее количество постов меньше настроенного лимита, мы создаём запись, которая предотвращает повторное показ образовательного сообщения, — и затем отображаем сообщение.

Чего я здесь не понимаю?

Например, если educate_until_posts оставить со значением по умолчанию, равным 2, я ожидаю, что сообщение будет показано для первых двух постов пользователя.

Пользователь начинает создавать свой самый первый пост. Это не личное сообщение, и записи UserHistory ещё нет, поэтому сообщение отображается — это логично.

Но почему запись UserHistory создаётся сразу после этого? Разве это не помешает показу сообщения в будущем?

Я ожидал чего-то вроде этого:

  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 (

Но если бы это действительно было проблемой, я предполагаю, что тесты, связанные с этой настройкой, не прошли бы. Поскольку PR был слит, они, очевидно, прошли.

Может ли кто-то помочь мне понять, что я упускаю?

1 лайк