diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-05-20 14:34:42 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-05-20 14:34:42 +0000 |
commit | 9f46488805e86b1bc341ea1620b866016c2ce5ed (patch) | |
tree | f9748c7e287041e37d6da49e0a29c9511dc34768 /spec/services/namespaces | |
parent | dfc92d081ea0332d69c8aca2f0e745cb48ae5e6d (diff) | |
download | gitlab-ce-9f46488805e86b1bc341ea1620b866016c2ce5ed.tar.gz |
Add latest changes from gitlab-org/gitlab@13-0-stable-ee
Diffstat (limited to 'spec/services/namespaces')
-rw-r--r-- | spec/services/namespaces/check_storage_size_service_spec.rb | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/spec/services/namespaces/check_storage_size_service_spec.rb b/spec/services/namespaces/check_storage_size_service_spec.rb new file mode 100644 index 00000000000..50359ef90ab --- /dev/null +++ b/spec/services/namespaces/check_storage_size_service_spec.rb @@ -0,0 +1,159 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Namespaces::CheckStorageSizeService, '#execute' do + let(:namespace) { build_stubbed(:namespace) } + let(:user) { build(:user, namespace: namespace) } + let(:service) { described_class.new(namespace, user) } + let(:current_size) { 150.megabytes } + let(:limit) { 100.megabytes } + + subject(:response) { service.execute } + + before do + allow(namespace).to receive(:root_ancestor).and_return(namespace) + + root_storage_size = instance_double("RootStorageSize", + current_size: current_size, + limit: limit, + usage_ratio: limit == 0 ? 0 : current_size.to_f / limit.to_f, + above_size_limit?: current_size > limit + ) + + expect(Namespace::RootStorageSize).to receive(:new).and_return(root_storage_size) + end + + context 'feature flag' do + it 'is successful when disabled' do + stub_feature_flags(namespace_storage_limit: false) + + expect(response).to be_success + end + + it 'errors when enabled' do + stub_feature_flags(namespace_storage_limit: true) + + expect(response).to be_error + end + + it 'is successful when feature flag is activated for another namespace' do + stub_feature_flags(namespace_storage_limit: build(:namespace)) + + expect(response).to be_success + end + + it 'errors when feature flag is activated for the current namespace' do + stub_feature_flags(namespace_storage_limit: namespace ) + + expect(response).to be_error + expect(response.message).to be_present + end + end + + context 'when limit is set to 0' do + let(:limit) { 0 } + + it 'is successful and has no payload' do + expect(response).to be_success + expect(response.payload).to be_empty + end + end + + context 'when current size is below threshold' do + let(:current_size) { 10.megabytes } + + it 'is successful and has no payload' do + expect(response).to be_success + expect(response.payload).to be_empty + end + end + + context 'when not admin of the namespace' do + let(:other_namespace) { build_stubbed(:namespace) } + + subject(:response) { described_class.new(other_namespace, user).execute } + + before do + allow(other_namespace).to receive(:root_ancestor).and_return(other_namespace) + end + + it 'errors and has no payload' do + expect(response).to be_error + expect(response.payload).to be_empty + end + end + + context 'when providing the child namespace' do + let(:namespace) { build_stubbed(:group) } + let(:child_namespace) { build_stubbed(:group, parent: namespace) } + + subject(:response) { described_class.new(child_namespace, user).execute } + + before do + allow(child_namespace).to receive(:root_ancestor).and_return(namespace) + namespace.add_owner(user) + end + + it 'uses the root namespace' do + expect(response).to be_error + end + end + + describe 'payload alert_level' do + subject { service.execute.payload[:alert_level] } + + context 'when above info threshold' do + let(:current_size) { 50.megabytes } + + it { is_expected.to eq(:info) } + end + + context 'when above warning threshold' do + let(:current_size) { 75.megabytes } + + it { is_expected.to eq(:warning) } + end + + context 'when above alert threshold' do + let(:current_size) { 95.megabytes } + + it { is_expected.to eq(:alert) } + end + + context 'when above error threshold' do + let(:current_size) { 100.megabytes } + + it { is_expected.to eq(:error) } + end + end + + describe 'payload explanation_message' do + subject(:response) { service.execute.payload[:explanation_message] } + + context 'when above limit' do + let(:current_size) { 110.megabytes } + + it 'returns message with read-only warning' do + expect(response).to include("#{namespace.name} is now read-only") + end + end + + context 'when below limit' do + let(:current_size) { 60.megabytes } + + it { is_expected.to include('If you reach 100% storage capacity') } + end + end + + describe 'payload usage_message' do + let(:current_size) { 60.megabytes } + + subject(:response) { service.execute.payload[:usage_message] } + + it 'returns current usage information' do + expect(response).to include("60 MB of 100 MB") + expect(response).to include("60%") + end + end +end |