debian-mirror-gitlab/spec/javascripts/deploy_keys/components/key_spec.js

158 lines
4.6 KiB
JavaScript
Raw Normal View History

2017-08-17 22:00:37 +05:30
import Vue from 'vue';
import DeployKeysStore from '~/deploy_keys/store';
import key from '~/deploy_keys/components/key.vue';
2018-03-17 18:26:18 +05:30
import { getTimeago } from '~/lib/utils/datetime_utility';
2017-08-17 22:00:37 +05:30
describe('Deploy keys key', () => {
let vm;
const KeyComponent = Vue.extend(key);
const data = getJSONFixture('deploy_keys/keys.json');
2018-10-15 14:42:47 +05:30
const createComponent = deployKey => {
2017-08-17 22:00:37 +05:30
const store = new DeployKeysStore();
store.keys = data;
vm = new KeyComponent({
propsData: {
deployKey,
store,
2017-09-10 17:25:29 +05:30
endpoint: 'https://test.host/dummy/endpoint',
2017-08-17 22:00:37 +05:30
},
}).$mount();
};
describe('enabled key', () => {
const deployKey = data.enabled_keys[0];
2018-10-15 14:42:47 +05:30
beforeEach(done => {
2017-08-17 22:00:37 +05:30
createComponent(deployKey);
setTimeout(done);
});
it('renders the keys title', () => {
2018-10-15 14:42:47 +05:30
expect(vm.$el.querySelector('.title').textContent.trim()).toContain('My title');
2017-08-17 22:00:37 +05:30
});
it('renders human friendly formatted created date', () => {
2018-10-15 14:42:47 +05:30
expect(vm.$el.querySelector('.key-created-at').textContent.trim()).toBe(
`${getTimeago().format(deployKey.created_at)}`,
);
2017-08-17 22:00:37 +05:30
});
2018-10-15 14:42:47 +05:30
it('shows pencil button for editing', () => {
expect(vm.$el.querySelector('.btn .ic-pencil')).toExist();
2017-09-10 17:25:29 +05:30
});
2018-10-15 14:42:47 +05:30
it('shows disable button when the project is not deletable', () => {
expect(vm.$el.querySelector('.btn .ic-cancel')).toExist();
2017-08-17 22:00:37 +05:30
});
2018-10-15 14:42:47 +05:30
it('shows remove button when the project is deletable', done => {
vm.deployKey.destroyed_when_orphaned = true;
vm.deployKey.almost_orphaned = true;
Vue.nextTick(() => {
expect(vm.$el.querySelector('.btn .ic-remove')).toExist();
done();
});
});
});
describe('deploy key labels', () => {
it('shows write access title when key has write access', done => {
2018-03-17 18:26:18 +05:30
vm.deployKey.deploy_keys_projects[0].can_push = true;
2017-08-17 22:00:37 +05:30
Vue.nextTick(() => {
expect(
2018-03-17 18:26:18 +05:30
vm.$el.querySelector('.deploy-project-label').getAttribute('data-original-title'),
2017-08-17 22:00:37 +05:30
).toBe('Write access allowed');
2018-03-17 18:26:18 +05:30
done();
});
});
2018-10-15 14:42:47 +05:30
it('does not show write access title when key has write access', done => {
2018-03-17 18:26:18 +05:30
vm.deployKey.deploy_keys_projects[0].can_push = false;
2017-08-17 22:00:37 +05:30
2018-03-17 18:26:18 +05:30
Vue.nextTick(() => {
expect(
vm.$el.querySelector('.deploy-project-label').getAttribute('data-original-title'),
).toBe('Read access only');
2017-08-17 22:00:37 +05:30
done();
});
});
2018-10-15 14:42:47 +05:30
it('shows expandable button if more than two projects', () => {
const labels = vm.$el.querySelectorAll('.deploy-project-label');
2018-12-13 13:39:08 +05:30
2018-10-15 14:42:47 +05:30
expect(labels.length).toBe(2);
expect(labels[1].textContent).toContain('others');
expect(labels[1].getAttribute('data-original-title')).toContain('Expand');
});
it('expands all project labels after click', done => {
2018-11-08 19:23:39 +05:30
const { length } = vm.deployKey.deploy_keys_projects;
2018-10-15 14:42:47 +05:30
vm.$el.querySelectorAll('.deploy-project-label')[1].click();
Vue.nextTick(() => {
const labels = vm.$el.querySelectorAll('.deploy-project-label');
2018-12-13 13:39:08 +05:30
2018-10-15 14:42:47 +05:30
expect(labels.length).toBe(length);
expect(labels[1].textContent).not.toContain(`+${length} others`);
expect(labels[1].getAttribute('data-original-title')).not.toContain('Expand');
done();
});
});
it('shows two projects', done => {
vm.deployKey.deploy_keys_projects = [...vm.deployKey.deploy_keys_projects].slice(0, 2);
Vue.nextTick(() => {
const labels = vm.$el.querySelectorAll('.deploy-project-label');
2018-12-13 13:39:08 +05:30
2018-10-15 14:42:47 +05:30
expect(labels.length).toBe(2);
expect(labels[1].textContent).toContain(
vm.deployKey.deploy_keys_projects[1].project.full_name,
);
done();
});
});
2017-08-17 22:00:37 +05:30
});
describe('public keys', () => {
const deployKey = data.public_keys[0];
2018-10-15 14:42:47 +05:30
beforeEach(done => {
2017-08-17 22:00:37 +05:30
createComponent(deployKey);
setTimeout(done);
});
2018-10-15 14:42:47 +05:30
it('renders deploy keys without any enabled projects', done => {
vm.deployKey.deploy_keys_projects = [];
Vue.nextTick(() => {
expect(vm.$el.querySelector('.deploy-project-list').textContent.trim()).toBe('None');
done();
});
2017-09-10 17:25:29 +05:30
});
2017-08-17 22:00:37 +05:30
it('shows enable button', () => {
2018-10-15 14:42:47 +05:30
expect(vm.$el.querySelectorAll('.btn')[0].textContent.trim()).toBe('Enable');
2017-08-17 22:00:37 +05:30
});
2018-10-15 14:42:47 +05:30
it('shows pencil button for editing', () => {
expect(vm.$el.querySelector('.btn .ic-pencil')).toExist();
});
it('shows disable button when key is enabled', done => {
2017-08-17 22:00:37 +05:30
vm.store.keys.enabled_keys.push(deployKey);
Vue.nextTick(() => {
2018-10-15 14:42:47 +05:30
expect(vm.$el.querySelector('.btn .ic-cancel')).toExist();
2017-08-17 22:00:37 +05:30
done();
});
});
});
});