Newer
Older
# 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
let(:referer) { "http://test.host/cats/foo" }
let(:invite_params) { {email_inviter: {emails: "abc@example.com"}} }
sign_in alice, scope: :user
request.env["HTTP_REFERER"] = referer
let(:invite_params) { {email_inviter: {emails: ""}} }
it "does not create an EmailInviter" do
expect(Workers::Mail::InviteEmail).not_to receive(:perform_async)
post :create, invite_params
it "returns to the previous page" do
post :create, invite_params
expect(response).to redirect_to referer
it "flashes an error" do
post :create, invite_params
expect(flash[:error]).to eq(I18n.t("invitations.create.empty"))
context "only valid emails" do
let(:emails) { "mbs@gmail.com" }
let(:invite_params) { {email_inviter: {emails: emails}} }
it "creates an InviteEmail worker" do
expect(Workers::Mail::InviteEmail).to receive(:perform_async).with(
emails, alice.id, invite_params[:email_inviter]
)
post :create, invite_params
it "returns to the previous page on success" do
post :create, invite_params
expect(response).to redirect_to referer
it "flashes a notice" do
post :create, invite_params
expected = I18n.t("invitations.create.sent", emails: emails)
expect(flash[:notice]).to eq(expected)
context "only invalid emails" do
let(:emails) { "invalid_email" }
let(:invite_params) { {email_inviter: {emails: emails}} }
it "does not create an InviteEmail worker" do
expect(Workers::Mail::InviteEmail).not_to receive(:perform_async)
post :create, invite_params
it "returns to the previous page" do
post :create, invite_params
expect(response).to redirect_to referer
post :create, invite_params
expected = I18n.t("invitations.create.rejected", emails: emails)
context "mixed valid and invalid emails" do
let(:valid_emails) { "foo@bar.com,mbs@gmail.com" }
let(:invalid_emails) { "invalid_email" }
let(:invite_params) { {email_inviter: {emails: valid_emails + "," + invalid_emails}} }
it "creates an InviteEmail worker" do
expect(Workers::Mail::InviteEmail).to receive(:perform_async).with(
valid_emails, alice.id, invite_params[:email_inviter]
)
post :create, invite_params
it "returns to the previous page" do
post :create, invite_params
expect(response).to redirect_to referer
post :create, invite_params
expected = I18n.t("invitations.create.sent", emails: valid_emails.split(",").join(", ")) + ". " +
I18n.t("invitations.create.rejected", emails: invalid_emails)
expect(flash[:error]).to eq(expected)
end
context "with registration disabled" do
before do
AppConfig.settings.enable_registrations = false
end
it "displays an error if invitations are closed" do
AppConfig.settings.invitations.open = false
post :create, invite_params
expect(flash[:error]).to eq(I18n.t("invitations.create.closed"))
end
it "displays an error when no invitations are left" do
alice.invitation_code.update_attributes(count: 0)
post :create, invite_params
expect(flash[:error]).to eq(I18n.t("invitations.create.no_more"))
end
end
it "does not display an error when registration is open" do
AppConfig.settings.invitations.open = false
alice.invitation_code.update_attributes(count: 0)
post :create, invite_params
expect(flash[:error]).to be_nil
end
describe '#new' do
it 'renders' do
sign_in alice, scope: :user
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
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)