diff --git a/doc/api/projects.md b/doc/api/projects.md index 55c8a4a721f2d29ccd94f2200910058d3d894452..f909f376fce4b13ae654510da9bf17db198428d4 100644 --- a/doc/api/projects.md +++ b/doc/api/projects.md @@ -1544,6 +1544,7 @@ curl --request POST --header "PRIVATE-TOKEN: " \ | `feature_flags_access_level` | string | No | One of `disabled`, `private`, or `enabled`. | | `infrastructure_access_level` | string | No | One of `disabled`, `private`, or `enabled`. | | `monitor_access_level` | string | No | One of `disabled`, `private`, or `enabled`. | +| `model_experiments_access_level` | string | No | One of `disabled`, `private`, or `enabled`. | | `remove_source_branch_after_merge` | boolean | No | Enable `Delete source branch` option by default for all new merge requests. | | `repository_access_level` | string | No | One of `disabled`, `private`, or `enabled`. | | `repository_storage` | string | No | Which storage shard the repository is on. _(administrator only)_ | @@ -1632,6 +1633,7 @@ POST /projects/user/:user_id | `feature_flags_access_level` | string | No | One of `disabled`, `private`, or `enabled`. | | `infrastructure_access_level` | string | No | One of `disabled`, `private`, or `enabled`. | | `monitor_access_level` | string | No | One of `disabled`, `private`, or `enabled`. | +| `model_experiments_access_level` | string | No | One of `disabled`, `private`, or `enabled`. | | `remove_source_branch_after_merge` | boolean | No | Enable `Delete source branch` option by default for all new merge requests. | | `repository_access_level` | string | No | One of `disabled`, `private`, or `enabled`. | | `repository_storage` | string | No | Which storage shard the repository is on. _(administrators only)_ | diff --git a/lib/api/entities/project.rb b/lib/api/entities/project.rb index f117fb7135455940c46998b0018c779d2b6105d1..12e022bfb2044f5ac43ea5c4ef166c32d7b9104e 100644 --- a/lib/api/entities/project.rb +++ b/lib/api/entities/project.rb @@ -84,6 +84,7 @@ class Project < BasicProjectDetails expose(:feature_flags_access_level, documentation: { type: 'string', example: 'enabled' }) { |project, options| project_feature_string_access_level(project, :feature_flags) } expose(:infrastructure_access_level, documentation: { type: 'string', example: 'enabled' }) { |project, options| project_feature_string_access_level(project, :infrastructure) } expose(:monitor_access_level, documentation: { type: 'string', example: 'enabled' }) { |project, options| project_feature_string_access_level(project, :monitor) } + expose(:model_experiments_access_level, documentation: { type: 'string', example: 'enabled' }) { |project, options| project_feature_string_access_level(project, :model_experiments) } expose(:emails_disabled, documentation: { type: 'boolean' }) { |project, options| project.emails_disabled? } expose :emails_enabled, documentation: { type: 'boolean' } diff --git a/lib/api/helpers/projects_helpers.rb b/lib/api/helpers/projects_helpers.rb index 8a0ec1c1abf7c7c7785bed462649f64c777e10f3..23e83d9d54fcc7e313b9c03c5d23c01796fe94d1 100644 --- a/lib/api/helpers/projects_helpers.rb +++ b/lib/api/helpers/projects_helpers.rb @@ -39,6 +39,7 @@ module ProjectsHelpers optional :feature_flags_access_level, type: String, values: %w[disabled private enabled], desc: 'Feature flags access level. One of `disabled`, `private` or `enabled`' optional :infrastructure_access_level, type: String, values: %w[disabled private enabled], desc: 'Infrastructure access level. One of `disabled`, `private` or `enabled`' optional :monitor_access_level, type: String, values: %w[disabled private enabled], desc: 'Monitor access level. One of `disabled`, `private` or `enabled`' + optional :model_experiments_access_level, type: String, values: %w[disabled private enabled], desc: 'Model experiments access level. One of `disabled`, `private` or `enabled`' optional :emails_disabled, type: Boolean, desc: 'Deprecated: Use emails_enabled instead.' optional :emails_enabled, type: Boolean, desc: 'Enable email notifications' @@ -195,6 +196,7 @@ def self.update_params_at_least_one_of :feature_flags_access_level, :infrastructure_access_level, :monitor_access_level, + :model_experiments_access_level, # TODO: remove in API v5, replaced by *_access_level :issues_enabled, diff --git a/spec/requests/api/project_attributes.yml b/spec/requests/api/project_attributes.yml index d95f96c25d64140e8dd7ac748c1f9f57beeba49c..6673053aa07a0b9ab1b75cd68d684394d56a4edd 100644 --- a/spec/requests/api/project_attributes.yml +++ b/spec/requests/api/project_attributes.yml @@ -132,7 +132,6 @@ project_feature: - project_id - updated_at - operations_access_level - - model_experiments_access_level computed_attributes: - issues_enabled - jobs_enabled diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb index 12898060e2218cdb363906cfd5a32e63961d3d6c..01aa80cbe53c1e3a97e364b459d7447a8c38acac 100644 --- a/spec/requests/api/projects_spec.rb +++ b/spec/requests/api/projects_spec.rb @@ -1271,6 +1271,7 @@ def request attrs[:builds_access_level] = 'disabled' attrs[:merge_requests_access_level] = 'disabled' attrs[:issues_access_level] = 'disabled' + attrs[:model_experiments_access_level] = 'disabled' end post api(path, user), params: project @@ -1281,7 +1282,7 @@ def request next if %i[ has_external_issue_tracker has_external_wiki issues_enabled merge_requests_enabled wiki_enabled storage_version container_registry_access_level releases_access_level environments_access_level feature_flags_access_level - infrastructure_access_level monitor_access_level + infrastructure_access_level monitor_access_level model_experiments_access_level ].include?(k) expect(json_response[k.to_s]).to eq(v) @@ -3877,7 +3878,7 @@ def failure_message(diff) expect(Project.find_by(path: project[:path]).analytics_access_level).to eq(ProjectFeature::PRIVATE) end - %i(releases_access_level environments_access_level feature_flags_access_level infrastructure_access_level monitor_access_level).each do |field| + %i(releases_access_level environments_access_level feature_flags_access_level infrastructure_access_level monitor_access_level model_experiments_access_level).each do |field| it "sets #{field}" do put api(path, user), params: { field => 'private' } diff --git a/spec/services/projects/update_service_spec.rb b/spec/services/projects/update_service_spec.rb index 195cfe78b3f189432f1097c3476505250b09b033..7ab85d8253a22473a0c1eef817fdd2219f05222b 100644 --- a/spec/services/projects/update_service_spec.rb +++ b/spec/services/projects/update_service_spec.rb @@ -356,7 +356,7 @@ context 'when changes project features' do # Using some sample features for testing. # Not using all the features because some of them must be enabled/disabled together - %w[issues wiki forking].each do |feature_name| + %w[issues wiki forking model_experiments].each do |feature_name| context "with feature_name:#{feature_name}" do let(:feature) { "#{feature_name}_access_level" } let(:params) do