require "application_system_test_case"

class UserEmailChangeTest < ApplicationSystemTestCase
  include ActionMailer::TestHelper

  def setup
    stub_request(:get, /.*gravatar.com.*d=404/).to_return(:status => 404)
  end

  test "User can change their email address" do
    user = create(:user)
    sign_in_as(user)

    assert_emails 1 do
      visit edit_account_path
      fill_in "New Email Address", :with => "new_tester@example.com"
      click_on "Save Changes"
      assert_equal "new_tester@example.com", user.reload.new_email
    end

    email = ActionMailer::Base.deliveries.first
    assert_equal 1, email.to.count
    assert_equal "new_tester@example.com", email.to.first
    assert_match %r{/user/confirm-email\?confirm_string=[A-Za-z0-9\-_%]+\s}, email.parts[0].parts[0].decoded

    if email.parts[0].parts[0].decoded =~ %r{(/user/confirm-email\?confirm_string=[A-Za-z0-9\-_%]+)\s}
      visit Regexp.last_match(1)
      assert page.has_css?("body.accounts-edit")
    end

    assert_equal "new_tester@example.com", user.reload.email

    ActionMailer::Base.deliveries.clear
  end
end
