diff options
Diffstat (limited to 'spec/controllers/invites_controller_spec.rb')
-rw-r--r-- | spec/controllers/invites_controller_spec.rb | 148 |
1 files changed, 87 insertions, 61 deletions
diff --git a/spec/controllers/invites_controller_spec.rb b/spec/controllers/invites_controller_spec.rb index a069a5dc050..3605699bb5d 100644 --- a/spec/controllers/invites_controller_spec.rb +++ b/spec/controllers/invites_controller_spec.rb @@ -3,96 +3,122 @@ require 'spec_helper' RSpec.describe InvitesController do - let(:token) { '123456' } let_it_be(:user) { create(:user) } - let(:member) { create(:project_member, :invited, invite_token: token, invite_email: user.email) } + let(:member) { create(:project_member, :invited, invite_email: user.email) } + let(:raw_invite_token) { member.raw_invite_token } let(:project_members) { member.source.users } let(:md5_member_global_id) { Digest::MD5.hexdigest(member.to_global_id.to_s) } + let(:params) { { id: raw_invite_token } } before do stub_application_setting(snowplow_enabled: true, snowplow_collector_hostname: 'localhost') controller.instance_variable_set(:@member, member) - sign_in(user) end describe 'GET #show' do - let(:params) { { id: token } } - subject(:request) { get :show, params: params } - it 'accepts user if invite email matches signed in user' do - expect do - request - end.to change { project_members.include?(user) }.from(false).to(true) - - expect(response).to have_gitlab_http_status(:found) - expect(flash[:notice]).to include 'You have been granted' - end + context 'when logged in' do + before do + sign_in(user) + end - it 'forces re-confirmation if email does not match signed in user' do - member.invite_email = 'bogus@email.com' + it 'accepts user if invite email matches signed in user' do + expect do + request + end.to change { project_members.include?(user) }.from(false).to(true) - expect do - request - end.not_to change { project_members.include?(user) } + expect(response).to have_gitlab_http_status(:found) + expect(flash[:notice]).to include 'You have been granted' + end - expect(response).to have_gitlab_http_status(:ok) - expect(flash[:notice]).to be_nil - end + it 'forces re-confirmation if email does not match signed in user' do + member.invite_email = 'bogus@email.com' - context 'when new_user_invite is not set' do - it 'does not track the user as experiment group' do - expect(Gitlab::Tracking).not_to receive(:event) + expect do + request + end.not_to change { project_members.include?(user) } - request + expect(response).to have_gitlab_http_status(:ok) + expect(flash[:notice]).to be_nil end - end - context 'when new_user_invite is experiment' do - let(:params) { { id: token, new_user_invite: 'experiment' } } + context 'when new_user_invite is not set' do + it 'does not track the user as experiment group' do + expect(Gitlab::Tracking).not_to receive(:event) - it 'tracks the user as experiment group' do - expect(Gitlab::Tracking).to receive(:event).and_call_original.with( - 'Growth::Acquisition::Experiment::InviteEmail', - 'opened', - property: 'experiment_group', - label: md5_member_global_id - ) - expect(Gitlab::Tracking).to receive(:event).and_call_original.with( - 'Growth::Acquisition::Experiment::InviteEmail', - 'accepted', - property: 'experiment_group', - label: md5_member_global_id - ) + request + end + end - request + context 'when new_user_invite is experiment' do + let(:params) { { id: raw_invite_token, new_user_invite: 'experiment' } } + + it 'tracks the user as experiment group' do + expect(Gitlab::Tracking).to receive(:event).and_call_original.with( + 'Growth::Acquisition::Experiment::InviteEmail', + 'opened', + property: 'experiment_group', + label: md5_member_global_id + ) + expect(Gitlab::Tracking).to receive(:event).and_call_original.with( + 'Growth::Acquisition::Experiment::InviteEmail', + 'accepted', + property: 'experiment_group', + label: md5_member_global_id + ) + + request + end + end + + context 'when new_user_invite is control' do + let(:params) { { id: raw_invite_token, new_user_invite: 'control' } } + + it 'tracks the user as control group' do + expect(Gitlab::Tracking).to receive(:event).and_call_original.with( + 'Growth::Acquisition::Experiment::InviteEmail', + 'opened', + property: 'control_group', + label: md5_member_global_id + ) + expect(Gitlab::Tracking).to receive(:event).and_call_original.with( + 'Growth::Acquisition::Experiment::InviteEmail', + 'accepted', + property: 'control_group', + label: md5_member_global_id + ) + + request + end end end - context 'when new_user_invite is control' do - let(:params) { { id: token, new_user_invite: 'control' } } + context 'when not logged in' do + context 'when inviter is a member' do + it 'is redirected to a new session with invite email param' do + request - it 'tracks the user as control group' do - expect(Gitlab::Tracking).to receive(:event).and_call_original.with( - 'Growth::Acquisition::Experiment::InviteEmail', - 'opened', - property: 'control_group', - label: md5_member_global_id - ) - expect(Gitlab::Tracking).to receive(:event).and_call_original.with( - 'Growth::Acquisition::Experiment::InviteEmail', - 'accepted', - property: 'control_group', - label: md5_member_global_id - ) + expect(response).to redirect_to(new_user_session_path(invite_email: member.invite_email)) + end + end - request + context 'when inviter is not a member' do + let(:params) { { id: '_bogus_token_' } } + + it 'is redirected to a new session' do + request + + expect(response).to redirect_to(new_user_session_path) + end end end end describe 'POST #accept' do - let(:params) { { id: token } } + before do + sign_in(user) + end subject(:request) { post :accept, params: params } @@ -105,7 +131,7 @@ RSpec.describe InvitesController do end context 'when new_user_invite is experiment' do - let(:params) { { id: token, new_user_invite: 'experiment' } } + let(:params) { { id: raw_invite_token, new_user_invite: 'experiment' } } it 'tracks the user as experiment group' do expect(Gitlab::Tracking).to receive(:event).and_call_original.with( @@ -120,7 +146,7 @@ RSpec.describe InvitesController do end context 'when new_user_invite is control' do - let(:params) { { id: token, new_user_invite: 'control' } } + let(:params) { { id: raw_invite_token, new_user_invite: 'control' } } it 'tracks the user as control group' do expect(Gitlab::Tracking).to receive(:event).and_call_original.with( |