diff options
Diffstat (limited to 'spec/frontend/repository/components/last_commit_spec.js')
-rw-r--r-- | spec/frontend/repository/components/last_commit_spec.js | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/spec/frontend/repository/components/last_commit_spec.js b/spec/frontend/repository/components/last_commit_spec.js new file mode 100644 index 00000000000..972690a60f6 --- /dev/null +++ b/spec/frontend/repository/components/last_commit_spec.js @@ -0,0 +1,103 @@ +import { shallowMount } from '@vue/test-utils'; +import LastCommit from '~/repository/components/last_commit.vue'; +import UserAvatarLink from '~/vue_shared/components/user_avatar/user_avatar_link.vue'; + +let vm; + +function createCommitData(data = {}) { + return { + id: '123456789', + title: 'Commit title', + message: 'Commit message', + webUrl: 'https://test.com/commit/123', + authoredDate: '2019-01-01', + author: { + name: 'Test', + avatarUrl: 'https://test.com', + webUrl: 'https://test.com/test', + }, + pipeline: { + detailedStatus: { + detailsPath: 'https://test.com/pipeline', + icon: 'failed', + tooltip: 'failed', + text: 'failed', + group: {}, + }, + }, + ...data, + }; +} + +function factory(commit = createCommitData(), loading = false) { + vm = shallowMount(LastCommit, { + mocks: { + $apollo: { + queries: { + commit: { + loading: true, + }, + }, + }, + }, + }); + vm.setData({ commit }); + vm.vm.$apollo.queries.commit.loading = loading; +} + +describe('Repository last commit component', () => { + afterEach(() => { + vm.destroy(); + }); + + it.each` + loading | label + ${true} | ${'hides'} + ${false} | ${'shows'} + `('$label when $loading is true', ({ loading }) => { + factory(createCommitData(), loading); + + expect(vm.isEmpty()).toBe(loading); + }); + + it('renders commit widget', () => { + factory(); + + expect(vm.element).toMatchSnapshot(); + }); + + it('renders short commit ID', () => { + factory(); + + expect(vm.find('.label-monospace').text()).toEqual('12345678'); + }); + + it('hides pipeline components when pipeline does not exist', () => { + factory(createCommitData({ pipeline: null })); + + expect(vm.find('.js-commit-pipeline').exists()).toBe(false); + }); + + it('hides author component when author does not exist', () => { + factory(createCommitData({ author: null })); + + expect(vm.find('.js-user-link').exists()).toBe(false); + expect(vm.find(UserAvatarLink).exists()).toBe(false); + }); + + it('does not render description expander when description is null', () => { + factory(createCommitData({ description: null })); + + expect(vm.find('.text-expander').exists()).toBe(false); + expect(vm.find('.commit-row-description').exists()).toBe(false); + }); + + it('expands commit description when clicking expander', () => { + factory(createCommitData({ description: 'Test description' })); + + vm.find('.text-expander').vm.$emit('click'); + + expect(vm.find('.commit-row-description').isVisible()).toBe(true); + expect(vm.find('.text-expander').classes('open')).toBe(true); + }); +}); |