04dc2b76d7
* master: (181 commits) Fixed adding to list bug Remove unnecessary queries for .atom and .json in Dashboard::ProjectsController#index Fixed modal lists dropdown not updating when list is deleted Fixed remove btn error after creating new issue in list Removed duplicated test Removed Masonry, instead uses groups of data Uses mixins for repeated functions Fixed up specs Props use objects with required & type values Removes labels instead of closing issue when clicking remove button Fixed JS lint errors Fixed issue card spec Added webkit CSS properties Fixed bug with empty state showing after search Fixed users href path being incorrect Fixed bug where 2 un-selected issues would stay on selected tab Fixed DB schema Changed how components are added in objects Added remove button Add optional id property to the issue schema Fixed issue link href Disabled add issues button if no lists exist ...
191 lines
4.4 KiB
JavaScript
191 lines
4.4 KiB
JavaScript
/* global Vue */
|
|
/* global ListUser */
|
|
/* global ListLabel */
|
|
/* global listObj */
|
|
/* global ListIssue */
|
|
|
|
require('~/boards/models/issue');
|
|
require('~/boards/models/label');
|
|
require('~/boards/models/list');
|
|
require('~/boards/models/user');
|
|
require('~/boards/stores/boards_store');
|
|
require('~/boards/components/issue_card_inner');
|
|
require('./mock_data');
|
|
|
|
describe('Issue card component', () => {
|
|
const user = new ListUser({
|
|
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;
|
|
issue = new ListIssue({
|
|
title: 'Testing',
|
|
iid: 1,
|
|
confidential: false,
|
|
labels: [list.label],
|
|
});
|
|
|
|
component = new Vue({
|
|
el: document.querySelector('.test-container'),
|
|
data() {
|
|
return {
|
|
list,
|
|
issue,
|
|
issueLinkBase: '/test',
|
|
rootPath: '/',
|
|
};
|
|
},
|
|
components: {
|
|
'issue-card': gl.issueBoards.IssueCardInner,
|
|
},
|
|
template: `
|
|
<issue-card
|
|
:issue="issue"
|
|
:list="list"
|
|
:issue-link-base="issueLinkBase"
|
|
:root-path="rootPath"></issue-card>
|
|
`,
|
|
});
|
|
});
|
|
|
|
it('renders issue title', () => {
|
|
expect(
|
|
component.$el.querySelector('.card-title').textContent,
|
|
).toContain(issue.title);
|
|
});
|
|
|
|
it('includes issue base in link', () => {
|
|
expect(
|
|
component.$el.querySelector('.card-title a').getAttribute('href'),
|
|
).toContain('/test');
|
|
});
|
|
|
|
it('includes issue title on link', () => {
|
|
expect(
|
|
component.$el.querySelector('.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;
|
|
|
|
setTimeout(() => {
|
|
expect(
|
|
component.$el.querySelector('.confidential-icon'),
|
|
).not.toBeNull();
|
|
done();
|
|
}, 0);
|
|
});
|
|
|
|
it('renders issue ID with #', () => {
|
|
expect(
|
|
component.$el.querySelector('.card-number').textContent,
|
|
).toContain(`#${issue.id}`);
|
|
});
|
|
|
|
describe('assignee', () => {
|
|
it('does not render assignee', () => {
|
|
expect(
|
|
component.$el.querySelector('.card-assignee'),
|
|
).toBeNull();
|
|
});
|
|
|
|
describe('exists', () => {
|
|
beforeEach((done) => {
|
|
component.issue.assignee = user;
|
|
|
|
setTimeout(() => {
|
|
done();
|
|
}, 0);
|
|
});
|
|
|
|
it('renders assignee', () => {
|
|
expect(
|
|
component.$el.querySelector('.card-assignee'),
|
|
).not.toBeNull();
|
|
});
|
|
|
|
it('sets title', () => {
|
|
expect(
|
|
component.$el.querySelector('.card-assignee').getAttribute('title'),
|
|
).toContain(`Assigned to ${user.name}`);
|
|
});
|
|
|
|
it('sets users path', () => {
|
|
expect(
|
|
component.$el.querySelector('.card-assignee').getAttribute('href'),
|
|
).toBe('/test');
|
|
});
|
|
|
|
it('renders avatar', () => {
|
|
expect(
|
|
component.$el.querySelector('.card-assignee img'),
|
|
).not.toBeNull();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('labels', () => {
|
|
it('does not render any', () => {
|
|
expect(
|
|
component.$el.querySelector('.label'),
|
|
).toBeNull();
|
|
});
|
|
|
|
describe('exists', () => {
|
|
beforeEach((done) => {
|
|
component.issue.addLabel(label1);
|
|
|
|
setTimeout(() => {
|
|
done();
|
|
}, 0);
|
|
});
|
|
|
|
it('does not render list label', () => {
|
|
expect(
|
|
component.$el.querySelectorAll('.label').length,
|
|
).toBe(1);
|
|
});
|
|
|
|
it('renders label', () => {
|
|
expect(
|
|
component.$el.querySelector('.label').textContent,
|
|
).toContain(label1.title);
|
|
});
|
|
|
|
it('sets label description as title', () => {
|
|
expect(
|
|
component.$el.querySelector('.label').getAttribute('title'),
|
|
).toContain(label1.description);
|
|
});
|
|
|
|
it('sets background color of button', () => {
|
|
expect(
|
|
component.$el.querySelector('.label').style.backgroundColor,
|
|
).toContain(label1.color);
|
|
});
|
|
});
|
|
});
|
|
});
|