Merge branch '9102-hide-dismissed-vulnerabilities-in-the-group-security-dashboard-backport' into 'master'
Add toggle to show/hide dismissed vulnerabilities (ports ee!15333) See merge request gitlab-org/gitlab-ce!32413
This commit is contained in:
commit
c15be006c0
2 changed files with 164 additions and 0 deletions
|
@ -0,0 +1,49 @@
|
|||
<script>
|
||||
import { GlToggle } from '@gitlab/ui';
|
||||
import { capitalizeFirstCharacter } from '~/lib/utils/text_utility';
|
||||
|
||||
export default {
|
||||
name: 'GlToggleVuex',
|
||||
components: {
|
||||
GlToggle,
|
||||
},
|
||||
props: {
|
||||
stateProperty: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
storeModule: {
|
||||
type: String,
|
||||
required: false,
|
||||
default: null,
|
||||
},
|
||||
setAction: {
|
||||
type: String,
|
||||
required: false,
|
||||
default() {
|
||||
return `set${capitalizeFirstCharacter(this.stateProperty)}`;
|
||||
},
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
value: {
|
||||
get() {
|
||||
const { state } = this.$store;
|
||||
const { stateProperty, storeModule } = this;
|
||||
return storeModule ? state[storeModule][stateProperty] : state[stateProperty];
|
||||
},
|
||||
set(value) {
|
||||
const { stateProperty, storeModule, setAction } = this;
|
||||
const action = storeModule ? `${storeModule}/${setAction}` : setAction;
|
||||
this.$store.dispatch(action, { key: stateProperty, value });
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<gl-toggle v-model="value">
|
||||
<slot v-bind="{ value }"></slot>
|
||||
</gl-toggle>
|
||||
</template>
|
115
spec/frontend/vue_shared/components/gl_toggle_vuex_spec.js
Normal file
115
spec/frontend/vue_shared/components/gl_toggle_vuex_spec.js
Normal file
|
@ -0,0 +1,115 @@
|
|||
import Vuex from 'vuex';
|
||||
import GlToggleVuex from '~/vue_shared/components/gl_toggle_vuex.vue';
|
||||
import { GlToggle } from '@gitlab/ui';
|
||||
import { mount, createLocalVue } from '@vue/test-utils';
|
||||
|
||||
const localVue = createLocalVue();
|
||||
localVue.use(Vuex);
|
||||
|
||||
describe('GlToggleVuex component', () => {
|
||||
let wrapper;
|
||||
let store;
|
||||
|
||||
const findButton = () => wrapper.find('button');
|
||||
|
||||
const createWrapper = (props = {}) => {
|
||||
wrapper = mount(GlToggleVuex, {
|
||||
localVue,
|
||||
store,
|
||||
propsData: {
|
||||
stateProperty: 'toggleState',
|
||||
...props,
|
||||
},
|
||||
sync: false,
|
||||
});
|
||||
};
|
||||
|
||||
beforeEach(() => {
|
||||
store = new Vuex.Store({
|
||||
state: {
|
||||
toggleState: false,
|
||||
},
|
||||
actions: {
|
||||
setToggleState: ({ commit }, { key, value }) => commit('setToggleState', { key, value }),
|
||||
},
|
||||
mutations: {
|
||||
setToggleState: (state, { key, value }) => {
|
||||
state[key] = value;
|
||||
},
|
||||
},
|
||||
});
|
||||
createWrapper();
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
wrapper.destroy();
|
||||
});
|
||||
|
||||
it('renders gl-toggle', () => {
|
||||
expect(wrapper.find(GlToggle).exists()).toBe(true);
|
||||
});
|
||||
|
||||
it('properly computes default value for setAction', () => {
|
||||
expect(wrapper.props('setAction')).toBe('setToggleState');
|
||||
});
|
||||
|
||||
describe('without a store module', () => {
|
||||
it('calls action with new value when value changes', () => {
|
||||
jest.spyOn(store, 'dispatch');
|
||||
|
||||
findButton().trigger('click');
|
||||
expect(store.dispatch).toHaveBeenCalledWith('setToggleState', {
|
||||
key: 'toggleState',
|
||||
value: true,
|
||||
});
|
||||
});
|
||||
|
||||
it('updates store property when value changes', () => {
|
||||
findButton().trigger('click');
|
||||
expect(store.state.toggleState).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe('with a store module', () => {
|
||||
beforeEach(() => {
|
||||
store = new Vuex.Store({
|
||||
modules: {
|
||||
someModule: {
|
||||
namespaced: true,
|
||||
state: {
|
||||
toggleState: false,
|
||||
},
|
||||
actions: {
|
||||
setToggleState: ({ commit }, { key, value }) =>
|
||||
commit('setToggleState', { key, value }),
|
||||
},
|
||||
mutations: {
|
||||
setToggleState: (state, { key, value }) => {
|
||||
state[key] = value;
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
createWrapper({
|
||||
storeModule: 'someModule',
|
||||
});
|
||||
});
|
||||
|
||||
it('calls action with new value when value changes', () => {
|
||||
jest.spyOn(store, 'dispatch');
|
||||
|
||||
findButton().trigger('click');
|
||||
expect(store.dispatch).toHaveBeenCalledWith('someModule/setToggleState', {
|
||||
key: 'toggleState',
|
||||
value: true,
|
||||
});
|
||||
});
|
||||
|
||||
it('updates store property when value changes', () => {
|
||||
findButton().trigger('click');
|
||||
expect(store.state.someModule.toggleState).toBe(true);
|
||||
});
|
||||
});
|
||||
});
|
Loading…
Reference in a new issue