Commit 0000e049 authored by Arturo Herrero's avatar Arturo Herrero

Ignore title and description from services

The integration's title and description are not consistent between all
integrations. Some of them integrations allow the user to specify the
title or description but these values can always be the same.

Here, these values are hardcoded as virtual methods for each service, so
we can remove the column in the future.
parent 9affece7
...@@ -23,7 +23,6 @@ module ServiceParams ...@@ -23,7 +23,6 @@ module ServiceParams
:comment_detail, :comment_detail,
:confidential_issues_events, :confidential_issues_events,
:default_irc_uri, :default_irc_uri,
:description,
:device, :device,
:disable_diffs, :disable_diffs,
:drone_url, :drone_url,
...@@ -61,7 +60,6 @@ module ServiceParams ...@@ -61,7 +60,6 @@ module ServiceParams
:sound, :sound,
:subdomain, :subdomain,
:teamcity_url, :teamcity_url,
:title,
:token, :token,
:type, :type,
:url, :url,
......
...@@ -3,11 +3,11 @@ ...@@ -3,11 +3,11 @@
class BugzillaService < IssueTrackerService class BugzillaService < IssueTrackerService
validates :project_url, :issues_url, :new_issue_url, presence: true, public_url: true, if: :activated? validates :project_url, :issues_url, :new_issue_url, presence: true, public_url: true, if: :activated?
def default_title def title
'Bugzilla' 'Bugzilla'
end end
def default_description def description
s_('IssueTracker|Bugzilla issue tracker') s_('IssueTracker|Bugzilla issue tracker')
end end
......
...@@ -3,11 +3,11 @@ ...@@ -3,11 +3,11 @@
class CustomIssueTrackerService < IssueTrackerService class CustomIssueTrackerService < IssueTrackerService
validates :project_url, :issues_url, :new_issue_url, presence: true, public_url: true, if: :activated? validates :project_url, :issues_url, :new_issue_url, presence: true, public_url: true, if: :activated?
def default_title def title
'Custom Issue Tracker' 'Custom Issue Tracker'
end end
def default_description def description
s_('IssueTracker|Custom issue tracker') s_('IssueTracker|Custom issue tracker')
end end
...@@ -17,8 +17,6 @@ class CustomIssueTrackerService < IssueTrackerService ...@@ -17,8 +17,6 @@ class CustomIssueTrackerService < IssueTrackerService
def fields def fields
[ [
{ type: 'text', name: 'title', placeholder: title },
{ type: 'text', name: 'description', placeholder: description },
{ type: 'text', name: 'project_url', placeholder: 'Project url', required: true }, { type: 'text', name: 'project_url', placeholder: 'Project url', required: true },
{ type: 'text', name: 'issues_url', placeholder: 'Issue url', required: true }, { type: 'text', name: 'issues_url', placeholder: 'Issue url', required: true },
{ type: 'text', name: 'new_issue_url', placeholder: 'New Issue url', required: true } { type: 'text', name: 'new_issue_url', placeholder: 'New Issue url', required: true }
......
...@@ -7,11 +7,11 @@ class GitlabIssueTrackerService < IssueTrackerService ...@@ -7,11 +7,11 @@ class GitlabIssueTrackerService < IssueTrackerService
default_value_for :default, true default_value_for :default, true
def default_title def title
'GitLab' 'GitLab'
end end
def default_description def description
s_('IssueTracker|GitLab issue tracker') s_('IssueTracker|GitLab issue tracker')
end end
......
...@@ -25,28 +25,6 @@ class IssueTrackerService < Service ...@@ -25,28 +25,6 @@ class IssueTrackerService < Service
end end
end end
# this will be removed as part of https://gitlab.com/gitlab-org/gitlab/issues/29404
def title
if title_attribute = read_attribute(:title)
title_attribute
elsif self.properties && self.properties['title'].present?
self.properties['title']
else
default_title
end
end
# this will be removed as part of https://gitlab.com/gitlab-org/gitlab/issues/29404
def description
if description_attribute = read_attribute(:description)
description_attribute
elsif self.properties && self.properties['description'].present?
self.properties['description']
else
default_description
end
end
def handle_properties def handle_properties
# this has been moved from initialize_properties and should be improved # this has been moved from initialize_properties and should be improved
# as part of https://gitlab.com/gitlab-org/gitlab/issues/29404 # as part of https://gitlab.com/gitlab-org/gitlab/issues/29404
...@@ -54,13 +32,6 @@ class IssueTrackerService < Service ...@@ -54,13 +32,6 @@ class IssueTrackerService < Service
@legacy_properties_data = properties.dup @legacy_properties_data = properties.dup
data_values = properties.slice!('title', 'description') data_values = properties.slice!('title', 'description')
properties.each do |key, _|
current_value = self.properties.delete(key)
value = attribute_changed?(key) ? attribute_change(key).last : current_value
write_attribute(key, value)
end
data_values.reject! { |key| data_fields.changed.include?(key) } data_values.reject! { |key| data_fields.changed.include?(key) }
data_values.slice!(*data_fields.attributes.keys) data_values.slice!(*data_fields.attributes.keys)
data_fields.assign_attributes(data_values) if data_values.present? data_fields.assign_attributes(data_values) if data_values.present?
...@@ -102,7 +73,6 @@ class IssueTrackerService < Service ...@@ -102,7 +73,6 @@ class IssueTrackerService < Service
def fields def fields
[ [
{ type: 'text', name: 'description', placeholder: description },
{ type: 'text', name: 'project_url', placeholder: 'Project url', required: true }, { type: 'text', name: 'project_url', placeholder: 'Project url', required: true },
{ type: 'text', name: 'issues_url', placeholder: 'Issue url', required: true }, { type: 'text', name: 'issues_url', placeholder: 'Issue url', required: true },
{ type: 'text', name: 'new_issue_url', placeholder: 'New Issue url', required: true } { type: 'text', name: 'new_issue_url', placeholder: 'New Issue url', required: true }
...@@ -117,8 +87,6 @@ class IssueTrackerService < Service ...@@ -117,8 +87,6 @@ class IssueTrackerService < Service
def set_default_data def set_default_data
return unless issues_tracker.present? return unless issues_tracker.present?
self.title ||= issues_tracker['title']
# we don't want to override if we have set something # we don't want to override if we have set something
return if project_url || issues_url || new_issue_url return if project_url || issues_url || new_issue_url
......
...@@ -64,8 +64,6 @@ class JiraService < IssueTrackerService ...@@ -64,8 +64,6 @@ class JiraService < IssueTrackerService
def set_default_data def set_default_data
return unless issues_tracker.present? return unless issues_tracker.present?
self.title ||= issues_tracker['title']
return if url return if url
data_fields.url ||= issues_tracker['url'] data_fields.url ||= issues_tracker['url']
...@@ -103,11 +101,11 @@ class JiraService < IssueTrackerService ...@@ -103,11 +101,11 @@ class JiraService < IssueTrackerService
[Jira service documentation](#{help_page_url('user/project/integrations/jira')})." [Jira service documentation](#{help_page_url('user/project/integrations/jira')})."
end end
def default_title def title
'Jira' 'Jira'
end end
def default_description def description
s_('JiraService|Jira issue tracker') s_('JiraService|Jira issue tracker')
end end
......
...@@ -3,11 +3,11 @@ ...@@ -3,11 +3,11 @@
class RedmineService < IssueTrackerService class RedmineService < IssueTrackerService
validates :project_url, :issues_url, :new_issue_url, presence: true, public_url: true, if: :activated? validates :project_url, :issues_url, :new_issue_url, presence: true, public_url: true, if: :activated?
def default_title def title
'Redmine' 'Redmine'
end end
def default_description def description
s_('IssueTracker|Redmine issue tracker') s_('IssueTracker|Redmine issue tracker')
end end
......
...@@ -12,11 +12,11 @@ class YoutrackService < IssueTrackerService ...@@ -12,11 +12,11 @@ class YoutrackService < IssueTrackerService
end end
end end
def default_title def title
'YouTrack' 'YouTrack'
end end
def default_description def description
s_('IssueTracker|YouTrack issue tracker') s_('IssueTracker|YouTrack issue tracker')
end end
...@@ -26,7 +26,6 @@ class YoutrackService < IssueTrackerService ...@@ -26,7 +26,6 @@ class YoutrackService < IssueTrackerService
def fields def fields
[ [
{ type: 'text', name: 'description', placeholder: description },
{ type: 'text', name: 'project_url', title: 'Project URL', placeholder: 'Project URL', required: true }, { type: 'text', name: 'project_url', title: 'Project URL', placeholder: 'Project URL', required: true },
{ type: 'text', name: 'issues_url', title: 'Issue URL', placeholder: 'Issue URL', required: true } { type: 'text', name: 'issues_url', title: 'Issue URL', placeholder: 'Issue URL', required: true }
] ]
......
...@@ -7,6 +7,9 @@ class Service < ApplicationRecord ...@@ -7,6 +7,9 @@ class Service < ApplicationRecord
include Importable include Importable
include ProjectServicesLoggable include ProjectServicesLoggable
include DataFields include DataFields
include IgnorableColumns
ignore_columns %i[title description], remove_with: '13.4', remove_after: '2020-09-22'
SERVICE_NAMES = %w[ SERVICE_NAMES = %w[
alerts asana assembla bamboo bugzilla buildkite campfire custom_issue_tracker discord alerts asana assembla bamboo bugzilla buildkite campfire custom_issue_tracker discord
......
---
title: Remove the ability to customize the title and description of some integrations (Bugzilla, Custom Issue Tracker, Redmine, and YouTrack).
merge_request: 33298
author:
type: removed
...@@ -6,7 +6,6 @@ in the table below. ...@@ -6,7 +6,6 @@ in the table below.
| Field | Description | | Field | Description |
| ----- | ----------- | | ----- | ----------- |
| `description` | A name for the issue tracker (to differentiate between instances, for example) |
| `project_url` | The URL to the project in Bugzilla which is being linked to this GitLab project. Note that the `project_url` requires PRODUCT_NAME to be updated with the product/project name in Bugzilla. | | `project_url` | The URL to the project in Bugzilla which is being linked to this GitLab project. Note that the `project_url` requires PRODUCT_NAME to be updated with the product/project name in Bugzilla. |
| `issues_url` | The URL to the issue in Bugzilla project that is linked to this GitLab project. Note that the `issues_url` requires `:id` in the URL. This ID is used by GitLab as a placeholder to replace the issue number. | | `issues_url` | The URL to the issue in Bugzilla project that is linked to this GitLab project. Note that the `issues_url` requires `:id` in the URL. This ID is used by GitLab as a placeholder to replace the issue number. |
| `new_issue_url` | This is the URL to create a new issue in Bugzilla for the project linked to this GitLab project. Note that the `new_issue_url` requires PRODUCT_NAME to be updated with the product/project name in Bugzilla. | | `new_issue_url` | This is the URL to create a new issue in Bugzilla for the project linked to this GitLab project. Note that the `new_issue_url` requires PRODUCT_NAME to be updated with the product/project name in Bugzilla. |
......
...@@ -11,8 +11,6 @@ To enable the Custom Issue Tracker integration in a project: ...@@ -11,8 +11,6 @@ To enable the Custom Issue Tracker integration in a project:
| Field | Description | | Field | Description |
| --------------- | ----------- | | --------------- | ----------- |
| **Title** | A title for the issue tracker (for example, to differentiate between instances). |
| **Description** | A name for the issue tracker (for example, to differentiate between instances). |
| **Project URL** | The URL to the project in the custom issue tracker. | | **Project URL** | The URL to the project in the custom issue tracker. |
| **Issues URL** | The URL to the issue in the issue tracker project that is linked to this GitLab project. Note that the `issues_url` requires `:id` in the URL. This ID is used by GitLab as a placeholder to replace the issue number. For example, `https://customissuetracker.com/project-name/:id`. | | **Issues URL** | The URL to the issue in the issue tracker project that is linked to this GitLab project. Note that the `issues_url` requires `:id` in the URL. This ID is used by GitLab as a placeholder to replace the issue number. For example, `https://customissuetracker.com/project-name/:id`. |
| **New issue URL** | Currently unused. Will be changed in a future release. | | **New issue URL** | Currently unused. Will be changed in a future release. |
......
...@@ -7,7 +7,6 @@ ...@@ -7,7 +7,6 @@
| Field | Description | | Field | Description |
| ----- | ----------- | | ----- | ----------- |
| `description` | A name for the issue tracker (to differentiate between instances, for example) |
| `project_url` | The URL to the project in Redmine which is being linked to this GitLab project | | `project_url` | The URL to the project in Redmine which is being linked to this GitLab project |
| `issues_url` | The URL to the issue in Redmine project that is linked to this GitLab project. Note that the `issues_url` requires `:id` in the URL. This ID is used by GitLab as a placeholder to replace the issue number. | | `issues_url` | The URL to the issue in Redmine project that is linked to this GitLab project. Note that the `issues_url` requires `:id` in the URL. This ID is used by GitLab as a placeholder to replace the issue number. |
| `new_issue_url` | This is the URL to create a new issue in Redmine for the project linked to this GitLab project. **This is currently not being used and will be removed in a future release.** | | `new_issue_url` | This is the URL to create a new issue in Redmine for the project linked to this GitLab project. **This is currently not being used and will be removed in a future release.** |
......
...@@ -13,7 +13,6 @@ To enable YouTrack integration in a project: ...@@ -13,7 +13,6 @@ To enable YouTrack integration in a project:
| Field | Description | | Field | Description |
|:----------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| |:----------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **Description** | Name for the issue tracker (to differentiate between instances, for example). |
| **Project URL** | URL to the project in YouTrack which is being linked to this GitLab project. | | **Project URL** | URL to the project in YouTrack which is being linked to this GitLab project. |
| **Issues URL** | URL to the issue in YouTrack project that is linked to this GitLab project. Note that the **Issues URL** requires `:id` in the URL. This ID is used by GitLab as a placeholder to replace the issue number. | | **Issues URL** | URL to the issue in YouTrack project that is linked to this GitLab project. Note that the **Issues URL** requires `:id` in the URL. This ID is used by GitLab as a placeholder to replace the issue number. |
......
...@@ -262,9 +262,11 @@ excluded_attributes: ...@@ -262,9 +262,11 @@ excluded_attributes:
- :token - :token
- :token_encrypted - :token_encrypted
services: services:
- :description
- :inherit_from_id - :inherit_from_id
- :instance - :instance
- :template - :template
- :title
error_tracking_setting: error_tracking_setting:
- :encrypted_token - :encrypted_token
- :encrypted_token_iv - :encrypted_token_iv
......
...@@ -237,7 +237,7 @@ RSpec.describe Projects::IssuesController do ...@@ -237,7 +237,7 @@ RSpec.describe Projects::IssuesController do
context 'external issue tracker' do context 'external issue tracker' do
let!(:service) do let!(:service) do
create(:custom_issue_tracker_service, project: project, title: 'Custom Issue Tracker', new_issue_url: 'http://test.com') create(:custom_issue_tracker_service, project: project, new_issue_url: 'http://test.com')
end end
before do before do
......
...@@ -7010,7 +7010,6 @@ ...@@ -7010,7 +7010,6 @@
"services": [ "services": [
{ {
"id": 101, "id": 101,
"title": "YouTrack",
"project_id": 5, "project_id": 5,
"created_at": "2016-06-14T15:01:51.327Z", "created_at": "2016-06-14T15:01:51.327Z",
"updated_at": "2016-06-14T15:01:51.327Z", "updated_at": "2016-06-14T15:01:51.327Z",
...@@ -7030,7 +7029,6 @@ ...@@ -7030,7 +7029,6 @@
}, },
{ {
"id": 100, "id": 100,
"title": "JetBrains TeamCity CI",
"project_id": 5, "project_id": 5,
"created_at": "2016-06-14T15:01:51.315Z", "created_at": "2016-06-14T15:01:51.315Z",
"updated_at": "2016-06-14T15:01:51.315Z", "updated_at": "2016-06-14T15:01:51.315Z",
...@@ -7050,7 +7048,6 @@ ...@@ -7050,7 +7048,6 @@
}, },
{ {
"id": 99, "id": 99,
"title": "Slack",
"project_id": 5, "project_id": 5,
"created_at": "2016-06-14T15:01:51.303Z", "created_at": "2016-06-14T15:01:51.303Z",
"updated_at": "2016-06-14T15:01:51.303Z", "updated_at": "2016-06-14T15:01:51.303Z",
...@@ -7072,7 +7069,6 @@ ...@@ -7072,7 +7069,6 @@
}, },
{ {
"id": 98, "id": 98,
"title": "Redmine",
"project_id": 5, "project_id": 5,
"created_at": "2016-06-14T15:01:51.289Z", "created_at": "2016-06-14T15:01:51.289Z",
"updated_at": "2016-06-14T15:01:51.289Z", "updated_at": "2016-06-14T15:01:51.289Z",
...@@ -7092,7 +7088,6 @@ ...@@ -7092,7 +7088,6 @@
}, },
{ {
"id": 97, "id": 97,
"title": "Pushover",
"project_id": 5, "project_id": 5,
"created_at": "2016-06-14T15:01:51.277Z", "created_at": "2016-06-14T15:01:51.277Z",
"updated_at": "2016-06-14T15:01:51.277Z", "updated_at": "2016-06-14T15:01:51.277Z",
...@@ -7112,7 +7107,6 @@ ...@@ -7112,7 +7107,6 @@
}, },
{ {
"id": 96, "id": 96,
"title": "PivotalTracker",
"project_id": 5, "project_id": 5,
"created_at": "2016-06-14T15:01:51.267Z", "created_at": "2016-06-14T15:01:51.267Z",
"updated_at": "2016-06-14T15:01:51.267Z", "updated_at": "2016-06-14T15:01:51.267Z",
...@@ -7132,7 +7126,6 @@ ...@@ -7132,7 +7126,6 @@
}, },
{ {
"id": 95, "id": 95,
"title": "Jira",
"project_id": 5, "project_id": 5,
"created_at": "2016-06-14T15:01:51.255Z", "created_at": "2016-06-14T15:01:51.255Z",
"updated_at": "2016-06-14T15:01:51.255Z", "updated_at": "2016-06-14T15:01:51.255Z",
...@@ -7155,7 +7148,6 @@ ...@@ -7155,7 +7148,6 @@
}, },
{ {
"id": 94, "id": 94,
"title": "Irker (IRC gateway)",
"project_id": 5, "project_id": 5,
"created_at": "2016-06-14T15:01:51.232Z", "created_at": "2016-06-14T15:01:51.232Z",
"updated_at": "2016-06-14T15:01:51.232Z", "updated_at": "2016-06-14T15:01:51.232Z",
...@@ -7175,7 +7167,6 @@ ...@@ -7175,7 +7167,6 @@
}, },
{ {
"id": 93, "id": 93,
"title": "HipChat",
"project_id": 5, "project_id": 5,
"created_at": "2016-06-14T15:01:51.219Z", "created_at": "2016-06-14T15:01:51.219Z",
"updated_at": "2016-06-14T15:01:51.219Z", "updated_at": "2016-06-14T15:01:51.219Z",
...@@ -7197,7 +7188,6 @@ ...@@ -7197,7 +7188,6 @@
}, },
{ {
"id": 91, "id": 91,
"title": "Flowdock",
"project_id": 5, "project_id": 5,
"created_at": "2016-06-14T15:01:51.182Z", "created_at": "2016-06-14T15:01:51.182Z",
"updated_at": "2016-06-14T15:01:51.182Z", "updated_at": "2016-06-14T15:01:51.182Z",
...@@ -7217,7 +7207,6 @@ ...@@ -7217,7 +7207,6 @@
}, },
{ {
"id": 90, "id": 90,
"title": "External Wiki",
"project_id": 5, "project_id": 5,
"created_at": "2016-06-14T15:01:51.166Z", "created_at": "2016-06-14T15:01:51.166Z",
"updated_at": "2016-06-14T15:01:51.166Z", "updated_at": "2016-06-14T15:01:51.166Z",
...@@ -7237,7 +7226,6 @@ ...@@ -7237,7 +7226,6 @@
}, },
{ {
"id": 89, "id": 89,
"title": "Emails on push",
"project_id": 5, "project_id": 5,
"created_at": "2016-06-14T15:01:51.153Z", "created_at": "2016-06-14T15:01:51.153Z",
"updated_at": "2016-06-14T15:01:51.153Z", "updated_at": "2016-06-14T15:01:51.153Z",
...@@ -7257,7 +7245,6 @@ ...@@ -7257,7 +7245,6 @@
}, },
{ {
"id": 88, "id": 88,
"title": "Drone CI",
"project_id": 5, "project_id": 5,
"created_at": "2016-06-14T15:01:51.139Z", "created_at": "2016-06-14T15:01:51.139Z",
"updated_at": "2016-06-14T15:01:51.139Z", "updated_at": "2016-06-14T15:01:51.139Z",
...@@ -7277,7 +7264,6 @@ ...@@ -7277,7 +7264,6 @@
}, },
{ {
"id": 87, "id": 87,
"title": "Custom Issue Tracker",
"project_id": 5, "project_id": 5,
"created_at": "2016-06-14T15:01:51.125Z", "created_at": "2016-06-14T15:01:51.125Z",
"updated_at": "2016-06-14T15:01:51.125Z", "updated_at": "2016-06-14T15:01:51.125Z",
...@@ -7297,7 +7283,6 @@ ...@@ -7297,7 +7283,6 @@
}, },
{ {
"id": 86, "id": 86,
"title": "Campfire",
"project_id": 5, "project_id": 5,
"created_at": "2016-06-14T15:01:51.113Z", "created_at": "2016-06-14T15:01:51.113Z",
"updated_at": "2016-06-14T15:01:51.113Z", "updated_at": "2016-06-14T15:01:51.113Z",
...@@ -7317,7 +7302,6 @@ ...@@ -7317,7 +7302,6 @@
}, },
{ {
"id": 84, "id": 84,
"title": "Buildkite",
"project_id": 5, "project_id": 5,
"created_at": "2016-06-14T15:01:51.080Z", "created_at": "2016-06-14T15:01:51.080Z",
"updated_at": "2016-06-14T15:01:51.080Z", "updated_at": "2016-06-14T15:01:51.080Z",
...@@ -7337,7 +7321,6 @@ ...@@ -7337,7 +7321,6 @@
}, },
{ {
"id": 83, "id": 83,
"title": "Atlassian Bamboo CI",
"project_id": 5, "project_id": 5,
"created_at": "2016-06-14T15:01:51.067Z", "created_at": "2016-06-14T15:01:51.067Z",
"updated_at": "2016-06-14T15:01:51.067Z", "updated_at": "2016-06-14T15:01:51.067Z",
...@@ -7357,7 +7340,6 @@ ...@@ -7357,7 +7340,6 @@
}, },
{ {
"id": 82, "id": 82,
"title": "Assembla",
"project_id": 5, "project_id": 5,
"created_at": "2016-06-14T15:01:51.047Z", "created_at": "2016-06-14T15:01:51.047Z",
"updated_at": "2016-06-14T15:01:51.047Z", "updated_at": "2016-06-14T15:01:51.047Z",
...@@ -7377,7 +7359,6 @@ ...@@ -7377,7 +7359,6 @@
}, },
{ {
"id": 81, "id": 81,
"title": "Asana",
"project_id": 5, "project_id": 5,
"created_at": "2016-06-14T15:01:51.031Z", "created_at": "2016-06-14T15:01:51.031Z",
"updated_at": "2016-06-14T15:01:51.031Z", "updated_at": "2016-06-14T15:01:51.031Z",
......
...@@ -144,7 +144,6 @@ ...@@ -144,7 +144,6 @@
"services": [ "services": [
{ {
"id": 100, "id": 100,
"title": "JetBrains TeamCity CI",
"project_id": 5, "project_id": 5,
"created_at": "2016-06-14T15:01:51.315Z", "created_at": "2016-06-14T15:01:51.315Z",
"updated_at": "2016-06-14T15:01:51.315Z", "updated_at": "2016-06-14T15:01:51.315Z",
...@@ -165,7 +164,6 @@ ...@@ -165,7 +164,6 @@
}, },
{ {
"id": 101, "id": 101,
"title": "Jira",
"project_id": 5, "project_id": 5,
"created_at": "2016-06-14T15:01:51.315Z", "created_at": "2016-06-14T15:01:51.315Z",
"updated_at": "2016-06-14T15:01:51.315Z", "updated_at": "2016-06-14T15:01:51.315Z",
......
{"id":100,"title":"JetBrains TeamCity CI","project_id":5,"created_at":"2016-06-14T15:01:51.315Z","updated_at":"2016-06-14T15:01:51.315Z","active":false,"properties":{},"template":true,"instance":false,"push_events":true,"issues_events":true,"merge_requests_events":true,"tag_push_events":true,"note_events":true,"job_events":true,"type":"TeamcityService","category":"ci","default":false,"wiki_page_events":true} {"id":100,"project_id":5,"created_at":"2016-06-14T15:01:51.315Z","updated_at":"2016-06-14T15:01:51.315Z","active":false,"properties":{},"template":true,"instance":false,"push_events":true,"issues_events":true,"merge_requests_events":true,"tag_push_events":true,"note_events":true,"job_events":true,"type":"TeamcityService","category":"ci","default":false,"wiki_page_events":true}
{"id":101,"title":"Jira","project_id":5,"created_at":"2016-06-14T15:01:51.315Z","updated_at":"2016-06-14T15:01:51.315Z","active":false,"properties":{},"template":false,"instance":true,"push_events":true,"issues_events":true,"merge_requests_events":true,"tag_push_events":true,"note_events":true,"job_events":true,"type":"JiraService","category":"ci","default":false,"wiki_page_events":true} {"id":101,"project_id":5,"created_at":"2016-06-14T15:01:51.315Z","updated_at":"2016-06-14T15:01:51.315Z","active":false,"properties":{},"template":false,"instance":true,"push_events":true,"issues_events":true,"merge_requests_events":true,"tag_push_events":true,"note_events":true,"job_events":true,"type":"JiraService","category":"ci","default":false,"wiki_page_events":true}
...@@ -8,7 +8,7 @@ RSpec.describe Projects::ServicesController, '(JavaScript fixtures)', type: :con ...@@ -8,7 +8,7 @@ RSpec.describe Projects::ServicesController, '(JavaScript fixtures)', type: :con
let(:admin) { create(:admin) } let(:admin) { create(:admin) }
let(:namespace) { create(:namespace, name: 'frontend-fixtures' )} let(:namespace) { create(:namespace, name: 'frontend-fixtures' )}
let(:project) { create(:project_empty_repo, namespace: namespace, path: 'services-project') } let(:project) { create(:project_empty_repo, namespace: namespace, path: 'services-project') }
let!(:service) { create(:custom_issue_tracker_service, project: project, title: 'Custom Issue Tracker') } let!(:service) { create(:custom_issue_tracker_service, project: project) }
render_views render_views
......
...@@ -32,49 +32,4 @@ describe BugzillaService do ...@@ -32,49 +32,4 @@ describe BugzillaService do
it { is_expected.not_to validate_presence_of(:new_issue_url) } it { is_expected.not_to validate_presence_of(:new_issue_url) }
end end
end end
context 'overriding properties' do
let(:url) { 'http://bugzilla.example.com' }
let(:access_params) do
{ project_url: url, issues_url: url, new_issue_url: url }
end
# this will be removed as part of https://gitlab.com/gitlab-org/gitlab/issues/29404
context 'when data are stored in properties' do
let(:properties) { access_params.merge(title: title, description: description) }
let(:service) do
create(:bugzilla_service, :without_properties_callback, properties: properties)
end
it_behaves_like 'issue tracker fields'
end
context 'when data are stored in separated fields' do
let(:service) do
create(:bugzilla_service, title: title, description: description, properties: access_params)
end
it_behaves_like 'issue tracker fields'
end
context 'when data are stored in both properties and separated fields' do
let(:properties) { access_params.merge(title: 'wrong title', description: 'wrong description') }
let(:service) do
create(:bugzilla_service, :without_properties_callback, title: title, description: description, properties: properties)
end
it_behaves_like 'issue tracker fields'
end
context 'when no title & description are set' do
let(:service) do
create(:bugzilla_service, properties: access_params)
end
it 'returns default values' do
expect(service.title).to eq('Bugzilla')
expect(service.description).to eq('Bugzilla issue tracker')
end
end
end
end end
...@@ -31,66 +31,5 @@ describe CustomIssueTrackerService do ...@@ -31,66 +31,5 @@ describe CustomIssueTrackerService do
it { is_expected.not_to validate_presence_of(:issues_url) } it { is_expected.not_to validate_presence_of(:issues_url) }
it { is_expected.not_to validate_presence_of(:new_issue_url) } it { is_expected.not_to validate_presence_of(:new_issue_url) }
end end
context 'title' do
let(:issue_tracker) { described_class.new(properties: {}) }
it 'sets a default title' do
issue_tracker.title = nil
expect(issue_tracker.title).to eq('Custom Issue Tracker')
end
it 'sets the custom title' do
issue_tracker.title = 'test title'
expect(issue_tracker.title).to eq('test title')
end
end
end
context 'overriding properties' do
let(:url) { 'http://custom.example.com' }
let(:access_params) do
{ project_url: url, issues_url: url, new_issue_url: url }
end
# this will be removed as part of https://gitlab.com/gitlab-org/gitlab/issues/29404
context 'when data are stored in properties' do
let(:properties) { access_params.merge(title: title, description: description) }
let(:service) do
create(:custom_issue_tracker_service, :without_properties_callback, properties: properties)
end
it_behaves_like 'issue tracker fields'
end
context 'when data are stored in separated fields' do
let(:service) do
create(:custom_issue_tracker_service, title: title, description: description, properties: access_params)
end
it_behaves_like 'issue tracker fields'
end
context 'when data are stored in both properties and separated fields' do
let(:properties) { access_params.merge(title: 'wrong title', description: 'wrong description') }
let(:service) do
create(:custom_issue_tracker_service, :without_properties_callback, title: title, description: description, properties: properties)
end
it_behaves_like 'issue tracker fields'
end
context 'when no title & description are set' do
let(:service) do
create(:custom_issue_tracker_service, properties: access_params)
end
it 'returns default values' do
expect(service.title).to eq('Custom Issue Tracker')
expect(service.description).to eq('Custom issue tracker')
end
end
end end
end end
...@@ -51,49 +51,4 @@ describe GitlabIssueTrackerService do ...@@ -51,49 +51,4 @@ describe GitlabIssueTrackerService do
end end
end end
end end
context 'overriding properties' do
let(:url) { 'http://gitlab.example.com' }
let(:access_params) do
{ project_url: url, issues_url: url, new_issue_url: url }
end
# this will be removed as part of https://gitlab.com/gitlab-org/gitlab/issues/29404
context 'when data are stored in properties' do
let(:properties) { access_params.merge(title: title, description: description) }
let(:service) do
create(:gitlab_issue_tracker_service, :without_properties_callback, properties: properties)
end
it_behaves_like 'issue tracker fields'
end
context 'when data are stored in separated fields' do
let(:service) do
create(:gitlab_issue_tracker_service, title: title, description: description, properties: access_params)
end
it_behaves_like 'issue tracker fields'
end
context 'when data are stored in both properties and separated fields' do
let(:properties) { access_params.merge(title: 'wrong title', description: 'wrong description') }
let(:service) do
create(:gitlab_issue_tracker_service, :without_properties_callback, title: title, description: description, properties: properties)
end
it_behaves_like 'issue tracker fields'
end
context 'when no title & description are set' do
let(:service) do
create(:gitlab_issue_tracker_service, properties: access_params)
end
it 'returns default values' do
expect(service.title).to eq('GitLab')
expect(service.description).to eq('GitLab issue tracker')
end
end
end
end end
...@@ -5,8 +5,6 @@ require 'spec_helper' ...@@ -5,8 +5,6 @@ require 'spec_helper'
describe JiraService do describe JiraService do
include AssetsHelpers include AssetsHelpers
let(:title) { 'custom title' }
let(:description) { 'custom description' }
let(:url) { 'http://jira.example.com' } let(:url) { 'http://jira.example.com' }
let(:api_url) { 'http://api-jira.example.com' } let(:api_url) { 'http://api-jira.example.com' }
let(:username) { 'jira-username' } let(:username) { 'jira-username' }
...@@ -93,7 +91,6 @@ describe JiraService do ...@@ -93,7 +91,6 @@ describe JiraService do
let(:params) do let(:params) do
{ {
project: create(:project), project: create(:project),
title: 'custom title', description: 'custom description',
url: url, api_url: api_url, url: url, api_url: api_url,
username: username, password: password, username: username, password: password,
jira_issue_transition_id: transition_id jira_issue_transition_id: transition_id
...@@ -106,19 +103,6 @@ describe JiraService do ...@@ -106,19 +103,6 @@ describe JiraService do
expect(subject.properties).to be_nil expect(subject.properties).to be_nil
end end
it 'sets title correctly' do
service = subject
expect(service.title).to eq('custom title')
end
it 'sets service data correctly' do
service = subject
expect(service.title).to eq('custom title')
expect(service.description).to eq('custom description')
end
it 'stores data in data_fields correcty' do it 'stores data in data_fields correcty' do
service = subject service = subject
...@@ -209,7 +193,6 @@ describe JiraService do ...@@ -209,7 +193,6 @@ describe JiraService do
end end
it 'does not reset password if url "changed" to the same url as before' do it 'does not reset password if url "changed" to the same url as before' do
service.title = 'aaaaaa'
service.url = 'http://jira.example.com' service.url = 'http://jira.example.com'
service.save service.save
...@@ -318,46 +301,32 @@ describe JiraService do ...@@ -318,46 +301,32 @@ describe JiraService do
# this will be removed as part of https://gitlab.com/gitlab-org/gitlab/issues/29404 # this will be removed as part of https://gitlab.com/gitlab-org/gitlab/issues/29404
context 'when data are stored in properties' do context 'when data are stored in properties' do
let(:properties) { data_params.merge(title: title, description: description) } let(:properties) { data_params }
let!(:service) do let!(:service) do
create(:jira_service, :without_properties_callback, properties: properties.merge(additional: 'something')) create(:jira_service, :without_properties_callback, properties: properties.merge(additional: 'something'))
end end
it_behaves_like 'issue tracker fields'
it_behaves_like 'handles jira fields' it_behaves_like 'handles jira fields'
end end
context 'when data are stored in separated fields' do context 'when data are stored in separated fields' do
let(:service) do let(:service) do
create(:jira_service, data_params.merge(properties: {}, title: title, description: description)) create(:jira_service, data_params.merge(properties: {}))
end end
it_behaves_like 'issue tracker fields'
it_behaves_like 'handles jira fields' it_behaves_like 'handles jira fields'
end end
context 'when data are stored in both properties and separated fields' do context 'when data are stored in both properties and separated fields' do
let(:properties) { data_params.merge(title: title, description: description) } let(:properties) { data_params }
let(:service) do let(:service) do
create(:jira_service, :without_properties_callback, active: false, properties: properties).tap do |service| create(:jira_service, :without_properties_callback, active: false, properties: properties).tap do |service|
create(:jira_tracker_data, data_params.merge(service: service)) create(:jira_tracker_data, data_params.merge(service: service))
end end
end end
it_behaves_like 'issue tracker fields'
it_behaves_like 'handles jira fields' it_behaves_like 'handles jira fields'
end end
context 'when no title & description are set' do
let(:service) do
create(:jira_service, properties: access_params)
end
it 'returns default values' do
expect(service.title).to eq('Jira')
expect(service.description).to eq(s_('JiraService|Jira issue tracker'))
end
end
end end
describe '#close_issue' do describe '#close_issue' do
...@@ -704,59 +673,6 @@ describe JiraService do ...@@ -704,59 +673,6 @@ describe JiraService do
end end
end end
describe 'description and title' do
let(:title) { 'Jira One' }
let(:description) { 'Jira One issue tracker' }
let(:properties) do
{
url: 'http://jira.example.com/web',
username: 'mic',
password: 'password',
title: title,
description: description
}
end
context 'when it is not set' do
it 'default values are returned' do
service = create(:jira_service)
expect(service.title).to eq('Jira')
expect(service.description).to eq(s_('JiraService|Jira issue tracker'))
end
end
context 'when it is set in properties' do
it 'values from properties are returned' do
service = create(:jira_service, :without_properties_callback, properties: properties)
expect(service.title).to eq(title)
expect(service.description).to eq(description)
end
end
context 'when it is in title & description fields' do
it 'values from title and description fields are returned' do
service = create(:jira_service, title: title, description: description)
expect(service.title).to eq(title)
expect(service.description).to eq(description)
end
end
context 'when it is in both properites & title & description fields' do
it 'values from title and description fields are returned' do
title2 = 'Jira 2'
description2 = 'Jira description 2'
service = create(:jira_service, title: title2, description: description2, properties: properties)
expect(service.title).to eq(title2)
expect(service.description).to eq(description2)
end
end
end
describe 'project and issue urls' do describe 'project and issue urls' do
context 'when gitlab.yml was initialized' do context 'when gitlab.yml was initialized' do
it 'is prepopulated with the settings' do it 'is prepopulated with the settings' do
......
...@@ -50,49 +50,4 @@ describe RedmineService do ...@@ -50,49 +50,4 @@ describe RedmineService do
expect(described_class.reference_pattern.match('#123')[:issue]).to eq('123') expect(described_class.reference_pattern.match('#123')[:issue]).to eq('123')
end end
end end
context 'overriding properties' do
let(:url) { 'http://redmine.example.com' }
let(:access_params) do
{ project_url: url, issues_url: url, new_issue_url: url }
end
# this will be removed as part of https://gitlab.com/gitlab-org/gitlab/issues/29404
context 'when data are stored in properties' do
let(:properties) { access_params.merge(title: title, description: description) }
let(:service) do
create(:redmine_service, :without_properties_callback, properties: properties)
end
it_behaves_like 'issue tracker fields'
end
context 'when data are stored in separated fields' do
let(:service) do
create(:redmine_service, title: title, description: description, properties: access_params)
end
it_behaves_like 'issue tracker fields'
end
context 'when data are stored in both properties and separated fields' do
let(:properties) { access_params.merge(title: 'wrong title', description: 'wrong description') }
let(:service) do
create(:redmine_service, :without_properties_callback, title: title, description: description, properties: properties)
end
it_behaves_like 'issue tracker fields'
end
context 'when no title & description are set' do
let(:service) do
create(:redmine_service, properties: access_params)
end
it 'returns default values' do
expect(service.title).to eq('Redmine')
expect(service.description).to eq('Redmine issue tracker')
end
end
end
end end
...@@ -42,49 +42,4 @@ describe YoutrackService do ...@@ -42,49 +42,4 @@ describe YoutrackService do
expect(described_class.reference_pattern.match('yt-123')[:issue]).to eq('yt-123') expect(described_class.reference_pattern.match('yt-123')[:issue]).to eq('yt-123')
end end
end end
context 'overriding properties' do
let(:url) { 'http://youtrack.example.com' }
let(:access_params) do
{ project_url: url, issues_url: url, new_issue_url: url }
end
# this will be removed as part of https://gitlab.com/gitlab-org/gitlab/issues/29404
context 'when data are stored in properties' do
let(:properties) { access_params.merge(title: title, description: description) }
let(:service) do
create(:youtrack_service, :without_properties_callback, properties: properties)
end
it_behaves_like 'issue tracker fields'
end
context 'when data are stored in separated fields' do
let(:service) do
create(:youtrack_service, title: title, description: description, properties: access_params)
end
it_behaves_like 'issue tracker fields'
end
context 'when data are stored in both properties and separated fields' do
let(:properties) { access_params.merge(title: 'wrong title', description: 'wrong description') }
let(:service) do
create(:youtrack_service, :without_properties_callback, title: title, description: description, properties: properties)
end
it_behaves_like 'issue tracker fields'
end
context 'when no title & description are set' do
let(:service) do
create(:youtrack_service, properties: access_params)
end
it 'returns default values' do
expect(service.title).to eq('YouTrack')
expect(service.description).to eq(s_('IssueTracker|YouTrack issue tracker'))
end
end
end
end end
...@@ -304,8 +304,6 @@ describe Service do ...@@ -304,8 +304,6 @@ describe Service do
end end
describe 'build issue tracker from an integration' do describe 'build issue tracker from an integration' do
let(:title) { 'custom title' }
let(:description) { 'custom description' }
let(:url) { 'http://jira.example.com' } let(:url) { 'http://jira.example.com' }
let(:api_url) { 'http://api-jira.example.com' } let(:api_url) { 'http://api-jira.example.com' }
let(:username) { 'jira-username' } let(:username) { 'jira-username' }
...@@ -322,8 +320,6 @@ describe Service do ...@@ -322,8 +320,6 @@ describe Service do
service = described_class.build_from_integration(project.id, integration) service = described_class.build_from_integration(project.id, integration)
expect(service).to be_active expect(service).to be_active
expect(service.title).to eq(title)
expect(service.description).to eq(description)
expect(service.url).to eq(url) expect(service.url).to eq(url)
expect(service.api_url).to eq(api_url) expect(service.api_url).to eq(api_url)
expect(service.username).to eq(username) expect(service.username).to eq(username)
...@@ -335,7 +331,7 @@ describe Service do ...@@ -335,7 +331,7 @@ describe Service do
# this will be removed as part of https://gitlab.com/gitlab-org/gitlab/issues/29404 # this will be removed as part of https://gitlab.com/gitlab-org/gitlab/issues/29404
context 'when data are stored in properties' do context 'when data are stored in properties' do
let(:properties) { data_params.merge(title: title, description: description) } let(:properties) { data_params }
let!(:integration) do let!(:integration) do
create(:jira_service, :without_properties_callback, template: true, properties: properties.merge(additional: 'something')) create(:jira_service, :without_properties_callback, template: true, properties: properties.merge(additional: 'something'))
end end
...@@ -345,14 +341,14 @@ describe Service do ...@@ -345,14 +341,14 @@ describe Service do
context 'when data are stored in separated fields' do context 'when data are stored in separated fields' do
let(:integration) do let(:integration) do
create(:jira_service, :template, data_params.merge(properties: {}, title: title, description: description)) create(:jira_service, :template, data_params.merge(properties: {}))
end end
it_behaves_like 'service creation from an integration' it_behaves_like 'service creation from an integration'
end end
context 'when data are stored in both properties and separated fields' do context 'when data are stored in both properties and separated fields' do
let(:properties) { data_params.merge(title: title, description: description) } let(:properties) { data_params }
let(:integration) do let(:integration) do
create(:jira_service, :without_properties_callback, active: true, template: true, properties: properties).tap do |service| create(:jira_service, :without_properties_callback, active: true, template: true, properties: properties).tap do |service|
create(:jira_tracker_data, data_params.merge(service: service)) create(:jira_tracker_data, data_params.merge(service: service))
...@@ -514,7 +510,6 @@ describe Service do ...@@ -514,7 +510,6 @@ describe Service do
let(:service) do let(:service) do
GitlabIssueTrackerService.create( GitlabIssueTrackerService.create(
project: create(:project), project: create(:project),
title: 'random title',
project_url: 'http://gitlab.example.com' project_url: 'http://gitlab.example.com'
) )
end end
...@@ -523,10 +518,6 @@ describe Service do ...@@ -523,10 +518,6 @@ describe Service do
expect { service }.not_to raise_error expect { service }.not_to raise_error
end end
it 'sets title correctly' do
expect(service.title).to eq('random title')
end
it 'sets data correctly' do it 'sets data correctly' do
expect(service.data_fields.project_url).to eq('http://gitlab.example.com') expect(service.data_fields.project_url).to eq('http://gitlab.example.com')
end end
......
...@@ -5,14 +5,13 @@ module JiraServiceHelper ...@@ -5,14 +5,13 @@ module JiraServiceHelper
JIRA_API = JIRA_URL + "/rest/api/2" JIRA_API = JIRA_URL + "/rest/api/2"
def jira_service_settings def jira_service_settings
title = "Jira tracker"
url = JIRA_URL url = JIRA_URL
username = 'jira-user' username = 'jira-user'
password = 'my-secret-password' password = 'my-secret-password'
jira_issue_transition_id = '1' jira_issue_transition_id = '1'
jira_tracker.update( jira_tracker.update(
title: title, url: url, username: username, password: password, url: url, username: username, password: password,
jira_issue_transition_id: jira_issue_transition_id, active: true jira_issue_transition_id: jira_issue_transition_id, active: true
) )
end end
......
# frozen_string_literal: true
RSpec.shared_examples 'issue tracker fields' do
let(:title) { 'custom title' }
let(:description) { 'custom description' }
let(:url) { 'http://issue_tracker.example.com' }
context 'when data are stored in the properties' do
describe '#update' do
before do
service.update(title: 'new_title', description: 'new description')
end
it 'removes title and description from properties' do
expect(service.reload.properties).not_to include('title', 'description')
end
it 'stores title & description in services table' do
expect(service.read_attribute(:title)).to eq('new_title')
expect(service.read_attribute(:description)).to eq('new description')
end
end
describe 'reading fields' do
it 'returns correct values' do
expect(service.title).to eq(title)
expect(service.description).to eq(description)
end
end
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment