Skip to content

Conversation

@geneux
Copy link
Owner

@geneux geneux commented Sep 6, 2016

Я сделал все, за исключением отсылки почты из тестов. Из девелопмента отсылается и выскакивает соответствующий флеш ("You have to confirm your email address before continuing"), из теста (features/confirm_oauth_registration_spec.rb) ни массив писем не заполняется, ни флеш не выскакивает. Сразу проходит авторизация. Такое ощущение, что подтверждение для теста не включается вообще. Перепробовал уже все, что пришло в голову, и что удалось прочитать, задержки поставил, менял конфигурацию мейлера -- ничего не помогло.
Можно ли мне хотя бы очень примерно подсказать, куда мне надо копнуть, чтобы оно заработало? Подозреваю, что какая-то глупость недоконфигурирована или что-то в этом духе.
В общем, очень прошу проверить текущий вариант, готов по основной части сделать исправления, если понадобится, и подсказать, что я не так сделал с отсылкой почты в тестовом окружении?

UPD: Хотя, мне еще сейчас вот что подумалось: эти письма отправляет сам Devise, то есть, получается, что мы тестируем его, а мы говорили, что библиотеки тестировать не надо. Я понимаю, что стоит попробовать тестирование почты ради того, чтобы попробовать тестрование почты, но -- чисто теоретически -- нужен ли вообще этот тест, проверяющий, умеет ли Devise отсылать письма? (может, он их и блокирует в тесте специально?)

smartlime and others added 30 commits August 22, 2016 19:51
@palkan
Copy link

palkan commented Sep 6, 2016

У кого-то была подобная проблема, но не помню, как она решилась.
Попробуй поставить дебаг в контроллере и посмотреть, создается пользователь уже подтвержденный или нет.

Далее можно попробовать подебажить сам Devise, поставив перед созданием пользователя точку остановки: break Devise::Models::Confirmable#send_confirmation_instructions.

Ну и дальше смотреть, что происходит.

@palkan
Copy link

palkan commented Sep 6, 2016

Вот тут смотреть, что еще происходит в confirmable https://github.com/plataformatec/devise/blob/master/lib/devise/models/confirmable.rb

@geneux
Copy link
Owner Author

geneux commented Sep 7, 2016

Спасибо за идеи! В общем, расковыряю дебаггером. Пока же мне кажется, что в тесте Devise вообще считает, что :confirmable не стоит.
Посмотрел логи RSpec-а для теста account_controler_spec.rb, так там пользователи сразу создаются подтвержденными:

SQL (0.4ms) INSERT INTO "users" ("email", "encrypted_password", "created_at", "updated_at", "confirmation_token", "confirmation_sent_at") VALUES ($1, $2, $3, $4, $5, $6) RETURNING "id" [["email", "user37@imaginarydomain.nxt"], ["encrypted_password", "$2a$04$H838Kt8v90KrpSMp3pnnO.MgmGiZj0e.mB4uEFbKTiW9B5YA/NOBy"], ["created_at", "2016-09-07 11:40:13.398210"], ["updated_at", "2016-09-07 11:40:13.398210"], ["confirmation_token", "_mhe8C_EUtW_RmHjPm_j"], ["confirmation_sent_at", "2016-09-07 11:40:13.398844"]]
(и так для всех инсертов в users)

И в брейкпойнты, стоящие на методах с подтверждением отладчик не попадает. В общем, разберусь с работой, продолжу ковырять в этой ветке. А сейчас смержу её в мастер (падающий тест пока будет работать чисто фиктивно, запушил с закоменченой проверкой), начну следующее задание, а как разберусь -- подмержу заново. Что-то мне кажется, что конфигурация Devise портится в тесте, но надо это место найти.

@geneux
Copy link
Owner Author

geneux commented Sep 24, 2016

Ну, я все-таки, нашел в чем была проблема с подтверждением здесь. Как и следовало ожидать, на самом видном месте ). Еще в начале курса, чтобы написать фичер-спеку на вход в inializer-е devise.rb было вставлено... (я понимаю, что нельзя так упорно тупить, но строчка не попадалась на глаза упорно, почти месяц!)...

config.allow_unconfirmed_access_for = 2.days if Rails.env.test?

Думаю, дальнейшие комментарии излишни )) Сейчас сделаю новые спеки в отдельной ветке, так как эту рибейзить уже опасно )

@palkan
Copy link

palkan commented Sep 25, 2016

Хе, вот это поворот. Серьезный проект уже, раз забывается то, что было в начале)

@geneux
Copy link
Owner Author

geneux commented Sep 25, 2016

Да, я сам сначала не понял, убрал. Тут же огреб полностью развалившиеся тесты.

Строчка вообще не спроста вписана была, иначе create(:user) начинает слать почту и пользователь создается неподтвержденным со всеми вытекающими. В итоге, строчку пришлось сперва оставить.

Вообще, так как подтверждение сделано на основе механизма Devise, а библиотеки по условиям мы договорились не тестировать, то тестировать почту в данном случае нецелесообразно -- подтверждение целиком на совести Devise.

Сейчас задумался, и пришел к выводу, что эта строчка не нужна, думаю, вот так сделать будет вполне красиво: просто в factory пользователя указываем: confirmed_at {Time.now} и все создаются подтвержденными. Если нужен неподтвержденный -- создаем с confirmed_at: nil. И всё. Сейчас сделал эту правку, весь тест сьют прошел.

Кстати, на глаза попалось, что в этой фактори у меня была также прописана строчка password_confirmation '12345678'. Возможно из скринкаста переписал не задумавшись. Devise на самом деле не валидирует password_confirmation, если он не приехал. То есть, можно просто из формы поле подтверждения пароля убрать -- регистрация будет работать. Так что в фактори это определенно лишее, убрал тоже.

Все, что в итоге получилось, у меня в другом PR (который сейчас как раз вроде как завершен, но там еще есть мелкий вопросик про тест): #16

И,вообще, да, проект реально уже не маленький получается, 520 примеров в сьюте ). Это не тысячи конечно, но уже ощутимо. И вылетает что-то периодически, как и положено ))).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants