Commit a44e3004 authored by GitLab Bot's avatar GitLab Bot

Automatic merge of gitlab-org/gitlab-ce master

parents 1e827aca 7b2c2573
...@@ -39,5 +39,6 @@ If applicable, any groups/projects that are happy to have this feature turned on ...@@ -39,5 +39,6 @@ If applicable, any groups/projects that are happy to have this feature turned on
- [ ] Cross post chatops slack command to `#support_gitlab-com` and in your team channel - [ ] Cross post chatops slack command to `#support_gitlab-com` and in your team channel
- [ ] Announce on the issue that the flag has been enabled - [ ] Announce on the issue that the flag has been enabled
- [ ] Remove feature flag and add changelog entry - [ ] Remove feature flag and add changelog entry
- [ ] After the flag removal is deployed, [clean up the feature flag](https://docs.gitlab.com/ee/development/feature_flags/controls.html#cleaning-up) by running chatops command in `#production` channel
/label ~"feature flag" /label ~"feature flag"
...@@ -87,7 +87,6 @@ export default { ...@@ -87,7 +87,6 @@ export default {
:file="file" :file="file"
:show-tooltip="true" :show-tooltip="true"
:show-staged-icon="true" :show-staged-icon="true"
:force-modified-icon="true"
/> />
<new-dropdown <new-dropdown
:type="file.type" :type="file.type"
......
...@@ -26,11 +26,6 @@ export default { ...@@ -26,11 +26,6 @@ export default {
required: false, required: false,
default: false, default: false,
}, },
forceModifiedIcon: {
type: Boolean,
required: false,
default: false,
},
size: { size: {
type: Number, type: Number,
required: false, required: false,
...@@ -48,8 +43,6 @@ export default { ...@@ -48,8 +43,6 @@ export default {
// eslint-disable-next-line @gitlab/i18n/no-non-i18n-strings // eslint-disable-next-line @gitlab/i18n/no-non-i18n-strings
const suffix = !this.file.changed && this.file.staged && !this.showStagedIcon ? '-solid' : ''; const suffix = !this.file.changed && this.file.staged && !this.showStagedIcon ? '-solid' : '';
if (this.forceModifiedIcon) return `file-modified${suffix}`;
return `${getCommitIconMap(this.file).icon}${suffix}`; return `${getCommitIconMap(this.file).icon}${suffix}`;
}, },
changedIconClass() { changedIconClass() {
...@@ -88,7 +81,7 @@ export default { ...@@ -88,7 +81,7 @@ export default {
v-gl-tooltip.right v-gl-tooltip.right
:title="tooltipTitle" :title="tooltipTitle"
:class="{ 'ml-auto': isCentered }" :class="{ 'ml-auto': isCentered }"
class="file-changed-icon" class="file-changed-icon d-inline-block"
> >
<icon v-if="showIcon" :name="changedIcon" :size="size" :css-classes="changedIconClass" /> <icon v-if="showIcon" :name="changedIcon" :size="size" :css-classes="changedIconClass" />
</span> </span>
......
---
title: Fix IDE new files icon in tree
merge_request: 31560
author:
type: fixed
import { shallowMount } from '@vue/test-utils';
import ChangedFileIcon from '~/vue_shared/components/changed_file_icon.vue';
import Icon from '~/vue_shared/components/icon.vue';
const changedFile = () => ({ changed: true });
const stagedFile = () => ({ changed: false, staged: true });
const changedAndStagedFile = () => ({ changed: true, staged: true });
const newFile = () => ({ changed: true, tempFile: true });
const unchangedFile = () => ({ changed: false, tempFile: false, staged: false, deleted: false });
describe('Changed file icon', () => {
let wrapper;
const factory = (props = {}) => {
wrapper = shallowMount(ChangedFileIcon, {
propsData: {
file: changedFile(),
showTooltip: true,
...props,
},
sync: false,
});
};
afterEach(() => {
wrapper.destroy();
});
const findIcon = () => wrapper.find(Icon);
const findIconName = () => findIcon().props('name');
const findIconClasses = () =>
findIcon()
.props('cssClasses')
.split(' ');
const findTooltipText = () => wrapper.attributes('data-original-title');
it('with isCentered true, adds center class', () => {
factory({
isCentered: true,
});
expect(wrapper.classes('ml-auto')).toBe(true);
});
it('with isCentered false, does not center', () => {
factory({
isCentered: false,
});
expect(wrapper.classes('ml-auto')).toBe(false);
});
it('with showTooltip false, does not show tooltip', () => {
factory({
showTooltip: false,
});
expect(findTooltipText()).toBeFalsy();
});
describe.each`
file | iconName | tooltipText | desc
${changedFile()} | ${'file-modified'} | ${'Unstaged modification'} | ${'with file changed'}
${stagedFile()} | ${'file-modified-solid'} | ${'Staged modification'} | ${'with file staged'}
${changedAndStagedFile()} | ${'file-modified'} | ${'Unstaged and staged modification'} | ${'with file changed and staged'}
${newFile()} | ${'file-addition'} | ${'Unstaged addition'} | ${'with file new'}
`('$desc', ({ file, iconName, tooltipText }) => {
beforeEach(() => {
factory({ file });
});
it('renders icon', () => {
expect(findIconName()).toBe(iconName);
expect(findIconClasses()).toContain(iconName);
});
it('renders tooltip text', () => {
expect(findTooltipText()).toBe(tooltipText);
});
});
describe('with file unchanged', () => {
beforeEach(() => {
factory({
file: unchangedFile(),
});
});
it('does not show icon', () => {
expect(findIcon().exists()).toBe(false);
});
it('does not have tooltip text', () => {
expect(findTooltipText()).toBe('');
});
});
it('with size set, sets icon size', () => {
const size = 8;
factory({
file: changedFile(),
size,
});
expect(findIcon().props('size')).toBe(size);
});
// NOTE: It looks like 'showStagedIcon' behavior is backwards to what the name suggests
// https://gitlab.com/gitlab-org/gitlab-ce/issues/66071
it.each`
showStagedIcon | iconName | desc
${false} | ${'file-modified-solid'} | ${'with showStagedIcon false, renders staged icon'}
${true} | ${'file-modified'} | ${'with showStagedIcon true, renders regular icon'}
`('$desc', ({ showStagedIcon, iconName }) => {
factory({
file: stagedFile(),
showStagedIcon,
});
expect(findIconName()).toEqual(iconName);
});
});
import Vue from 'vue';
import changedFileIcon from '~/vue_shared/components/changed_file_icon.vue';
import createComponent from 'spec/helpers/vue_mount_component_helper';
describe('Changed file icon', () => {
let vm;
function factory(props = {}) {
const component = Vue.extend(changedFileIcon);
vm = createComponent(component, {
...props,
file: {
tempFile: false,
changed: true,
},
});
}
afterEach(() => {
vm.$destroy();
});
it('centers icon', () => {
factory({
isCentered: true,
});
expect(vm.$el.classList).toContain('ml-auto');
});
describe('changedIcon', () => {
it('equals file-modified when not a temp file and has changes', () => {
factory();
expect(vm.changedIcon).toBe('file-modified');
});
it('equals file-addition when a temp file', () => {
factory();
vm.file.tempFile = true;
expect(vm.changedIcon).toBe('file-addition');
});
});
describe('changedIconClass', () => {
it('includes file-modified when not a temp file', () => {
factory();
expect(vm.changedIconClass).toContain('file-modified');
});
it('includes file-addition when a temp file', () => {
factory();
vm.file.tempFile = true;
expect(vm.changedIconClass).toContain('file-addition');
});
});
});
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment