Открыть боковую панель
nt_test133
nt_project_uxpg8lvcuq8w
Коммиты
77bf8c83
Коммит
77bf8c83
создал
Сен 10, 2019
по автору
Winnie Hellmann
Зафиксировано автором
Paul Slaughter
Сен 10, 2019
Просмотр файлов
Remove vue resource from sidebar service
Fixes
https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/32400
владелец
230b36ec
Изменения
9
Скрыть пробелы
Построчно
Рядом
app/assets/javascripts/sidebar/components/assignees/sidebar_assignees.vue
Просмотр файла @
77bf8c83
...
...
@@ -67,18 +67,14 @@ export default {
saveAssignees
()
{
this
.
loading
=
true
;
function
setLoadingFalse
()
{
this
.
loading
=
false
;
}
this
.
mediator
.
saveAssignees
(
this
.
field
)
.
then
(
setLoadingFalse
.
bind
(
this
))
.
then
(()
=>
{
this
.
loading
=
false
;
refreshUserMergeRequestCounts
();
})
.
catch
(()
=>
{
setL
oading
F
alse
()
;
this
.
l
oading
=
f
alse
;
return
new
Flash
(
__
(
'
Error occurred when saving assignees
'
));
});
},
...
...
app/assets/javascripts/sidebar/services/sidebar_service.js
Просмотр файла @
77bf8c83
import
Vue
from
'
vue
'
;
import
VueResource
from
'
vue-resource
'
;
Vue
.
use
(
VueResource
);
import
axios
from
'
~/lib/utils/axios_utils
'
;
export
default
class
SidebarService
{
constructor
(
endpointMap
)
{
...
...
@@ -18,23 +15,15 @@ export default class SidebarService {
}
get
()
{
return
Vue
.
http
.
get
(
this
.
endpoint
);
return
axios
.
get
(
this
.
endpoint
);
}
update
(
key
,
data
)
{
return
Vue
.
http
.
put
(
this
.
endpoint
,
{
[
key
]:
data
,
},
{
emulateJSON
:
true
,
},
);
return
axios
.
put
(
this
.
endpoint
,
{
[
key
]:
data
});
}
getProjectsAutocomplete
(
searchTerm
)
{
return
Vue
.
http
.
get
(
this
.
projectsAutocompleteEndpoint
,
{
return
axios
.
get
(
this
.
projectsAutocompleteEndpoint
,
{
params
:
{
search
:
searchTerm
,
},
...
...
@@ -42,11 +31,11 @@ export default class SidebarService {
}
toggleSubscription
()
{
return
Vue
.
http
.
post
(
this
.
toggleSubscriptionEndpoint
);
return
axios
.
post
(
this
.
toggleSubscriptionEndpoint
);
}
moveIssue
(
moveToProjectId
)
{
return
Vue
.
http
.
post
(
this
.
moveIssueEndpoint
,
{
return
axios
.
post
(
this
.
moveIssueEndpoint
,
{
move_to_project_id
:
moveToProjectId
,
});
}
...
...
app/assets/javascripts/sidebar/sidebar_mediator.js
Просмотр файла @
77bf8c83
...
...
@@ -32,7 +32,10 @@ export default class SidebarMediator {
// If there are no ids, that means we have to unassign (which is id = 0)
// And it only accepts an array, hence [0]
return
this
.
service
.
update
(
field
,
selected
.
length
===
0
?
[
0
]
:
selected
);
const
assignees
=
selected
.
length
===
0
?
[
0
]
:
selected
;
const
data
=
{
assignee_ids
:
assignees
};
return
this
.
service
.
update
(
field
,
data
);
}
setMoveToProjectId
(
projectId
)
{
...
...
@@ -42,8 +45,7 @@ export default class SidebarMediator {
fetch
()
{
return
this
.
service
.
get
()
.
then
(
response
=>
response
.
json
())
.
then
(
data
=>
{
.
then
(({
data
})
=>
{
this
.
processFetchedData
(
data
);
})
.
catch
(()
=>
new
Flash
(
__
(
'
Error occurred when fetching sidebar data
'
)));
...
...
@@ -71,23 +73,17 @@ export default class SidebarMediator {
}
fetchAutocompleteProjects
(
searchTerm
)
{
return
this
.
service
.
getProjectsAutocomplete
(
searchTerm
)
.
then
(
response
=>
response
.
json
())
.
then
(
data
=>
{
this
.
store
.
setAutocompleteProjects
(
data
);
return
this
.
store
.
autocompleteProjects
;
});
return
this
.
service
.
getProjectsAutocomplete
(
searchTerm
).
then
(({
data
})
=>
{
this
.
store
.
setAutocompleteProjects
(
data
);
return
this
.
store
.
autocompleteProjects
;
});
}
moveIssue
()
{
return
this
.
service
.
moveIssue
(
this
.
store
.
moveToProjectId
)
.
then
(
response
=>
response
.
json
())
.
then
(
data
=>
{
if
(
window
.
location
.
pathname
!==
data
.
web_url
)
{
visitUrl
(
data
.
web_url
);
}
});
return
this
.
service
.
moveIssue
(
this
.
store
.
moveToProjectId
).
then
(({
data
})
=>
{
if
(
window
.
location
.
pathname
!==
data
.
web_url
)
{
visitUrl
(
data
.
web_url
);
}
});
}
}
app/views/shared/issuable/_sidebar_assignees.html.haml
Просмотр файла @
77bf8c83
-
issuable_type
=
issuable_sidebar
[
:type
]
-
signed_in
=
!!
issuable_sidebar
.
dig
(
:current_user
,
:id
)
#js-vue-sidebar-assignees
{
data:
{
field:
"#{issuable_type}
[assignee_ids]
"
,
signed_in:
signed_in
}
}
#js-vue-sidebar-assignees
{
data:
{
field:
"#{issuable_type}"
,
signed_in:
signed_in
}
}
.title.hide-collapsed
=
_
(
'Assignee'
)
=
icon
(
'spinner spin'
)
...
...
changelogs/unreleased/remove-vue-resource-from-sidebar-service.yml
0 → 100644
Просмотр файла @
77bf8c83
---
title
:
Remove vue resource from sidebar service
merge_request
:
32400
author
:
Lee Tickett
type
:
other
spec/javascripts/sidebar/mock_data.js
Просмотр файла @
77bf8c83
...
...
@@ -210,14 +210,4 @@ const mockData = {
},
};
mockData
.
sidebarMockInterceptor
=
function
(
request
,
next
)
{
const
body
=
this
.
responseMap
[
request
.
method
.
toUpperCase
()][
request
.
url
];
next
(
request
.
respondWith
(
JSON
.
stringify
(
body
),
{
status
:
200
,
}),
);
}.
bind
(
mockData
);
export
default
mockData
;
spec/javascripts/sidebar/sidebar_assignees_spec.js
Просмотр файла @
77bf8c83
import
_
from
'
underscore
'
;
import
Vue
from
'
vue
'
;
import
SidebarAssignees
from
'
~/sidebar/components/assignees/sidebar_assignees.vue
'
;
import
SidebarMediator
from
'
~/sidebar/sidebar_mediator
'
;
...
...
@@ -14,8 +13,6 @@ describe('sidebar assignees', () => {
preloadFixtures
(
'
issues/open-issue.html
'
);
beforeEach
(()
=>
{
Vue
.
http
.
interceptors
.
push
(
Mock
.
sidebarMockInterceptor
);
loadFixtures
(
'
issues/open-issue.html
'
);
mediator
=
new
SidebarMediator
(
Mock
.
mediator
);
...
...
@@ -38,7 +35,6 @@ describe('sidebar assignees', () => {
SidebarService
.
singleton
=
null
;
SidebarStore
.
singleton
=
null
;
SidebarMediator
.
singleton
=
null
;
Vue
.
http
.
interceptors
=
_
.
without
(
Vue
.
http
.
interceptors
,
Mock
.
sidebarMockInterceptor
);
});
it
(
'
calls the mediator when saves the assignees
'
,
()
=>
{
...
...
spec/javascripts/sidebar/sidebar_mediator_spec.js
Просмотр файла @
77bf8c83
import
_
from
'
underscore
'
;
import
Vue
from
'
vue
'
;
import
MockAdapter
from
'
axios-mock-adapter
'
;
import
axios
from
'
~/lib/utils/axios_utils
'
;
import
SidebarMediator
from
'
~/sidebar/sidebar_mediator
'
;
import
SidebarStore
from
'
~/sidebar/stores/sidebar_store
'
;
import
SidebarService
from
'
~/sidebar/services/sidebar_service
'
;
import
Mock
from
'
./mock_data
'
;
const
{
mediator
:
mediatorMockData
}
=
Mock
;
describe
(
'
Sidebar mediator
'
,
function
()
{
let
mock
;
beforeEach
(()
=>
{
Vue
.
http
.
interceptors
.
push
(
Mock
.
sidebarMockInterceptor
);
this
.
mediator
=
new
SidebarMediator
(
Mock
.
mediator
);
mock
=
new
MockAdapter
(
axios
);
this
.
mediator
=
new
SidebarMediator
(
mediatorMockData
);
});
afterEach
(()
=>
{
SidebarService
.
singleton
=
null
;
SidebarStore
.
singleton
=
null
;
SidebarMediator
.
singleton
=
null
;
Vue
.
http
.
interceptors
=
_
.
without
(
Vue
.
http
.
interceptors
,
Mock
.
sidebarMockIntercep
tor
);
mock
.
res
tor
e
(
);
});
it
(
'
assigns yourself
'
,
()
=>
{
this
.
mediator
.
assignYourself
();
expect
(
this
.
mediator
.
store
.
currentUser
).
toEqual
(
Mock
.
mediator
.
currentUser
);
expect
(
this
.
mediator
.
store
.
assignees
[
0
]).
toEqual
(
Mock
.
mediator
.
currentUser
);
expect
(
this
.
mediator
.
store
.
currentUser
).
toEqual
(
mediator
MockData
.
currentUser
);
expect
(
this
.
mediator
.
store
.
assignees
[
0
]).
toEqual
(
mediator
MockData
.
currentUser
);
});
it
(
'
saves assignees
'
,
done
=>
{
mock
.
onPut
(
mediatorMockData
.
endpoint
).
reply
(
200
,
{});
this
.
mediator
.
saveAssignees
(
'
issue[assignee_ids]
'
)
.
then
(
resp
=>
{
...
...
@@ -36,8 +42,8 @@ describe('Sidebar mediator', function() {
});
it
(
'
fetches the data
'
,
done
=>
{
const
mockData
=
M
ock
.
responseMap
.
GET
[
'
/gitlab-org/gitlab-shell/issues/5.json?serializer=sidebar_extras
'
]
;
const
mockData
=
Mock
.
responseMap
.
GET
[
mediatorMockData
.
endpoint
];
m
ock
.
onGet
(
mediatorMockData
.
endpoint
).
reply
(
200
,
mockData
)
;
spyOn
(
this
.
mediator
,
'
processFetchedData
'
).
and
.
callThrough
();
this
.
mediator
...
...
@@ -50,8 +56,7 @@ describe('Sidebar mediator', function() {
});
it
(
'
processes fetched data
'
,
()
=>
{
const
mockData
=
Mock
.
responseMap
.
GET
[
'
/gitlab-org/gitlab-shell/issues/5.json?serializer=sidebar_extras
'
];
const
mockData
=
Mock
.
responseMap
.
GET
[
mediatorMockData
.
endpoint
];
this
.
mediator
.
processFetchedData
(
mockData
);
expect
(
this
.
mediator
.
store
.
assignees
).
toEqual
(
mockData
.
assignees
);
...
...
@@ -74,6 +79,7 @@ describe('Sidebar mediator', function() {
it
(
'
fetches autocomplete projects
'
,
done
=>
{
const
searchTerm
=
'
foo
'
;
mock
.
onGet
(
mediatorMockData
.
projectsAutocompleteEndpoint
).
reply
(
200
,
{});
spyOn
(
this
.
mediator
.
service
,
'
getProjectsAutocomplete
'
).
and
.
callThrough
();
spyOn
(
this
.
mediator
.
store
,
'
setAutocompleteProjects
'
).
and
.
callThrough
();
...
...
@@ -88,7 +94,9 @@ describe('Sidebar mediator', function() {
});
it
(
'
moves issue
'
,
done
=>
{
const
mockData
=
Mock
.
responseMap
.
POST
[
mediatorMockData
.
moveIssueEndpoint
];
const
moveToProjectId
=
7
;
mock
.
onPost
(
mediatorMockData
.
moveIssueEndpoint
).
reply
(
200
,
mockData
);
this
.
mediator
.
store
.
setMoveToProjectId
(
moveToProjectId
);
spyOn
(
this
.
mediator
.
service
,
'
moveIssue
'
).
and
.
callThrough
();
const
visitUrl
=
spyOnDependency
(
SidebarMediator
,
'
visitUrl
'
);
...
...
@@ -97,7 +105,7 @@ describe('Sidebar mediator', function() {
.
moveIssue
()
.
then
(()
=>
{
expect
(
this
.
mediator
.
service
.
moveIssue
).
toHaveBeenCalledWith
(
moveToProjectId
);
expect
(
visitUrl
).
toHaveBeenCalledWith
(
'
/root/some-project/issues/5
'
);
expect
(
visitUrl
).
toHaveBeenCalledWith
(
mockData
.
web_url
);
})
.
then
(
done
)
.
catch
(
done
.
fail
);
...
...
@@ -105,6 +113,7 @@ describe('Sidebar mediator', function() {
it
(
'
toggle subscription
'
,
done
=>
{
this
.
mediator
.
store
.
setSubscribedState
(
false
);
mock
.
onPost
(
mediatorMockData
.
toggleSubscriptionEndpoint
).
reply
(
200
,
{});
spyOn
(
this
.
mediator
.
service
,
'
toggleSubscription
'
).
and
.
callThrough
();
this
.
mediator
...
...
spec/javascripts/sidebar/sidebar_move_issue_spec.js
Просмотр файла @
77bf8c83
import
$
from
'
jquery
'
;
import
_
from
'
underscore
'
;
import
Vue
from
'
vue
'
;
import
MockAdapter
from
'
axios-mock-adapter
'
;
import
axios
from
'
~/lib/utils/axios_utils
'
;
import
SidebarMediator
from
'
~/sidebar/sidebar_mediator
'
;
import
SidebarStore
from
'
~/sidebar/stores/sidebar_store
'
;
import
SidebarService
from
'
~/sidebar/services/sidebar_service
'
;
...
...
@@ -8,8 +8,12 @@ import SidebarMoveIssue from '~/sidebar/lib/sidebar_move_issue';
import
Mock
from
'
./mock_data
'
;
describe
(
'
SidebarMoveIssue
'
,
function
()
{
let
mock
;
beforeEach
(()
=>
{
Vue
.
http
.
interceptors
.
push
(
Mock
.
sidebarMockInterceptor
);
mock
=
new
MockAdapter
(
axios
);
const
mockData
=
Mock
.
responseMap
.
GET
[
'
/autocomplete/projects?project_id=15
'
];
mock
.
onGet
(
'
/autocomplete/projects?project_id=15
'
).
reply
(
200
,
mockData
);
this
.
mediator
=
new
SidebarMediator
(
Mock
.
mediator
);
this
.
$content
=
$
(
`
<div class="dropdown">
...
...
@@ -37,8 +41,7 @@ describe('SidebarMoveIssue', function() {
SidebarMediator
.
singleton
=
null
;
this
.
sidebarMoveIssue
.
destroy
();
Vue
.
http
.
interceptors
=
_
.
without
(
Vue
.
http
.
interceptors
,
Mock
.
sidebarMockInterceptor
);
mock
.
restore
();
});
describe
(
'
init
'
,
()
=>
{
...
...
Редактирование
Предварительный просмотр
Поддерживает Markdown
0%
Попробовать снова
или
прикрепить новый файл
.
Отмена
You are about to add
0
people
to the discussion. Proceed with caution.
Сначала завершите редактирование этого сообщения!
Отмена
Пожалуйста,
зарегистрируйтесь
или
войдите
чтобы прокомментировать