diff options
Diffstat (limited to 'spec/models/project_statistics_spec.rb')
-rw-r--r-- | spec/models/project_statistics_spec.rb | 82 |
1 files changed, 79 insertions, 3 deletions
diff --git a/spec/models/project_statistics_spec.rb b/spec/models/project_statistics_spec.rb index 738398a06f9..358873f9a2f 100644 --- a/spec/models/project_statistics_spec.rb +++ b/spec/models/project_statistics_spec.rb @@ -11,21 +11,37 @@ describe ProjectStatistics do it { is_expected.to belong_to(:namespace) } end + describe 'scopes' do + describe '.for_project_ids' do + it 'returns only requested projects' do + stats = create_list(:project_statistics, 3) + project_ids = stats[0..1].map { |s| s.project_id } + expected_ids = stats[0..1].map { |s| s.id } + + requested_stats = described_class.for_project_ids(project_ids).pluck(:id) + + expect(requested_stats).to eq(expected_ids) + end + end + end + describe 'statistics columns' do it "support values up to 8 exabytes" do statistics.update!( commit_count: 8.exabytes - 1, repository_size: 2.exabytes, + wiki_size: 1.exabytes, lfs_objects_size: 2.exabytes, - build_artifacts_size: 4.exabytes - 1 + build_artifacts_size: 3.exabytes - 1 ) statistics.reload expect(statistics.commit_count).to eq(8.exabytes - 1) expect(statistics.repository_size).to eq(2.exabytes) + expect(statistics.wiki_size).to eq(1.exabytes) expect(statistics.lfs_objects_size).to eq(2.exabytes) - expect(statistics.build_artifacts_size).to eq(4.exabytes - 1) + expect(statistics.build_artifacts_size).to eq(3.exabytes - 1) expect(statistics.storage_size).to eq(8.exabytes - 1) end end @@ -33,6 +49,7 @@ describe ProjectStatistics do describe '#total_repository_size' do it "sums repository and LFS object size" do statistics.repository_size = 2 + statistics.wiki_size = 6 statistics.lfs_objects_size = 3 statistics.build_artifacts_size = 4 @@ -40,10 +57,17 @@ describe ProjectStatistics do end end + describe '#wiki_size' do + it "is initialized with not null value" do + expect(statistics.wiki_size).to eq 0 + end + end + describe '#refresh!' do before do allow(statistics).to receive(:update_commit_count) allow(statistics).to receive(:update_repository_size) + allow(statistics).to receive(:update_wiki_size) allow(statistics).to receive(:update_lfs_objects_size) allow(statistics).to receive(:update_storage_size) end @@ -56,6 +80,7 @@ describe ProjectStatistics do it "sums all counters" do expect(statistics).to have_received(:update_commit_count) expect(statistics).to have_received(:update_repository_size) + expect(statistics).to have_received(:update_wiki_size) expect(statistics).to have_received(:update_lfs_objects_size) end end @@ -69,6 +94,45 @@ describe ProjectStatistics do expect(statistics).to have_received(:update_lfs_objects_size) expect(statistics).not_to have_received(:update_commit_count) expect(statistics).not_to have_received(:update_repository_size) + expect(statistics).not_to have_received(:update_wiki_size) + end + end + + context 'without repositories' do + it 'does not crash' do + expect(project.repository.exists?).to be_falsey + expect(project.wiki.repository.exists?).to be_falsey + + statistics.refresh! + + expect(statistics).to have_received(:update_commit_count) + expect(statistics).to have_received(:update_repository_size) + expect(statistics).to have_received(:update_wiki_size) + expect(statistics.repository_size).to eq(0) + expect(statistics.commit_count).to eq(0) + expect(statistics.wiki_size).to eq(0) + end + end + + context 'with deleted repositories' do + let(:project) { create(:project, :repository, :wiki_repo) } + + before do + Gitlab::GitalyClient::StorageSettings.allow_disk_access do + FileUtils.rm_rf(project.repository.path) + FileUtils.rm_rf(project.wiki.repository.path) + end + end + + it 'does not crash' do + statistics.refresh! + + expect(statistics).to have_received(:update_commit_count) + expect(statistics).to have_received(:update_repository_size) + expect(statistics).to have_received(:update_wiki_size) + expect(statistics.repository_size).to eq(0) + expect(statistics.commit_count).to eq(0) + expect(statistics.wiki_size).to eq(0) end end end @@ -95,6 +159,17 @@ describe ProjectStatistics do end end + describe '#update_wiki_size' do + before do + allow(project.wiki.repository).to receive(:size).and_return(34) + statistics.update_wiki_size + end + + it "stores the size of the wiki" do + expect(statistics.wiki_size).to eq 34.megabytes + end + end + describe '#update_lfs_objects_size' do let!(:lfs_object1) { create(:lfs_object, size: 23.megabytes) } let!(:lfs_object2) { create(:lfs_object, size: 34.megabytes) } @@ -114,12 +189,13 @@ describe ProjectStatistics do it "sums all storage counters" do statistics.update!( repository_size: 2, + wiki_size: 4, lfs_objects_size: 3 ) statistics.reload - expect(statistics.storage_size).to eq 5 + expect(statistics.storage_size).to eq 9 end end |