Skip to content
Snippets Groups Projects
Commit 77bf8c83 authored by Winnie Hellmann's avatar Winnie Hellmann Committed by Paul Slaughter
Browse files

Remove vue resource from sidebar service

parent 230b36ec
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -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(() => {
setLoadingFalse();
this.loading = false;
return new Flash(__('Error occurred when saving assignees'));
});
},
Loading
Loading
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) {
Loading
Loading
@@ -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,
},
Loading
Loading
@@ -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,
});
}
Loading
Loading
Loading
Loading
@@ -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) {
Loading
Loading
@@ -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')));
Loading
Loading
@@ -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);
}
});
}
}
- 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')
Loading
Loading
---
title: Remove vue resource from sidebar service
merge_request: 32400
author: Lee Tickett
type: other
Loading
Loading
@@ -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;
import _ from 'underscore';
import Vue from 'vue';
import SidebarAssignees from '~/sidebar/components/assignees/sidebar_assignees.vue';
import SidebarMediator from '~/sidebar/sidebar_mediator';
Loading
Loading
@@ -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);
Loading
Loading
@@ -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', () => {
Loading
Loading
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.sidebarMockInterceptor);
mock.restore();
});
 
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(mediatorMockData.currentUser);
expect(this.mediator.store.assignees[0]).toEqual(mediatorMockData.currentUser);
});
 
it('saves assignees', done => {
mock.onPut(mediatorMockData.endpoint).reply(200, {});
this.mediator
.saveAssignees('issue[assignee_ids]')
.then(resp => {
Loading
Loading
@@ -36,8 +42,8 @@ describe('Sidebar mediator', function() {
});
 
it('fetches the data', done => {
const mockData =
Mock.responseMap.GET['/gitlab-org/gitlab-shell/issues/5.json?serializer=sidebar_extras'];
const mockData = Mock.responseMap.GET[mediatorMockData.endpoint];
mock.onGet(mediatorMockData.endpoint).reply(200, mockData);
spyOn(this.mediator, 'processFetchedData').and.callThrough();
 
this.mediator
Loading
Loading
@@ -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);
Loading
Loading
@@ -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();
 
Loading
Loading
@@ -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');
Loading
Loading
@@ -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);
Loading
Loading
@@ -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
Loading
Loading
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';
Loading
Loading
@@ -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">
Loading
Loading
@@ -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', () => {
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment