163 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			163 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
/* global ListIssue */
 | 
						|
 | 
						|
import '~/boards/models/label';
 | 
						|
import '~/boards/models/assignee';
 | 
						|
import '~/boards/models/issue';
 | 
						|
import '~/boards/models/list';
 | 
						|
import boardsStore from '~/boards/stores/boards_store';
 | 
						|
import { setMockEndpoints, mockIssue } from './mock_data';
 | 
						|
 | 
						|
describe('Issue model', () => {
 | 
						|
  let issue;
 | 
						|
 | 
						|
  beforeEach(() => {
 | 
						|
    setMockEndpoints();
 | 
						|
    boardsStore.create();
 | 
						|
 | 
						|
    issue = new ListIssue(mockIssue);
 | 
						|
  });
 | 
						|
 | 
						|
  it('has label', () => {
 | 
						|
    expect(issue.labels.length).toBe(1);
 | 
						|
  });
 | 
						|
 | 
						|
  it('add new label', () => {
 | 
						|
    issue.addLabel({
 | 
						|
      id: 2,
 | 
						|
      title: 'bug',
 | 
						|
      color: 'blue',
 | 
						|
      description: 'bugs!',
 | 
						|
    });
 | 
						|
 | 
						|
    expect(issue.labels.length).toBe(2);
 | 
						|
  });
 | 
						|
 | 
						|
  it('does not add label if label id exists', () => {
 | 
						|
    issue.addLabel({
 | 
						|
      id: 1,
 | 
						|
      title: 'test 2',
 | 
						|
      color: 'blue',
 | 
						|
      description: 'testing',
 | 
						|
    });
 | 
						|
 | 
						|
    expect(issue.labels.length).toBe(1);
 | 
						|
    expect(issue.labels[0].color).toBe('#F0AD4E');
 | 
						|
  });
 | 
						|
 | 
						|
  it('adds other label with same title', () => {
 | 
						|
    issue.addLabel({
 | 
						|
      id: 2,
 | 
						|
      title: 'test',
 | 
						|
      color: 'blue',
 | 
						|
      description: 'other test',
 | 
						|
    });
 | 
						|
 | 
						|
    expect(issue.labels.length).toBe(2);
 | 
						|
  });
 | 
						|
 | 
						|
  it('finds label', () => {
 | 
						|
    const label = issue.findLabel(issue.labels[0]);
 | 
						|
 | 
						|
    expect(label).toBeDefined();
 | 
						|
  });
 | 
						|
 | 
						|
  it('removes label', () => {
 | 
						|
    const label = issue.findLabel(issue.labels[0]);
 | 
						|
    issue.removeLabel(label);
 | 
						|
 | 
						|
    expect(issue.labels.length).toBe(0);
 | 
						|
  });
 | 
						|
 | 
						|
  it('removes multiple labels', () => {
 | 
						|
    issue.addLabel({
 | 
						|
      id: 2,
 | 
						|
      title: 'bug',
 | 
						|
      color: 'blue',
 | 
						|
      description: 'bugs!',
 | 
						|
    });
 | 
						|
 | 
						|
    expect(issue.labels.length).toBe(2);
 | 
						|
 | 
						|
    issue.removeLabels([issue.labels[0], issue.labels[1]]);
 | 
						|
 | 
						|
    expect(issue.labels.length).toBe(0);
 | 
						|
  });
 | 
						|
 | 
						|
  it('adds assignee', () => {
 | 
						|
    issue.addAssignee({
 | 
						|
      id: 2,
 | 
						|
      name: 'Bruce Wayne',
 | 
						|
      username: 'batman',
 | 
						|
      avatar_url: 'http://batman',
 | 
						|
    });
 | 
						|
 | 
						|
    expect(issue.assignees.length).toBe(2);
 | 
						|
  });
 | 
						|
 | 
						|
  it('finds assignee', () => {
 | 
						|
    const assignee = issue.findAssignee(issue.assignees[0]);
 | 
						|
 | 
						|
    expect(assignee).toBeDefined();
 | 
						|
  });
 | 
						|
 | 
						|
  it('removes assignee', () => {
 | 
						|
    const assignee = issue.findAssignee(issue.assignees[0]);
 | 
						|
    issue.removeAssignee(assignee);
 | 
						|
 | 
						|
    expect(issue.assignees.length).toBe(0);
 | 
						|
  });
 | 
						|
 | 
						|
  it('removes all assignees', () => {
 | 
						|
    issue.removeAllAssignees();
 | 
						|
 | 
						|
    expect(issue.assignees.length).toBe(0);
 | 
						|
  });
 | 
						|
 | 
						|
  it('sets position to infinity if no position is stored', () => {
 | 
						|
    expect(issue.position).toBe(Infinity);
 | 
						|
  });
 | 
						|
 | 
						|
  it('sets position', () => {
 | 
						|
    const relativePositionIssue = new ListIssue({
 | 
						|
      title: 'Testing',
 | 
						|
      iid: 1,
 | 
						|
      confidential: false,
 | 
						|
      relative_position: 1,
 | 
						|
      labels: [],
 | 
						|
      assignees: [],
 | 
						|
    });
 | 
						|
 | 
						|
    expect(relativePositionIssue.position).toBe(1);
 | 
						|
  });
 | 
						|
 | 
						|
  it('updates data', () => {
 | 
						|
    issue.updateData({ subscribed: true });
 | 
						|
 | 
						|
    expect(issue.subscribed).toBe(true);
 | 
						|
  });
 | 
						|
 | 
						|
  it('sets fetching state', () => {
 | 
						|
    expect(issue.isFetching.subscriptions).toBe(true);
 | 
						|
 | 
						|
    issue.setFetchingState('subscriptions', false);
 | 
						|
 | 
						|
    expect(issue.isFetching.subscriptions).toBe(false);
 | 
						|
  });
 | 
						|
 | 
						|
  it('sets loading state', () => {
 | 
						|
    issue.setLoadingState('foo', true);
 | 
						|
 | 
						|
    expect(issue.isLoading.foo).toBe(true);
 | 
						|
  });
 | 
						|
 | 
						|
  describe('update', () => {
 | 
						|
    it('passes update to boardsStore', () => {
 | 
						|
      jest.spyOn(boardsStore, 'updateIssue').mockImplementation();
 | 
						|
 | 
						|
      issue.update();
 | 
						|
 | 
						|
      expect(boardsStore.updateIssue).toHaveBeenCalledWith(issue);
 | 
						|
    });
 | 
						|
  });
 | 
						|
});
 |