summaryrefslogtreecommitdiff
path: root/spec/javascripts/deploy_keys/components/key_spec.js
blob: 5b64cbb2dfc6f06723ffe86251afb8944f332099 (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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import Vue from 'vue';
import DeployKeysStore from '~/deploy_keys/store';
import key from '~/deploy_keys/components/key.vue';

describe('Deploy keys key', () => {
  let vm;
  const KeyComponent = Vue.extend(key);
  const data = getJSONFixture('deploy_keys/keys.json');
  const createComponent = (deployKey) => {
    const store = new DeployKeysStore();
    store.keys = data;

    vm = new KeyComponent({
      propsData: {
        deployKey,
        store,
        endpoint: 'https://test.host/dummy/endpoint',
      },
    }).$mount();
  };

  describe('enabled key', () => {
    const deployKey = data.enabled_keys[0];

    beforeEach((done) => {
      createComponent(deployKey);

      setTimeout(done);
    });

    it('renders the keys title', () => {
      expect(
        vm.$el.querySelector('.title').textContent.trim(),
      ).toContain('My title');
    });

    it('renders human friendly formatted created date', () => {
      expect(
        vm.$el.querySelector('.key-created-at').textContent.trim(),
      ).toBe(`created ${gl.utils.getTimeago().format(deployKey.created_at)}`);
    });

    it('shows edit button', () => {
      expect(
        vm.$el.querySelectorAll('.btn')[0].textContent.trim(),
      ).toBe('Edit');
    });

    it('shows remove button', () => {
      expect(
        vm.$el.querySelectorAll('.btn')[1].textContent.trim(),
      ).toBe('Remove');
    });

    it('shows write access text when key has write access', (done) => {
      vm.deployKey.can_push = true;

      Vue.nextTick(() => {
        expect(
          vm.$el.querySelector('.write-access-allowed'),
        ).not.toBeNull();

        expect(
          vm.$el.querySelector('.write-access-allowed').textContent.trim(),
        ).toBe('Write access allowed');

        done();
      });
    });
  });

  describe('public keys', () => {
    const deployKey = data.public_keys[0];

    beforeEach((done) => {
      createComponent(deployKey);

      setTimeout(done);
    });

    it('shows edit button', () => {
      expect(
        vm.$el.querySelectorAll('.btn')[0].textContent.trim(),
      ).toBe('Edit');
    });

    it('shows enable button', () => {
      expect(
        vm.$el.querySelectorAll('.btn')[1].textContent.trim(),
      ).toBe('Enable');
    });

    it('shows disable button when key is enabled', (done) => {
      vm.store.keys.enabled_keys.push(deployKey);

      Vue.nextTick(() => {
        expect(
          vm.$el.querySelectorAll('.btn')[1].textContent.trim(),
        ).toBe('Disable');

        done();
      });
    });
  });
});