mirror of
https://github.com/neocities/neocities.git
synced 2025-04-24 17:22:35 +02:00
167 lines
5.4 KiB
Ruby
167 lines
5.4 KiB
Ruby
require_relative '../environment.rb'
|
|
|
|
describe 'site/settings' do
|
|
describe 'email' do
|
|
include Capybara::DSL
|
|
|
|
before do
|
|
EmailWorker.jobs.clear
|
|
@email = "#{SecureRandom.uuid.gsub('-', '')}@exampleedsdfdsf.com"
|
|
@site = Fabricate :site, email: @email
|
|
page.set_rack_session id: @site.id
|
|
visit '/settings'
|
|
end
|
|
|
|
it 'should change email' do
|
|
original_email = @site.email
|
|
@site.password_reset_token = 'shouldgoaway'
|
|
@site.save
|
|
@new_email = "#{SecureRandom.uuid.gsub('-', '')}@exampleedsdfdsf.com"
|
|
fill_in 'email', with: @new_email
|
|
click_button 'Change Email'
|
|
|
|
_(page).must_have_content /enter the confirmation code here/
|
|
|
|
fill_in 'token', with: @site.reload.email_confirmation_token
|
|
click_button 'Confirm Email'
|
|
|
|
_(page).must_have_content /Email address changed/i
|
|
|
|
@site.reload
|
|
_(@site.email).must_equal @new_email
|
|
_(@site.password_reset_token).must_be_nil
|
|
|
|
_(EmailWorker.jobs.length).must_equal 2
|
|
|
|
args = EmailWorker.jobs.select {|job| job['args'].first['subject'] =~ /confirm your email address/i}.first['args'].first
|
|
_(args['to']).must_equal @new_email
|
|
_(args['subject']).must_match /confirm your email address/i
|
|
_(args['body']).must_match /hello #{@site.username}/i
|
|
_(args['body']).must_match /#{@site.email_confirmation_token}/
|
|
|
|
args = EmailWorker.jobs.select {|job| job['args'].first['subject'] =~ /your email address.+changed/i}.first['args'].first
|
|
_(args['body']).must_match /previous email.+#{original_email}/
|
|
_(args['body']).must_match /new email.+#{@site.email}/
|
|
end
|
|
|
|
it 'should fail for invalid email address' do
|
|
@new_email = SecureRandom.uuid.gsub '-', ''
|
|
fill_in 'email', with: @new_email
|
|
click_button 'Change Email'
|
|
_(page).must_have_content /a valid email address is required/i
|
|
@site.reload
|
|
_(@site.email).wont_equal @new_email
|
|
_(EmailWorker.jobs.empty?).must_equal true
|
|
end
|
|
|
|
it 'should fail for existing email' do
|
|
@existing_email = "#{SecureRandom.uuid.gsub('-', '')}@exampleedsdfdsf.com"
|
|
@existing_site = Fabricate :site, email: @existing_email
|
|
|
|
fill_in 'email', with: @existing_email
|
|
click_button 'Change Email'
|
|
_(page).must_have_content /this email address already exists on neocities/i
|
|
@site.reload
|
|
_(@site.email).wont_equal @new_email
|
|
_(EmailWorker.jobs.empty?).must_equal true
|
|
end
|
|
|
|
it 'should update email preferences' do
|
|
uncheck 'send_emails'
|
|
uncheck 'send_comment_emails'
|
|
uncheck 'send_follow_emails'
|
|
|
|
_(@site.send_emails).must_equal true
|
|
_(@site.send_comment_emails).must_equal true
|
|
_(@site.send_follow_emails).must_equal true
|
|
|
|
click_button 'Update Notification Settings'
|
|
@site.reload
|
|
_(@site.send_emails).must_equal false
|
|
_(@site.send_comment_emails).must_equal false
|
|
_(@site.send_follow_emails).must_equal false
|
|
end
|
|
end
|
|
|
|
describe 'unsubscribe email' do
|
|
include Capybara::DSL
|
|
|
|
before do
|
|
@email = "#{SecureRandom.uuid.gsub('-', '')}@exampleedsdfdsf.com"
|
|
@site = Fabricate :site, email: @email
|
|
EmailWorker.jobs.clear
|
|
Mail::TestMailer.deliveries.clear
|
|
|
|
@params = {
|
|
email: @site.email,
|
|
token: Site.email_unsubscribe_token(@site.email)
|
|
}
|
|
@params_query = Rack::Utils.build_query(@params)
|
|
|
|
@email_unsubscribe_url = "https://neocities.org/settings/unsubscribe_email?"+@params_query
|
|
page.set_rack_session id: nil
|
|
end
|
|
|
|
it 'should redirect to settings page if logged in' do
|
|
page.set_rack_session id: @site.id
|
|
|
|
end
|
|
|
|
it 'should unsubscribe for valid token' do
|
|
@site.send_email subject: 'Hello', body: 'Okay'
|
|
EmailWorker.drain
|
|
email = Mail::TestMailer.deliveries.first
|
|
|
|
_(email.body.to_s).must_match @email_unsubscribe_url
|
|
_(@site.send_emails).must_equal true
|
|
visit '/settings/unsubscribe_email?'+@params_query
|
|
|
|
_(page.body).must_match /You have been successfully unsubscribed.+#{@site.email}/i
|
|
|
|
_(@site.reload.send_emails).must_equal false
|
|
end
|
|
|
|
it 'should fail to subscribe for bad token' do
|
|
|
|
end
|
|
end
|
|
|
|
describe 'change password' do
|
|
include Capybara::DSL
|
|
|
|
before do
|
|
EmailWorker.jobs.clear
|
|
@site = Fabricate :site, password: 'derpie'
|
|
page.set_rack_session id: @site.id
|
|
visit '/settings'
|
|
end
|
|
|
|
it 'should change correctly' do
|
|
fill_in 'current_password', with: 'derpie'
|
|
fill_in 'new_password', with: 'derpie2'
|
|
fill_in 'new_password_confirm', with: 'derpie2'
|
|
click_button 'Change Password'
|
|
|
|
_(page).must_have_content /successfully changed password/i
|
|
@site.reload
|
|
_(@site.valid_password?('derpie')).must_equal false
|
|
_(@site.valid_password?('derpie2')).must_equal true
|
|
|
|
_(EmailWorker.jobs.select {|job| job['args'].first['subject'] =~ /password has been changed/i}.length).must_equal 1
|
|
end
|
|
|
|
it 'should not change for invalid current password' do
|
|
fill_in 'current_password', with: 'dademurphy'
|
|
fill_in 'new_password', with: 'derpie2'
|
|
fill_in 'new_password_confirm', with: 'derpie2'
|
|
click_button 'Change Password'
|
|
|
|
_(page).must_have_content /provided password does not match the current one/i
|
|
@site.reload
|
|
_(@site.valid_password?('derpie')).must_equal true
|
|
_(@site.valid_password?('derpie2')).must_equal false
|
|
|
|
_(EmailWorker.jobs.length).must_equal 0
|
|
end
|
|
end
|
|
end
|