summaryrefslogtreecommitdiff
path: root/spec/frontend/design_management/components/design_notes
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/design_management/components/design_notes')
-rw-r--r--spec/frontend/design_management/components/design_notes/__snapshots__/design_note_signed_out_spec.js.snap41
-rw-r--r--spec/frontend/design_management/components/design_notes/design_discussion_spec.js50
-rw-r--r--spec/frontend/design_management/components/design_notes/design_note_signed_out_spec.js36
3 files changed, 127 insertions, 0 deletions
diff --git a/spec/frontend/design_management/components/design_notes/__snapshots__/design_note_signed_out_spec.js.snap b/spec/frontend/design_management/components/design_notes/__snapshots__/design_note_signed_out_spec.js.snap
new file mode 100644
index 00000000000..ab37cb90bd3
--- /dev/null
+++ b/spec/frontend/design_management/components/design_notes/__snapshots__/design_note_signed_out_spec.js.snap
@@ -0,0 +1,41 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`DesignNoteSignedOut renders message containing register and sign-in links while user wants to reply to a discussion 1`] = `
+<div
+ class="disabled-comment text-center"
+>
+ Please
+ <gl-link-stub
+ href="/users/sign_up?redirect_to_referer=yes"
+ >
+ register
+ </gl-link-stub>
+ or
+ <gl-link-stub
+ href="/users/sign_in?redirect_to_referer=yes"
+ >
+ sign in
+ </gl-link-stub>
+ to reply.
+</div>
+`;
+
+exports[`DesignNoteSignedOut renders message containing register and sign-in links while user wants to start a new discussion 1`] = `
+<div
+ class="disabled-comment text-center"
+>
+ Please
+ <gl-link-stub
+ href="/users/sign_up?redirect_to_referer=yes"
+ >
+ register
+ </gl-link-stub>
+ or
+ <gl-link-stub
+ href="/users/sign_in?redirect_to_referer=yes"
+ >
+ sign in
+ </gl-link-stub>
+ to start a new discussion.
+</div>
+`;
diff --git a/spec/frontend/design_management/components/design_notes/design_discussion_spec.js b/spec/frontend/design_management/components/design_notes/design_discussion_spec.js
index 9335d800a16..e816a05ba53 100644
--- a/spec/frontend/design_management/components/design_notes/design_discussion_spec.js
+++ b/spec/frontend/design_management/components/design_notes/design_discussion_spec.js
@@ -1,7 +1,9 @@
import { GlLoadingIcon } from '@gitlab/ui';
import { mount } from '@vue/test-utils';
+import { ApolloMutation } from 'vue-apollo';
import DesignDiscussion from '~/design_management/components/design_notes/design_discussion.vue';
import DesignNote from '~/design_management/components/design_notes/design_note.vue';
+import DesignNoteSignedOut from '~/design_management/components/design_notes/design_note_signed_out.vue';
import DesignReplyForm from '~/design_management/components/design_notes/design_reply_form.vue';
import ToggleRepliesWidget from '~/design_management/components/design_notes/toggle_replies_widget.vue';
import createNoteMutation from '~/design_management/graphql/mutations/create_note.mutation.graphql';
@@ -20,6 +22,7 @@ const defaultMockDiscussion = {
const DEFAULT_TODO_COUNT = 2;
describe('Design discussions component', () => {
+ const originalGon = window.gon;
let wrapper;
const findDesignNotes = () => wrapper.findAll(DesignNote);
@@ -31,6 +34,7 @@ describe('Design discussions component', () => {
const findResolvedMessage = () => wrapper.find('[data-testid="resolved-message"]');
const findResolveLoadingIcon = () => wrapper.find(GlLoadingIcon);
const findResolveCheckbox = () => wrapper.find('[data-testid="resolve-checkbox"]');
+ const findApolloMutation = () => wrapper.findComponent(ApolloMutation);
const mutationVariables = {
mutation: createNoteMutation,
@@ -42,6 +46,8 @@ describe('Design discussions component', () => {
},
},
};
+ const registerPath = '/users/sign_up?redirect_to_referer=yes';
+ const signInPath = '/users/sign_in?redirect_to_referer=yes';
const mutate = jest.fn().mockResolvedValue({ data: { createNote: { errors: [] } } });
const readQuery = jest.fn().mockReturnValue({
project: {
@@ -62,6 +68,8 @@ describe('Design discussions component', () => {
designId: 'design-id',
discussionIndex: 1,
discussionWithOpenForm: '',
+ registerPath,
+ signInPath,
...props,
},
data() {
@@ -88,8 +96,13 @@ describe('Design discussions component', () => {
});
}
+ beforeEach(() => {
+ window.gon = { current_user_id: 1 };
+ });
+
afterEach(() => {
wrapper.destroy();
+ window.gon = originalGon;
});
describe('when discussion is not resolvable', () => {
@@ -349,4 +362,41 @@ describe('Design discussions component', () => {
expect(wrapper.emitted('open-form')).toBeTruthy();
});
+
+ describe('when user is not logged in', () => {
+ const findDesignNoteSignedOut = () => wrapper.findComponent(DesignNoteSignedOut);
+
+ beforeEach(() => {
+ window.gon = { current_user_id: null };
+ createComponent(
+ {
+ discussion: {
+ ...defaultMockDiscussion,
+ },
+ discussionWithOpenForm: defaultMockDiscussion.id,
+ },
+ { discussionComment: 'test', isFormRendered: true },
+ );
+ });
+
+ it('does not render resolve discussion button', () => {
+ expect(findResolveButton().exists()).toBe(false);
+ });
+
+ it('does not render replace-placeholder component', () => {
+ expect(findReplyPlaceholder().exists()).toBe(false);
+ });
+
+ it('does not render apollo-mutation component', () => {
+ expect(findApolloMutation().exists()).toBe(false);
+ });
+
+ it('renders design-note-signed-out component', () => {
+ expect(findDesignNoteSignedOut().exists()).toBe(true);
+ expect(findDesignNoteSignedOut().props()).toMatchObject({
+ registerPath,
+ signInPath,
+ });
+ });
+ });
});
diff --git a/spec/frontend/design_management/components/design_notes/design_note_signed_out_spec.js b/spec/frontend/design_management/components/design_notes/design_note_signed_out_spec.js
new file mode 100644
index 00000000000..e71bb5ab520
--- /dev/null
+++ b/spec/frontend/design_management/components/design_notes/design_note_signed_out_spec.js
@@ -0,0 +1,36 @@
+import { GlSprintf } from '@gitlab/ui';
+import { shallowMount } from '@vue/test-utils';
+import DesignNoteSignedOut from '~/design_management/components/design_notes/design_note_signed_out.vue';
+
+function createComponent(isAddDiscussion = false) {
+ return shallowMount(DesignNoteSignedOut, {
+ propsData: {
+ registerPath: '/users/sign_up?redirect_to_referer=yes',
+ signInPath: '/users/sign_in?redirect_to_referer=yes',
+ isAddDiscussion,
+ },
+ stubs: {
+ GlSprintf,
+ },
+ });
+}
+
+describe('DesignNoteSignedOut', () => {
+ let wrapper;
+
+ afterEach(() => {
+ wrapper.destroy();
+ });
+
+ it('renders message containing register and sign-in links while user wants to reply to a discussion', () => {
+ wrapper = createComponent();
+
+ expect(wrapper.element).toMatchSnapshot();
+ });
+
+ it('renders message containing register and sign-in links while user wants to start a new discussion', () => {
+ wrapper = createComponent(true);
+
+ expect(wrapper.element).toMatchSnapshot();
+ });
+});