diff options
Diffstat (limited to 'spec/javascripts/sidebar')
-rw-r--r-- | spec/javascripts/sidebar/assignees_spec.js | 248 | ||||
-rw-r--r-- | spec/javascripts/sidebar/mock_data.js | 214 |
2 files changed, 4 insertions, 458 deletions
diff --git a/spec/javascripts/sidebar/assignees_spec.js b/spec/javascripts/sidebar/assignees_spec.js deleted file mode 100644 index a1df5389a38..00000000000 --- a/spec/javascripts/sidebar/assignees_spec.js +++ /dev/null @@ -1,248 +0,0 @@ -import Vue from 'vue'; -import Assignee from '~/sidebar/components/assignees/assignees.vue'; -import UsersMock from './mock_data'; -import UsersMockHelper from '../helpers/user_mock_data_helper'; - -describe('Assignee component', () => { - let component; - let AssigneeComponent; - - beforeEach(() => { - AssigneeComponent = Vue.extend(Assignee); - }); - - describe('No assignees/users', () => { - it('displays no assignee icon when collapsed', () => { - component = new AssigneeComponent({ - propsData: { - rootPath: 'http://localhost:3000', - users: [], - editable: false, - }, - }).$mount(); - - const collapsed = component.$el.querySelector('.sidebar-collapsed-icon'); - - expect(collapsed.childElementCount).toEqual(1); - expect(collapsed.children[0].getAttribute('aria-label')).toEqual('None'); - expect(collapsed.children[0].classList.contains('fa')).toEqual(true); - expect(collapsed.children[0].classList.contains('fa-user')).toEqual(true); - }); - - it('displays only "None" when no users are assigned and the issue is read-only', () => { - component = new AssigneeComponent({ - propsData: { - rootPath: 'http://localhost:3000', - users: [], - editable: false, - }, - }).$mount(); - const componentTextNoUsers = component.$el.querySelector('.assign-yourself').innerText.trim(); - - expect(componentTextNoUsers).toBe('None'); - expect(componentTextNoUsers.indexOf('assign yourself')).toEqual(-1); - }); - - it('displays only "None" when no users are assigned and the issue can be edited', () => { - component = new AssigneeComponent({ - propsData: { - rootPath: 'http://localhost:3000', - users: [], - editable: true, - }, - }).$mount(); - const componentTextNoUsers = component.$el.querySelector('.assign-yourself').innerText.trim(); - - expect(componentTextNoUsers.indexOf('None')).toEqual(0); - expect(componentTextNoUsers.indexOf('assign yourself')).toBeGreaterThan(0); - }); - - it('emits the assign-self event when "assign yourself" is clicked', () => { - component = new AssigneeComponent({ - propsData: { - rootPath: 'http://localhost:3000', - users: [], - editable: true, - }, - }).$mount(); - - spyOn(component, '$emit'); - component.$el.querySelector('.assign-yourself .btn-link').click(); - - expect(component.$emit).toHaveBeenCalledWith('assign-self'); - }); - }); - - describe('One assignee/user', () => { - it('displays one assignee icon when collapsed', () => { - component = new AssigneeComponent({ - propsData: { - rootPath: 'http://localhost:3000', - users: [UsersMock.user], - editable: false, - }, - }).$mount(); - - const collapsed = component.$el.querySelector('.sidebar-collapsed-icon'); - const assignee = collapsed.children[0]; - - expect(collapsed.childElementCount).toEqual(1); - expect(assignee.querySelector('.avatar').getAttribute('src')).toEqual(UsersMock.user.avatar); - expect(assignee.querySelector('.avatar').getAttribute('alt')).toEqual( - `${UsersMock.user.name}'s avatar`, - ); - - expect(assignee.querySelector('.author').innerText.trim()).toEqual(UsersMock.user.name); - }); - }); - - describe('Two or more assignees/users', () => { - it('has no "cannot merge" tooltip when every user can merge', () => { - const users = UsersMockHelper.createNumberRandomUsers(2); - users[0].can_merge = true; - users[1].can_merge = true; - - component = new AssigneeComponent({ - propsData: { - rootPath: 'http://localhost:3000/', - users, - editable: true, - issuableType: 'merge_request', - }, - }).$mount(); - - expect(component.collapsedTooltipTitle).not.toContain('cannot merge'); - }); - - it('displays two assignee icons when collapsed', () => { - const users = UsersMockHelper.createNumberRandomUsers(2); - component = new AssigneeComponent({ - propsData: { - rootPath: 'http://localhost:3000', - users, - editable: false, - }, - }).$mount(); - - const collapsed = component.$el.querySelector('.sidebar-collapsed-icon'); - - expect(collapsed.childElementCount).toEqual(2); - - const first = collapsed.children[0]; - - expect(first.querySelector('.avatar').getAttribute('src')).toEqual(users[0].avatar); - expect(first.querySelector('.avatar').getAttribute('alt')).toEqual( - `${users[0].name}'s avatar`, - ); - - expect(first.querySelector('.author').innerText.trim()).toEqual(users[0].name); - - const second = collapsed.children[1]; - - expect(second.querySelector('.avatar').getAttribute('src')).toEqual(users[1].avatar); - expect(second.querySelector('.avatar').getAttribute('alt')).toEqual( - `${users[1].name}'s avatar`, - ); - - expect(second.querySelector('.author').innerText.trim()).toEqual(users[1].name); - }); - - it('displays one assignee icon and counter when collapsed', () => { - const users = UsersMockHelper.createNumberRandomUsers(3); - component = new AssigneeComponent({ - propsData: { - rootPath: 'http://localhost:3000', - users, - editable: false, - }, - }).$mount(); - - const collapsed = component.$el.querySelector('.sidebar-collapsed-icon'); - - expect(collapsed.childElementCount).toEqual(2); - - const first = collapsed.children[0]; - - expect(first.querySelector('.avatar').getAttribute('src')).toEqual(users[0].avatar); - expect(first.querySelector('.avatar').getAttribute('alt')).toEqual( - `${users[0].name}'s avatar`, - ); - - expect(first.querySelector('.author').innerText.trim()).toEqual(users[0].name); - - const second = collapsed.children[1]; - - expect(second.querySelector('.avatar-counter').innerText.trim()).toEqual('+2'); - }); - - it('Shows two assignees', () => { - const users = UsersMockHelper.createNumberRandomUsers(2); - component = new AssigneeComponent({ - propsData: { - rootPath: 'http://localhost:3000', - users, - editable: true, - }, - }).$mount(); - - expect(component.$el.querySelectorAll('.user-item').length).toEqual(users.length); - expect(component.$el.querySelector('.user-list-more')).toBe(null); - }); - - it('shows sorted assignee where "can merge" users are sorted first', () => { - const users = UsersMockHelper.createNumberRandomUsers(3); - users[0].can_merge = false; - users[1].can_merge = false; - users[2].can_merge = true; - - component = new AssigneeComponent({ - propsData: { - rootPath: 'http://localhost:3000', - users, - editable: true, - }, - }).$mount(); - - expect(component.sortedAssigness[0].can_merge).toBe(true); - }); - - it('passes the sorted assignees to the uncollapsed-assignee-list', () => { - const users = UsersMockHelper.createNumberRandomUsers(3); - users[0].can_merge = false; - users[1].can_merge = false; - users[2].can_merge = true; - - component = new AssigneeComponent({ - propsData: { - rootPath: 'http://localhost:3000', - users, - editable: false, - }, - }).$mount(); - - const userItems = component.$el.querySelectorAll('.user-list .user-item a'); - - expect(userItems.length).toBe(3); - expect(userItems[0].dataset.originalTitle).toBe(users[2].name); - }); - - it('passes the sorted assignees to the collapsed-assignee-list', () => { - const users = UsersMockHelper.createNumberRandomUsers(3); - users[0].can_merge = false; - users[1].can_merge = false; - users[2].can_merge = true; - - component = new AssigneeComponent({ - propsData: { - rootPath: 'http://localhost:3000', - users, - editable: false, - }, - }).$mount(); - - const collapsedButton = component.$el.querySelector('.sidebar-collapsed-user button'); - - expect(collapsedButton.innerText.trim()).toBe(users[2].name); - }); - }); -}); diff --git a/spec/javascripts/sidebar/mock_data.js b/spec/javascripts/sidebar/mock_data.js index 3ee97b978fd..c869ff96933 100644 --- a/spec/javascripts/sidebar/mock_data.js +++ b/spec/javascripts/sidebar/mock_data.js @@ -1,213 +1,7 @@ -const RESPONSE_MAP = { - GET: { - '/gitlab-org/gitlab-shell/issues/5.json': { - id: 45, - iid: 5, - author_id: 23, - description: 'Nulla ullam commodi delectus adipisci quis sit.', - lock_version: null, - milestone_id: 21, - position: 0, - state: 'closed', - title: 'Vel et nulla voluptatibus corporis dolor iste saepe laborum.', - updated_by_id: 1, - created_at: '2017-02-02T21: 49: 49.664Z', - updated_at: '2017-05-03T22: 26: 03.760Z', - time_estimate: 0, - total_time_spent: 0, - human_time_estimate: null, - human_total_time_spent: null, - branch_name: null, - confidential: false, - assignees: [ - { - name: 'User 0', - username: 'user0', - id: 22, - state: 'active', - avatar_url: - 'https://www.gravatar.com/avatar/52e4ce24a915fb7e51e1ad3b57f4b00a?s=80\u0026d=identicon', - web_url: 'http: //localhost:3001/user0', - }, - { - name: 'Marguerite Bartell', - username: 'tajuana', - id: 18, - state: 'active', - avatar_url: - 'https://www.gravatar.com/avatar/4852a41fb41616bf8f140d3701673f53?s=80\u0026d=identicon', - web_url: 'http: //localhost:3001/tajuana', - }, - { - name: 'Laureen Ritchie', - username: 'michaele.will', - id: 16, - state: 'active', - avatar_url: - 'https://www.gravatar.com/avatar/e301827eb03be955c9c172cb9a8e4e8a?s=80\u0026d=identicon', - web_url: 'http: //localhost:3001/michaele.will', - }, - ], - due_date: null, - moved_to_id: null, - project_id: 4, - weight: null, - milestone: { - id: 21, - iid: 1, - project_id: 4, - title: 'v0.0', - description: 'Molestiae commodi laboriosam odio sunt eaque reprehenderit.', - state: 'active', - created_at: '2017-02-02T21: 49: 30.530Z', - updated_at: '2017-02-02T21: 49: 30.530Z', - due_date: null, - start_date: null, - }, - labels: [], - }, - '/gitlab-org/gitlab-shell/issues/5.json?serializer=sidebar_extras': { - assignees: [ - { - name: 'User 0', - username: 'user0', - id: 22, - state: 'active', - avatar_url: - 'https://www.gravatar.com/avatar/52e4ce24a915fb7e51e1ad3b57f4b00a?s=80\u0026d=identicon', - web_url: 'http://localhost:3001/user0', - }, - { - name: 'Marguerite Bartell', - username: 'tajuana', - id: 18, - state: 'active', - avatar_url: - 'https://www.gravatar.com/avatar/4852a41fb41616bf8f140d3701673f53?s=80\u0026d=identicon', - web_url: 'http://localhost:3001/tajuana', - }, - { - name: 'Laureen Ritchie', - username: 'michaele.will', - id: 16, - state: 'active', - avatar_url: - 'https://www.gravatar.com/avatar/e301827eb03be955c9c172cb9a8e4e8a?s=80\u0026d=identicon', - web_url: 'http://localhost:3001/michaele.will', - }, - ], - human_time_estimate: null, - human_total_time_spent: null, - participants: [ - { - name: 'User 0', - username: 'user0', - id: 22, - state: 'active', - avatar_url: - 'https://www.gravatar.com/avatar/52e4ce24a915fb7e51e1ad3b57f4b00a?s=80\u0026d=identicon', - web_url: 'http://localhost:3001/user0', - }, - { - name: 'Marguerite Bartell', - username: 'tajuana', - id: 18, - state: 'active', - avatar_url: - 'https://www.gravatar.com/avatar/4852a41fb41616bf8f140d3701673f53?s=80\u0026d=identicon', - web_url: 'http://localhost:3001/tajuana', - }, - { - name: 'Laureen Ritchie', - username: 'michaele.will', - id: 16, - state: 'active', - avatar_url: - 'https://www.gravatar.com/avatar/e301827eb03be955c9c172cb9a8e4e8a?s=80\u0026d=identicon', - web_url: 'http://localhost:3001/michaele.will', - }, - ], - subscribed: true, - time_estimate: 0, - total_time_spent: 0, - }, - '/autocomplete/projects?project_id=15': [ - { - id: 0, - name_with_namespace: 'No project', - }, - { - id: 20, - name_with_namespace: '<img src=x onerror=alert(document.domain)> foo / bar', - }, - ], - }, - PUT: { - '/gitlab-org/gitlab-shell/issues/5.json': { - data: {}, - }, - }, - POST: { - '/gitlab-org/gitlab-shell/issues/5/move': { - id: 123, - iid: 5, - author_id: 1, - description: 'some description', - lock_version: 5, - milestone_id: null, - state: 'opened', - title: 'some title', - updated_by_id: 1, - created_at: '2017-06-27T19:54:42.437Z', - updated_at: '2017-08-18T03:39:49.222Z', - time_estimate: 0, - total_time_spent: 0, - human_time_estimate: null, - human_total_time_spent: null, - branch_name: null, - confidential: false, - assignees: [], - due_date: null, - moved_to_id: null, - project_id: 7, - milestone: null, - labels: [], - web_url: '/root/some-project/issues/5', - }, - '/gitlab-org/gitlab-shell/issues/5/toggle_subscription': {}, - }, -}; +// No new code should be added to this file. Instead, modify the +// file this one re-exports from. For more detail about why, see: +// https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/31349 -const mockData = { - responseMap: RESPONSE_MAP, - mediator: { - endpoint: '/gitlab-org/gitlab-shell/issues/5.json?serializer=sidebar_extras', - toggleSubscriptionEndpoint: '/gitlab-org/gitlab-shell/issues/5/toggle_subscription', - moveIssueEndpoint: '/gitlab-org/gitlab-shell/issues/5/move', - projectsAutocompleteEndpoint: '/autocomplete/projects?project_id=15', - editable: true, - currentUser: { - id: 1, - name: 'Administrator', - username: 'root', - avatar_url: - 'https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon', - }, - rootPath: '/', - fullPath: '/gitlab-org/gitlab-shell', - }, - time: { - time_estimate: 3600, - total_time_spent: 0, - human_time_estimate: '1h', - human_total_time_spent: null, - }, - user: { - avatar: 'https://gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon', - id: 1, - name: 'Administrator', - username: 'root', - }, -}; +import mockData from '../../../spec/frontend/sidebar/mock_data'; export default mockData; |