Commit 9148fd24 authored by Etienne Baqué's avatar Etienne Baqué Committed by Paul Slaughter

Remove quota data for subgroups

Made namespace_eligible? publicly visible.
Added rspec accordingly.
parent 219df0a7
...@@ -19,12 +19,7 @@ module Ci ...@@ -19,12 +19,7 @@ module Ci
# Status of the monthly allowance being used. # Status of the monthly allowance being used.
def monthly_minutes_report def monthly_minutes_report
if enabled? Report.new(monthly_minutes_used, minutes_limit, report_status)
status = monthly_minutes_used_up? ? :over_quota : :under_quota
Report.new(monthly_minutes_used, monthly_minutes, status)
else
Report.new(monthly_minutes_used, 'Unlimited', :disabled)
end
end end
def monthly_percent_used def monthly_percent_used
...@@ -65,12 +60,28 @@ module Ci ...@@ -65,12 +60,28 @@ module Ci
100 * total_minutes_remaining.to_i / total_minutes 100 * total_minutes_remaining.to_i / total_minutes
end end
private
def namespace_eligible? def namespace_eligible?
namespace.root? && namespace.any_project_with_shared_runners_enabled? namespace.root? && namespace.any_project_with_shared_runners_enabled?
end end
private
def minutes_limit
return monthly_minutes if enabled?
if namespace_eligible?
_('Unlimited')
else
_('Not supported')
end
end
def report_status
return :disabled unless enabled?
monthly_minutes_used_up? ? :over_quota : :under_quota
end
def total_minutes_remaining def total_minutes_remaining
[total_minutes.to_i - total_minutes_used, 0].max [total_minutes.to_i - total_minutes_used, 0].max
end end
......
- namespace = local_assigns.fetch(:namespace) - namespace = local_assigns.fetch(:namespace)
- minutes_quota = namespace.ci_minutes_quota - minutes_quota = namespace.ci_minutes_quota
- if namespace.any_project_with_shared_runners_enabled? - if minutes_quota.namespace_eligible?
%li %li
%span.light Pipeline minutes quota: %span.light= _('Pipeline minutes quota:')
%strong %strong
= ci_minutes_report(minutes_quota.monthly_minutes_report) = ci_minutes_report(minutes_quota.monthly_minutes_report)
= link_to sprite_icon('question-o'), help_page_path('user/admin_area/settings/continuous_integration', anchor: 'shared-runners-pipeline-minutes-quota'), target: '_blank' = link_to sprite_icon('question-o'), help_page_path('user/admin_area/settings/continuous_integration', anchor: 'shared-runners-pipeline-minutes-quota'), target: '_blank'
---
title: Remove quota data for subgroups
merge_request: 50163
author:
type: fixed
...@@ -25,7 +25,7 @@ RSpec.describe 'Profile > Usage Quota' do ...@@ -25,7 +25,7 @@ RSpec.describe 'Profile > Usage Quota' do
describe 'shared runners use' do describe 'shared runners use' do
where(:shared_runners_enabled, :used, :quota, :usage_class, :usage_text) do where(:shared_runners_enabled, :used, :quota, :usage_class, :usage_text) do
false | 300 | 500 | 'success' | '300 / Unlimited minutes 0% used' false | 300 | 500 | 'success' | '300 / Not supported minutes 0% used'
true | 300 | nil | 'success' | '300 / Unlimited minutes Unlimited' true | 300 | nil | 'success' | '300 / Unlimited minutes Unlimited'
true | 300 | 500 | 'success' | '300 / 500 minutes 60% used' true | 300 | 500 | 'success' | '300 / 500 minutes 60% used'
true | 1000 | 500 | 'danger' | '1000 / 500 minutes 200% used' true | 1000 | 500 | 'danger' | '1000 / 500 minutes 200% used'
......
...@@ -55,19 +55,35 @@ RSpec.describe EE::NamespacesHelper do ...@@ -55,19 +55,35 @@ RSpec.describe EE::NamespacesHelper do
describe 'rendering monthly minutes report' do describe 'rendering monthly minutes report' do
let(:report) { quota.monthly_minutes_report } let(:report) { quota.monthly_minutes_report }
context "when it's unlimited" do context "when ci minutes quota is not enabled" do
before do before do
allow(user_group).to receive(:shared_runners_minutes_limit_enabled?).and_return(false) allow(user_group).to receive(:shared_runners_minutes_limit_enabled?).and_return(false)
end end
it 'returns Unlimited for the limit section' do context 'and the namespace is eligible for unlimited' do
expect(helper.ci_minutes_report(report)).to match(%r{0 / Unlimited}) before do
allow(quota).to receive(:namespace_eligible?).and_return(true)
end
it 'returns Unlimited for the limit section' do
expect(helper.ci_minutes_report(report)).to match(%r{0 / Unlimited})
end
it 'returns the proper value for the used section' do
allow(user_group).to receive(:shared_runners_seconds).and_return(100 * 60)
expect(helper.ci_minutes_report(report)).to match(%r{100 / Unlimited})
end
end end
it 'returns the proper value for the used section' do context 'and the namespace is not eligible for unlimited' do
allow(user_group).to receive(:shared_runners_seconds).and_return(100 * 60) before do
allow(quota).to receive(:namespace_eligible?).and_return(false)
end
expect(helper.ci_minutes_report(report)).to match(%r{100 / Unlimited}) it 'returns Not supported for the limit section' do
expect(helper.ci_minutes_report(report)).to match(%r{0 / Not supported})
end
end end
end end
......
...@@ -4,14 +4,14 @@ require 'spec_helper' ...@@ -4,14 +4,14 @@ require 'spec_helper'
RSpec.describe Ci::Minutes::Quota do RSpec.describe Ci::Minutes::Quota do
using RSpec::Parameterized::TableSyntax using RSpec::Parameterized::TableSyntax
let_it_be(:namespace) do let_it_be_with_reload(:namespace) do
create(:namespace, namespace_statistics: create(:namespace_statistics)) create(:namespace, namespace_statistics: create(:namespace_statistics))
end end
let(:quota) { described_class.new(namespace) } let(:quota) { described_class.new(namespace) }
describe '#enabled?' do describe '#enabled?' do
let_it_be(:project) { create(:project, namespace: namespace) } let(:project) { create(:project, namespace: namespace) }
subject { quota.enabled? } subject { quota.enabled? }
...@@ -64,32 +64,49 @@ RSpec.describe Ci::Minutes::Quota do ...@@ -64,32 +64,49 @@ RSpec.describe Ci::Minutes::Quota do
end end
describe '#monthly_minutes_report' do describe '#monthly_minutes_report' do
context 'when unlimited' do context 'when the quota is not enabled' do
before do before do
allow(quota).to receive(:enabled?).and_return(false) allow(quota).to receive(:enabled?).and_return(false)
allow(quota).to receive(:namespace_eligible?).and_return(namespace_eligible)
end end
context 'when minutes are not used' do context 'when the namespace is not eligible' do
it 'returns unlimited report with no usage' do let(:namespace_eligible) { false }
it 'returns not supported report with no usage' do
report = quota.monthly_minutes_report report = quota.monthly_minutes_report
expect(report.limit).to eq 'Unlimited' expect(report.limit).to eq 'Not supported'
expect(report.used).to eq 0 expect(report.used).to eq 0
expect(report.status).to eq :disabled expect(report.status).to eq :disabled
end end
end end
context 'when minutes are used' do context 'when the namespace is eligible' do
before do let(:namespace_eligible) { true }
namespace.namespace_statistics.shared_runners_seconds = 20.minutes
context 'when minutes are not used' do
it 'returns unlimited report with no usage' do
report = quota.monthly_minutes_report
expect(report.limit).to eq 'Unlimited'
expect(report.used).to eq 0
expect(report.status).to eq :disabled
end
end end
it 'returns unlimited report with usage' do context 'when minutes are used' do
report = quota.monthly_minutes_report before do
namespace.namespace_statistics.shared_runners_seconds = 20.minutes
end
expect(report.limit).to eq 'Unlimited' it 'returns unlimited report with usage' do
expect(report.used).to eq 20 report = quota.monthly_minutes_report
expect(report.status).to eq :disabled
expect(report.limit).to eq 'Unlimited'
expect(report.used).to eq 20
expect(report.status).to eq :disabled
end
end end
end end
end end
...@@ -373,4 +390,38 @@ RSpec.describe Ci::Minutes::Quota do ...@@ -373,4 +390,38 @@ RSpec.describe Ci::Minutes::Quota do
it { is_expected.to eq(result) } it { is_expected.to eq(result) }
end end
end end
describe '#namespace_eligible?' do
subject { quota.namespace_eligible? }
context 'when namespace is a subgroup' do
it 'is false' do
allow(namespace).to receive(:root?).and_return(false)
expect(subject).to be_falsey
end
end
context 'when namespace is root' do
before do
create(:project, namespace: namespace, shared_runners_enabled: shared_runners_enabled)
end
context 'and it has a project without any shared runner enabled' do
let(:shared_runners_enabled) { false }
it 'is false' do
expect(subject).to be_falsey
end
end
context 'and it has a project with shared runner enabled' do
let(:shared_runners_enabled) { true }
it 'is true' do
expect(subject).to be_truthy
end
end
end
end
end end
...@@ -19118,6 +19118,9 @@ msgstr "" ...@@ -19118,6 +19118,9 @@ msgstr ""
msgid "Not started" msgid "Not started"
msgstr "" msgstr ""
msgid "Not supported"
msgstr ""
msgid "Note" msgid "Note"
msgstr "" msgstr ""
...@@ -20317,6 +20320,9 @@ msgstr "" ...@@ -20317,6 +20320,9 @@ msgstr ""
msgid "Pipeline minutes quota" msgid "Pipeline minutes quota"
msgstr "" msgstr ""
msgid "Pipeline minutes quota:"
msgstr ""
msgid "Pipeline ran in fork of project" msgid "Pipeline ran in fork of project"
msgstr "" msgstr ""
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment