+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