From 07d7d8e65905a39164b63f55eccdcea8f10f5d14 Mon Sep 17 00:00:00 2001 From: James Edwards-Jones Date: Tue, 4 Apr 2017 03:37:22 +0100 Subject: [PATCH] Renamed ProtectedTag push_access_levels to create_access_levels --- .../protected_tags/protected_tag_create.js | 14 ++++++------ .../protected_tags/protected_tag_edit.js | 22 +++++++++---------- .../projects/protected_tags_controller.rb | 2 +- .../settings/repository_controller.rb | 5 ++--- app/models/protected_tag.rb | 6 ++--- ...access_level.rb => create_access_level.rb} | 2 +- .../_create_protected_tag.html.haml | 10 ++++----- .../protected_tags/_tags_list.html.haml | 2 +- .../protected_tags/_update_protected_tag.haml | 8 +++---- .../20170309173138_create_protected_tags.rb | 8 +++---- db/schema.rb | 12 +++++----- lib/gitlab/import_export/import_export.yml | 2 +- lib/gitlab/import_export/relation_factory.rb | 2 +- spec/factories/protected_tags.rb | 10 ++++----- .../protected_tags/access_control_ce_spec.rb | 20 ++++++++--------- spec/lib/gitlab/checks/change_access_spec.rb | 2 +- spec/lib/gitlab/import_export/all_models.yml | 3 ++- spec/lib/gitlab/user_access_spec.rb | 2 +- .../protected_tags/create_service_spec.rb | 4 ++-- 19 files changed, 68 insertions(+), 68 deletions(-) rename app/models/protected_tag/{push_access_level.rb => create_access_level.rb} (91%) diff --git a/app/assets/javascripts/protected_tags/protected_tag_create.js b/app/assets/javascripts/protected_tags/protected_tag_create.js index 4c652e7747f..84b1b232649 100644 --- a/app/assets/javascripts/protected_tags/protected_tag_create.js +++ b/app/assets/javascripts/protected_tags/protected_tag_create.js @@ -11,20 +11,20 @@ } buildDropdowns() { - const $allowedToPushDropdown = this.$wrap.find('.js-allowed-to-push'); + const $allowedToCreateDropdown = this.$wrap.find('.js-allowed-to-create'); // Cache callback this.onSelectCallback = this.onSelect.bind(this); - // Allowed to Push dropdown + // Allowed to Create dropdown new gl.ProtectedTagAccessDropdown({ - $dropdown: $allowedToPushDropdown, - data: gon.push_access_levels, + $dropdown: $allowedToCreateDropdown, + data: gon.create_access_levels, onSelect: this.onSelectCallback }); // Select default - $allowedToPushDropdown.data('glDropdown').selectRowAtIndex(0); + $allowedToCreateDropdown.data('glDropdown').selectRowAtIndex(0); // Protected tag dropdown new ProtectedTagDropdown({ @@ -37,9 +37,9 @@ onSelect() { // Enable submit button const $tagInput = this.$wrap.find('input[name="protected_tag[name]"]'); - const $allowedToPushInput = this.$wrap.find('input[name="protected_tag[push_access_levels_attributes][0][access_level]"]'); + const $allowedToCreateInput = this.$wrap.find('input[name="protected_tag[create_access_levels_attributes][0][access_level]"]'); - this.$form.find('input[type="submit"]').attr('disabled', !($tagInput.val() && $allowedToPushInput.length)); + this.$form.find('input[type="submit"]').attr('disabled', !($tagInput.val() && $allowedToCreateInput.length)); } }; })(window); diff --git a/app/assets/javascripts/protected_tags/protected_tag_edit.js b/app/assets/javascripts/protected_tags/protected_tag_edit.js index b93e903621e..0227be35c8f 100644 --- a/app/assets/javascripts/protected_tags/protected_tag_edit.js +++ b/app/assets/javascripts/protected_tags/protected_tag_edit.js @@ -7,27 +7,27 @@ gl.ProtectedTagEdit = class { constructor(options) { this.$wrap = options.$wrap; - this.$allowedToPushDropdown = this.$wrap.find('.js-allowed-to-push'); + this.$allowedToCreateDropdown = this.$wrap.find('.js-allowed-to-create'); this.buildDropdowns(); } buildDropdowns() { - // Allowed to push dropdown + // Allowed to create dropdown new gl.ProtectedTagAccessDropdown({ - $dropdown: this.$allowedToPushDropdown, - data: gon.push_access_levels, + $dropdown: this.$allowedToCreateDropdown, + data: gon.create_access_levels, onSelect: this.onSelect.bind(this) }); } onSelect() { - const $allowedToPushInput = this.$wrap.find(`input[name="${this.$allowedToPushDropdown.data('fieldName')}"]`); + const $allowedToCreateInput = this.$wrap.find(`input[name="${this.$allowedToCreateDropdown.data('fieldName')}"]`); // Do not update if one dropdown has not selected any option - if (!$allowedToPushInput.length) return; + if (!$allowedToCreateInput.length) return; - this.$allowedToPushDropdown.disable(); + this.$allowedToCreateDropdown.disable(); $.ajax({ type: 'POST', @@ -36,9 +36,9 @@ data: { _method: 'PATCH', protected_tag: { - push_access_levels_attributes: [{ - id: this.$allowedToPushDropdown.data('access-level-id'), - access_level: $allowedToPushInput.val() + create_access_levels_attributes: [{ + id: this.$allowedToCreateDropdown.data('access-level-id'), + access_level: $allowedToCreateInput.val() }] } }, @@ -47,7 +47,7 @@ new Flash('Failed to update tag!'); } }).always(() => { - this.$allowedToPushDropdown.enable(); + this.$allowedToCreateDropdown.enable(); }); } }; diff --git a/app/controllers/projects/protected_tags_controller.rb b/app/controllers/projects/protected_tags_controller.rb index ff132056aa4..0e00baedbdf 100644 --- a/app/controllers/projects/protected_tags_controller.rb +++ b/app/controllers/projects/protected_tags_controller.rb @@ -30,6 +30,6 @@ class Projects::ProtectedTagsController < Projects::ProtectedRefsController end def protected_ref_params - params.require(:protected_tag).permit(:name, push_access_levels_attributes: [:access_level, :id]) + params.require(:protected_tag).permit(:name, create_access_levels_attributes: [:access_level, :id]) end end diff --git a/app/controllers/projects/settings/repository_controller.rb b/app/controllers/projects/settings/repository_controller.rb index 9022cf8f0d8..44de8a49593 100644 --- a/app/controllers/projects/settings/repository_controller.rb +++ b/app/controllers/projects/settings/repository_controller.rb @@ -13,16 +13,15 @@ module Projects def define_protected_refs @protected_branches = @project.protected_branches.order(:name).page(params[:page]) - @protected_tags = @project.protected_tags.order(:name).page(params[:page]) #TODO duplicated pagination param? + @protected_tags = @project.protected_tags.order(:name).page(params[:page]) @protected_branch = @project.protected_branches.new @protected_tag = @project.protected_tags.new load_gon_index end def access_levels_options - #TODO: consider protected tags - #TODO: Refactor ProtectedBranch::PushAccessLevel so it doesn't mention branches { + create_access_levels: levels_for_dropdown(ProtectedTag::CreateAccessLevel), push_access_levels: levels_for_dropdown(ProtectedBranch::PushAccessLevel), merge_access_levels: levels_for_dropdown(ProtectedBranch::MergeAccessLevel) } diff --git a/app/models/protected_tag.rb b/app/models/protected_tag.rb index a52fe90bb2b..83964095516 100644 --- a/app/models/protected_tag.rb +++ b/app/models/protected_tag.rb @@ -2,11 +2,11 @@ class ProtectedTag < ActiveRecord::Base include Gitlab::ShellAdapter include ProtectedRef - has_many :push_access_levels, dependent: :destroy + has_many :create_access_levels, dependent: :destroy - validates :push_access_levels, length: { is: 1, message: "are restricted to a single instance per protected tag." } + validates :create_access_levels, length: { is: 1, message: "are restricted to a single instance per protected tag." } - accepts_nested_attributes_for :push_access_levels + accepts_nested_attributes_for :create_access_levels def self.protected?(project, ref_name) self.matching(ref_name, protected_refs: project.protected_tags).present? diff --git a/app/models/protected_tag/push_access_level.rb b/app/models/protected_tag/create_access_level.rb similarity index 91% rename from app/models/protected_tag/push_access_level.rb rename to app/models/protected_tag/create_access_level.rb index 9282af841ce..c7e1319719d 100644 --- a/app/models/protected_tag/push_access_level.rb +++ b/app/models/protected_tag/create_access_level.rb @@ -1,4 +1,4 @@ -class ProtectedTag::PushAccessLevel < ActiveRecord::Base +class ProtectedTag::CreateAccessLevel < ActiveRecord::Base include ProtectedTagAccess validates :access_level, presence: true, inclusion: { in: [Gitlab::Access::MASTER, diff --git a/app/views/projects/protected_tags/_create_protected_tag.html.haml b/app/views/projects/protected_tags/_create_protected_tag.html.haml index 9fdebf2c982..af332f942d6 100644 --- a/app/views/projects/protected_tags/_create_protected_tag.html.haml +++ b/app/views/projects/protected_tags/_create_protected_tag.html.haml @@ -19,14 +19,14 @@ %code production/* are supported .form-group - %label.col-md-2.text-right{ for: 'push_access_levels_attributes' } - Allowed to push: + %label.col-md-2.text-right{ for: 'create_access_levels_attributes' } + Allowed to create: .col-md-10 - .push_access_levels-container + .create_access_levels-container = dropdown_tag('Select', - options: { toggle_class: 'js-allowed-to-push wide', + options: { toggle_class: 'js-allowed-to-create wide', dropdown_class: 'dropdown-menu-selectable', - data: { field_name: 'protected_tag[push_access_levels_attributes][0][access_level]', input_id: 'push_access_levels_attributes' }}) + data: { field_name: 'protected_tag[create_access_levels_attributes][0][access_level]', input_id: 'create_access_levels_attributes' }}) .panel-footer = f.submit 'Protect', class: 'btn-create btn', disabled: true diff --git a/app/views/projects/protected_tags/_tags_list.html.haml b/app/views/projects/protected_tags/_tags_list.html.haml index 6f63971923d..cc006ed8a0b 100644 --- a/app/views/projects/protected_tags/_tags_list.html.haml +++ b/app/views/projects/protected_tags/_tags_list.html.haml @@ -17,7 +17,7 @@ %tr %th Protected tag (#{@protected_tags.size}) %th Last commit - %th Allowed to push + %th Allowed to create - if can_admin_project %th %tbody diff --git a/app/views/projects/protected_tags/_update_protected_tag.haml b/app/views/projects/protected_tags/_update_protected_tag.haml index 802a5ef3b98..62823bee46e 100644 --- a/app/views/projects/protected_tags/_update_protected_tag.haml +++ b/app/views/projects/protected_tags/_update_protected_tag.haml @@ -1,5 +1,5 @@ %td - = hidden_field_tag "allowed_to_push_#{protected_tag.id}", protected_tag.push_access_levels.first.access_level - = dropdown_tag( (protected_tag.push_access_levels.first.humanize || 'Select') , - options: { toggle_class: 'js-allowed-to-push', dropdown_class: 'dropdown-menu-selectable js-allowed-to-push-container', - data: { field_name: "allowed_to_push_#{protected_tag.id}", access_level_id: protected_tag.push_access_levels.first.id }}) + = hidden_field_tag "allowed_to_create_#{protected_tag.id}", protected_tag.create_access_levels.first.access_level + = dropdown_tag( (protected_tag.create_access_levels.first.humanize || 'Select') , + options: { toggle_class: 'js-allowed-to-create', dropdown_class: 'dropdown-menu-selectable js-allowed-to-create-container', + data: { field_name: "allowed_to_create_#{protected_tag.id}", access_level_id: protected_tag.create_access_levels.first.id }}) diff --git a/db/migrate/20170309173138_create_protected_tags.rb b/db/migrate/20170309173138_create_protected_tags.rb index 00794529143..538f28479c7 100644 --- a/db/migrate/20170309173138_create_protected_tags.rb +++ b/db/migrate/20170309173138_create_protected_tags.rb @@ -15,14 +15,14 @@ class CreateProtectedTags < ActiveRecord::Migration add_index :protected_tags, :project_id - create_table :protected_tag_push_access_levels do |t| - t.references :protected_tag, index: { name: "index_protected_tag_push_access" }, foreign_key: true, null: false + create_table :protected_tag_create_access_levels do |t| + t.references :protected_tag, index: { name: "index_protected_tag_create_access" }, foreign_key: true, null: false t.integer :access_level, default: GITLAB_ACCESS_MASTER, null: true t.references :user, foreign_key: true, index: true - t.integer :group_id#TODO: Should this have an index? Doesn't appear in brances #, index: true + t.integer :group_id t.timestamps null: false end - add_foreign_key :protected_tag_push_access_levels, :namespaces, column: :group_id # rubocop: disable Migration/AddConcurrentForeignKey + add_foreign_key :protected_tag_create_access_levels, :namespaces, column: :group_id # rubocop: disable Migration/AddConcurrentForeignKey end end diff --git a/db/schema.rb b/db/schema.rb index 650b18bb013..2a070583834 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -963,7 +963,7 @@ ActiveRecord::Schema.define(version: 20170315194013) do add_index "protected_branches", ["project_id"], name: "index_protected_branches_on_project_id", using: :btree - create_table "protected_tag_push_access_levels", force: :cascade do |t| + create_table "protected_tag_create_access_levels", force: :cascade do |t| t.integer "protected_tag_id", null: false t.integer "access_level", default: 40 t.integer "user_id" @@ -972,8 +972,8 @@ ActiveRecord::Schema.define(version: 20170315194013) do t.datetime "updated_at", null: false end - add_index "protected_tag_push_access_levels", ["protected_tag_id"], name: "index_protected_tag_push_access", using: :btree - add_index "protected_tag_push_access_levels", ["user_id"], name: "index_protected_tag_push_access_levels_on_user_id", using: :btree + add_index "protected_tag_create_access_levels", ["protected_tag_id"], name: "index_protected_tag_create_access", using: :btree + add_index "protected_tag_create_access_levels", ["user_id"], name: "index_protected_tag_create_access_levels_on_user_id", using: :btree create_table "protected_tags", force: :cascade do |t| t.integer "project_id", null: false @@ -1326,9 +1326,9 @@ ActiveRecord::Schema.define(version: 20170315194013) do add_foreign_key "project_statistics", "projects", on_delete: :cascade add_foreign_key "protected_branch_merge_access_levels", "protected_branches" add_foreign_key "protected_branch_push_access_levels", "protected_branches" - add_foreign_key "protected_tag_push_access_levels", "namespaces", column: "group_id" - add_foreign_key "protected_tag_push_access_levels", "protected_tags" - add_foreign_key "protected_tag_push_access_levels", "users" + add_foreign_key "protected_tag_create_access_levels", "namespaces", column: "group_id" + add_foreign_key "protected_tag_create_access_levels", "protected_tags" + add_foreign_key "protected_tag_create_access_levels", "users" add_foreign_key "subscriptions", "projects", on_delete: :cascade add_foreign_key "timelogs", "issues", name: "fk_timelogs_issues_issue_id", on_delete: :cascade add_foreign_key "timelogs", "merge_requests", name: "fk_timelogs_merge_requests_merge_request_id", on_delete: :cascade diff --git a/lib/gitlab/import_export/import_export.yml b/lib/gitlab/import_export/import_export.yml index 7bf5568a8ee..25e03ec64d3 100644 --- a/lib/gitlab/import_export/import_export.yml +++ b/lib/gitlab/import_export/import_export.yml @@ -47,7 +47,7 @@ project_tree: - :merge_access_levels - :push_access_levels - protected_tags: - - :push_access_levels + - :create_access_levels - :project_feature # Only include the following attributes for the models specified. diff --git a/lib/gitlab/import_export/relation_factory.rb b/lib/gitlab/import_export/relation_factory.rb index b1d8e385f2e..430de9a1bf8 100644 --- a/lib/gitlab/import_export/relation_factory.rb +++ b/lib/gitlab/import_export/relation_factory.rb @@ -9,7 +9,7 @@ module Gitlab hooks: 'ProjectHook', merge_access_levels: 'ProtectedBranch::MergeAccessLevel', push_access_levels: 'ProtectedBranch::PushAccessLevel', - #TODO: How to add?- push_access_levels: 'ProtectedTag::PushAccessLevel', + create_access_levels: 'ProtectedTag::CreateAccessLevel', labels: :project_labels, priorities: :label_priorities, label: :project_label }.freeze diff --git a/spec/factories/protected_tags.rb b/spec/factories/protected_tags.rb index f0016b37d66..d8e90ae1ee1 100644 --- a/spec/factories/protected_tags.rb +++ b/spec/factories/protected_tags.rb @@ -4,18 +4,18 @@ FactoryGirl.define do project after(:build) do |protected_tag| - protected_tag.push_access_levels.new(access_level: Gitlab::Access::MASTER) + protected_tag.create_access_levels.new(access_level: Gitlab::Access::MASTER) end - trait :developers_can_push do + trait :developers_can_create do after(:create) do |protected_tag| - protected_tag.push_access_levels.first.update!(access_level: Gitlab::Access::DEVELOPER) + protected_tag.create_access_levels.first.update!(access_level: Gitlab::Access::DEVELOPER) end end - trait :no_one_can_push do + trait :no_one_can_create do after(:create) do |protected_tag| - protected_tag.push_access_levels.first.update!(access_level: Gitlab::Access::NO_ACCESS) + protected_tag.create_access_levels.first.update!(access_level: Gitlab::Access::NO_ACCESS) end end end diff --git a/spec/features/protected_tags/access_control_ce_spec.rb b/spec/features/protected_tags/access_control_ce_spec.rb index d7152926629..33a07786007 100644 --- a/spec/features/protected_tags/access_control_ce_spec.rb +++ b/spec/features/protected_tags/access_control_ce_spec.rb @@ -1,23 +1,23 @@ RSpec.shared_examples "protected tags > access control > CE" do - ProtectedTag::PushAccessLevel.human_access_levels.each do |(access_type_id, access_type_name)| - it "allows creating protected tags that #{access_type_name} can push to" do + ProtectedTag::CreateAccessLevel.human_access_levels.each do |(access_type_id, access_type_name)| + it "allows creating protected tags that #{access_type_name} can create" do visit namespace_project_protected_tags_path(project.namespace, project) set_protected_tag_name('master') within('.new_protected_tag') do - allowed_to_push_button = find(".js-allowed-to-push") + allowed_to_create_button = find(".js-allowed-to-create") - unless allowed_to_push_button.text == access_type_name - allowed_to_push_button.click + unless allowed_to_create_button.text == access_type_name + allowed_to_create_button.click within(".dropdown.open .dropdown-menu") { click_on access_type_name } end end click_on "Protect" expect(ProtectedTag.count).to eq(1) - expect(ProtectedTag.last.push_access_levels.map(&:access_level)).to eq([access_type_id]) + expect(ProtectedTag.last.create_access_levels.map(&:access_level)).to eq([access_type_id]) end - it "allows updating protected tags so that #{access_type_name} can push to them" do + it "allows updating protected tags so that #{access_type_name} can create them" do visit namespace_project_protected_tags_path(project.namespace, project) set_protected_tag_name('master') click_on "Protect" @@ -25,16 +25,16 @@ RSpec.shared_examples "protected tags > access control > CE" do expect(ProtectedTag.count).to eq(1) within(".protected-tags-list") do - find(".js-allowed-to-push").click + find(".js-allowed-to-create").click - within('.js-allowed-to-push-container') do + within('.js-allowed-to-create-container') do expect(first("li")).to have_content("Roles") click_on access_type_name end end wait_for_ajax - expect(ProtectedTag.last.push_access_levels.map(&:access_level)).to include(access_type_id) + expect(ProtectedTag.last.create_access_levels.map(&:access_level)).to include(access_type_id) end end end diff --git a/spec/lib/gitlab/checks/change_access_spec.rb b/spec/lib/gitlab/checks/change_access_spec.rb index afc29baa7e6..959ae02c222 100644 --- a/spec/lib/gitlab/checks/change_access_spec.rb +++ b/spec/lib/gitlab/checks/change_access_spec.rb @@ -86,7 +86,7 @@ describe Gitlab::Checks::ChangeAccess, lib: true do end context 'when user has access' do - let!(:protected_tag) { create(:protected_tag, :developers_can_push, project: project, name: 'v*') } + let!(:protected_tag) { create(:protected_tag, :developers_can_create, project: project, name: 'v*') } it 'allows tag creation' do expect(subject.status).to be(true) diff --git a/spec/lib/gitlab/import_export/all_models.yml b/spec/lib/gitlab/import_export/all_models.yml index 83503c73e75..53cfd674b02 100644 --- a/spec/lib/gitlab/import_export/all_models.yml +++ b/spec/lib/gitlab/import_export/all_models.yml @@ -113,11 +113,12 @@ protected_branches: - push_access_levels protected_tags: - project -- push_access_levels +- create_access_levels merge_access_levels: - protected_branch push_access_levels: - protected_branch +create_access_levels: - protected_tag project: - taggings diff --git a/spec/lib/gitlab/user_access_spec.rb b/spec/lib/gitlab/user_access_spec.rb index c69ff3446ea..611cdbbc865 100644 --- a/spec/lib/gitlab/user_access_spec.rb +++ b/spec/lib/gitlab/user_access_spec.rb @@ -189,7 +189,7 @@ describe Gitlab::UserAccess, lib: true do describe 'push to protected tag if allowed for developers' do before do - @tag = create(:protected_tag, :developers_can_push, project: project) + @tag = create(:protected_tag, :developers_can_create, project: project) end it 'returns true if user is a master' do diff --git a/spec/services/protected_tags/create_service_spec.rb b/spec/services/protected_tags/create_service_spec.rb index 70ea96a954f..d91a58e8de5 100644 --- a/spec/services/protected_tags/create_service_spec.rb +++ b/spec/services/protected_tags/create_service_spec.rb @@ -6,7 +6,7 @@ describe ProtectedTags::CreateService, services: true do let(:params) do { name: 'master', - push_access_levels_attributes: [{ access_level: Gitlab::Access::MASTER }] + create_access_levels_attributes: [{ access_level: Gitlab::Access::MASTER }] } end @@ -15,7 +15,7 @@ describe ProtectedTags::CreateService, services: true do it 'creates a new protected tag' do expect { service.execute }.to change(ProtectedTag, :count).by(1) - expect(project.protected_tags.last.push_access_levels.map(&:access_level)).to eq([Gitlab::Access::MASTER]) + expect(project.protected_tags.last.create_access_levels.map(&:access_level)).to eq([Gitlab::Access::MASTER]) end end end