Rspec and Devise reset password

Не знаю, кому как, но, по-моему, я сегодня изобретал велосипед. Но что-то немного погуглив, я не нашёл никаких вразумительных примеров, как написать интеграционные тесты для проверки функционала восстановления пароля. Может это никому и не надо, но всё равно было интересно повозиться с этим.

В общем, вот, собственно, весь тест:

describe 'test reset password' do
  it "should have reset password" do
    ActionMailer::Base.deliveries.clear
    @user = FactoryGirl.build(:user, :email=>"none@ited.com.ua")

    @user.send_reset_password_instructions()

    @mail = ActionMailer::Base.deliveries.last
    @host = ActionMailer::Base.default_url_options[:host]

    @mail.should deliver_to(@user.email)
    @mail.should deliver_from(Devise.mailer_sender)
    @mail.should have_subject(/Reset password instructions/)
    @mail.should have_body_text(/#{@user.email}/)
    @reset_url_regexp = %r{<a href=\"http://#{@host}/edit_password}
    @mail.should have_body_text(/#{@reset_url_regexp}/)


    change_password_link = @mail.body.raw_source[/(http:\/\/.+\")/][0..-2]
    visit change_password_link
    page.should have_content "
Новый пароль"

    fill_in "
user[password]", :with=> 'newpassword123'
    fill_in "
user[password_confirmation]", :with=> 'newpassword123'
    click_button "
Изменить"

    page.should have_content("
Dashboard")
  end

end

Я не знаю, почему плагин так разрисовал код… Но у меня он именно такой.

Распишу, что же тут и как…

ActionMailer::Base.deliveries.clear — тут очищаем очередь писем.

@user.send_reset_password_instructions() — отсылаем письмо только что созданному пользователю с инструкциями, как восстановить пароль.

@mail = ActionMailer::Base.deliveries.last — получаем последнее отосланное письмо

@host = ActionMailer::Base.default_url_options[:host] — откуда оно было отослано

@mail.should deliver_to(@user.email) — в письме должен быть корректный адрес получателя: пользователя, который был создан.

@mail.should deliver_from(Devise.mailer_sender) — отправить должен быть наш Devise, как установлено в настройках.

@mail.should have_subject(/Reset password instructions/) — тема письма тоже должна быть стандартной, если мы сами ничего не меняли.

@mail.should have_body_text(/#{@user.email}/) — в теле письма опять же должен упоминаться пользователь, вернее, его электронная почта, для которого восстанавливается пароль.

@reset_url_regexp = %r{&lt; a href=\"http://#{@host}/edit_password}

- небольшая регулярка для проверки, что в теле письма есть ссылка на восстановление пароля

@mail.should have_body_text(/#{@reset_url_regexp}/)

- проверка, что в теле письма есть данная ссылка

change_password_link = @mail.body.raw_source[/(http:\/\/.+\")/][0..-2]

- получаем ссылку из тела письма

visit change_password_link — переходим по этой ссылке

Ну а дальше уже всё просто: убеждаемся, что открылась нужная страница, заполняем новыми данными, и убеждаемся, что всё хорошо.

 
Не знаю, почему плагин так изуродовал код…..

Недавние записи

Оставить комментарий