kanbanworkflowstimelinescrumrubyroadmapproject-planningproject-managementopenprojectangularissue-trackerifcgantt-chartganttbug-trackerboardsbcf
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
3.5 KiB
114 lines
3.5 KiB
require 'spec_helper'
|
|
|
|
RSpec.describe EnterpriseToken, type: :model do
|
|
let(:object) { OpenProject::Token.new }
|
|
subject { EnterpriseToken.new(encoded_token: 'foo') }
|
|
|
|
before do
|
|
RequestStore.delete :current_ee_token
|
|
allow(OpenProject::Configuration).to receive(:ee_manager_visible?).and_return(true)
|
|
end
|
|
|
|
describe 'existing token' do
|
|
before do
|
|
allow_any_instance_of(EnterpriseToken).to receive(:token_object).and_return(object)
|
|
subject.save!(validate: false)
|
|
end
|
|
|
|
context 'when inner token is active' do
|
|
it 'has an active token' do
|
|
expect(object).to receive(:expired?).and_return(false)
|
|
expect(EnterpriseToken.count).to eq(1)
|
|
expect(EnterpriseToken.current).to eq(subject)
|
|
expect(EnterpriseToken.current.encoded_token).to eq('foo')
|
|
expect(EnterpriseToken.show_banners?).to eq(false)
|
|
|
|
# Deleting it updates the current token
|
|
EnterpriseToken.current.destroy!
|
|
|
|
expect(EnterpriseToken.count).to eq(0)
|
|
expect(EnterpriseToken.current).to be_nil
|
|
end
|
|
|
|
it 'delegates to the token object' do
|
|
allow(object).to receive_messages(
|
|
subscriber: 'foo',
|
|
mail: 'bar',
|
|
starts_at: Date.today,
|
|
issued_at: Date.today,
|
|
expires_at: 'never',
|
|
restrictions: { foo: :bar }
|
|
)
|
|
|
|
expect(subject.subscriber).to eq('foo')
|
|
expect(subject.mail).to eq('bar')
|
|
expect(subject.starts_at).to eq(Date.today)
|
|
expect(subject.issued_at).to eq(Date.today)
|
|
expect(subject.expires_at).to eq('never')
|
|
expect(subject.restrictions).to eq(foo: :bar)
|
|
end
|
|
|
|
describe '#allows_to?' do
|
|
let(:service_double) { ::Authorization::EnterpriseService.new(subject) }
|
|
|
|
before do
|
|
expect(::Authorization::EnterpriseService)
|
|
.to receive(:new).twice.with(subject).and_return(service_double)
|
|
end
|
|
|
|
it 'forwards to EnterpriseTokenService for checks' do
|
|
expect(service_double)
|
|
.to receive(:call)
|
|
.with(:forbidden_action)
|
|
.and_return double('ServiceResult', result: false)
|
|
expect(service_double)
|
|
.to receive(:call)
|
|
.with(:allowed_action)
|
|
.and_return double('ServiceResult', result: true)
|
|
|
|
expect(EnterpriseToken.allows_to?(:forbidden_action)).to eq false
|
|
expect(EnterpriseToken.allows_to?(:allowed_action)).to eq true
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'when inner token is expired' do
|
|
before do
|
|
expect(object).to receive(:expired?).and_return(true)
|
|
end
|
|
|
|
it 'has an expired token' do
|
|
expect(EnterpriseToken.current).to eq(subject)
|
|
expect(EnterpriseToken.show_banners?).to eq(true)
|
|
end
|
|
end
|
|
|
|
context 'updating it with an invalid token' do
|
|
it 'will fail validations' do
|
|
subject.encoded_token = "bar"
|
|
expect(subject.save).to be_falsey
|
|
end
|
|
end
|
|
end
|
|
|
|
describe 'no token' do
|
|
it do
|
|
expect(EnterpriseToken.current).to be_nil
|
|
expect(EnterpriseToken.show_banners?).to eq(true)
|
|
end
|
|
end
|
|
|
|
describe 'invalid token' do
|
|
it 'appears as if no token is shown' do
|
|
expect(EnterpriseToken.current).to be_nil
|
|
expect(EnterpriseToken.show_banners?).to eq(true)
|
|
end
|
|
end
|
|
|
|
describe "Configuration file has `ee_manager_visible` set to false" do
|
|
it 'does not show banners promoting EE' do
|
|
expect(OpenProject::Configuration).to receive(:ee_manager_visible?).and_return(false)
|
|
expect(EnterpriseToken.show_banners?).to be_falsey
|
|
end
|
|
end
|
|
end
|
|
|