183 lines
5.5 KiB
Ruby
183 lines
5.5 KiB
Ruby
# Copyright (c) 2010-2011, Diaspora Inc. This file is
|
|
# licensed under the Affero General Public License version 3 or later. See
|
|
# the COPYRIGHT file.
|
|
|
|
require 'spec_helper'
|
|
|
|
describe InvitationsController, :type => :controller do
|
|
|
|
before do
|
|
AppConfig.settings.invitations.open = true
|
|
@user = alice
|
|
@invite = {'email_inviter' => {'message' => "test", 'emails' => "abc@example.com"}}
|
|
end
|
|
|
|
describe "#create" do
|
|
before do
|
|
sign_in @user, scope: :user
|
|
allow(@controller).to receive(:current_user).and_return(@user)
|
|
@referer = 'http://test.host/cats/foo'
|
|
request.env["HTTP_REFERER"] = @referer
|
|
end
|
|
|
|
context "no emails" do
|
|
before do
|
|
@invite = {'email_inviter' => {'message' => "test", 'emails' => ""}}
|
|
end
|
|
|
|
it 'does not create an EmailInviter' do
|
|
expect(Workers::Mail::InviteEmail).not_to receive(:perform_async)
|
|
post :create, @invite
|
|
end
|
|
|
|
it 'returns to the previous page' do
|
|
post :create, @invite
|
|
expect(response).to redirect_to @referer
|
|
end
|
|
|
|
it 'flashes an error' do
|
|
post :create, @invite
|
|
expect(flash[:error]).to eq(I18n.t("invitations.create.empty"))
|
|
end
|
|
end
|
|
|
|
context 'only valid emails' do
|
|
before do
|
|
@emails = 'mbs@gmail.com'
|
|
@invite = {'email_inviter' => {'message' => "test", 'emails' => @emails}}
|
|
end
|
|
|
|
it 'creates an InviteEmail worker' do
|
|
inviter = double(:emails => [@emails], :send! => true)
|
|
expect(Workers::Mail::InviteEmail).to receive(:perform_async).with(@invite['email_inviter']['emails'], @user.id, @invite['email_inviter'])
|
|
post :create, @invite
|
|
end
|
|
|
|
it 'returns to the previous page on success' do
|
|
post :create, @invite
|
|
expect(response).to redirect_to @referer
|
|
end
|
|
|
|
it 'flashes a notice' do
|
|
post :create, @invite
|
|
expected = I18n.t('invitations.create.sent', :emails => @emails.split(',').join(', '))
|
|
expect(flash[:notice]).to eq(expected)
|
|
end
|
|
end
|
|
|
|
context 'only invalid emails' do
|
|
before do
|
|
@emails = 'invalid_email'
|
|
@invite = {'email_inviter' => {'message' => "test", 'emails' => @emails}}
|
|
end
|
|
|
|
it 'does not create an InviteEmail worker' do
|
|
expect(Workers::Mail::InviteEmail).not_to receive(:perform_async)
|
|
post :create, @invite
|
|
end
|
|
|
|
it 'returns to the previous page' do
|
|
post :create, @invite
|
|
expect(response).to redirect_to @referer
|
|
end
|
|
|
|
it "flashes an error" do
|
|
post :create, @invite
|
|
|
|
expected = I18n.t("invitations.create.rejected", emails: @emails.split(",").join(", "))
|
|
expect(flash[:error]).to eq(expected)
|
|
end
|
|
end
|
|
|
|
context 'mixed valid and invalid emails' do
|
|
before do
|
|
@valid_emails = 'foo@bar.com,mbs@gmail.com'
|
|
@invalid_emails = 'invalid'
|
|
@invite = {'email_inviter' => {'message' => "test", 'emails' =>
|
|
@valid_emails + ',' + @invalid_emails}}
|
|
end
|
|
|
|
it 'creates an InviteEmail worker' do
|
|
inviter = double(:emails => [@emails], :send! => true)
|
|
expect(Workers::Mail::InviteEmail).to receive(:perform_async).with(@valid_emails, @user.id, @invite['email_inviter'])
|
|
post :create, @invite
|
|
end
|
|
|
|
it 'returns to the previous page' do
|
|
post :create, @invite
|
|
expect(response).to redirect_to @referer
|
|
end
|
|
|
|
it "flashes a notice" do
|
|
post :create, @invite
|
|
expected = I18n.t("invitations.create.sent", emails: @valid_emails.split(",").join(", ")) + ". " +
|
|
I18n.t("invitations.create.rejected", emails: @invalid_emails.split(",").join(", "))
|
|
expect(flash[:error]).to eq(expected)
|
|
end
|
|
end
|
|
|
|
it 'redirects if invitations are closed' do
|
|
AppConfig.settings.invitations.open = false
|
|
|
|
post :create, @invite
|
|
expect(response).to be_redirect
|
|
end
|
|
end
|
|
|
|
describe '#new' do
|
|
it 'renders' do
|
|
sign_in @user, scope: :user
|
|
get :new
|
|
end
|
|
end
|
|
|
|
describe 'redirect logged out users to the sign in page' do
|
|
it 'redriects #new' do
|
|
get :new
|
|
expect(response).to be_redirect
|
|
expect(response).to redirect_to new_user_session_path
|
|
end
|
|
|
|
it 'redirects #create' do
|
|
post :create
|
|
expect(response).to be_redirect
|
|
expect(response).to redirect_to new_user_session_path
|
|
end
|
|
end
|
|
|
|
describe '.valid_email?' do
|
|
it 'returns false for empty email' do
|
|
expect(subject.send(:valid_email?, '')).to be false
|
|
end
|
|
|
|
it 'returns false for email without @-sign' do
|
|
expect(subject.send(:valid_email?, 'foo')).to be false
|
|
end
|
|
|
|
it 'returns true for valid email' do
|
|
expect(subject.send(:valid_email?, 'foo@bar.com')).to be true
|
|
end
|
|
end
|
|
|
|
describe '.html_safe_string_from_session_array' do
|
|
it 'returns "" for blank session[key]' do
|
|
expect(subject.send(:html_safe_string_from_session_array, :blank)).to eq ""
|
|
end
|
|
|
|
it 'returns "" if session[key] is not an array' do
|
|
session[:test_key] = "test"
|
|
expect(subject.send(:html_safe_string_from_session_array, :test_key)).to eq ""
|
|
end
|
|
|
|
it 'returns the correct value' do
|
|
session[:test_key] = ["test", "foo"]
|
|
expect(subject.send(:html_safe_string_from_session_array, :test_key)).to eq "test, foo"
|
|
end
|
|
|
|
it 'sets session[key] to nil' do
|
|
session[:test_key] = ["test"]
|
|
subject.send(:html_safe_string_from_session_array, :test_key)
|
|
expect(session[:test_key]).to be nil
|
|
end
|
|
end
|
|
end
|