summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/controllers/projects/runners_controller.rb2
-rw-r--r--app/models/project.rb5
-rw-r--r--db/migrate/20170925142221_add_group_runners_enabled_to_projects.rb16
-rw-r--r--db/migrate/20171030155459_create_project_settings.rb2
-rw-r--r--db/schema.rb3
-rw-r--r--spec/factories/projects.rb9
-rw-r--r--spec/models/project_spec.rb12
7 files changed, 30 insertions, 19 deletions
diff --git a/app/controllers/projects/runners_controller.rb b/app/controllers/projects/runners_controller.rb
index 87c19eeed3e..992e42d9348 100644
--- a/app/controllers/projects/runners_controller.rb
+++ b/app/controllers/projects/runners_controller.rb
@@ -53,7 +53,7 @@ class Projects::RunnersController < Projects::ApplicationController
end
def toggle_group_runners
- project.toggle!(:group_runners_enabled)
+ project.toggle_settings!(:group_runners_enabled)
redirect_to project_settings_ci_cd_path(@project)
end
diff --git a/app/models/project.rb b/app/models/project.rb
index dadd0755848..3daedc2b47d 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -249,6 +249,7 @@ class Project < ActiveRecord::Base
delegate :members, to: :team, prefix: true
delegate :add_user, :add_users, to: :team
delegate :add_guest, :add_reporter, :add_developer, :add_master, :add_role, to: :team
+ delegate :group_runners_enabled, :group_runners_enabled=, :group_runners_enabled?, to: :settings
# Validations
validates :creator, presence: true, on: :create
@@ -1893,6 +1894,10 @@ class Project < ActiveRecord::Base
[]
end
+ def toggle_settings!(settings_attribute)
+ settings.toggle!(settings_attribute)
+ end
+
private
def storage
diff --git a/db/migrate/20170925142221_add_group_runners_enabled_to_projects.rb b/db/migrate/20170925142221_add_group_runners_enabled_to_projects.rb
deleted file mode 100644
index 8df7be39ee1..00000000000
--- a/db/migrate/20170925142221_add_group_runners_enabled_to_projects.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-class AddGroupRunnersEnabledToProjects < ActiveRecord::Migration
- include Gitlab::Database::MigrationHelpers
-
- DOWNTIME = false
-
- disable_ddl_transaction!
-
- def up
- add_column_with_default :projects, :group_runners_enabled, :boolean, default: true
- add_concurrent_index :projects, :group_runners_enabled
- end
-
- def down
- remove_column :projects, :group_runners_enabled
- end
-end
diff --git a/db/migrate/20171030155459_create_project_settings.rb b/db/migrate/20171030155459_create_project_settings.rb
index eeb449505b8..ebbe4c64fbd 100644
--- a/db/migrate/20171030155459_create_project_settings.rb
+++ b/db/migrate/20171030155459_create_project_settings.rb
@@ -7,6 +7,8 @@ class CreateProjectSettings < ActiveRecord::Migration
def change
create_table :project_settings do |t|
t.references :project, index: true, foreign_key: { on_delete: :cascade }
+
+ t.boolean :group_runners_enabled, default: true, index: true
end
end
end
diff --git a/db/schema.rb b/db/schema.rb
index b199342dc15..9bb5c9d3c97 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -1506,8 +1506,10 @@ ActiveRecord::Schema.define(version: 20180418053107) do
create_table "project_settings", force: :cascade do |t|
t.integer "project_id"
+ t.boolean "group_runners_enabled", default: true
end
+ add_index "project_settings", ["group_runners_enabled"], name: "index_project_settings_on_group_runners_enabled", using: :btree
add_index "project_settings", ["project_id"], name: "index_project_settings_on_project_id", using: :btree
create_table "project_statistics", force: :cascade do |t|
@@ -1581,7 +1583,6 @@ ActiveRecord::Schema.define(version: 20180418053107) do
add_index "projects", ["created_at"], name: "index_projects_on_created_at", using: :btree
add_index "projects", ["creator_id"], name: "index_projects_on_creator_id", using: :btree
add_index "projects", ["description"], name: "index_projects_on_description_trigram", using: :gin, opclasses: {"description"=>"gin_trgm_ops"}
- add_index "projects", ["group_runners_enabled"], name: "index_projects_on_group_runners_enabled", using: :btree
add_index "projects", ["id"], name: "index_projects_on_id_partial_for_visibility", unique: true, where: "(visibility_level = ANY (ARRAY[10, 20]))", using: :btree
add_index "projects", ["last_activity_at"], name: "index_projects_on_last_activity_at", using: :btree
add_index "projects", ["last_repository_check_failed"], name: "index_projects_on_last_repository_check_failed", using: :btree
diff --git a/spec/factories/projects.rb b/spec/factories/projects.rb
index 1761b6e2a3b..ad33d09f78a 100644
--- a/spec/factories/projects.rb
+++ b/spec/factories/projects.rb
@@ -15,14 +15,18 @@ FactoryBot.define do
namespace
creator { group ? create(:user) : namespace&.owner }
- # Nest Project Feature attributes
transient do
+ # Nest Project Feature attributes
wiki_access_level ProjectFeature::ENABLED
builds_access_level ProjectFeature::ENABLED
snippets_access_level ProjectFeature::ENABLED
issues_access_level ProjectFeature::ENABLED
merge_requests_access_level ProjectFeature::ENABLED
repository_access_level ProjectFeature::ENABLED
+
+ # we can't assign the delegated `#settings` attributes directly, as the
+ # `#settings` relation needs to be created first
+ group_runners_enabled nil
end
after(:create) do |project, evaluator|
@@ -47,6 +51,9 @@ FactoryBot.define do
end
project.group&.refresh_members_authorized_projects
+
+ # assign the delegated `#settings` attributes after create
+ project.reload.group_runners_enabled = evaluator.group_runners_enabled unless evaluator.group_runners_enabled.nil?
end
trait :public do
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index e0f442a334c..ed28cd50e4d 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -3640,4 +3640,16 @@ describe Project do
it { is_expected.not_to be_valid }
end
end
+
+ describe '#toggle_settings!' do
+ it 'toggles the value on #settings' do
+ project = create :project, group_runners_enabled: false
+
+ expect(project.group_runners_enabled).to be false
+
+ project.toggle_settings!(:group_runners_enabled)
+
+ expect(project.group_runners_enabled).to be true
+ end
+ end
end