import Vue from 'vue';
import DeployKeysStore from '~/deploy_keys/store';
import deployKeysPanel from '~/deploy_keys/components/keys_panel.vue';

describe('Deploy keys panel', () => {
  const data = getJSONFixture('deploy_keys/keys.json');
  let vm;

  beforeEach((done) => {
    const DeployKeysPanelComponent = Vue.extend(deployKeysPanel);
    const store = new DeployKeysStore();
    store.keys = data;

    vm = new DeployKeysPanelComponent({
      propsData: {
        title: 'test',
        keys: data.enabled_keys,
        showHelpBox: true,
        store,
        endpoint: 'https://test.host/dummy/endpoint',
      },
    }).$mount();

    setTimeout(done);
  });

  it('renders the title with keys count', () => {
    expect(
      vm.$el.querySelector('h5').textContent.trim(),
    ).toContain('test');

    expect(
      vm.$el.querySelector('h5').textContent.trim(),
    ).toContain(`(${vm.keys.length})`);
  });

  it('renders list of keys', () => {
    expect(
      vm.$el.querySelectorAll('li').length,
    ).toBe(vm.keys.length);
  });

  it('renders help box if keys are empty', (done) => {
    vm.keys = [];

    Vue.nextTick(() => {
      expect(
        vm.$el.querySelector('.settings-message'),
      ).toBeDefined();

      expect(
        vm.$el.querySelector('.settings-message').textContent.trim(),
      ).toBe('No deploy keys found. Create one with the form above.');

      done();
    });
  });

  it('does not render help box if keys are empty & showHelpBox is false', (done) => {
    vm.keys = [];
    vm.showHelpBox = false;

    Vue.nextTick(() => {
      expect(
        vm.$el.querySelector('.settings-message'),
      ).toBeNull();

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