Commit 61c5a540 authored by Nick Thomas's avatar Nick Thomas

Rework pipeline quota specs

parent 5e58b905
require 'spec_helper' require 'spec_helper'
feature 'Profile > Pipeline Quota', :postgresql do describe 'Profile > Pipeline Quota' do
using RSpec::Parameterized::TableSyntax
set(:statistics) { create(:namespace_statistics) }
set(:namespace) { statistics.namespace }
set(:project) { create(:project, namespace: namespace) }
set(:other_project) { create(:project, namespace: namespace, shared_runners_enabled: false) }
set(:user) { namespace.owner }
before do before do
gitlab_sign_in(user) gitlab_sign_in(user)
end end
let(:user) { create(:user) }
let(:namespace) { create(:namespace, owner: user) }
let!(:project) { create(:project, namespace: namespace, shared_runners_enabled: true) }
it 'is linked within the profile page' do it 'is linked within the profile page' do
visit profile_path visit profile_path
...@@ -17,67 +21,44 @@ feature 'Profile > Pipeline Quota', :postgresql do ...@@ -17,67 +21,44 @@ feature 'Profile > Pipeline Quota', :postgresql do
end end
end end
context 'with no quota' do describe 'shared runners use' do
let(:namespace) { create(:namespace, :with_build_minutes, owner: user) } where(:shared_runners_enabled, :used, :quota, :usage_class, :usage_text) do
false | 300 | 500 | 'success' | '300 / Unlimited minutes Unlimited'
it 'shows correct group quota info' do true | 300 | nil | 'success' | '300 / Unlimited minutes Unlimited'
visit profile_pipeline_quota_path true | 300 | 500 | 'success' | '300 / 500 minutes 60% used'
true | 1000 | 500 | 'danger' | '1000 / 500 minutes 200% used'
page.within('.pipeline-quota') do
expect(page).to have_content("400 / Unlimited minutes")
expect(page).to have_selector('.progress-bar-success')
end
end
end end
context 'with no projects using shared runners' do with_them do
let(:namespace) { create(:namespace, :with_not_used_build_minutes_limit, owner: user) } let(:no_shared_runners_text) { 'This group has no projects which use shared runners' }
let!(:project) { create(:project, namespace: namespace, shared_runners_enabled: false) }
it 'shows correct group quota info' do before do
visit profile_pipeline_quota_path project.update!(shared_runners_enabled: shared_runners_enabled)
statistics.update!(shared_runners_seconds: used.minutes.to_i)
page.within('.pipeline-quota') do namespace.update!(shared_runners_minutes_limit: quota)
expect(page).to have_content("300 / Unlimited minutes")
expect(page).to have_selector('.progress-bar-success')
end
page.within('.pipeline-project-metrics') do
expect(page).to have_content('This group has no projects which use shared runners')
end
end
end
context 'minutes under quota' do
let(:namespace) { create(:namespace, :with_not_used_build_minutes_limit, owner: user) }
it 'shows correct group quota info' do
visit profile_pipeline_quota_path visit profile_pipeline_quota_path
page.within('.pipeline-quota') do
expect(page).to have_content("300 / 500 minutes")
expect(page).to have_content("60% used")
expect(page).to have_selector('.progress-bar-success')
end
end end
end
context 'minutes over quota' do
let(:namespace) { create(:namespace, :with_used_build_minutes_limit, owner: user) }
let!(:other_project) { create(:project, namespace: namespace, shared_runners_enabled: false) }
it 'shows correct group quota and projects info' do
visit profile_pipeline_quota_path
it 'shows the correct quota status' do
page.within('.pipeline-quota') do page.within('.pipeline-quota') do
expect(page).to have_content("1000 / 500 minutes") expect(page).to have_content(usage_text)
expect(page).to have_content("200% used") expect(page).to have_selector(".progress-bar-#{usage_class}")
expect(page).to have_selector('.progress-bar-danger') end
end end
it 'shows the correct per-project metrics' do
page.within('.pipeline-project-metrics') do page.within('.pipeline-project-metrics') do
expect(page).to have_content(project.name)
expect(page).not_to have_content(other_project.name) expect(page).not_to have_content(other_project.name)
if shared_runners_enabled
expect(page).to have_content(project.name)
expect(page).not_to have_content(no_shared_runners_text)
else
expect(page).not_to have_content(project.name)
expect(page).to have_content(no_shared_runners_text)
end
end
end end
end end
end end
......
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