summaryrefslogtreecommitdiff
path: root/spec/frontend/releases/components/issuable_stats_spec.js
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/releases/components/issuable_stats_spec.js')
-rw-r--r--spec/frontend/releases/components/issuable_stats_spec.js114
1 files changed, 114 insertions, 0 deletions
diff --git a/spec/frontend/releases/components/issuable_stats_spec.js b/spec/frontend/releases/components/issuable_stats_spec.js
new file mode 100644
index 00000000000..d8211ec2adc
--- /dev/null
+++ b/spec/frontend/releases/components/issuable_stats_spec.js
@@ -0,0 +1,114 @@
+import { GlLink } from '@gitlab/ui';
+import { mount } from '@vue/test-utils';
+import { trimText } from 'helpers/text_helper';
+import IssuableStats from '~/releases/components/issuable_stats.vue';
+
+describe('~/releases/components/issuable_stats.vue', () => {
+ let wrapper;
+ let defaultProps;
+
+ const createComponent = propUpdates => {
+ wrapper = mount(IssuableStats, {
+ propsData: {
+ ...defaultProps,
+ ...propUpdates,
+ },
+ });
+ };
+
+ const findOpenStatLink = () => wrapper.find('[data-testid="open-stat"]').find(GlLink);
+ const findMergedStatLink = () => wrapper.find('[data-testid="merged-stat"]').find(GlLink);
+ const findClosedStatLink = () => wrapper.find('[data-testid="closed-stat"]').find(GlLink);
+
+ beforeEach(() => {
+ defaultProps = {
+ label: 'Items',
+ total: 10,
+ closed: 2,
+ merged: 7,
+ openedPath: 'path/to/opened/items',
+ closedPath: 'path/to/closed/items',
+ mergedPath: 'path/to/merged/items',
+ };
+ });
+
+ afterEach(() => {
+ wrapper.destroy();
+ wrapper = null;
+ });
+
+ it('matches snapshot', () => {
+ createComponent();
+
+ expect(wrapper.html()).toMatchSnapshot();
+ });
+
+ describe('when only total and closed counts are provided', () => {
+ beforeEach(() => {
+ createComponent({ merged: undefined, mergedPath: undefined });
+ });
+
+ it('renders a label with the total count; also, the opened count and the closed count', () => {
+ expect(trimText(wrapper.text())).toMatchInterpolatedText('Items 10 Open: 8 • Closed: 2');
+ });
+ });
+
+ describe('when only total, merged, and closed counts are provided', () => {
+ beforeEach(() => {
+ createComponent();
+ });
+
+ it('renders a label with the total count; also, the opened count, the merged count, and the closed count', () => {
+ expect(wrapper.text()).toMatchInterpolatedText('Items 10 Open: 1 • Merged: 7 • Closed: 2');
+ });
+ });
+
+ describe('when path parameters are provided', () => {
+ beforeEach(() => {
+ createComponent();
+ });
+
+ it('renders the "open" stat as a link', () => {
+ const link = findOpenStatLink();
+
+ expect(link.exists()).toBe(true);
+ expect(link.attributes('href')).toBe(defaultProps.openedPath);
+ });
+
+ it('renders the "merged" stat as a link', () => {
+ const link = findMergedStatLink();
+
+ expect(link.exists()).toBe(true);
+ expect(link.attributes('href')).toBe(defaultProps.mergedPath);
+ });
+
+ it('renders the "closed" stat as a link', () => {
+ const link = findClosedStatLink();
+
+ expect(link.exists()).toBe(true);
+ expect(link.attributes('href')).toBe(defaultProps.closedPath);
+ });
+ });
+
+ describe('when path parameters are not provided', () => {
+ beforeEach(() => {
+ createComponent({
+ openedPath: undefined,
+ closedPath: undefined,
+ mergedPath: undefined,
+ });
+ });
+
+ it('does not render the "open" stat as a link', () => {
+ expect(findOpenStatLink().exists()).toBe(false);
+ });
+
+ it('does not render the "merged" stat as a link', () => {
+ expect(findMergedStatLink().exists()).toBe(false);
+ });
+
+ it('does not render the "closed" stat as a link', () => {
+ expect(findClosedStatLink().exists()).toBe(false);
+ });
+ });
+});