summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorJacob Vosmaer <contact@jacobvosmaer.nl>2016-04-04 17:23:43 +0200
committerJacob Vosmaer <contact@jacobvosmaer.nl>2016-04-04 17:23:43 +0200
commitbf9526739b5c90790907c1d8b9410dd339e3d395 (patch)
treecce5be3bbb11b2baf2e5fce5c2e49339e552a7ca /spec
parent213ee62469c6518af8423f00fb902b7665d61204 (diff)
downloadgitlab-ce-bf9526739b5c90790907c1d8b9410dd339e3d395.tar.gz
Rebase repo check MR
Diffstat (limited to 'spec')
-rw-r--r--spec/features/admin/admin_projects_spec.rb37
-rw-r--r--spec/mailers/repo_check_mailer_spec.rb21
-rw-r--r--spec/workers/repo_check_worker_spec.rb31
3 files changed, 88 insertions, 1 deletions
diff --git a/spec/features/admin/admin_projects_spec.rb b/spec/features/admin/admin_projects_spec.rb
index 101d955d693..e3991d48ed6 100644
--- a/spec/features/admin/admin_projects_spec.rb
+++ b/spec/features/admin/admin_projects_spec.rb
@@ -1,6 +1,7 @@
require 'spec_helper'
+require 'rails_helper'
-describe "Admin::Projects", feature: true do
+describe "Admin Projects", feature: true do
before do
@project = create(:project)
login_as :admin
@@ -31,4 +32,38 @@ describe "Admin::Projects", feature: true do
expect(page).to have_content(@project.name)
end
end
+
+ feature 'repo checks' do
+ scenario 'trigger repo check' do
+ visit_admin_project_page
+
+ page.within('.repo-check') do
+ click_button 'Trigger repo check'
+ end
+
+ expect(page).to have_content('Repo check was triggered')
+ end
+
+ scenario 'see failed repo check' do
+ @project.update_column(:last_repo_check_failed, true)
+ visit_admin_project_page
+
+ expect(page).to have_content('Last repo check failed')
+ end
+
+ scenario 'clear repo checks', js: true do
+ @project.update_column(:last_repo_check_failed, true)
+ visit admin_namespaces_projects_path
+
+ page.within('.repo-check-states') do
+ click_link 'Clear all' # pop-up should be auto confirmed
+ end
+
+ expect(@project.reload.last_repo_check_failed).to eq(false)
+ end
+ end
+
+ def visit_admin_project_page
+ visit admin_namespace_project_path(@project.namespace, @project)
+ end
end
diff --git a/spec/mailers/repo_check_mailer_spec.rb b/spec/mailers/repo_check_mailer_spec.rb
new file mode 100644
index 00000000000..d49a6ae0c05
--- /dev/null
+++ b/spec/mailers/repo_check_mailer_spec.rb
@@ -0,0 +1,21 @@
+require 'rails_helper'
+
+describe RepoCheckMailer do
+ include EmailSpec::Matchers
+
+ describe '.notify' do
+ it 'emails all admins' do
+ admins = 3.times.map { create(:admin) }
+
+ mail = described_class.notify(1)
+
+ expect(mail).to deliver_to admins.map(&:email)
+ end
+
+ it 'mentions the number of failed checks' do
+ mail = described_class.notify(3)
+
+ expect(mail).to have_subject '3 projects failed their last repository check'
+ end
+ end
+end
diff --git a/spec/workers/repo_check_worker_spec.rb b/spec/workers/repo_check_worker_spec.rb
new file mode 100644
index 00000000000..7ef3eba9ac5
--- /dev/null
+++ b/spec/workers/repo_check_worker_spec.rb
@@ -0,0 +1,31 @@
+require 'spec_helper'
+
+describe RepoCheckWorker do
+ subject { RepoCheckWorker.new }
+
+ it 'prefers projects that have never been checked' do
+ projects = 3.times.map { create(:project) }
+ projects[0].update_column(:last_repo_check_at, 1.month.ago)
+ projects[2].update_column(:last_repo_check_at, 3.weeks.ago)
+
+ expect(subject.perform).to eq(projects.values_at(1, 0, 2).map(&:id))
+ end
+
+ it 'sorts projects by last_repo_check_at' do
+ projects = 3.times.map { create(:project) }
+ projects[0].update_column(:last_repo_check_at, 2.weeks.ago)
+ projects[1].update_column(:last_repo_check_at, 1.month.ago)
+ projects[2].update_column(:last_repo_check_at, 3.weeks.ago)
+
+ expect(subject.perform).to eq(projects.values_at(1, 2, 0).map(&:id))
+ end
+
+ it 'excludes projects that were checked recently' do
+ projects = 3.times.map { create(:project) }
+ projects[0].update_column(:last_repo_check_at, 2.days.ago)
+ projects[1].update_column(:last_repo_check_at, 1.month.ago)
+ projects[2].update_column(:last_repo_check_at, 3.days.ago)
+
+ expect(subject.perform).to eq([projects[1].id])
+ end
+end