|
|
|
@ -142,10 +142,136 @@ RSpec.describe User, type: :model do |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
describe '#confirm' do |
|
|
|
|
it 'sets email to unconfirmed_email' do |
|
|
|
|
user = Fabricate.build(:user, confirmed_at: Time.now.utc, unconfirmed_email: 'new-email@example.com') |
|
|
|
|
user.confirm |
|
|
|
|
expect(user.email).to eq 'new-email@example.com' |
|
|
|
|
let(:new_email) { 'new-email@example.com' } |
|
|
|
|
|
|
|
|
|
subject { user.confirm } |
|
|
|
|
|
|
|
|
|
before do |
|
|
|
|
allow(TriggerWebhookWorker).to receive(:perform_async) |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
context 'when the user is already confirmed' do |
|
|
|
|
let!(:user) { Fabricate(:user, confirmed_at: Time.now.utc, approved: true, unconfirmed_email: new_email) } |
|
|
|
|
|
|
|
|
|
it 'sets email to unconfirmed_email' do |
|
|
|
|
expect { subject }.to change { user.reload.email }.to(new_email) |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
it 'does not trigger the account.approved Web Hook' do |
|
|
|
|
subject |
|
|
|
|
expect(TriggerWebhookWorker).not_to have_received(:perform_async).with('account.approved', 'Account', user.account_id) |
|
|
|
|
end |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
context 'when the user is a new user' do |
|
|
|
|
let(:user) { Fabricate(:user, confirmed_at: nil, unconfirmed_email: new_email) } |
|
|
|
|
|
|
|
|
|
context 'when the user is already approved' do |
|
|
|
|
around(:example) do |example| |
|
|
|
|
registrations_mode = Setting.registrations_mode |
|
|
|
|
Setting.registrations_mode = 'approved' |
|
|
|
|
|
|
|
|
|
example.run |
|
|
|
|
|
|
|
|
|
Setting.registrations_mode = registrations_mode |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
before do |
|
|
|
|
user.approve! |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
it 'sets email to unconfirmed_email' do |
|
|
|
|
expect { subject }.to change { user.reload.email }.to(new_email) |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
it 'triggers the account.approved Web Hook' do |
|
|
|
|
user.confirm |
|
|
|
|
expect(TriggerWebhookWorker).to have_received(:perform_async).with('account.approved', 'Account', user.account_id).once |
|
|
|
|
end |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
context 'when the user does not require explicit approval' do |
|
|
|
|
around(:example) do |example| |
|
|
|
|
registrations_mode = Setting.registrations_mode |
|
|
|
|
Setting.registrations_mode = 'open' |
|
|
|
|
|
|
|
|
|
example.run |
|
|
|
|
|
|
|
|
|
Setting.registrations_mode = registrations_mode |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
it 'sets email to unconfirmed_email' do |
|
|
|
|
expect { subject }.to change { user.reload.email }.to(new_email) |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
it 'triggers the account.approved Web Hook' do |
|
|
|
|
user.confirm |
|
|
|
|
expect(TriggerWebhookWorker).to have_received(:perform_async).with('account.approved', 'Account', user.account_id).once |
|
|
|
|
end |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
context 'when the user requires explicit approval but is not approved' do |
|
|
|
|
around(:example) do |example| |
|
|
|
|
registrations_mode = Setting.registrations_mode |
|
|
|
|
Setting.registrations_mode = 'approved' |
|
|
|
|
|
|
|
|
|
example.run |
|
|
|
|
|
|
|
|
|
Setting.registrations_mode = registrations_mode |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
it 'sets email to unconfirmed_email' do |
|
|
|
|
expect { subject }.to change { user.reload.email }.to(new_email) |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
it 'does not trigger the account.approved Web Hook' do |
|
|
|
|
subject |
|
|
|
|
expect(TriggerWebhookWorker).to_not have_received(:perform_async).with('account.approved', 'Account', user.account_id) |
|
|
|
|
end |
|
|
|
|
end |
|
|
|
|
end |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
describe '#approve!' do |
|
|
|
|
subject { user.approve! } |
|
|
|
|
|
|
|
|
|
around(:example) do |example| |
|
|
|
|
registrations_mode = Setting.registrations_mode |
|
|
|
|
Setting.registrations_mode = 'approved' |
|
|
|
|
|
|
|
|
|
example.run |
|
|
|
|
|
|
|
|
|
Setting.registrations_mode = registrations_mode |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
before do |
|
|
|
|
allow(TriggerWebhookWorker).to receive(:perform_async) |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
context 'when the user is already confirmed' do |
|
|
|
|
let(:user) { Fabricate(:user, confirmed_at: Time.now.utc, approved: false) } |
|
|
|
|
|
|
|
|
|
it 'sets the approved flag' do |
|
|
|
|
expect { subject }.to change { user.reload.approved? }.to(true) |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
it 'triggers the account.approved Web Hook' do |
|
|
|
|
subject |
|
|
|
|
expect(TriggerWebhookWorker).to have_received(:perform_async).with('account.approved', 'Account', user.account_id).once |
|
|
|
|
end |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
context 'when the user is not confirmed' do |
|
|
|
|
let(:user) { Fabricate(:user, confirmed_at: nil, approved: false) } |
|
|
|
|
|
|
|
|
|
it 'sets the approved flag' do |
|
|
|
|
expect { subject }.to change { user.reload.approved? }.to(true) |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
it 'does not trigger the account.approved Web Hook' do |
|
|
|
|
subject |
|
|
|
|
expect(TriggerWebhookWorker).not_to have_received(:perform_async).with('account.approved', 'Account', user.account_id) |
|
|
|
|
end |
|
|
|
|
end |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|