Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
gitlab-ce
Commits
b5fc6a2a
Commit
b5fc6a2a
authored
Mar 28, 2020
by
Jarka Košanová
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Map jira metadata fields to gitlab issue
parent
e587c386
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
135 additions
and
17 deletions
+135
-17
lib/gitlab/jira_import/issue_serializer.rb
lib/gitlab/jira_import/issue_serializer.rb
+47
-0
spec/lib/gitlab/jira_import/issue_serializer_spec.rb
spec/lib/gitlab/jira_import/issue_serializer_spec.rb
+88
-17
No files found.
lib/gitlab/jira_import/issue_serializer.rb
View file @
b5fc6a2a
...
...
@@ -4,12 +4,14 @@ module Gitlab
module
JiraImport
class
IssueSerializer
attr_reader
:jira_issue
,
:project
,
:params
,
:formatter
attr_accessor
:metadata
def
initialize
(
project
,
jira_issue
,
params
=
{})
@jira_issue
=
jira_issue
@project
=
project
@params
=
params
@formatter
=
Gitlab
::
ImportFormatter
.
new
@metadata
=
[]
end
def
execute
...
...
@@ -36,6 +38,7 @@ module Gitlab
body
<<
formatter
.
author_line
(
jira_issue
.
reporter
.
displayName
)
body
<<
formatter
.
assignee_line
(
jira_issue
.
assignee
.
displayName
)
if
jira_issue
.
assignee
body
<<
jira_issue
.
description
body
<<
add_metadata
body
.
join
end
...
...
@@ -48,6 +51,50 @@ module Gitlab
Issuable
::
STATE_ID_MAP
[
:opened
]
end
end
def
add_metadata
add_field
(
%w(issuetype name)
,
'Issue type'
)
add_field
(
%w(priority name)
,
'Priority'
)
add_labels
add_field
(
'environment'
,
'Environment'
)
add_field
(
'duedate'
,
'Due date'
)
add_parent
add_versions
return
if
metadata
.
empty?
metadata
.
join
(
"
\n
"
).
prepend
(
"
\n\n
---
\n\n
**Issue metadata**
\n\n
"
)
end
def
add_field
(
keys
,
field_label
)
value
=
fields
.
dig
(
*
keys
)
return
if
value
.
blank?
metadata
<<
"-
#{
field_label
}
:
#{
value
}
"
end
def
add_labels
return
if
fields
[
'labels'
].
blank?
metadata
<<
"- Labels:
#{
fields
[
'labels'
].
join
(
', '
)
}
"
end
def
add_parent
parent_issue_key
=
fields
.
dig
(
'parent'
,
'key'
)
return
if
parent_issue_key
.
blank?
metadata
<<
"- Parent issue: [
#{
parent_issue_key
}
]
#{
fields
[
'parent'
][
'fields'
][
'summary'
]
}
"
end
def
add_versions
return
if
fields
[
'fixVersions'
].
blank?
metadata
<<
"- Fix versions:
#{
fields
[
'fixVersions'
].
map
{
|
version
|
version
[
'name'
]
}
.join(', ')}"
end
def
fields
jira_issue
.
fields
end
end
end
end
spec/lib/gitlab/jira_import/issue_serializer_spec.rb
View file @
b5fc6a2a
...
...
@@ -14,6 +14,29 @@ describe Gitlab::JiraImport::IssueSerializer do
let
(
:updated_at
)
{
'2020-01-10 20:00:00'
}
let
(
:assignee
)
{
double
(
displayName:
'Solver'
)
}
let
(
:jira_status
)
{
'new'
}
let
(
:parent_field
)
do
{
'key'
=>
'FOO-2'
,
'id'
=>
'1050'
,
'fields'
=>
{
'summary'
=>
'parent issue FOO'
}
}
end
let
(
:issue_type_field
)
{
{
'name'
=>
'Task'
}
}
let
(
:fix_versions_field
)
{
[{
'name'
=>
'1.0'
},
{
'name'
=>
'1.1'
}]
}
let
(
:priority_field
)
{
{
'name'
=>
'Medium'
}
}
let
(
:labels_field
)
{
%w(bug backend)
}
let
(
:environment_field
)
{
'staging'
}
let
(
:duedate_field
)
{
'2020-03-01'
}
let
(
:fields
)
do
{
'parent'
=>
parent_field
,
'issuetype'
=>
issue_type_field
,
'fixVersions'
=>
fix_versions_field
,
'priority'
=>
priority_field
,
'labels'
=>
labels_field
,
'environment'
=>
environment_field
,
'duedate'
=>
duedate_field
}
end
let
(
:jira_issue
)
do
double
(
id:
'1234'
,
...
...
@@ -24,11 +47,15 @@ describe Gitlab::JiraImport::IssueSerializer do
updated:
updated_at
,
assignee:
assignee
,
reporter:
double
(
displayName:
'Reporter'
),
status:
double
(
statusCategory:
{
'key'
=>
jira_status
})
status:
double
(
statusCategory:
{
'key'
=>
jira_status
}),
fields:
fields
)
end
let
(
:params
)
{
{
iid:
iid
}
}
subject
{
described_class
.
new
(
project
,
jira_issue
,
params
).
execute
}
let
(
:expected_description
)
do
<<~
MD
*Created by: Reporter*
...
...
@@ -36,11 +63,21 @@ describe Gitlab::JiraImport::IssueSerializer do
*Assigned to: Solver*
basic description
---
**Issue metadata**
- Issue type: Task
- Priority: Medium
- Labels: bug, backend
- Environment: staging
- Due date: 2020-03-01
- Parent issue: [FOO-2] parent issue FOO
- Fix versions: 1.0, 1.1
MD
end
subject
{
described_class
.
new
(
project
,
jira_issue
,
params
).
execute
}
context
'attributes setting'
do
it
'sets the basic attributes'
do
expect
(
subject
).
to
eq
(
...
...
@@ -54,6 +91,54 @@ describe Gitlab::JiraImport::IssueSerializer do
author_id:
project
.
creator_id
)
end
context
'when some metadata fields are missing'
do
let
(
:assignee
)
{
nil
}
let
(
:parent_field
)
{
nil
}
let
(
:fix_versions_field
)
{
[]
}
let
(
:labels_field
)
{
[]
}
let
(
:environment_field
)
{
nil
}
let
(
:duedate_field
)
{
'2020-03-01'
}
it
'skips the missing fields'
do
expected_description
=
<<~
MD
*Created by: Reporter*
basic description
---
**Issue metadata**
- Issue type: Task
- Priority: Medium
- Due date: 2020-03-01
MD
expect
(
subject
[
:description
]).
to
eq
(
expected_description
.
strip
)
end
end
context
'when all metadata fields are missing'
do
let
(
:assignee
)
{
nil
}
let
(
:parent_field
)
{
nil
}
let
(
:issue_type_field
)
{
nil
}
let
(
:fix_versions_field
)
{
[]
}
let
(
:priority_field
)
{
nil
}
let
(
:labels_field
)
{
[]
}
let
(
:environment_field
)
{
nil
}
let
(
:duedate_field
)
{
nil
}
it
'skips the whole metadata secction'
do
expected_description
=
<<~
MD
*Created by: Reporter*
basic description
MD
expect
(
subject
[
:description
]).
to
eq
(
expected_description
.
strip
)
end
end
end
context
'with done status'
do
...
...
@@ -64,20 +149,6 @@ describe Gitlab::JiraImport::IssueSerializer do
end
end
context
'without the assignee'
do
let
(
:assignee
)
{
nil
}
it
'does not include assignee in the description'
do
expected_description
=
<<~
MD
*Created by: Reporter*
basic description
MD
expect
(
subject
[
:description
]).
to
eq
(
expected_description
.
strip
)
end
end
context
'without the iid'
do
let
(
:params
)
{
{}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment