Skip to content
Snippets Groups Projects
Commit d8121cb0 authored by GitLab Bot's avatar GitLab Bot
Browse files

Add latest changes from gitlab-org/gitlab@master

parent 536aa3a1
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -124,11 +124,35 @@ describe('Settings Form', () => {
form = findForm();
});
 
describe('form cancel event', () => {
describe('cancel button', () => {
it('has type reset', () => {
expect(findCancelButton().attributes('type')).toBe('reset');
});
 
it('is disabled the form was not changed from his original value', () => {
store.dispatch('receiveSettingsSuccess', { foo: 'bar' });
return wrapper.vm.$nextTick().then(() => {
expect(findCancelButton().attributes('disabled')).toBe('true');
});
});
it('is disabled when the form data is loading', () => {
store.dispatch('toggleLoading');
return wrapper.vm.$nextTick().then(() => {
expect(findCancelButton().attributes('disabled')).toBe('true');
});
});
it('is enabled when the user changed something in the form and the data is not being loaded', () => {
store.dispatch('receiveSettingsSuccess', { foo: 'bar' });
store.dispatch('updateSettings', { foo: 'baz' });
return wrapper.vm.$nextTick().then(() => {
expect(findCancelButton().attributes('disabled')).toBe(undefined);
});
});
});
describe('form cancel event', () => {
it('calls the appropriate function', () => {
dispatchSpy.mockReturnValue();
form.trigger('reset');
Loading
Loading
import * as getters from '~/registry/settings/store/getters';
import * as utils from '~/registry/settings/utils';
import { formOptions } from '../mock_data';
describe('Getters registry settings store', () => {
const settings = {
cadence: 'foo',
keep_n: 'bar',
older_than: 'baz',
};
describe.each`
getter | variable | formOption
${'getCadence'} | ${'cadence'} | ${'cadence'}
${'getKeepN'} | ${'keep_n'} | ${'keepN'}
${'getOlderThan'} | ${'older_than'} | ${'olderThan'}
`('Options getter', ({ getter, variable, formOption }) => {
beforeEach(() => {
utils.findDefaultOption = jest.fn();
});
it(`${getter} returns ${variable} when ${variable} exists in settings`, () => {
expect(getters[getter]({ settings })).toBe(settings[variable]);
});
it(`${getter} calls findDefaultOption when ${variable} does not exists in settings`, () => {
getters[getter]({ settings: {}, formOptions });
expect(utils.findDefaultOption).toHaveBeenCalledWith(formOptions[formOption]);
});
});
describe('getIsDisabled', () => {
it('returns false when original is equal to settings', () => {
const same = { foo: 'bar' };
expect(getters.getIsEdited({ original: same, settings: same })).toBe(false);
});
it('returns true when original is different from settings', () => {
expect(getters.getIsEdited({ original: { foo: 'bar' }, settings: { foo: 'baz' } })).toBe(
true,
);
});
});
});
import Vue from 'vue';
import initVueAlerts from '~/vue_alerts';
import { setHTMLFixture } from 'helpers/fixtures';
import { TEST_HOST } from 'helpers/test_constants';
describe('VueAlerts', () => {
const alerts = [
{
title: 'Lorem',
html: 'Lorem <strong>Ipsum</strong>',
dismissible: true,
primaryButtonText: 'Okay!',
primaryButtonLink: `${TEST_HOST}/okay`,
variant: 'tip',
},
{
title: 'Hello',
html: 'Hello <strong>World</strong>',
dismissible: false,
primaryButtonText: 'No!',
primaryButtonLink: `${TEST_HOST}/no`,
variant: 'info',
},
];
beforeEach(() => {
setHTMLFixture(
alerts
.map(
x => `
<div class="js-vue-alert"
data-dismissible="${x.dismissible}"
data-title="${x.title}"
data-primary-button-text="${x.primaryButtonText}"
data-primary-button-link="${x.primaryButtonLink}"
data-variant="${x.variant}">${x.html}</div>
`,
)
.join('\n'),
);
});
const findJsHooks = () => document.querySelectorAll('.js-vue-alert');
const findAlerts = () => document.querySelectorAll('.gl-alert');
const findAlertDismiss = alert => alert.querySelector('.gl-alert-dismiss');
const serializeAlert = alert => ({
title: alert.querySelector('.gl-alert-title').textContent.trim(),
html: alert.querySelector('.gl-alert-body div').innerHTML,
dismissible: Boolean(alert.querySelector('.gl-alert-dismiss')),
primaryButtonText: alert.querySelector('.gl-alert-action').textContent.trim(),
primaryButtonLink: alert.querySelector('.gl-alert-action').href,
variant: [...alert.classList].find(x => x.match('gl-alert-')).replace('gl-alert-', ''),
});
it('starts with only JsHooks', () => {
expect(findJsHooks().length).toEqual(alerts.length);
expect(findAlerts().length).toEqual(0);
});
describe('when mounted', () => {
beforeEach(() => {
initVueAlerts();
});
it('replaces JsHook with GlAlert', () => {
expect(findJsHooks().length).toEqual(0);
expect(findAlerts().length).toEqual(alerts.length);
});
it('passes along props to gl-alert', () => {
expect([...findAlerts()].map(serializeAlert)).toEqual(alerts);
});
describe('when dismissed', () => {
beforeEach(() => {
findAlertDismiss(findAlerts()[0]).click();
return Vue.nextTick();
});
it('hides the alert', () => {
expect(findAlerts().length).toEqual(alerts.length - 1);
});
});
});
});
import { shallowMount } from '@vue/test-utils';
import { GlAlert } from '@gitlab/ui';
import DismissibleAlert from '~/vue_shared/components/dismissible_alert.vue';
const TEST_HTML = 'Hello World! <strong>Foo</strong>';
describe('vue_shared/components/dismissible_alert', () => {
const testAlertProps = {
primaryButtonText: 'Lorem ipsum',
primaryButtonLink: '/lorem/ipsum',
};
let wrapper;
const createComponent = (props = {}) => {
wrapper = shallowMount(DismissibleAlert, {
propsData: {
html: TEST_HTML,
...testAlertProps,
...props,
},
});
};
afterEach(() => {
wrapper.destroy();
});
const findAlert = () => wrapper.find(GlAlert);
describe('with default', () => {
beforeEach(() => {
createComponent();
});
it('shows alert', () => {
const alert = findAlert();
expect(alert.exists()).toBe(true);
expect(alert.props()).toEqual(expect.objectContaining(testAlertProps));
});
it('shows given HTML', () => {
expect(findAlert().html()).toContain(TEST_HTML);
});
describe('when dismissed', () => {
beforeEach(() => {
findAlert().vm.$emit('dismiss');
});
it('hides the alert', () => {
expect(findAlert().exists()).toBe(false);
});
});
});
});
Loading
Loading
@@ -55,6 +55,7 @@ module FilterSpecHelper
 
def reference_pipeline(context = {})
context.reverse_merge!(project: project) if defined?(project)
context.reverse_merge!(current_user: current_user) if defined?(current_user)
 
filters = [
Banzai::Filter::AutolinkFilter,
Loading
Loading
# frozen_string_literal: true
 
RSpec.shared_examples 'verified navigation bar' do
let(:expected_structure) do
structure.compact!
structure.each { |s| s[:nav_sub_items].compact! }
structure
end
it 'renders correctly' do
current_structure = page.find_all('.sidebar-top-level-items > li', class: ['!hidden']).map do |item|
current_structure = page.all('.sidebar-top-level-items > li', class: ['!hidden']).map do |item|
nav_item = item.find_all('a').first.text.gsub(/\s+\d+$/, '') # remove counts at the end
 
nav_sub_items = item
.find_all('.sidebar-sub-level-items a')
.map(&:text)
.drop(1) # remove the first hidden item
nav_sub_items = item.all('.sidebar-sub-level-items > li', class: ['!fly-out-top-item']).map do |list_item|
list_item.all('a').first.text
end
 
{ nav_item: nav_item, nav_sub_items: nav_sub_items }
end
 
structure.each { |s| s[:nav_sub_items].compact! }
expect(current_structure).to eq(structure)
expect(current_structure).to eq(expected_structure)
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment