debian-mirror-gitlab/spec/frontend/releases/components/release_block_footer_spec.js

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

200 lines
6.5 KiB
JavaScript
Raw Normal View History

2020-11-24 15:15:51 +05:30
import { GlLink, GlIcon } from '@gitlab/ui';
2021-03-11 19:13:27 +05:30
import { mount } from '@vue/test-utils';
2020-10-24 23:57:45 +05:30
import { cloneDeep } from 'lodash';
2022-04-04 11:22:00 +05:30
import { nextTick } from 'vue';
2022-08-13 15:12:31 +05:30
import originalOneReleaseQueryResponse from 'test_fixtures/graphql/releases/graphql/queries/one_release.query.graphql.json';
import { convertOneReleaseGraphQLResponse } from '~/releases/util';
2021-03-11 19:13:27 +05:30
import { trimText } from 'helpers/text_helper';
import ReleaseBlockFooter from '~/releases/components/release_block_footer.vue';
2020-05-24 23:13:21 +05:30
2021-03-11 19:13:27 +05:30
// TODO: Encapsulate date helpers https://gitlab.com/gitlab-org/gitlab/-/issues/320883
const MONTHS_IN_MS = 1000 * 60 * 60 * 24 * 31;
2022-08-13 15:12:31 +05:30
const mockFutureDate = new Date(new Date().getTime() + MONTHS_IN_MS);
const originalRelease = convertOneReleaseGraphQLResponse(originalOneReleaseQueryResponse).data;
2019-12-26 22:10:19 +05:30
describe('Release block footer', () => {
let wrapper;
2020-05-24 23:13:21 +05:30
let release;
2019-12-26 22:10:19 +05:30
2022-04-04 11:22:00 +05:30
const factory = async (props = {}) => {
2019-12-26 22:10:19 +05:30
wrapper = mount(ReleaseBlockFooter, {
propsData: {
2022-08-13 15:12:31 +05:30
...originalRelease,
2019-12-26 22:10:19 +05:30
...props,
},
});
2022-04-04 11:22:00 +05:30
await nextTick();
2019-12-26 22:10:19 +05:30
};
beforeEach(() => {
2020-05-24 23:13:21 +05:30
release = cloneDeep(originalRelease);
2019-12-26 22:10:19 +05:30
});
afterEach(() => {
wrapper.destroy();
2020-05-24 23:13:21 +05:30
wrapper = null;
2019-12-26 22:10:19 +05:30
});
const commitInfoSection = () => wrapper.find('.js-commit-info');
2022-10-11 01:57:18 +05:30
const commitInfoSectionLink = () => commitInfoSection().findComponent(GlLink);
2019-12-26 22:10:19 +05:30
const tagInfoSection = () => wrapper.find('.js-tag-info');
2022-10-11 01:57:18 +05:30
const tagInfoSectionLink = () => tagInfoSection().findComponent(GlLink);
2019-12-26 22:10:19 +05:30
const authorDateInfoSection = () => wrapper.find('.js-author-date-info');
describe('with all props provided', () => {
beforeEach(() => factory());
it('renders the commit icon', () => {
2022-10-11 01:57:18 +05:30
const commitIcon = commitInfoSection().findComponent(GlIcon);
2019-12-26 22:10:19 +05:30
expect(commitIcon.exists()).toBe(true);
expect(commitIcon.props('name')).toBe('commit');
});
it('renders the commit SHA with a link', () => {
const commitLink = commitInfoSectionLink();
expect(commitLink.exists()).toBe(true);
2022-08-13 15:12:31 +05:30
expect(commitLink.text()).toBe(release.commit.shortId);
expect(commitLink.attributes('href')).toBe(release.commitPath);
2019-12-26 22:10:19 +05:30
});
it('renders the tag icon', () => {
2022-10-11 01:57:18 +05:30
const commitIcon = tagInfoSection().findComponent(GlIcon);
2019-12-26 22:10:19 +05:30
expect(commitIcon.exists()).toBe(true);
expect(commitIcon.props('name')).toBe('tag');
});
it('renders the tag name with a link', () => {
2022-10-11 01:57:18 +05:30
const commitLink = tagInfoSection().findComponent(GlLink);
2019-12-26 22:10:19 +05:30
expect(commitLink.exists()).toBe(true);
2022-08-13 15:12:31 +05:30
expect(commitLink.text()).toBe(release.tagName);
expect(commitLink.attributes('href')).toBe(release.tagPath);
2019-12-26 22:10:19 +05:30
});
it('renders the author and creation time info', () => {
expect(trimText(authorDateInfoSection().text())).toBe(
2021-03-11 19:13:27 +05:30
`Created 1 year ago by ${release.author.username}`,
2019-12-26 22:10:19 +05:30
);
});
2020-05-24 23:13:21 +05:30
describe('when the release date is in the past', () => {
it('prefixes the creation info with "Created"', () => {
expect(trimText(authorDateInfoSection().text())).toEqual(expect.stringMatching(/^Created/));
});
});
describe('renders the author and creation time info with future release date', () => {
beforeEach(() => {
factory({ releasedAt: mockFutureDate });
});
it('renders the release date without the author name', () => {
expect(trimText(authorDateInfoSection().text())).toBe(
`Will be created in 1 month by ${release.author.username}`,
);
});
});
describe('when the release date is in the future', () => {
beforeEach(() => {
factory({ releasedAt: mockFutureDate });
});
it('prefixes the creation info with "Will be created"', () => {
expect(trimText(authorDateInfoSection().text())).toEqual(
expect.stringMatching(/^Will be created/),
);
});
});
2019-12-26 22:10:19 +05:30
it("renders the author's avatar image", () => {
const avatarImg = authorDateInfoSection().find('img');
expect(avatarImg.exists()).toBe(true);
2022-08-13 15:12:31 +05:30
expect(avatarImg.attributes('src')).toBe(release.author.avatarUrl);
2019-12-26 22:10:19 +05:30
});
it("renders a link to the author's profile", () => {
2022-10-11 01:57:18 +05:30
const authorLink = authorDateInfoSection().findComponent(GlLink);
2019-12-26 22:10:19 +05:30
expect(authorLink.exists()).toBe(true);
2022-08-13 15:12:31 +05:30
expect(authorLink.attributes('href')).toBe(release.author.webUrl);
2019-12-26 22:10:19 +05:30
});
});
describe('without any commit info', () => {
beforeEach(() => factory({ commit: undefined }));
it('does not render any commit info', () => {
expect(commitInfoSection().exists()).toBe(false);
});
});
describe('without a commit URL', () => {
beforeEach(() => factory({ commitPath: undefined }));
it('renders the commit SHA as plain text (instead of a link)', () => {
expect(commitInfoSectionLink().exists()).toBe(false);
2022-08-13 15:12:31 +05:30
expect(commitInfoSection().text()).toBe(release.commit.shortId);
2019-12-26 22:10:19 +05:30
});
});
describe('without a tag name', () => {
beforeEach(() => factory({ tagName: undefined }));
it('does not render any tag info', () => {
expect(tagInfoSection().exists()).toBe(false);
});
});
describe('without a tag URL', () => {
beforeEach(() => factory({ tagPath: undefined }));
it('renders the tag name as plain text (instead of a link)', () => {
expect(tagInfoSectionLink().exists()).toBe(false);
2022-08-13 15:12:31 +05:30
expect(tagInfoSection().text()).toBe(release.tagName);
2019-12-26 22:10:19 +05:30
});
});
describe('without any author info', () => {
beforeEach(() => factory({ author: undefined }));
it('renders the release date without the author name', () => {
2021-03-11 19:13:27 +05:30
expect(trimText(authorDateInfoSection().text())).toBe(`Created 1 year ago`);
2020-05-24 23:13:21 +05:30
});
});
describe('future release without any author info', () => {
beforeEach(() => {
factory({ author: undefined, releasedAt: mockFutureDate });
});
it('renders the release date without the author name', () => {
expect(trimText(authorDateInfoSection().text())).toBe(`Will be created in 1 month`);
2019-12-26 22:10:19 +05:30
});
});
describe('without a released at date', () => {
beforeEach(() => factory({ releasedAt: undefined }));
it('renders the author name without the release date', () => {
expect(trimText(authorDateInfoSection().text())).toBe(
2020-05-24 23:13:21 +05:30
`Created by ${release.author.username}`,
2019-12-26 22:10:19 +05:30
);
});
});
describe('without a release date or author info', () => {
beforeEach(() => factory({ author: undefined, releasedAt: undefined }));
it('does not render any author or release date info', () => {
expect(authorDateInfoSection().exists()).toBe(false);
});
});
});