summaryrefslogtreecommitdiff
path: root/spec/frontend/work_items/components/item_state_spec.js
blob: c3cc2fbc55637657e70298fdbd7956d5818d3bda (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import { GlFormSelect } from '@gitlab/ui';
import { mount } from '@vue/test-utils';
import { STATE_OPEN, STATE_CLOSED } from '~/work_items/constants';
import ItemState from '~/work_items/components/item_state.vue';

describe('ItemState', () => {
  let wrapper;

  const findLabel = () => wrapper.find('label').text();
  const findFormSelect = () => wrapper.findComponent(GlFormSelect);
  const selectedValue = () => wrapper.find('option:checked').element.value;

  const clickOpen = () => wrapper.findAll('option').at(0).setSelected();

  const createComponent = ({ state = STATE_OPEN, disabled = false } = {}) => {
    wrapper = mount(ItemState, {
      propsData: {
        state,
        disabled,
      },
    });
  };

  afterEach(() => {
    wrapper.destroy();
  });

  it('renders label and dropdown', () => {
    createComponent();

    expect(findLabel()).toBe('Status');
    expect(selectedValue()).toBe(STATE_OPEN);
  });

  it('renders dropdown for closed', () => {
    createComponent({ state: STATE_CLOSED });

    expect(selectedValue()).toBe(STATE_CLOSED);
  });

  it('emits changed event', async () => {
    createComponent({ state: STATE_CLOSED });

    await clickOpen();

    expect(wrapper.emitted('changed')).toEqual([[STATE_OPEN]]);
  });

  it('does not emits changed event if clicking selected value', async () => {
    createComponent({ state: STATE_OPEN });

    await clickOpen();

    expect(wrapper.emitted('changed')).toBeUndefined();
  });

  describe('form select disabled prop', () => {
    describe.each`
      description            | disabled | value
      ${'when not disabled'} | ${false} | ${undefined}
      ${'when disabled'}     | ${true}  | ${'disabled'}
    `('$description', ({ disabled, value }) => {
      it(`renders form select component with disabled=${value}`, () => {
        createComponent({ disabled });

        expect(findFormSelect().attributes('disabled')).toBe(value);
      });
    });
  });
});