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
d072c18d
Commit
d072c18d
authored
Dec 18, 2017
by
Phil Hughes
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' into ce-to-ee-2017-12-16
parents
458f54dc
0a395a08
Changes
49
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
49 changed files
with
1040 additions
and
1066 deletions
+1040
-1066
app/assets/javascripts/boards/components/board_sidebar.js
app/assets/javascripts/boards/components/board_sidebar.js
+1
-1
app/assets/javascripts/boards/models/issue.js
app/assets/javascripts/boards/models/issue.js
+0
-1
app/assets/javascripts/diff_notes/components/diff_note_avatars.js
...ts/javascripts/diff_notes/components/diff_note_avatars.js
+2
-2
app/assets/javascripts/dispatcher.js
app/assets/javascripts/dispatcher.js
+3
-3
app/assets/javascripts/init_issuable_sidebar.js
app/assets/javascripts/init_issuable_sidebar.js
+2
-2
app/assets/javascripts/init_notes.js
app/assets/javascripts/init_notes.js
+4
-2
app/assets/javascripts/line_highlighter.js
app/assets/javascripts/line_highlighter.js
+1
-1
app/assets/javascripts/main.js
app/assets/javascripts/main.js
+0
-4
app/assets/javascripts/merge_request.js
app/assets/javascripts/merge_request.js
+128
-132
app/assets/javascripts/merge_request_tabs.js
app/assets/javascripts/merge_request_tabs.js
+2
-2
app/assets/javascripts/notes.js
app/assets/javascripts/notes.js
+6
-0
app/assets/javascripts/repo/components/repo_preview.vue
app/assets/javascripts/repo/components/repo_preview.vue
+1
-1
app/assets/javascripts/right_sidebar.js
app/assets/javascripts/right_sidebar.js
+220
-218
app/assets/javascripts/shortcuts_issuable.js
app/assets/javascripts/shortcuts_issuable.js
+2
-2
app/assets/javascripts/vue_merge_request_widget/services/mr_widget_service.js
...ts/vue_merge_request_widget/services/mr_widget_service.js
+1
-1
app/controllers/projects/merge_requests_controller.rb
app/controllers/projects/merge_requests_controller.rb
+6
-2
app/helpers/issuables_helper.rb
app/helpers/issuables_helper.rb
+2
-2
app/serializers/issuable_entity.rb
app/serializers/issuable_entity.rb
+0
-8
app/serializers/issuable_sidebar_entity.rb
app/serializers/issuable_sidebar_entity.rb
+1
-5
app/serializers/issue_entity.rb
app/serializers/issue_entity.rb
+8
-0
app/serializers/merge_request_serializer.rb
app/serializers/merge_request_serializer.rb
+3
-3
app/serializers/merge_request_widget_entity.rb
app/serializers/merge_request_widget_entity.rb
+2
-4
app/views/projects/merge_requests/show.html.haml
app/views/projects/merge_requests/show.html.haml
+1
-1
app/views/shared/empty_states/_issues.html.haml
app/views/shared/empty_states/_issues.html.haml
+7
-6
changelogs/unreleased/osw-isolate-mr-widget-exposed-attributes.yml
...s/unreleased/osw-isolate-mr-widget-exposed-attributes.yml
+5
-0
doc/articles/laravel_with_gitlab_and_envoy/index.md
doc/articles/laravel_with_gitlab_and_envoy/index.md
+1
-1
ee/app/serializers/ee/merge_request_widget_entity.rb
ee/app/serializers/ee/merge_request_widget_entity.rb
+1
-1
qa/qa/ee.rb
qa/qa/ee.rb
+6
-6
qa/qa/ee/factory/geo/node.rb
qa/qa/ee/factory/geo/node.rb
+3
-3
qa/qa/ee/factory/license.rb
qa/qa/ee/factory/license.rb
+19
-0
qa/qa/ee/scenario/license/add.rb
qa/qa/ee/scenario/license/add.rb
+0
-21
qa/qa/ee/scenario/test/geo.rb
qa/qa/ee/scenario/test/geo.rb
+3
-9
qa/qa/ee/strategy.rb
qa/qa/ee/strategy.rb
+1
-1
qa/qa/specs/features/ee/geo/replication_spec.rb
qa/qa/specs/features/ee/geo/replication_spec.rb
+3
-3
spec/controllers/projects/merge_requests_controller_spec.rb
spec/controllers/projects/merge_requests_controller_spec.rb
+4
-4
spec/ee/spec/serializers/epic_entity_spec.rb
spec/ee/spec/serializers/epic_entity_spec.rb
+1
-2
spec/ee/spec/serializers/merge_request_widget_entity_spec.rb
spec/ee/spec/serializers/merge_request_widget_entity_spec.rb
+1
-1
spec/features/issues_spec.rb
spec/features/issues_spec.rb
+538
-514
spec/features/merge_requests/mini_pipeline_graph_spec.rb
spec/features/merge_requests/mini_pipeline_graph_spec.rb
+4
-4
spec/fixtures/api/schemas/entities/merge_request_widget.json
spec/fixtures/api/schemas/entities/merge_request_widget.json
+4
-4
spec/javascripts/collapsed_sidebar_todo_spec.js
spec/javascripts/collapsed_sidebar_todo_spec.js
+1
-2
spec/javascripts/line_highlighter_spec.js
spec/javascripts/line_highlighter_spec.js
+1
-2
spec/javascripts/merge_request_notes_spec.js
spec/javascripts/merge_request_notes_spec.js
+1
-3
spec/javascripts/merge_request_spec.js
spec/javascripts/merge_request_spec.js
+1
-2
spec/javascripts/merge_request_tabs_spec.js
spec/javascripts/merge_request_tabs_spec.js
+9
-10
spec/javascripts/notes_spec.js
spec/javascripts/notes_spec.js
+1
-3
spec/javascripts/right_sidebar_spec.js
spec/javascripts/right_sidebar_spec.js
+1
-2
spec/serializers/merge_request_serializer_spec.rb
spec/serializers/merge_request_serializer_spec.rb
+27
-21
spec/serializers/merge_request_widget_entity_spec.rb
spec/serializers/merge_request_widget_entity_spec.rb
+1
-44
No files found.
app/assets/javascripts/boards/components/board_sidebar.js
View file @
d072c18d
/* eslint-disable comma-dangle, space-before-function-paren, no-new */
/* eslint-disable comma-dangle, space-before-function-paren, no-new */
/* global MilestoneSelect */
/* global MilestoneSelect */
/* global Sidebar */
import
Vue
from
'
vue
'
;
import
Vue
from
'
vue
'
;
import
weight
from
'
ee/sidebar/components/weight/weight.vue
'
;
import
weight
from
'
ee/sidebar/components/weight/weight.vue
'
;
import
Flash
from
'
../../flash
'
;
import
Flash
from
'
../../flash
'
;
import
Sidebar
from
'
../../right_sidebar
'
;
import
eventHub
from
'
../../sidebar/event_hub
'
;
import
eventHub
from
'
../../sidebar/event_hub
'
;
import
assigneeTitle
from
'
../../sidebar/components/assignees/assignee_title
'
;
import
assigneeTitle
from
'
../../sidebar/components/assignees/assignee_title
'
;
import
assignees
from
'
../../sidebar/components/assignees/assignees
'
;
import
assignees
from
'
../../sidebar/components/assignees/assignees
'
;
...
...
app/assets/javascripts/boards/models/issue.js
View file @
d072c18d
...
@@ -25,7 +25,6 @@ class ListIssue {
...
@@ -25,7 +25,6 @@ class ListIssue {
this
.
isLoading
=
{
this
.
isLoading
=
{
weight
:
false
,
weight
:
false
,
};
};
this
.
isLoading
=
{};
this
.
sidebarInfoEndpoint
=
obj
.
issue_sidebar_endpoint
;
this
.
sidebarInfoEndpoint
=
obj
.
issue_sidebar_endpoint
;
this
.
toggleSubscriptionEndpoint
=
obj
.
toggle_subscription_endpoint
;
this
.
toggleSubscriptionEndpoint
=
obj
.
toggle_subscription_endpoint
;
this
.
milestone_id
=
obj
.
milestone_id
;
this
.
milestone_id
=
obj
.
milestone_id
;
...
...
app/assets/javascripts/diff_notes/components/diff_note_avatars.js
View file @
d072c18d
/* global CommentsStore */
/* global CommentsStore */
/* global notes */
import
Vue
from
'
vue
'
;
import
Vue
from
'
vue
'
;
import
collapseIcon
from
'
../icons/collapse_icon.svg
'
;
import
collapseIcon
from
'
../icons/collapse_icon.svg
'
;
import
Notes
from
'
../../notes
'
;
import
userAvatarImage
from
'
../../vue_shared/components/user_avatar/user_avatar_image.vue
'
;
import
userAvatarImage
from
'
../../vue_shared/components/user_avatar/user_avatar_image.vue
'
;
const
DiffNoteAvatars
=
Vue
.
extend
({
const
DiffNoteAvatars
=
Vue
.
extend
({
...
@@ -129,7 +129,7 @@ const DiffNoteAvatars = Vue.extend({
...
@@ -129,7 +129,7 @@ const DiffNoteAvatars = Vue.extend({
},
},
methods
:
{
methods
:
{
clickedAvatar
(
e
)
{
clickedAvatar
(
e
)
{
notes
.
onAddDiffNote
(
e
);
Notes
.
instance
.
onAddDiffNote
(
e
);
// Toggle the active state of the toggle all button
// Toggle the active state of the toggle all button
this
.
toggleDiscussionsToggleState
();
this
.
toggleDiscussionsToggleState
();
...
...
app/assets/javascripts/dispatcher.js
View file @
d072c18d
...
@@ -11,7 +11,7 @@ import NotificationsForm from './notifications_form';
...
@@ -11,7 +11,7 @@ import NotificationsForm from './notifications_form';
import
notificationsDropdown
from
'
./notifications_dropdown
'
;
import
notificationsDropdown
from
'
./notifications_dropdown
'
;
import
groupAvatar
from
'
./group_avatar
'
;
import
groupAvatar
from
'
./group_avatar
'
;
import
GroupLabelSubscription
from
'
./group_label_subscription
'
;
import
GroupLabelSubscription
from
'
./group_label_subscription
'
;
/* global LineHighlighter */
import
LineHighlighter
from
'
./line_highlighter
'
;
import
BuildArtifacts
from
'
./build_artifacts
'
;
import
BuildArtifacts
from
'
./build_artifacts
'
;
import
CILintEditor
from
'
./ci_lint_editor
'
;
import
CILintEditor
from
'
./ci_lint_editor
'
;
import
groupsSelect
from
'
./groups_select
'
;
import
groupsSelect
from
'
./groups_select
'
;
...
@@ -21,7 +21,7 @@ import NamespaceSelect from './namespace_select';
...
@@ -21,7 +21,7 @@ import NamespaceSelect from './namespace_select';
import
NewCommitForm
from
'
./new_commit_form
'
;
import
NewCommitForm
from
'
./new_commit_form
'
;
import
Project
from
'
./project
'
;
import
Project
from
'
./project
'
;
import
projectAvatar
from
'
./project_avatar
'
;
import
projectAvatar
from
'
./project_avatar
'
;
/* global MergeRequest */
import
MergeRequest
from
'
./merge_request
'
;
import
Compare
from
'
./compare
'
;
import
Compare
from
'
./compare
'
;
import
initCompareAutocomplete
from
'
./compare_autocomplete
'
;
import
initCompareAutocomplete
from
'
./compare_autocomplete
'
;
/* global PathLocks */
/* global PathLocks */
...
@@ -30,7 +30,7 @@ import ProjectNew from './project_new';
...
@@ -30,7 +30,7 @@ import ProjectNew from './project_new';
import
projectImport
from
'
./project_import
'
;
import
projectImport
from
'
./project_import
'
;
import
Labels
from
'
./labels
'
;
import
Labels
from
'
./labels
'
;
import
LabelManager
from
'
./label_manager
'
;
import
LabelManager
from
'
./label_manager
'
;
/* global Sidebar */
import
Sidebar
from
'
./right_sidebar
'
;
/* global WeightSelect */
/* global WeightSelect */
/* global AdminEmailSelect */
/* global AdminEmailSelect */
...
...
app/assets/javascripts/init_issuable_sidebar.js
View file @
d072c18d
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
/* global WeightSelect */
/* global WeightSelect */
import
LabelsSelect
from
'
./labels_select
'
;
import
LabelsSelect
from
'
./labels_select
'
;
import
IssuableContext
from
'
./issuable_context
'
;
import
IssuableContext
from
'
./issuable_context
'
;
/* global Sidebar */
import
Sidebar
from
'
./right_sidebar
'
;
import
DueDateSelectors
from
'
./due_date_select
'
;
import
DueDateSelectors
from
'
./due_date_select
'
;
...
@@ -17,5 +17,5 @@ export default () => {
...
@@ -17,5 +17,5 @@ export default () => {
new
WeightSelect
();
new
WeightSelect
();
new
IssuableContext
(
sidebarOptions
.
currentUser
);
new
IssuableContext
(
sidebarOptions
.
currentUser
);
new
DueDateSelectors
();
new
DueDateSelectors
();
window
.
sidebar
=
new
Sidebar
();
Sidebar
.
initialize
();
};
};
app/assets/javascripts/init_notes.js
View file @
d072c18d
/* global Notes */
import
Notes
from
'
./notes
'
;
export
default
()
=>
{
export
default
()
=>
{
const
dataEl
=
document
.
querySelector
(
'
.js-notes-data
'
);
const
dataEl
=
document
.
querySelector
(
'
.js-notes-data
'
);
...
@@ -10,5 +10,7 @@ export default () => {
...
@@ -10,5 +10,7 @@ export default () => {
autocomplete
,
autocomplete
,
}
=
JSON
.
parse
(
dataEl
.
innerHTML
);
}
=
JSON
.
parse
(
dataEl
.
innerHTML
);
window
.
notes
=
new
Notes
(
notesUrl
,
notesIds
,
now
,
diffView
,
autocomplete
);
// Create a singleton so that we don't need to assign
// into the window object, we can just access the current isntance with Notes.instance
Notes
.
initialize
(
notesUrl
,
notesIds
,
now
,
diffView
,
autocomplete
);
};
};
app/assets/javascripts/line_highlighter.js
View file @
d072c18d
...
@@ -175,4 +175,4 @@ LineHighlighter.prototype.__setLocationHash__ = function(value) {
...
@@ -175,4 +175,4 @@ LineHighlighter.prototype.__setLocationHash__ = function(value) {
},
document
.
title
,
value
);
},
document
.
title
,
value
);
};
};
window
.
LineHighlighter
=
LineHighlighter
;
export
default
LineHighlighter
;
app/assets/javascripts/main.js
View file @
d072c18d
...
@@ -45,14 +45,10 @@ import './layout_nav';
...
@@ -45,14 +45,10 @@ import './layout_nav';
import
LazyLoader
from
'
./lazy_loader
'
;
import
LazyLoader
from
'
./lazy_loader
'
;
import
'
./line_highlighter
'
;
import
'
./line_highlighter
'
;
import
initLogoAnimation
from
'
./logo
'
;
import
initLogoAnimation
from
'
./logo
'
;
import
'
./merge_request
'
;
import
'
./merge_request_tabs
'
;
import
'
./milestone_select
'
;
import
'
./milestone_select
'
;
import
'
./notes
'
;
import
'
./preview_markdown
'
;
import
'
./preview_markdown
'
;
import
'
./projects_dropdown
'
;
import
'
./projects_dropdown
'
;
import
'
./render_gfm
'
;
import
'
./render_gfm
'
;
import
'
./right_sidebar
'
;
import
initBreadcrumbs
from
'
./breadcrumb
'
;
import
initBreadcrumbs
from
'
./breadcrumb
'
;
// EE-only scripts
// EE-only scripts
...
...
app/assets/javascripts/merge_request.js
View file @
d072c18d
...
@@ -7,142 +7,138 @@ import MergeRequestTabs from './merge_request_tabs';
...
@@ -7,142 +7,138 @@ import MergeRequestTabs from './merge_request_tabs';
import
IssuablesHelper
from
'
./helpers/issuables_helper
'
;
import
IssuablesHelper
from
'
./helpers/issuables_helper
'
;
import
{
addDelimiter
}
from
'
./lib/utils/text_utility
'
;
import
{
addDelimiter
}
from
'
./lib/utils/text_utility
'
;
(
function
()
{
function
MergeRequest
(
opts
)
{
this
.
MergeRequest
=
(
function
()
{
// Initialize MergeRequest behavior
function
MergeRequest
(
opts
)
{
//
// Initialize MergeRequest behavior
// Options:
//
// action - String, current controller action
// Options:
//
// action - String, current controller action
this
.
opts
=
opts
!=
null
?
opts
:
{};
//
this
.
submitNoteForm
=
this
.
submitNoteForm
.
bind
(
this
);
this
.
opts
=
opts
!=
null
?
opts
:
{};
this
.
$el
=
$
(
'
.merge-request
'
);
this
.
submitNoteForm
=
this
.
submitNoteForm
.
bind
(
this
);
this
.
$
(
'
.show-all-commits
'
).
on
(
'
click
'
,
(
function
(
_this
)
{
this
.
$el
=
$
(
'
.merge-request
'
);
return
function
()
{
this
.
$
(
'
.show-all-commits
'
).
on
(
'
click
'
,
(
function
(
_this
)
{
return
_this
.
showAllCommits
();
return
function
()
{
return
_this
.
showAllCommits
();
};
})(
this
));
this
.
initTabs
();
this
.
initMRBtnListeners
();
this
.
initCommitMessageListeners
();
this
.
closeReopenReportToggle
=
IssuablesHelper
.
initCloseReopenReport
();
if
(
$
(
"
a.btn-close
"
).
length
)
{
this
.
taskList
=
new
TaskList
({
dataType
:
'
merge_request
'
,
fieldName
:
'
description
'
,
selector
:
'
.detail-page-description
'
,
onSuccess
:
(
result
)
=>
{
document
.
querySelector
(
'
#task_status
'
).
innerText
=
result
.
task_status
;
document
.
querySelector
(
'
#task_status_short
'
).
innerText
=
result
.
task_status_short
;
}
});
}
}
// Local jQuery finder
MergeRequest
.
prototype
.
$
=
function
(
selector
)
{
return
this
.
$el
.
find
(
selector
);
};
};
})(
this
));
MergeRequest
.
prototype
.
initTabs
=
function
()
{
if
(
window
.
mrTabs
)
{
this
.
initTabs
();
window
.
mrTabs
.
unbindEvents
();
this
.
initMRBtnListeners
();
this
.
initCommitMessageListeners
();
this
.
closeReopenReportToggle
=
IssuablesHelper
.
initCloseReopenReport
();
if
(
$
(
"
a.btn-close
"
).
length
)
{
this
.
taskList
=
new
TaskList
({
dataType
:
'
merge_request
'
,
fieldName
:
'
description
'
,
selector
:
'
.detail-page-description
'
,
onSuccess
:
(
result
)
=>
{
document
.
querySelector
(
'
#task_status
'
).
innerText
=
result
.
task_status
;
document
.
querySelector
(
'
#task_status_short
'
).
innerText
=
result
.
task_status_short
;
}
}
window
.
mrTabs
=
new
MergeRequestTabs
(
this
.
opts
);
});
};
}
}
MergeRequest
.
prototype
.
showAllCommits
=
function
()
{
this
.
$
(
'
.first-commits
'
).
remove
();
// Local jQuery finder
return
this
.
$
(
'
.all-commits
'
).
removeClass
(
'
hide
'
);
MergeRequest
.
prototype
.
$
=
function
(
selector
)
{
};
return
this
.
$el
.
find
(
selector
);
};
MergeRequest
.
prototype
.
initMRBtnListeners
=
function
()
{
var
_this
;
MergeRequest
.
prototype
.
initTabs
=
function
()
{
_this
=
this
;
if
(
window
.
mrTabs
)
{
return
$
(
'
a.btn-close, a.btn-reopen
'
).
on
(
'
click
'
,
function
(
e
)
{
window
.
mrTabs
.
unbindEvents
();
var
$this
,
shouldSubmit
;
}
$this
=
$
(
this
);
window
.
mrTabs
=
new
MergeRequestTabs
(
this
.
opts
);
shouldSubmit
=
$this
.
hasClass
(
'
btn-comment
'
);
};
if
(
shouldSubmit
&&
$this
.
data
(
'
submitted
'
))
{
return
;
MergeRequest
.
prototype
.
showAllCommits
=
function
()
{
}
this
.
$
(
'
.first-commits
'
).
remove
();
return
this
.
$
(
'
.all-commits
'
).
removeClass
(
'
hide
'
);
if
(
this
.
closeReopenReportToggle
)
this
.
closeReopenReportToggle
.
setDisable
();
};
if
(
shouldSubmit
)
{
MergeRequest
.
prototype
.
initMRBtnListeners
=
function
()
{
if
(
$this
.
hasClass
(
'
btn-comment-and-close
'
)
||
$this
.
hasClass
(
'
btn-comment-and-reopen
'
))
{
var
_this
;
e
.
preventDefault
();
_this
=
this
;
e
.
stopImmediatePropagation
();
return
$
(
'
a.btn-close, a.btn-reopen
'
).
on
(
'
click
'
,
function
(
e
)
{
var
$this
,
shouldSubmit
;
_this
.
submitNoteForm
(
$this
.
closest
(
'
form
'
),
$this
);
$this
=
$
(
this
);
}
shouldSubmit
=
$this
.
hasClass
(
'
btn-comment
'
);
}
if
(
shouldSubmit
&&
$this
.
data
(
'
submitted
'
))
{
});
return
;
};
}
MergeRequest
.
prototype
.
submitNoteForm
=
function
(
form
,
$button
)
{
var
noteText
;
noteText
=
form
.
find
(
"
textarea.js-note-text
"
).
val
();
if
(
noteText
.
trim
().
length
>
0
)
{
form
.
submit
();
$button
.
data
(
'
submitted
'
,
true
);
return
$button
.
trigger
(
'
click
'
);
}
};
MergeRequest
.
prototype
.
initCommitMessageListeners
=
function
()
{
$
(
document
).
on
(
'
click
'
,
'
a.js-with-description-link
'
,
function
(
e
)
{
var
textarea
=
$
(
'
textarea.js-commit-message
'
);
e
.
preventDefault
();
textarea
.
val
(
textarea
.
data
(
'
messageWithDescription
'
));
if
(
this
.
closeReopenReportToggle
)
this
.
closeReopenReportToggle
.
setDisable
();
$
(
'
.js-with-description-hint
'
).
hide
();
$
(
'
.js-without-description-hint
'
).
show
();
});
$
(
document
).
on
(
'
click
'
,
'
a.js-without-description-link
'
,
function
(
e
)
{
if
(
shouldSubmit
)
{
var
textarea
=
$
(
'
textarea.js-commit-message
'
);
if
(
$this
.
hasClass
(
'
btn-comment-and-close
'
)
||
$this
.
hasClass
(
'
btn-comment-and-reopen
'
))
{
e
.
preventDefault
();
e
.
preventDefault
();
e
.
stopImmediatePropagation
();
textarea
.
val
(
textarea
.
data
(
'
messageWithoutDescription
'
));
_this
.
submitNoteForm
(
$this
.
closest
(
'
form
'
),
$this
);
$
(
'
.js-with-description-hint
'
).
show
();
$
(
'
.js-without-description-hint
'
).
hide
();
});
};
MergeRequest
.
prototype
.
updateStatusText
=
function
(
classToRemove
,
classToAdd
,
newStatusText
)
{
$
(
'
.detail-page-header .status-box
'
)
.
removeClass
(
classToRemove
)
.
addClass
(
classToAdd
)
.
find
(
'
span
'
)
.
text
(
newStatusText
);
};
MergeRequest
.
prototype
.
decreaseCounter
=
function
(
by
=
1
)
{
const
$el
=
$
(
'
.nav-links .js-merge-counter
'
);
const
count
=
Math
.
max
((
parseInt
(
$el
.
text
().
replace
(
/
[^\d]
/
,
''
),
10
)
-
by
),
0
);
$el
.
text
(
addDelimiter
(
count
));
};
MergeRequest
.
prototype
.
hideCloseButton
=
function
()
{
const
el
=
document
.
querySelector
(
'
.merge-request .js-issuable-actions
'
);
const
closeDropdownItem
=
el
.
querySelector
(
'
li.close-item
'
);
if
(
closeDropdownItem
)
{
closeDropdownItem
.
classList
.
add
(
'
hidden
'
);
// Selects the next dropdown item
el
.
querySelector
(
'
li.report-item
'
).
click
();
}
else
{
// No dropdown just hide the Close button
el
.
querySelector
(
'
.btn-close
'
).
classList
.
add
(
'
hidden
'
);
}
}
// Dropdown for mobile screen
}
el
.
querySelector
(
'
li.js-close-item
'
).
classList
.
add
(
'
hidden
'
);
});
};
};
return
MergeRequest
;
MergeRequest
.
prototype
.
submitNoteForm
=
function
(
form
,
$button
)
{
})();
var
noteText
;
}).
call
(
window
);
noteText
=
form
.
find
(
"
textarea.js-note-text
"
).
val
();
if
(
noteText
.
trim
().
length
>
0
)
{
form
.
submit
();
$button
.
data
(
'
submitted
'
,
true
);
return
$button
.
trigger
(
'
click
'
);
}
};
MergeRequest
.
prototype
.
initCommitMessageListeners
=
function
()
{
$
(
document
).
on
(
'
click
'
,
'
a.js-with-description-link
'
,
function
(
e
)
{
var
textarea
=
$
(
'
textarea.js-commit-message
'
);
e
.
preventDefault
();
textarea
.
val
(
textarea
.
data
(
'
messageWithDescription
'
));
$
(
'
.js-with-description-hint
'
).
hide
();
$
(
'
.js-without-description-hint
'
).
show
();
});
$
(
document
).
on
(
'
click
'
,
'
a.js-without-description-link
'
,
function
(
e
)
{
var
textarea
=
$
(
'
textarea.js-commit-message
'
);
e
.
preventDefault
();
textarea
.
val
(
textarea
.
data
(
'
messageWithoutDescription
'
));
$
(
'
.js-with-description-hint
'
).
show
();
$
(
'
.js-without-description-hint
'
).
hide
();
});
};
MergeRequest
.
prototype
.
updateStatusText
=
function
(
classToRemove
,
classToAdd
,
newStatusText
)
{
$
(
'
.detail-page-header .status-box
'
)
.
removeClass
(
classToRemove
)
.
addClass
(
classToAdd
)
.
find
(
'
span
'
)
.
text
(
newStatusText
);
};
MergeRequest
.
prototype
.
decreaseCounter
=
function
(
by
=
1
)
{
const
$el
=
$
(
'
.nav-links .js-merge-counter
'
);
const
count
=
Math
.
max
((
parseInt
(
$el
.
text
().
replace
(
/
[^\d]
/
,
''
),
10
)
-
by
),
0
);
$el
.
text
(
addDelimiter
(
count
));
};
MergeRequest
.
prototype
.
hideCloseButton
=
function
()
{
const
el
=
document
.
querySelector
(
'
.merge-request .js-issuable-actions
'
);
const
closeDropdownItem
=
el
.
querySelector
(
'
li.close-item
'
);
if
(
closeDropdownItem
)
{
closeDropdownItem
.
classList
.
add
(
'
hidden
'
);
// Selects the next dropdown item
el
.
querySelector
(
'
li.report-item
'
).
click
();
}
else
{
// No dropdown just hide the Close button
el
.
querySelector
(
'
.btn-close
'
).
classList
.
add
(
'
hidden
'
);
}
// Dropdown for mobile screen
el
.
querySelector
(
'
li.js-close-item
'
).
classList
.
add
(
'
hidden
'
);
};
export
default
MergeRequest
;
app/assets/javascripts/merge_request_tabs.js
View file @
d072c18d
/* eslint-disable no-new, class-methods-use-this */
/* eslint-disable no-new, class-methods-use-this */
/* global notes */
import
Cookies
from
'
js-cookie
'
;
import
Cookies
from
'
js-cookie
'
;
import
Flash
from
'
./flash
'
;
import
Flash
from
'
./flash
'
;
...
@@ -16,6 +15,7 @@ import initDiscussionTab from './image_diff/init_discussion_tab';
...
@@ -16,6 +15,7 @@ import initDiscussionTab from './image_diff/init_discussion_tab';
import
Diff
from
'
./diff
'
;
import
Diff
from
'
./diff
'
;
import
{
localTimeAgo
}
from
'
./lib/utils/datetime_utility
'
;
import
{
localTimeAgo
}
from
'
./lib/utils/datetime_utility
'
;
import
syntaxHighlight
from
'
./syntax_highlight
'
;
import
syntaxHighlight
from
'
./syntax_highlight
'
;
import
Notes
from
'
./notes
'
;
/* eslint-disable max-len */
/* eslint-disable max-len */
// MergeRequestTabs
// MergeRequestTabs
...
@@ -324,7 +324,7 @@ export default class MergeRequestTabs {
...
@@ -324,7 +324,7 @@ export default class MergeRequestTabs {
if
(
anchor
&&
anchor
.
length
>
0
)
{
if
(
anchor
&&
anchor
.
length
>
0
)
{
const
notesContent
=
anchor
.
closest
(
'
.notes_content
'
);
const
notesContent
=
anchor
.
closest
(
'
.notes_content
'
);
const
lineType
=
notesContent
.
hasClass
(
'
new
'
)
?
'
new
'
:
'
old
'
;
const
lineType
=
notesContent
.
hasClass
(
'
new
'
)
?
'
new
'
:
'
old
'
;
notes
.
toggleDiffNote
({
Notes
.
instance
.
toggleDiffNote
({
target
:
anchor
,
target
:
anchor
,
lineType
,
lineType
,
forceShow
:
true
,
forceShow
:
true
,
...
...
app/assets/javascripts/notes.js
View file @
d072c18d
...
@@ -37,6 +37,12 @@ const MAX_VISIBLE_COMMIT_LIST_COUNT = 3;
...
@@ -37,6 +37,12 @@ const MAX_VISIBLE_COMMIT_LIST_COUNT = 3;
const
REGEX_QUICK_ACTIONS
=
/^
\/\w
+.*$/gm
;
const
REGEX_QUICK_ACTIONS
=
/^
\/\w
+.*$/gm
;
export
default
class
Notes
{
export
default
class
Notes
{
static
initialize
(
notes_url
,
note_ids
,
last_fetched_at
,
view
,
enableGFM
=
true
)
{
if
(
!
this
.
instance
)
{
this
.
instance
=
new
Notes
(
notes_url
,
note_ids
,
last_fetched_at
,
view
,
enableGFM
);
}
}
constructor
(
notes_url
,
note_ids
,
last_fetched_at
,
view
,
enableGFM
=
true
)
{
constructor
(
notes_url
,
note_ids
,
last_fetched_at
,
view
,
enableGFM
=
true
)
{
this
.
updateTargetButtons
=
this
.
updateTargetButtons
.
bind
(
this
);
this
.
updateTargetButtons
=
this
.
updateTargetButtons
.
bind
(
this
);
this
.
updateComment
=
this
.
updateComment
.
bind
(
this
);
this
.
updateComment
=
this
.
updateComment
.
bind
(
this
);
...
...
app/assets/javascripts/repo/components/repo_preview.vue
View file @
d072c18d
<
script
>
<
script
>
/* global LineHighlighter */
import
{
mapGetters
}
from
'
vuex
'
;
import
{
mapGetters
}
from
'
vuex
'
;
import
LineHighlighter
from
'
../../line_highlighter
'
;
import
syntaxHighlight
from
'
../../syntax_highlight
'
;
import
syntaxHighlight
from
'
../../syntax_highlight
'
;
export
default
{
export
default
{
...
...
app/assets/javascripts/right_sidebar.js
View file @
d072c18d
This diff is collapsed.
Click to expand it.
app/assets/javascripts/shortcuts_issuable.js
View file @
d072c18d
/* global Mousetrap */
/* global Mousetrap */
/* global sidebar */
import
_
from
'
underscore
'
;
import
_
from
'
underscore
'
;
import
'
mousetrap
'
;
import
'
mousetrap
'
;
import
Sidebar
from
'
./right_sidebar
'
;
import
ShortcutsNavigation
from
'
./shortcuts_navigation
'
;
import
ShortcutsNavigation
from
'
./shortcuts_navigation
'
;
import
{
CopyAsGFM
}
from
'
./behaviors/copy_as_gfm
'
;
import
{
CopyAsGFM
}
from
'
./behaviors/copy_as_gfm
'
;
...
@@ -69,7 +69,7 @@ export default class ShortcutsIssuable extends ShortcutsNavigation {
...
@@ -69,7 +69,7 @@ export default class ShortcutsIssuable extends ShortcutsNavigation {
}
}
static
openSidebarDropdown
(
name
)
{
static
openSidebarDropdown
(
name
)
{
sidebar
.
openDropdown
(
name
);
Sidebar
.
instance
.
openDropdown
(
name
);
return
false
;
return
false
;
}
}
}
}
app/assets/javascripts/vue_merge_request_widget/services/mr_widget_service.js
View file @
d072c18d
...
@@ -6,7 +6,7 @@ Vue.use(VueResource);
...
@@ -6,7 +6,7 @@ Vue.use(VueResource);
export
default
class
MRWidgetService
{
export
default
class
MRWidgetService
{
constructor
(
endpoints
)
{
constructor
(
endpoints
)
{
this
.
mergeResource
=
Vue
.
resource
(
endpoints
.
mergePath
);
this
.
mergeResource
=
Vue
.
resource
(
endpoints
.
mergePath
);
this
.
mergeCheckResource
=
Vue
.
resource
(
endpoints
.
statusPath
);
this
.
mergeCheckResource
=
Vue
.
resource
(
`
${
endpoints
.
statusPath
}
?serializer=widget`
);
this
.
cancelAutoMergeResource
=
Vue
.
resource
(
endpoints
.
cancelAutoMergePath
);
this
.
cancelAutoMergeResource
=
Vue
.
resource
(
endpoints
.
cancelAutoMergePath
);
this
.
removeWIPResource
=
Vue
.
resource
(
endpoints
.
removeWIPPath
);
this
.
removeWIPResource
=
Vue
.
resource
(
endpoints
.
removeWIPPath
);
this
.
removeSourceBranchResource
=
Vue
.
resource
(
endpoints
.
sourceBranchPath
);
this
.
removeSourceBranchResource
=
Vue
.
resource
(
endpoints
.
sourceBranchPath
);
...
...
app/controllers/projects/merge_requests_controller.rb
View file @
d072c18d
...
@@ -133,7 +133,7 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo
...
@@ -133,7 +133,7 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo
.
new
(
project
,
current_user
,
wip_event:
'unwip'
)
.
new
(
project
,
current_user
,
wip_event:
'unwip'
)
.
execute
(
@merge_request
)
.
execute
(
@merge_request
)
render
json:
serialize
r
.
represen
t
(
@merge_request
)
render
json:
serialize
_widge
t
(
@merge_request
)
end
end
def
commit_change_content
def
commit_change_content
...
@@ -149,7 +149,7 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo
...
@@ -149,7 +149,7 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo
.
new
(
@project
,
current_user
)
.
new
(
@project
,
current_user
)
.
cancel
(
@merge_request
)
.
cancel
(
@merge_request
)
render
json:
serialize
r
.
represen
t
(
@merge_request
)
render
json:
serialize
_widge
t
(
@merge_request
)
end
end
def
merge
def
merge
...
@@ -313,6 +313,10 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo
...
@@ -313,6 +313,10 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo
end
end
end
end
def
serialize_widget
(
merge_request
)
serializer
.
represent
(
merge_request
,
serializer:
'widget'
)
end
def
serializer
def
serializer
MergeRequestSerializer
.
new
(
current_user:
current_user
,
project:
merge_request
.
project
)
MergeRequestSerializer
.
new
(
current_user:
current_user
,
project:
merge_request
.
project
)
end
end
...
...
app/helpers/issuables_helper.rb
View file @
d072c18d
...
@@ -32,7 +32,7 @@ module IssuablesHelper
...
@@ -32,7 +32,7 @@ module IssuablesHelper
end
end
end
end
def
serialize_issuable
(
issuable
)
def
serialize_issuable
(
issuable
,
serializer:
nil
)
serializer_klass
=
case
issuable
serializer_klass
=
case
issuable
when
Issue
when
Issue
IssueSerializer
IssueSerializer
...
@@ -42,7 +42,7 @@ module IssuablesHelper
...
@@ -42,7 +42,7 @@ module IssuablesHelper
serializer_klass
serializer_klass
.
new
(
current_user:
current_user
,
project:
issuable
.
project
)
.
new
(
current_user:
current_user
,
project:
issuable
.
project
)
.
represent
(
issuable
)
.
represent
(
issuable
,
serializer:
serializer
)
.
to_json
.
to_json
end
end
...
...
app/serializers/issuable_entity.rb
View file @
d072c18d
...
@@ -3,14 +3,6 @@ class IssuableEntity < Grape::Entity
...
@@ -3,14 +3,6 @@ class IssuableEntity < Grape::Entity
expose
:id
expose
:id
expose
:iid
expose
:iid
expose
:author_id
expose
:description
expose
:description
expose
:lock_version
expose
:milestone_id
expose
:title
expose
:title
expose
:updated_by_id
expose
:created_at
expose
:updated_at
expose
:milestone
,
using:
API
::
Entities
::
Milestone
expose
:labels
,
using:
LabelEntity
end
end
app/serializers/issuable_sidebar_entity.rb
View file @
d072c18d
class
IssuableSidebarEntity
<
Grape
::
Entity
class
IssuableSidebarEntity
<
Grape
::
Entity
include
TimeTrackableEntity
include
RequestAwareEntity
include
RequestAwareEntity
prepend
::
EE
::
IssuableSidebarEntity
prepend
::
EE
::
IssuableSidebarEntity
...
@@ -9,9 +10,4 @@ class IssuableSidebarEntity < Grape::Entity
...
@@ -9,9 +10,4 @@ class IssuableSidebarEntity < Grape::Entity
expose
:subscribed
do
|
issuable
|
expose
:subscribed
do
|
issuable
|
issuable
.
subscribed?
(
request
.
current_user
,
issuable
.
project
)
issuable
.
subscribed?
(
request
.
current_user
,
issuable
.
project
)
end
end
expose
:time_estimate
expose
:total_time_spent
expose
:human_time_estimate
expose
:human_total_time_spent
end
end
app/serializers/issue_entity.rb
View file @
d072c18d
...
@@ -2,7 +2,15 @@ class IssueEntity < IssuableEntity
...
@@ -2,7 +2,15 @@ class IssueEntity < IssuableEntity
include
TimeTrackableEntity
include
TimeTrackableEntity
expose
:state
expose
:state
expose
:milestone_id
expose
:updated_by_id
expose
:created_at
expose
:updated_at
expose
:deleted_at
expose
:deleted_at
expose
:milestone
,
using:
API
::
Entities
::
Milestone
expose
:labels
,
using:
LabelEntity
expose
:lock_version
expose
:author_id
expose
:confidential
expose
:confidential
expose
:discussion_locked
expose
:discussion_locked
expose
:assignees
,
using:
API
::
Entities
::
UserBasic
expose
:assignees
,
using:
API
::
Entities
::
UserBasic
...
...
app/serializers/merge_request_serializer.rb
View file @
d072c18d
class
MergeRequestSerializer
<
BaseSerializer
class
MergeRequestSerializer
<
BaseSerializer
# This overrided method takes care of which entity should be used
# This overrided method takes care of which entity should be used
# to serialize the `merge_request` based on `
basic
` key in `opts` param.
# to serialize the `merge_request` based on `
serializer
` key in `opts` param.
# Hence, `entity` doesn't need to be declared on the class scope.
# Hence, `entity` doesn't need to be declared on the class scope.
def
represent
(
merge_request
,
opts
=
{})
def
represent
(
merge_request
,
opts
=
{})
entity
=
entity
=
case
opts
[
:serializer
]
case
opts
[
:serializer
]
when
'basic'
,
'sidebar'
when
'basic'
,
'sidebar'
MergeRequestBasicEntity
MergeRequestBasicEntity
else
when
'widget'
MergeRequestEntity
MergeRequest
Widget
Entity
end
end
super
(
merge_request
,
opts
,
entity
)
super
(
merge_request
,
opts
,
entity
)
...
...
app/serializers/merge_request_entity.rb
→
app/serializers/merge_request_
widget_
entity.rb
View file @
d072c18d
class
MergeRequestEntity
<
IssuableEntity
class
MergeRequestWidgetEntity
<
IssuableEntity
include
TimeTrackableEntity
prepend
::
EE
::
MergeRequestWidgetEntity
prepend
::
EE
::
MergeRequestEntity
expose
:state
expose
:state
expose
:deleted_at
expose
:in_progress_merge_commit_sha
expose
:in_progress_merge_commit_sha
expose
:merge_commit_sha
expose
:merge_commit_sha
expose
:merge_error
expose
:merge_error
...
...
app/views/projects/merge_requests/show.html.haml
View file @
d072c18d
...
@@ -21,7 +21,7 @@
...
@@ -21,7 +21,7 @@
-# haml-lint:disable InlineJavaScript
-# haml-lint:disable InlineJavaScript
:javascript
:javascript
window
.
gl
=
window
.
gl
||
{};
window
.
gl
=
window
.
gl
||
{};
window
.
gl
.
mrWidgetData
=
#{
serialize_issuable
(
@merge_request
)
}
window
.
gl
.
mrWidgetData
=
#{
serialize_issuable
(
@merge_request
,
serializer:
'widget'
)
}
// Append static, server-generated data not included in merge request entity (EE-Only)
// Append static, server-generated data not included in merge request entity (EE-Only)
// Object.assign would be useful here, but it blows up Phantom.js in tests
// Object.assign would be useful here, but it blows up Phantom.js in tests
...
...
app/views/shared/empty_states/_issues.html.haml
View file @
d072c18d
...
@@ -8,16 +8,17 @@
...
@@ -8,16 +8,17 @@
=
image_tag
'illustrations/issues.svg'
=
image_tag
'illustrations/issues.svg'
.col-xs-12
.col-xs-12
.text-content
.text-content
-
if
has_button
&&
current_user
-
if
current_user
%h4
%h4
=
_
(
"The Issue Tracker is the place to add things that need to be improved or solved in a project"
)
=
_
(
"The Issue Tracker is the place to add things that need to be improved or solved in a project"
)
%p
%p
=
_
(
"Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
)
=
_
(
"Issues can be bugs, tasks or ideas to be discussed. Also, issues are searchable and filterable."
)
.text-center
-
if
has_button
-
if
project_select_button
.text-center
=
render
'shared/new_project_item_select'
,
path:
'issues/new'
,
label:
'New issue'
,
type: :issues
-
if
project_select_button
-
else
=
render
'shared/new_project_item_select'
,
path:
'issues/new'
,
label:
'New issue'
,
type: :issues
=
link_to
'New issue'
,
button_path
,
class:
'btn btn-success'
,
title:
'New issue'
,
id:
'new_issue_link'
-
else
=
link_to
'New issue'
,
button_path
,
class:
'btn btn-success'
,
title:
'New issue'
,
id:
'new_issue_link'
-
else
-
else
%h4
.text-center
=
_
(
"There are no issues to show"
)
%h4
.text-center
=
_
(
"There are no issues to show"
)
%p
%p
...
...
changelogs/unreleased/osw-isolate-mr-widget-exposed-attributes.yml
0 → 100644
View file @
d072c18d
---
title
:
Stop sending milestone and labels data over the wire for MR widget requests
merge_request
:
author
:
type
:
performance
doc/articles/laravel_with_gitlab_and_envoy/index.md
View file @
d072c18d
...
@@ -502,8 +502,8 @@ stages:
...
@@ -502,8 +502,8 @@ stages:
unit_test
:
unit_test
:
stage
:
test
stage
:
test
script
:
script
:
-
composer install
-
cp .env.example .env
-
cp .env.example .env
-
composer install
-
php artisan key:generate
-
php artisan key:generate
-
php artisan migrate
-
php artisan migrate
-
vendor/bin/phpunit
-
vendor/bin/phpunit
...
...
ee/app/serializers/ee/merge_request_entity.rb
→
ee/app/serializers/ee/merge_request_
widget_
entity.rb
View file @
d072c18d
module
EE
module
EE
module
MergeRequestEntity
module
MergeRequest
Widget
Entity
extend
ActiveSupport
::
Concern
extend
ActiveSupport
::
Concern
prepended
do
prepended
do
...
...
qa/qa/ee.rb
View file @
d072c18d
...
@@ -16,18 +16,18 @@ module QA
...
@@ -16,18 +16,18 @@ module QA
end
end
end
end
module
Scenario
module
Factory
autoload
:License
,
'qa/ee/factory/license'
module
Geo
module
Geo
autoload
:Node
,
'qa/ee/
scenario
/geo/node'
autoload
:Node
,
'qa/ee/
factory
/geo/node'
end
end
end
module
Scenario
module
Test
module
Test
autoload
:Geo
,
'qa/ee/scenario/test/geo'
autoload
:Geo
,
'qa/ee/scenario/test/geo'
end
end
module
License
autoload
:Add
,
'qa/ee/scenario/license/add'
end
end
end
end
end
end
end
qa/qa/ee/
scenario
/geo/node.rb
→
qa/qa/ee/
factory
/geo/node.rb
View file @
d072c18d
module
QA
module
QA
module
EE
module
EE
module
Scenario
module
Factory
module
Geo
module
Geo
class
Node
<
QA
::
Scenario
::
Templat
e
class
Node
<
QA
::
Factory
::
Bas
e
attr_accessor
:address
attr_accessor
:address
def
perform
def
fabricate!
QA
::
Page
::
Main
::
Login
.
act
{
sign_in_using_credentials
}
QA
::
Page
::
Main
::
Login
.
act
{
sign_in_using_credentials
}
QA
::
Page
::
Main
::
Menu
.
act
{
go_to_admin_area
}
QA
::
Page
::
Main
::
Menu
.
act
{
go_to_admin_area
}
QA
::
Page
::
Admin
::
Menu
.
act
{
go_to_geo_nodes
}
QA
::
Page
::
Admin
::
Menu
.
act
{
go_to_geo_nodes
}
...
...
qa/qa/ee/factory/license.rb
0 → 100644
View file @
d072c18d
module
QA
module
EE
module
Factory
class
License
<
QA
::
Factory
::
Base
def
fabricate!
(
license
)
QA
::
Page
::
Main
::
Login
.
act
{
sign_in_using_credentials
}
QA
::
Page
::
Main
::
Menu
.
act
{
go_to_admin_area
}
QA
::
Page
::
Admin
::
Menu
.
act
{
go_to_license
}
EE
::
Page
::
Admin
::
License
.
act
(
license
)
do
|
key
|
add_new_license
(
key
)
if
no_license?
end
QA
::
Page
::
Main
::
Menu
.
act
{
sign_out
}
end
end
end
end
end
qa/qa/ee/scenario/license/add.rb
deleted
100644 → 0
View file @
458f54dc
module
QA
module
EE
module
Scenario
module
License
class
Add
<
QA
::
Scenario
::
Template
def
perform
(
license
)
QA
::
Page
::
Main
::
Login
.
act
{
sign_in_using_credentials
}
QA
::
Page
::
Main
::
Menu
.
act
{
go_to_admin_area
}
QA
::
Page
::
Admin
::
Menu
.
act
{
go_to_license
}
EE
::
Page
::
Admin
::
License
.
act
(
license
)
do
|
key
|
add_new_license
(
key
)
if
no_license?
end
QA
::
Page
::
Main
::
Menu
.
act
{
sign_out
}
end
end
end
end
end
end
qa/qa/ee/scenario/test/geo.rb
View file @
d072c18d
...
@@ -39,32 +39,26 @@ module QA
...
@@ -39,32 +39,26 @@ module QA
end
end
def
add_license
def
add_license
# TODO EE license to Runtime.license, gitlab-org/gitlab-qa#86
#
puts
'Adding GitLab EE license ...'
puts
'Adding GitLab EE license ...'
QA
::
Runtime
::
Browser
.
visit
(
:geo_primary
,
QA
::
Page
::
Main
::
Login
)
do
QA
::
Runtime
::
Browser
.
visit
(
:geo_primary
,
QA
::
Page
::
Main
::
Login
)
do
Scenario
::
License
::
Add
.
perform
(
ENV
[
'EE_LICENSE'
])
Factory
::
License
.
fabricate!
(
ENV
[
'EE_LICENSE'
])
end
end
end
end
def
enable_hashed_storage
def
enable_hashed_storage
# TODO, Factory::HashedStorage - gitlab-org/gitlab-qa#86
#
puts
'Enabling hashed repository storage setting ...'
puts
'Enabling hashed repository storage setting ...'
QA
::
Runtime
::
Browser
.
visit
(
:geo_primary
,
QA
::
Page
::
Main
::
Login
)
do
QA
::
Runtime
::
Browser
.
visit
(
:geo_primary
,
QA
::
Page
::
Main
::
Login
)
do
QA
::
Scenario
::
Gitlab
::
Admin
::
HashedStorage
.
perform
(
:enabled
)
QA
::
Factory
::
Settings
::
HashedStorage
.
fabricate!
(
:enabled
)
end
end
end
end
def
add_secondary_node
def
add_secondary_node
# TODO, Factory::Geo::Node - gitlab-org/gitlab-qa#86
#
puts
'Adding new Geo secondary node ...'
puts
'Adding new Geo secondary node ...'
QA
::
Runtime
::
Browser
.
visit
(
:geo_primary
,
QA
::
Page
::
Main
::
Login
)
do
QA
::
Runtime
::
Browser
.
visit
(
:geo_primary
,
QA
::
Page
::
Main
::
Login
)
do
Scenario
::
Geo
::
Node
.
perform
do
|
node
|
Factory
::
Geo
::
Node
.
fabricate!
do
|
node
|
node
.
address
=
QA
::
Runtime
::
Scenario
.
geo_secondary_address
node
.
address
=
QA
::
Runtime
::
Scenario
.
geo_secondary_address
end
end
end
end
...
...
qa/qa/ee/strategy.rb
View file @
d072c18d
...
@@ -11,7 +11,7 @@ module QA
...
@@ -11,7 +11,7 @@ module QA
return
unless
ENV
[
'EE_LICENSE'
]
return
unless
ENV
[
'EE_LICENSE'
]
QA
::
Runtime
::
Browser
.
visit
(
:gitlab
,
QA
::
Page
::
Main
::
Login
)
do
QA
::
Runtime
::
Browser
.
visit
(
:gitlab
,
QA
::
Page
::
Main
::
Login
)
do
EE
::
Scenario
::
License
::
Add
.
perform
(
ENV
[
'EE_LICENSE'
])
EE
::
Factory
::
License
.
fabricate!
(
ENV
[
'EE_LICENSE'
])
end
end
end
end
end
end
...
...
qa/qa/specs/features/ee/geo/replication_spec.rb
View file @
d072c18d
...
@@ -4,9 +4,9 @@ module QA
...
@@ -4,9 +4,9 @@ module QA
Runtime
::
Browser
.
visit
(
:geo_primary
,
QA
::
Page
::
Main
::
Login
)
do
Runtime
::
Browser
.
visit
(
:geo_primary
,
QA
::
Page
::
Main
::
Login
)
do
Page
::
Main
::
Login
.
act
{
sign_in_using_credentials
}
Page
::
Main
::
Login
.
act
{
sign_in_using_credentials
}
Scenario
::
Gitlab
::
Project
::
Create
.
perform
do
|
scenario
|
Factory
::
Resource
::
Project
.
fabricate!
do
|
project
|
scenario
.
name
=
'geo-project'
project
.
name
=
'geo-project'
scenario
.
description
=
'Geo test project'
project
.
description
=
'Geo test project'
end
end
geo_project_name
=
Page
::
Project
::
Show
.
act
{
project_name
}
geo_project_name
=
Page
::
Project
::
Show
.
act
{
project_name
}
...
...
spec/controllers/projects/merge_requests_controller_spec.rb
View file @
d072c18d
...
@@ -91,11 +91,11 @@ describe Projects::MergeRequestsController do
...
@@ -91,11 +91,11 @@ describe Projects::MergeRequestsController do
end
end
end
end
context
'with
out basic
serializer param'
do
context
'with
widget
serializer param'
do
it
'renders
the merge request in the json format
'
do
it
'renders
widget MR entity as json
'
do
go
(
format: :json
)
go
(
serializer:
'widget'
,
format: :json
)
expect
(
response
).
to
match_response_schema
(
'entities/merge_request'
)
expect
(
response
).
to
match_response_schema
(
'entities/merge_request
_widget
'
)
end
end
end
end
end
end
...
...
spec/ee/spec/serializers/epic_entity_spec.rb
View file @
d072c18d
...
@@ -10,8 +10,7 @@ describe EpicEntity do
...
@@ -10,8 +10,7 @@ describe EpicEntity do
subject
{
described_class
.
new
(
resource
,
request:
request
).
as_json
}
subject
{
described_class
.
new
(
resource
,
request:
request
).
as_json
}
it
'has Issuable attributes'
do
it
'has Issuable attributes'
do
expect
(
subject
).
to
include
(
:id
,
:iid
,
:author_id
,
:description
,
:lock_version
,
:milestone_id
,
expect
(
subject
).
to
include
(
:id
,
:iid
,
:description
,
:title
)
:title
,
:updated_by_id
,
:created_at
,
:updated_at
,
:milestone
,
:labels
)
end
end
it
'has epic specific attributes'
do
it
'has epic specific attributes'
do
...
...
spec/ee/spec/serializers/merge_request_entity_spec.rb
→
spec/ee/spec/serializers/merge_request_
widget_
entity_spec.rb
View file @
d072c18d
require
'spec_helper'
require
'spec_helper'
describe
MergeRequestEntity
do
describe
MergeRequest
Widget
Entity
do
let
(
:user
)
{
create
(
:user
)
}
let
(
:user
)
{
create
(
:user
)
}
let
(
:project
)
{
create
:project
,
:repository
}
let
(
:project
)
{
create
:project
,
:repository
}
let
(
:merge_request
)
{
create
(
:merge_request
,
source_project:
project
,
target_project:
project
)
}
let
(
:merge_request
)
{
create
(
:merge_request
,
source_project:
project
,
target_project:
project
)
}
...
...
spec/features/issues_spec.rb
View file @
d072c18d
This diff is collapsed.
Click to expand it.
spec/features/merge_requests/mini_pipeline_graph_spec.rb
View file @
d072c18d
...
@@ -15,8 +15,8 @@ feature 'Mini Pipeline Graph', :js do
...
@@ -15,8 +15,8 @@ feature 'Mini Pipeline Graph', :js do
visit_merge_request
visit_merge_request
end
end
def
visit_merge_request
(
format
=
:htm
l
)
def
visit_merge_request
(
format
: :html
,
serializer:
ni
l
)
visit
project_merge_request_path
(
project
,
merge_request
,
format:
format
)
visit
project_merge_request_path
(
project
,
merge_request
,
format:
format
,
serializer:
serializer
)
end
end
it
'should display a mini pipeline graph'
do
it
'should display a mini pipeline graph'
do
...
@@ -33,12 +33,12 @@ feature 'Mini Pipeline Graph', :js do
...
@@ -33,12 +33,12 @@ feature 'Mini Pipeline Graph', :js do
end
end
it
'avoids repeated database queries'
do
it
'avoids repeated database queries'
do
before
=
ActiveRecord
::
QueryRecorder
.
new
{
visit_merge_request
(
:json
)
}
before
=
ActiveRecord
::
QueryRecorder
.
new
{
visit_merge_request
(
format: :json
,
serializer:
'widget'
)
}
create
(
:ci_build
,
pipeline:
pipeline
,
legacy_artifacts_file:
artifacts_file2
)
create
(
:ci_build
,
pipeline:
pipeline
,
legacy_artifacts_file:
artifacts_file2
)
create
(
:ci_build
,
pipeline:
pipeline
,
when:
'manual'
)
create
(
:ci_build
,
pipeline:
pipeline
,
when:
'manual'
)
after
=
ActiveRecord
::
QueryRecorder
.
new
{
visit_merge_request
(
:json
)
}
after
=
ActiveRecord
::
QueryRecorder
.
new
{
visit_merge_request
(
format: :json
,
serializer:
'widget'
)
}
expect
(
before
.
count
).
to
eq
(
after
.
count
)
expect
(
before
.
count
).
to
eq
(
after
.
count
)
expect
(
before
.
cached_count
).
to
eq
(
after
.
cached_count
)
expect
(
before
.
cached_count
).
to
eq
(
after
.
cached_count
)
...
...
spec/fixtures/api/schemas/entities/merge_request.json
→
spec/fixtures/api/schemas/entities/merge_request
_widget
.json
View file @
d072c18d
...
@@ -81,15 +81,15 @@
...
@@ -81,15 +81,15 @@
"target_branch_tree_path"
:
{
"type"
:
"string"
},
"target_branch_tree_path"
:
{
"type"
:
"string"
},
"source_branch_path"
:
{
"type"
:
"string"
},
"source_branch_path"
:
{
"type"
:
"string"
},
"conflict_resolution_path"
:
{
"type"
:
[
"string"
,
"null"
]
},
"conflict_resolution_path"
:
{
"type"
:
[
"string"
,
"null"
]
},
"cancel_merge_when_pipeline_succeeds_path"
:
{
"type"
:
"string"
},
"cancel_merge_when_pipeline_succeeds_path"
:
{
"type"
:
[
"string"
,
"null"
]
},
"create_issue_to_resolve_discussions_path"
:
{
"type"
:
"string"
},
"create_issue_to_resolve_discussions_path"
:
{
"type"
:
[
"string"
,
"null"
]
},
"merge_path"
:
{
"type"
:
"string"
},
"merge_path"
:
{
"type"
:
[
"string"
,
"null"
]
},
"cherry_pick_in_fork_path"
:
{
"type"
:
[
"string"
,
"null"
]
},
"cherry_pick_in_fork_path"
:
{
"type"
:
[
"string"
,
"null"
]
},
"revert_in_fork_path"
:
{
"type"
:
[
"string"
,
"null"
]
},
"revert_in_fork_path"
:
{
"type"
:
[
"string"
,
"null"
]
},
"email_patches_path"
:
{
"type"
:
"string"
},
"email_patches_path"
:
{
"type"
:
"string"
},
"plain_diff_path"
:
{
"type"
:
"string"
},
"plain_diff_path"
:
{
"type"
:
"string"
},
"status_path"
:
{
"type"
:
"string"
},
"status_path"
:
{
"type"
:
"string"
},
"new_blob_path"
:
{
"type"
:
"string"
},
"new_blob_path"
:
{
"type"
:
[
"string"
,
"null"
]
},
"merge_check_path"
:
{
"type"
:
"string"
},
"merge_check_path"
:
{
"type"
:
"string"
},
"ci_environments_status_path"
:
{
"type"
:
"string"
},
"ci_environments_status_path"
:
{
"type"
:
"string"
},
"merge_commit_message_with_description"
:
{
"type"
:
"string"
},
"merge_commit_message_with_description"
:
{
"type"
:
"string"
},
...
...
spec/javascripts/collapsed_sidebar_todo_spec.js
View file @
d072c18d
/* global Sidebar */
/* eslint-disable no-new */
/* eslint-disable no-new */
import
_
from
'
underscore
'
;
import
_
from
'
underscore
'
;
import
'
~/right_sidebar
'
;
import
Sidebar
from
'
~/right_sidebar
'
;
describe
(
'
Issuable right sidebar collapsed todo toggle
'
,
()
=>
{
describe
(
'
Issuable right sidebar collapsed todo toggle
'
,
()
=>
{
const
fixtureName
=
'
issues/open-issue.html.raw
'
;
const
fixtureName
=
'
issues/open-issue.html.raw
'
;
...
...
spec/javascripts/line_highlighter_spec.js
View file @
d072c18d
/* eslint-disable space-before-function-paren, no-var, no-param-reassign, quotes, prefer-template, no-else-return, new-cap, dot-notation, no-return-assign, comma-dangle, no-new, one-var, one-var-declaration-per-line, jasmine/no-spec-dupes, no-underscore-dangle, max-len */
/* eslint-disable space-before-function-paren, no-var, no-param-reassign, quotes, prefer-template, no-else-return, new-cap, dot-notation, no-return-assign, comma-dangle, no-new, one-var, one-var-declaration-per-line, jasmine/no-spec-dupes, no-underscore-dangle, max-len */
/* global LineHighlighter */
import
'
~/line_highlighter
'
;
import
LineHighlighter
from
'
~/line_highlighter
'
;
(
function
()
{
(
function
()
{
describe
(
'
LineHighlighter
'
,
function
()
{
describe
(
'
LineHighlighter
'
,
function
()
{
...
...
spec/javascripts/merge_request_notes_spec.js
View file @
d072c18d
/* global Notes */
import
'
autosize
'
;
import
'
autosize
'
;
import
'
~/gl_form
'
;
import
'
~/gl_form
'
;
import
'
~/lib/utils/text_utility
'
;
import
'
~/lib/utils/text_utility
'
;
import
'
~/render_gfm
'
;
import
'
~/render_gfm
'
;
import
'
~/render_math
'
;
import
'
~/render_math
'
;
import
'
~/notes
'
;
import
Notes
from
'
~/notes
'
;
const
upArrowKeyCode
=
38
;
const
upArrowKeyCode
=
38
;
...
...
spec/javascripts/merge_request_spec.js
View file @
d072c18d
/* eslint-disable space-before-function-paren, no-return-assign */
/* eslint-disable space-before-function-paren, no-return-assign */
/* global MergeRequest */
import
'
~/merge_request
'
;
import
MergeRequest
from
'
~/merge_request
'
;
import
CloseReopenReportToggle
from
'
~/close_reopen_report_toggle
'
;
import
CloseReopenReportToggle
from
'
~/close_reopen_report_toggle
'
;
import
IssuablesHelper
from
'
~/helpers/issuables_helper
'
;
import
IssuablesHelper
from
'
~/helpers/issuables_helper
'
;
...
...
spec/javascripts/merge_request_tabs_spec.js
View file @
d072c18d
/* eslint-disable no-var, comma-dangle, object-shorthand */
/* eslint-disable no-var, comma-dangle, object-shorthand */
/* global Notes */
import
*
as
urlUtils
from
'
~/lib/utils/url_utility
'
;
import
*
as
urlUtils
from
'
~/lib/utils/url_utility
'
;
import
MergeRequestTabs
from
'
~/merge_request_tabs
'
;
import
MergeRequestTabs
from
'
~/merge_request_tabs
'
;
...
@@ -7,7 +6,7 @@ import '~/commit/pipelines/pipelines_bundle';
...
@@ -7,7 +6,7 @@ import '~/commit/pipelines/pipelines_bundle';
import
'
~/breakpoints
'
;
import
'
~/breakpoints
'
;
import
'
~/lib/utils/common_utils
'
;
import
'
~/lib/utils/common_utils
'
;
import
Diff
from
'
~/diff
'
;
import
Diff
from
'
~/diff
'
;
import
'
~/notes
'
;
import
Notes
from
'
~/notes
'
;
import
'
vendor/jquery.scrollTo
'
;
import
'
vendor/jquery.scrollTo
'
;
(
function
()
{
(
function
()
{
...
@@ -279,8 +278,8 @@ import 'vendor/jquery.scrollTo';
...
@@ -279,8 +278,8 @@ import 'vendor/jquery.scrollTo';
loadFixtures
(
'
merge_requests/diff_comment.html.raw
'
);
loadFixtures
(
'
merge_requests/diff_comment.html.raw
'
);
$
(
'
body
'
).
attr
(
'
data-page
'
,
'
projects:merge_requests:show
'
);
$
(
'
body
'
).
attr
(
'
data-page
'
,
'
projects:merge_requests:show
'
);
window
.
gl
.
ImageFile
=
()
=>
{};
window
.
gl
.
ImageFile
=
()
=>
{};
window
.
notes
=
new
Notes
(
''
,
[]);
Notes
.
initialize
(
''
,
[]);
spyOn
(
window
.
notes
,
'
toggleDiffNote
'
).
and
.
callThrough
();
spyOn
(
Notes
.
instance
,
'
toggleDiffNote
'
).
and
.
callThrough
();
});
});
afterEach
(()
=>
{
afterEach
(()
=>
{
...
@@ -338,7 +337,7 @@ import 'vendor/jquery.scrollTo';
...
@@ -338,7 +337,7 @@ import 'vendor/jquery.scrollTo';
this
.
class
.
loadDiff
(
'
/foo/bar/merge_requests/1/diffs
'
);
this
.
class
.
loadDiff
(
'
/foo/bar/merge_requests/1/diffs
'
);
expect
(
noteId
.
length
).
toBeGreaterThan
(
0
);
expect
(
noteId
.
length
).
toBeGreaterThan
(
0
);
expect
(
window
.
notes
.
toggleDiffNote
).
toHaveBeenCalledWith
({
expect
(
Notes
.
instance
.
toggleDiffNote
).
toHaveBeenCalledWith
({
target
:
jasmine
.
any
(
Object
),
target
:
jasmine
.
any
(
Object
),
lineType
:
'
old
'
,
lineType
:
'
old
'
,
forceShow
:
true
,
forceShow
:
true
,
...
@@ -349,7 +348,7 @@ import 'vendor/jquery.scrollTo';
...
@@ -349,7 +348,7 @@ import 'vendor/jquery.scrollTo';
spyOn
(
urlUtils
,
'
getLocationHash
'
).
and
.
returnValue
(
'
note_something-that-does-not-exist
'
);
spyOn
(
urlUtils
,
'
getLocationHash
'
).
and
.
returnValue
(
'
note_something-that-does-not-exist
'
);
this
.
class
.
loadDiff
(
'
/foo/bar/merge_requests/1/diffs
'
);
this
.
class
.
loadDiff
(
'
/foo/bar/merge_requests/1/diffs
'
);
expect
(
window
.
notes
.
toggleDiffNote
).
not
.
toHaveBeenCalled
();
expect
(
Notes
.
instance
.
toggleDiffNote
).
not
.
toHaveBeenCalled
();
});
});
});
});
...
@@ -359,7 +358,7 @@ import 'vendor/jquery.scrollTo';
...
@@ -359,7 +358,7 @@ import 'vendor/jquery.scrollTo';
this
.
class
.
loadDiff
(
'
/foo/bar/merge_requests/1/diffs
'
);
this
.
class
.
loadDiff
(
'
/foo/bar/merge_requests/1/diffs
'
);
expect
(
noteLineNumId
.
length
).
toBeGreaterThan
(
0
);
expect
(
noteLineNumId
.
length
).
toBeGreaterThan
(
0
);
expect
(
window
.
notes
.
toggleDiffNote
).
not
.
toHaveBeenCalled
();
expect
(
Notes
.
instance
.
toggleDiffNote
).
not
.
toHaveBeenCalled
();
});
});
});
});
});
});
...
@@ -393,7 +392,7 @@ import 'vendor/jquery.scrollTo';
...
@@ -393,7 +392,7 @@ import 'vendor/jquery.scrollTo';
this
.
class
.
loadDiff
(
'
/foo/bar/merge_requests/1/diffs
'
);
this
.
class
.
loadDiff
(
'
/foo/bar/merge_requests/1/diffs
'
);
expect
(
noteId
.
length
).
toBeGreaterThan
(
0
);
expect
(
noteId
.
length
).
toBeGreaterThan
(
0
);
expect
(
window
.
notes
.
toggleDiffNote
).
toHaveBeenCalledWith
({
expect
(
Notes
.
instance
.
toggleDiffNote
).
toHaveBeenCalledWith
({
target
:
jasmine
.
any
(
Object
),
target
:
jasmine
.
any
(
Object
),
lineType
:
'
new
'
,
lineType
:
'
new
'
,
forceShow
:
true
,
forceShow
:
true
,
...
@@ -404,7 +403,7 @@ import 'vendor/jquery.scrollTo';
...
@@ -404,7 +403,7 @@ import 'vendor/jquery.scrollTo';
spyOn
(
urlUtils
,
'
getLocationHash
'
).
and
.
returnValue
(
'
note_something-that-does-not-exist
'
);
spyOn
(
urlUtils
,
'
getLocationHash
'
).
and
.
returnValue
(
'
note_something-that-does-not-exist
'
);
this
.
class
.
loadDiff
(
'
/foo/bar/merge_requests/1/diffs
'
);
this
.
class
.
loadDiff
(
'
/foo/bar/merge_requests/1/diffs
'
);
expect
(
window
.
notes
.
toggleDiffNote
).
not
.
toHaveBeenCalled
();
expect
(
Notes
.
instance
.
toggleDiffNote
).
not
.
toHaveBeenCalled
();
});
});
});
});
...
@@ -414,7 +413,7 @@ import 'vendor/jquery.scrollTo';
...
@@ -414,7 +413,7 @@ import 'vendor/jquery.scrollTo';
this
.
class
.
loadDiff
(
'
/foo/bar/merge_requests/1/diffs
'
);
this
.
class
.
loadDiff
(
'
/foo/bar/merge_requests/1/diffs
'
);
expect
(
noteLineNumId
.
length
).
toBeGreaterThan
(
0
);
expect
(
noteLineNumId
.
length
).
toBeGreaterThan
(
0
);
expect
(
window
.
notes
.
toggleDiffNote
).
not
.
toHaveBeenCalled
();
expect
(
Notes
.
instance
.
toggleDiffNote
).
not
.
toHaveBeenCalled
();
});
});
});
});
});
});
...
...
spec/javascripts/notes_spec.js
View file @
d072c18d
/* eslint-disable space-before-function-paren, no-unused-expressions, no-var, object-shorthand, comma-dangle, max-len */
/* eslint-disable space-before-function-paren, no-unused-expressions, no-var, object-shorthand, comma-dangle, max-len */
/* global Notes */
import
*
as
urlUtils
from
'
~/lib/utils/url_utility
'
;
import
*
as
urlUtils
from
'
~/lib/utils/url_utility
'
;
import
'
autosize
'
;
import
'
autosize
'
;
import
'
~/gl_form
'
;
import
'
~/gl_form
'
;
import
'
~/lib/utils/text_utility
'
;
import
'
~/lib/utils/text_utility
'
;
import
'
~/render_gfm
'
;
import
'
~/render_gfm
'
;
import
'
~/notes
'
;
import
Notes
from
'
~/notes
'
;
(
function
()
{
(
function
()
{
window
.
gon
||
(
window
.
gon
=
{});
window
.
gon
||
(
window
.
gon
=
{});
...
...
spec/javascripts/right_sidebar_spec.js
View file @
d072c18d
/* eslint-disable space-before-function-paren, no-var, one-var, one-var-declaration-per-line, new-parens, no-return-assign, new-cap, vars-on-top, max-len */
/* eslint-disable space-before-function-paren, no-var, one-var, one-var-declaration-per-line, new-parens, no-return-assign, new-cap, vars-on-top, max-len */
/* global Sidebar */
import
'
~/commons/bootstrap
'
;
import
'
~/commons/bootstrap
'
;
import
'
~/right_sidebar
'
;
import
Sidebar
from
'
~/right_sidebar
'
;
(
function
()
{
(
function
()
{
var
$aside
,
$icon
,
$labelsIcon
,
$page
,
$toggle
,
assertSidebarState
;
var
$aside
,
$icon
,
$labelsIcon
,
$page
,
$toggle
,
assertSidebarState
;
...
...
spec/serializers/merge_request_serializer_spec.rb
View file @
d072c18d
require
'spec_helper'
require
'spec_helper'
describe
MergeRequestSerializer
do
describe
MergeRequestSerializer
do
let
(
:user
)
{
build_stubbed
(
:user
)
}
let
(
:user
)
{
create
(
:user
)
}
let
(
:merge_request
)
{
build_stubbed
(
:merge_request
)
}
let
(
:resource
)
{
create
(
:merge_request
)
}
let
(
:json_entity
)
do
let
(
:serializer
)
do
described_class
.
new
(
current_user:
user
)
described_class
.
new
(
current_user:
user
)
.
represent
(
resource
,
serializer:
serializer
)
.
with_indifferent_access
end
end
describe
'#represent'
do
context
'widget merge request serialization'
do
let
(
:opts
)
{
{
serializer:
serializer_entity
}
}
let
(
:serializer
)
{
'widget'
}
subject
{
serializer
.
represent
(
merge_request
,
serializer:
serializer_entity
)
}
context
'when passing basic serializer param'
do
it
'matches issue json schema'
do
let
(
:serializer_entity
)
{
'basic'
}
expect
(
json_entity
).
to
match_schema
(
'entities/merge_request_widget'
)
end
end
it
'calls super class #represent with correct params'
do
context
'sidebar merge request serialization'
do
expect_any_instance_of
(
BaseSerializer
).
to
receive
(
:represent
)
let
(
:serializer
)
{
'sidebar'
}
.
with
(
merge_request
,
opts
,
MergeRequestBasicEntity
)
subject
it
'matches basic merge request json schema'
do
e
nd
e
xpect
(
json_entity
).
to
match_schema
(
'entities/merge_request_basic'
)
end
end
end
context
'when serializer param is falsy'
do
context
'basic merge request serialization'
do
let
(
:serializer_entity
)
{
nil
}
let
(
:serializer
)
{
'basic'
}
it
'matches basic merge request json schema'
do
expect
(
json_entity
).
to
match_schema
(
'entities/merge_request_basic'
)
end
end
it
'calls super class #represent with correct params'
do
context
'no serializer'
do
expect_any_instance_of
(
BaseSerializer
).
to
receive
(
:represent
)
let
(
:serializer
)
{
nil
}
.
with
(
merge_request
,
opts
,
MergeRequestEntity
)
subject
it
'raises an error'
do
e
nd
e
xpect
{
json_entity
}.
to
raise_error
(
NoMethodError
)
end
end
end
end
end
end
spec/serializers/merge_request_entity_spec.rb
→
spec/serializers/merge_request_
widget_
entity_spec.rb
View file @
d072c18d
require
'spec_helper'
require
'spec_helper'
describe
MergeRequestEntity
do
describe
MergeRequest
Widget
Entity
do
let
(
:project
)
{
create
:project
,
:repository
}
let
(
:project
)
{
create
:project
,
:repository
}
let
(
:resource
)
{
create
(
:merge_request
,
source_project:
project
,
target_project:
project
)
}
let
(
:resource
)
{
create
(
:merge_request
,
source_project:
project
,
target_project:
project
)
}
let
(
:user
)
{
create
(
:user
)
}
let
(
:user
)
{
create
(
:user
)
}
...
@@ -35,37 +35,6 @@ describe MergeRequestEntity do
...
@@ -35,37 +35,6 @@ describe MergeRequestEntity do
end
end
end
end
it
'includes issues_links'
do
issues_links
=
subject
[
:issues_links
]
expect
(
issues_links
).
to
include
(
:closing
,
:mentioned_but_not_closing
,
:assign_to_closing
)
end
it
'has Issuable attributes'
do
expect
(
subject
).
to
include
(
:id
,
:iid
,
:author_id
,
:description
,
:lock_version
,
:milestone_id
,
:title
,
:updated_by_id
,
:created_at
,
:updated_at
,
:milestone
,
:labels
)
end
it
'has time estimation attributes'
do
expect
(
subject
).
to
include
(
:time_estimate
,
:total_time_spent
,
:human_time_estimate
,
:human_total_time_spent
)
end
it
'has important MergeRequest attributes'
do
expect
(
subject
).
to
include
(
:state
,
:deleted_at
,
:diff_head_sha
,
:merge_commit_message
,
:has_conflicts
,
:has_ci
,
:merge_path
,
:conflict_resolution_path
,
:cancel_merge_when_pipeline_succeeds_path
,
:create_issue_to_resolve_discussions_path
,
:source_branch_path
,
:target_branch_commits_path
,
:target_branch_tree_path
,
:commits_count
,
:merge_ongoing
,
:ff_only_enabled
,
## EE
:can_push_to_source_branch
,
:approvals_before_merge
,
:squash
,
:rebase_commit_sha
,
:rebase_in_progress
,
:approvals_path
)
end
it
'has email_patches_path'
do
it
'has email_patches_path'
do
expect
(
subject
[
:email_patches_path
])
expect
(
subject
[
:email_patches_path
])
.
to
eq
(
"/
#{
resource
.
project
.
full_path
}
/merge_requests/
#{
resource
.
iid
}
.patch"
)
.
to
eq
(
"/
#{
resource
.
project
.
full_path
}
/merge_requests/
#{
resource
.
iid
}
.patch"
)
...
@@ -120,18 +89,6 @@ describe MergeRequestEntity do
...
@@ -120,18 +89,6 @@ describe MergeRequestEntity do
end
end
end
end
it
'includes merge_event'
do
create
(
:event
,
:merged
,
author:
user
,
project:
resource
.
project
,
target:
resource
)
expect
(
subject
[
:merge_event
]).
to
include
(
:author
,
:updated_at
)
end
it
'includes closed_event'
do
create
(
:event
,
:closed
,
author:
user
,
project:
resource
.
project
,
target:
resource
)
expect
(
subject
[
:closed_event
]).
to
include
(
:author
,
:updated_at
)
end
describe
'diverged_commits_count'
do
describe
'diverged_commits_count'
do
context
'when MR open and its diverging'
do
context
'when MR open and its diverging'
do
it
'returns diverged commits count'
do
it
'returns diverged commits count'
do
...
...
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