summaryrefslogtreecommitdiff
path: root/spec/frontend/notes/components/notes_activity_header_spec.js
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/notes/components/notes_activity_header_spec.js')
-rw-r--r--spec/frontend/notes/components/notes_activity_header_spec.js67
1 files changed, 67 insertions, 0 deletions
diff --git a/spec/frontend/notes/components/notes_activity_header_spec.js b/spec/frontend/notes/components/notes_activity_header_spec.js
new file mode 100644
index 00000000000..5b3165bf401
--- /dev/null
+++ b/spec/frontend/notes/components/notes_activity_header_spec.js
@@ -0,0 +1,67 @@
+import { shallowMount } from '@vue/test-utils';
+import { __ } from '~/locale';
+import NotesActivityHeader from '~/notes/components/notes_activity_header.vue';
+import DiscussionFilter from '~/notes/components/discussion_filter.vue';
+import TimelineToggle from '~/notes/components/timeline_toggle.vue';
+import createStore from '~/notes/stores';
+import waitForPromises from 'helpers/wait_for_promises';
+import { notesFilters } from '../mock_data';
+
+describe('~/notes/components/notes_activity_header.vue', () => {
+ let wrapper;
+
+ const findTitle = () => wrapper.find('h2');
+
+ const createComponent = ({ props = {}, ...options } = {}) => {
+ wrapper = shallowMount(NotesActivityHeader, {
+ propsData: {
+ notesFilters,
+ ...props,
+ },
+ // why: Rendering async timeline toggle requires store
+ store: createStore(),
+ ...options,
+ });
+ };
+
+ afterEach(() => {
+ wrapper.destroy();
+ });
+
+ describe('default', () => {
+ beforeEach(() => {
+ createComponent();
+ });
+
+ it('renders title', () => {
+ expect(findTitle().text()).toBe(__('Activity'));
+ });
+
+ it('renders discussion filter', () => {
+ expect(wrapper.findComponent(DiscussionFilter).props()).toEqual({
+ filters: notesFilters,
+ selectedValue: 0,
+ });
+ });
+
+ it('does not render timeline toggle', () => {
+ expect(wrapper.findComponent(TimelineToggle).exists()).toBe(false);
+ });
+ });
+
+ it('with notesFilterValue prop, passes to discussion filter', () => {
+ createComponent({ props: { notesFilterValue: 1 } });
+
+ expect(wrapper.findComponent(DiscussionFilter).props('selectedValue')).toBe(1);
+ });
+
+ it('with showTimelineViewToggle injected, renders timeline toggle asynchronously', async () => {
+ createComponent({ provide: { showTimelineViewToggle: () => true } });
+
+ expect(wrapper.findComponent(TimelineToggle).exists()).toBe(false);
+
+ await waitForPromises();
+
+ expect(wrapper.findComponent(TimelineToggle).exists()).toBe(true);
+ });
+});