summaryrefslogtreecommitdiff
path: root/spec/frontend/releases/components/release_block_metadata_spec.js
blob: 6f184e45600bfbddc3c5fed14095fc72d7f9364f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import { mount } from '@vue/test-utils';
import { trimText } from 'helpers/text_helper';
import { cloneDeep } from 'lodash';
import ReleaseBlockMetadata from '~/releases/components/release_block_metadata.vue';
import { release as originalRelease } from '../mock_data';
import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils';

const mockFutureDate = new Date(9999, 0, 0).toISOString();
let mockIsFutureRelease = false;

jest.mock('~/vue_shared/mixins/timeago', () => ({
  methods: {
    timeFormatted() {
      return mockIsFutureRelease ? 'in 1 month' : '7 fortnights ago';
    },
    tooltipTitle() {
      return 'February 30, 2401';
    },
  },
}));

describe('Release block metadata', () => {
  let wrapper;
  let release;

  const factory = (releaseUpdates = {}) => {
    wrapper = mount(ReleaseBlockMetadata, {
      propsData: {
        release: {
          ...convertObjectPropsToCamelCase(release, { deep: true }),
          ...releaseUpdates,
        },
      },
    });
  };

  beforeEach(() => {
    release = cloneDeep(originalRelease);
  });

  afterEach(() => {
    wrapper.destroy();
    wrapper = null;
    mockIsFutureRelease = false;
  });

  const findReleaseDateInfo = () => wrapper.find('.js-release-date-info');

  describe('with all props provided', () => {
    beforeEach(() => factory());

    it('renders the release time info', () => {
      expect(trimText(findReleaseDateInfo().text())).toBe(`released 7 fortnights ago`);
    });
  });

  describe('with a future release date', () => {
    beforeEach(() => {
      mockIsFutureRelease = true;
      factory({ releasedAt: mockFutureDate });
    });

    it('renders the release date without the author name', () => {
      expect(trimText(findReleaseDateInfo().text())).toBe(`will be released in 1 month`);
    });
  });
});