diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2019-10-31 12:06:29 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2019-10-31 12:06:29 +0300 |
commit | 6026bddcd51eca573c530240c421392045172b89 (patch) | |
tree | 30cb1134ac00a336e6cfaa81bbafe6cd1360f58f /spec/javascripts/boards | |
parent | b7c776f95d5f41ac00986073563ad0c1de4bad44 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/javascripts/boards')
-rw-r--r-- | spec/javascripts/boards/components/issue_time_estimate_spec.js | 70 | ||||
-rw-r--r-- | spec/javascripts/boards/issue_card_spec.js | 294 |
2 files changed, 0 insertions, 364 deletions
diff --git a/spec/javascripts/boards/components/issue_time_estimate_spec.js b/spec/javascripts/boards/components/issue_time_estimate_spec.js deleted file mode 100644 index de48e3f6091..00000000000 --- a/spec/javascripts/boards/components/issue_time_estimate_spec.js +++ /dev/null @@ -1,70 +0,0 @@ -import Vue from 'vue'; -import IssueTimeEstimate from '~/boards/components/issue_time_estimate.vue'; -import boardsStore from '~/boards/stores/boards_store'; -import mountComponent from '../../helpers/vue_mount_component_helper'; - -describe('Issue Time Estimate component', () => { - let vm; - - beforeEach(() => { - boardsStore.create(); - }); - - afterEach(() => { - vm.$destroy(); - }); - - describe('when limitToHours is false', () => { - beforeEach(() => { - boardsStore.timeTracking.limitToHours = false; - - const Component = Vue.extend(IssueTimeEstimate); - vm = mountComponent(Component, { - estimate: 374460, - }); - }); - - it('renders the correct time estimate', () => { - expect(vm.$el.querySelector('time').textContent.trim()).toEqual('2w 3d 1m'); - }); - - it('renders expanded time estimate in tooltip', () => { - expect(vm.$el.querySelector('.js-issue-time-estimate').textContent).toContain( - '2 weeks 3 days 1 minute', - ); - }); - - it('prevents tooltip xss', done => { - const alertSpy = spyOn(window, 'alert'); - vm.estimate = 'Foo <script>alert("XSS")</script>'; - - vm.$nextTick(() => { - expect(alertSpy).not.toHaveBeenCalled(); - expect(vm.$el.querySelector('time').textContent.trim()).toEqual('0m'); - expect(vm.$el.querySelector('.js-issue-time-estimate').textContent).toContain('0m'); - done(); - }); - }); - }); - - describe('when limitToHours is true', () => { - beforeEach(() => { - boardsStore.timeTracking.limitToHours = true; - - const Component = Vue.extend(IssueTimeEstimate); - vm = mountComponent(Component, { - estimate: 374460, - }); - }); - - it('renders the correct time estimate', () => { - expect(vm.$el.querySelector('time').textContent.trim()).toEqual('104h 1m'); - }); - - it('renders expanded time estimate in tooltip', () => { - expect(vm.$el.querySelector('.js-issue-time-estimate').textContent).toContain( - '104 hours 1 minute', - ); - }); - }); -}); diff --git a/spec/javascripts/boards/issue_card_spec.js b/spec/javascripts/boards/issue_card_spec.js deleted file mode 100644 index df2b04cd6df..00000000000 --- a/spec/javascripts/boards/issue_card_spec.js +++ /dev/null @@ -1,294 +0,0 @@ -/* global ListAssignee */ -/* global ListLabel */ -/* global ListIssue */ - -import Vue from 'vue'; - -import '~/boards/models/label'; -import '~/boards/models/assignee'; -import '~/boards/models/issue'; -import '~/boards/models/list'; -import IssueCardInner from '~/boards/components/issue_card_inner.vue'; -import { listObj } from './mock_data'; -import store from '~/boards/stores'; - -describe('Issue card component', () => { - const user = new ListAssignee({ - id: 1, - name: 'testing 123', - username: 'test', - avatar: 'test_image', - }); - const label1 = new ListLabel({ - id: 3, - title: 'testing 123', - color: 'blue', - text_color: 'white', - description: 'test', - }); - let component; - let issue; - let list; - - beforeEach(() => { - setFixtures('<div class="test-container"></div>'); - - list = { - ...listObj, - type: 'label', - }; - issue = new ListIssue({ - title: 'Testing', - id: 1, - iid: 1, - confidential: false, - labels: [list.label], - assignees: [], - reference_path: '#1', - real_path: '/test/1', - weight: 1, - }); - - component = new Vue({ - el: document.querySelector('.test-container'), - store, - components: { - 'issue-card': IssueCardInner, - }, - data() { - return { - list, - issue, - issueLinkBase: '/test', - rootPath: '/', - }; - }, - template: ` - <issue-card - :issue="issue" - :list="list" - :issue-link-base="issueLinkBase" - :root-path="rootPath"></issue-card> - `, - }); - }); - - it('renders issue title', () => { - expect(component.$el.querySelector('.board-card-title').textContent).toContain(issue.title); - }); - - it('includes issue base in link', () => { - expect(component.$el.querySelector('.board-card-title a').getAttribute('href')).toContain( - '/test', - ); - }); - - it('includes issue title on link', () => { - expect(component.$el.querySelector('.board-card-title a').getAttribute('title')).toBe( - issue.title, - ); - }); - - it('does not render confidential icon', () => { - expect(component.$el.querySelector('.fa-eye-flash')).toBeNull(); - }); - - it('renders confidential icon', done => { - component.issue.confidential = true; - - Vue.nextTick(() => { - expect(component.$el.querySelector('.confidential-icon')).not.toBeNull(); - done(); - }); - }); - - it('renders issue ID with #', () => { - expect(component.$el.querySelector('.board-card-number').textContent).toContain(`#${issue.id}`); - }); - - describe('assignee', () => { - it('does not render assignee', () => { - expect(component.$el.querySelector('.board-card-assignee .avatar')).toBeNull(); - }); - - describe('exists', () => { - beforeEach(done => { - component.issue.assignees = [user]; - - Vue.nextTick(() => done()); - }); - - it('renders assignee', () => { - expect(component.$el.querySelector('.board-card-assignee .avatar')).not.toBeNull(); - }); - - it('sets title', () => { - expect(component.$el.querySelector('.js-assignee-tooltip').textContent).toContain( - `${user.name}`, - ); - }); - - it('sets users path', () => { - expect(component.$el.querySelector('.board-card-assignee a').getAttribute('href')).toBe( - '/test', - ); - }); - - it('renders avatar', () => { - expect(component.$el.querySelector('.board-card-assignee img')).not.toBeNull(); - }); - }); - - describe('assignee default avatar', () => { - beforeEach(done => { - component.issue.assignees = [ - new ListAssignee( - { - id: 1, - name: 'testing 123', - username: 'test', - }, - 'default_avatar', - ), - ]; - - Vue.nextTick(done); - }); - - it('displays defaults avatar if users avatar is null', () => { - expect(component.$el.querySelector('.board-card-assignee img')).not.toBeNull(); - expect(component.$el.querySelector('.board-card-assignee img').getAttribute('src')).toBe( - 'default_avatar?width=24', - ); - }); - }); - }); - - describe('multiple assignees', () => { - beforeEach(done => { - component.issue.assignees = [ - new ListAssignee({ - id: 2, - name: 'user2', - username: 'user2', - avatar: 'test_image', - }), - new ListAssignee({ - id: 3, - name: 'user3', - username: 'user3', - avatar: 'test_image', - }), - new ListAssignee({ - id: 4, - name: 'user4', - username: 'user4', - avatar: 'test_image', - }), - ]; - - Vue.nextTick(() => done()); - }); - - it('renders all three assignees', () => { - expect(component.$el.querySelectorAll('.board-card-assignee .avatar').length).toEqual(3); - }); - - describe('more than three assignees', () => { - beforeEach(done => { - component.issue.assignees.push( - new ListAssignee({ - id: 5, - name: 'user5', - username: 'user5', - avatar: 'test_image', - }), - ); - - Vue.nextTick(() => done()); - }); - - it('renders more avatar counter', () => { - expect( - component.$el.querySelector('.board-card-assignee .avatar-counter').innerText.trim(), - ).toEqual('+2'); - }); - - it('renders two assignees', () => { - expect(component.$el.querySelectorAll('.board-card-assignee .avatar').length).toEqual(2); - }); - - it('renders 99+ avatar counter', done => { - for (let i = 5; i < 104; i += 1) { - const u = new ListAssignee({ - id: i, - name: 'name', - username: 'username', - avatar: 'test_image', - }); - component.issue.assignees.push(u); - } - - Vue.nextTick(() => { - expect( - component.$el.querySelector('.board-card-assignee .avatar-counter').innerText.trim(), - ).toEqual('99+'); - done(); - }); - }); - }); - }); - - describe('labels', () => { - beforeEach(done => { - component.issue.addLabel(label1); - - Vue.nextTick(() => done()); - }); - - it('does not render list label but renders all other labels', () => { - expect(component.$el.querySelectorAll('.badge').length).toBe(1); - }); - - it('renders label', () => { - const nodes = []; - component.$el.querySelectorAll('.badge').forEach(label => { - nodes.push(label.getAttribute('data-original-title')); - }); - - expect(nodes.includes(label1.description)).toBe(true); - }); - - it('sets label description as title', () => { - expect(component.$el.querySelector('.badge').getAttribute('data-original-title')).toContain( - label1.description, - ); - }); - - it('sets background color of button', () => { - const nodes = []; - component.$el.querySelectorAll('.badge').forEach(label => { - nodes.push(label.style.backgroundColor); - }); - - expect(nodes.includes(label1.color)).toBe(true); - }); - - it('does not render label if label does not have an ID', done => { - component.issue.addLabel( - new ListLabel({ - title: 'closed', - }), - ); - - Vue.nextTick() - .then(() => { - expect(component.$el.querySelectorAll('.badge').length).toBe(1); - expect(component.$el.textContent).not.toContain('closed'); - - done(); - }) - .catch(done.fail); - }); - }); -}); |