summaryrefslogtreecommitdiff
path: root/spec/frontend/sidebar/confidential/edit_form_buttons_spec.js
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/sidebar/confidential/edit_form_buttons_spec.js')
-rw-r--r--spec/frontend/sidebar/confidential/edit_form_buttons_spec.js130
1 files changed, 124 insertions, 6 deletions
diff --git a/spec/frontend/sidebar/confidential/edit_form_buttons_spec.js b/spec/frontend/sidebar/confidential/edit_form_buttons_spec.js
index acdfb5139bf..15493d3087f 100644
--- a/spec/frontend/sidebar/confidential/edit_form_buttons_spec.js
+++ b/spec/frontend/sidebar/confidential/edit_form_buttons_spec.js
@@ -1,16 +1,49 @@
import { shallowMount } from '@vue/test-utils';
+import { GlLoadingIcon } from '@gitlab/ui';
import EditFormButtons from '~/sidebar/components/confidential/edit_form_buttons.vue';
+import eventHub from '~/sidebar/event_hub';
+import createStore from '~/notes/stores';
+import waitForPromises from 'helpers/wait_for_promises';
+import flash from '~/flash';
+
+jest.mock('~/sidebar/event_hub', () => ({ $emit: jest.fn() }));
+jest.mock('~/flash');
describe('Edit Form Buttons', () => {
let wrapper;
+ let store;
const findConfidentialToggle = () => wrapper.find('[data-testid="confidential-toggle"]');
- const createComponent = props => {
+ const createComponent = ({
+ props = {},
+ data = {},
+ confidentialApolloSidebar = false,
+ resolved = true,
+ }) => {
+ store = createStore();
+ if (resolved) {
+ jest.spyOn(store, 'dispatch').mockResolvedValue();
+ } else {
+ jest.spyOn(store, 'dispatch').mockRejectedValue();
+ }
+
wrapper = shallowMount(EditFormButtons, {
propsData: {
- updateConfidentialAttribute: () => {},
+ fullPath: '',
...props,
},
+ data() {
+ return {
+ isLoading: true,
+ ...data,
+ };
+ },
+ provide: {
+ glFeatures: {
+ confidentialApolloSidebar,
+ },
+ },
+ store,
});
};
@@ -19,10 +52,32 @@ describe('Edit Form Buttons', () => {
wrapper = null;
});
+ describe('when isLoading', () => {
+ beforeEach(() => {
+ createComponent({});
+
+ wrapper.vm.$store.state.noteableData.confidential = false;
+ });
+
+ it('renders "Applying" in the toggle button', () => {
+ expect(findConfidentialToggle().text()).toBe('Applying');
+ });
+
+ it('disables the toggle button', () => {
+ expect(findConfidentialToggle().attributes('disabled')).toBe('disabled');
+ });
+
+ it('finds the GlLoadingIcon', () => {
+ expect(wrapper.find(GlLoadingIcon).exists()).toBe(true);
+ });
+ });
+
describe('when not confidential', () => {
- it('renders Turn On in the ', () => {
+ it('renders Turn On in the toggle button', () => {
createComponent({
- isConfidential: false,
+ data: {
+ isLoading: false,
+ },
});
expect(findConfidentialToggle().text()).toBe('Turn On');
@@ -30,12 +85,75 @@ describe('Edit Form Buttons', () => {
});
describe('when confidential', () => {
- it('renders on or off text based on confidentiality', () => {
+ beforeEach(() => {
createComponent({
- isConfidential: true,
+ data: {
+ isLoading: false,
+ },
});
+ wrapper.vm.$store.state.noteableData.confidential = true;
+ });
+
+ it('renders on or off text based on confidentiality', () => {
expect(findConfidentialToggle().text()).toBe('Turn Off');
});
+
+ describe('when clicking on the confidential toggle', () => {
+ it('emits updateConfidentialAttribute', () => {
+ findConfidentialToggle().trigger('click');
+
+ expect(eventHub.$emit).toHaveBeenCalledWith('updateConfidentialAttribute');
+ });
+ });
+ });
+
+ describe('when confidentialApolloSidebar is turned on', () => {
+ const isConfidential = true;
+
+ describe('when succeeds', () => {
+ beforeEach(() => {
+ createComponent({ data: { isLoading: false }, confidentialApolloSidebar: true });
+ wrapper.vm.$store.state.noteableData.confidential = isConfidential;
+ findConfidentialToggle().trigger('click');
+ });
+
+ it('dispatches the correct action', () => {
+ expect(store.dispatch).toHaveBeenCalledWith('updateConfidentialityOnIssue', {
+ confidential: !isConfidential,
+ fullPath: '',
+ });
+ });
+
+ it('resets loading', () => {
+ return waitForPromises().then(() => {
+ expect(wrapper.find(GlLoadingIcon).exists()).toBe(false);
+ });
+ });
+
+ it('emits close form', () => {
+ return waitForPromises().then(() => {
+ expect(eventHub.$emit).toHaveBeenCalledWith('closeConfidentialityForm');
+ });
+ });
+ });
+
+ describe('when fails', () => {
+ beforeEach(() => {
+ createComponent({
+ data: { isLoading: false },
+ confidentialApolloSidebar: true,
+ resolved: false,
+ });
+ wrapper.vm.$store.state.noteableData.confidential = isConfidential;
+ findConfidentialToggle().trigger('click');
+ });
+
+ it('calls flash with the correct message', () => {
+ expect(flash).toHaveBeenCalledWith(
+ 'Something went wrong trying to change the confidentiality of this issue',
+ );
+ });
+ });
});
});