text: import { shallowMount } from '@vue/test-utils';
  import { GlAlert, GlSprintf, GlLink } from '@gitlab/ui';
  import component from '~/registry/explorer/pages/index.vue';
  import store from '~/registry/explorer/stores/';
  
  describe('List Page', () => {
    let wrapper;
    let dispatchSpy;
  
    const findRouterView = () => wrapper.find({ ref: 'router-view' });
    const findAlert = () => wrapper.find(GlAlert);
    const findLink = () => wrapper.find(GlLink);
  
    const mountComponent = () => {
      wrapper = shallowMount(component, {
        store,
        stubs: {
          RouterView: true,
          GlSprintf,
        },
      });
    };
  
    beforeEach(() => {
      dispatchSpy = jest.spyOn(store, 'dispatch');
      mountComponent();
    });
  
    it('has a router view', () => {
      expect(findRouterView().exists()).toBe(true);
    });
  
    describe('garbageCollectionTip alert', () => {
      beforeEach(() => {
        store.dispatch('setInitialState', { isAdmin: true, garbageCollectionHelpPagePath: 'foo' });
        store.dispatch('setShowGarbageCollectionTip', true);
      });
  
      afterEach(() => {
        store.dispatch('setInitialState', {});
        store.dispatch('setShowGarbageCollectionTip', false);
      });
  
      it('is visible when the user is an admin and the user performed a delete action', () => {
        expect(findAlert().exists()).toBe(true);
      });
  
      it('on dismiss disappears ', () => {
        findAlert().vm.$emit('dismiss');
        expect(dispatchSpy).toHaveBeenCalledWith('setShowGarbageCollectionTip', false);
        return wrapper.vm.$nextTick().then(() => {
          expect(findAlert().exists()).toBe(false);
        });
      });
  
      it('contains a link to the docs', () => {
        const link = findLink();
        expect(link.exists()).toBe(true);
        expect(link.attributes('href')).toBe(store.state.config.garbageCollectionHelpPagePath);
      });
    });
  });
  