diff options
8 files changed, 30 insertions, 8 deletions
diff --git a/app/assets/javascripts/issuables_list/components/issuable.vue b/app/assets/javascripts/issuables_list/components/issuable.vue index b8f8e9a7f42..de71235c547 100644 --- a/app/assets/javascripts/issuables_list/components/issuable.vue +++ b/app/assets/javascripts/issuables_list/components/issuable.vue @@ -272,12 +272,11 @@ export default { :target="linkTarget" data-testid="issuable-title" data-qa-selector="issue_link" - > - {{ issuable.title }} - <gl-icon + >{{ issuable.title + }}<gl-icon v-if="isJiraIssue" name="external-link" - class="gl-vertical-align-text-bottom" + class="gl-vertical-align-text-bottom gl-ml-2" /> </gl-link> </span> diff --git a/app/assets/javascripts/vue_shared/components/filtered_search_bar/filtered_search_bar_root.vue b/app/assets/javascripts/vue_shared/components/filtered_search_bar/filtered_search_bar_root.vue index aa96f33bbc1..5f0c115f70b 100644 --- a/app/assets/javascripts/vue_shared/components/filtered_search_bar/filtered_search_bar_root.vue +++ b/app/assets/javascripts/vue_shared/components/filtered_search_bar/filtered_search_bar_root.vue @@ -83,7 +83,7 @@ export default { return { initialRender: true, recentSearchesPromise: null, - recentSearches: [], + recentSearches: null, filterValue: this.initialFilterValue, selectedSortOption, selectedSortDirection, diff --git a/app/assets/javascripts/vue_shared/components/issue/issue_assignees.vue b/app/assets/javascripts/vue_shared/components/issue/issue_assignees.vue index 90fb17e569a..3006ba83f98 100644 --- a/app/assets/javascripts/vue_shared/components/issue/issue_assignees.vue +++ b/app/assets/javascripts/vue_shared/components/issue/issue_assignees.vue @@ -92,7 +92,7 @@ export default { > <span class="js-assignee-tooltip"> <span class="bold d-block">{{ __('Assignee') }}</span> {{ assignee.name }} - <span class="text-white-50">@{{ assignee.username }}</span> + <span v-if="assignee.username" class="text-white-50">@{{ assignee.username }}</span> </span> </user-avatar-link> <span diff --git a/app/services/projects/cleanup_service.rb b/app/services/projects/cleanup_service.rb index 04624b96bf0..4ced9feff00 100644 --- a/app/services/projects/cleanup_service.rb +++ b/app/services/projects/cleanup_service.rb @@ -22,7 +22,7 @@ module Projects apply_bfg_object_map! # Remove older objects that are no longer referenced - GitGarbageCollectWorker.new.perform(project.id, :gc) + GitGarbageCollectWorker.new.perform(project.id, :gc, "project_cleanup:gc:#{project.id}") # The cache may now be inaccurate, and holding onto it could prevent # bugs assuming the presence of some object from manifesting for some diff --git a/app/workers/git_garbage_collect_worker.rb b/app/workers/git_garbage_collect_worker.rb index 459fc5992d8..c3f5e6271d3 100644 --- a/app/workers/git_garbage_collect_worker.rb +++ b/app/workers/git_garbage_collect_worker.rb @@ -11,6 +11,7 @@ class GitGarbageCollectWorker # rubocop:disable Scalability/IdempotentWorker LEASE_TIMEOUT = 86400 def perform(project_id, task = :gc, lease_key = nil, lease_uuid = nil) + lease_key ||= "git_gc:#{task}:#{project_id}" project = Project.find(project_id) active_uuid = get_lease_uuid(lease_key) diff --git a/spec/frontend/vue_shared/components/issue/issue_assignees_spec.js b/spec/frontend/vue_shared/components/issue/issue_assignees_spec.js index 548d4476c0f..822b78465ba 100644 --- a/spec/frontend/vue_shared/components/issue/issue_assignees_spec.js +++ b/spec/frontend/vue_shared/components/issue/issue_assignees_spec.js @@ -21,6 +21,11 @@ describe('IssueAssigneesComponent', () => { vm = wrapper.vm; }; + afterEach(() => { + wrapper.destroy(); + wrapper = null; + }); + const findTooltipText = () => wrapper.find('.js-assignee-tooltip').text(); const findAvatars = () => wrapper.findAll(UserAvatarLink); const findOverflowCounter = () => wrapper.find('.avatar-counter'); @@ -123,6 +128,22 @@ describe('IssueAssigneesComponent', () => { it('renders assignee @username', () => { expect(findTooltipText()).toContain('@monserrate.gleichner'); }); + + it('does not render `@` when username not available', () => { + const userName = 'User without username'; + factory({ + assignees: [ + { + name: userName, + }, + ], + }); + + const tooltipText = findTooltipText(); + + expect(tooltipText).toContain(userName); + expect(tooltipText).not.toContain('@'); + }); }); }); }); diff --git a/spec/services/projects/cleanup_service_spec.rb b/spec/services/projects/cleanup_service_spec.rb index 528f31456a9..7c28b729e84 100644 --- a/spec/services/projects/cleanup_service_spec.rb +++ b/spec/services/projects/cleanup_service_spec.rb @@ -19,7 +19,7 @@ RSpec.describe Projects::CleanupService do it 'runs garbage collection on the repository' do expect_next_instance_of(GitGarbageCollectWorker) do |worker| - expect(worker).to receive(:perform) + expect(worker).to receive(:perform).with(project.id, :gc, "project_cleanup:gc:#{project.id}") end service.execute diff --git a/spec/workers/git_garbage_collect_worker_spec.rb b/spec/workers/git_garbage_collect_worker_spec.rb index df7acd2040f..39ed862af82 100644 --- a/spec/workers/git_garbage_collect_worker_spec.rb +++ b/spec/workers/git_garbage_collect_worker_spec.rb @@ -95,6 +95,7 @@ RSpec.describe GitGarbageCollectWorker do it_behaves_like 'it updates the project statistics' it "flushes ref caches when the task if 'gc'" do + expect(subject).to receive(:get_lease_uuid).with("git_gc:#{task}:#{project.id}").and_return(false) expect_any_instance_of(Repository).to receive(:after_create_branch).and_call_original expect_any_instance_of(Repository).to receive(:branch_names).and_call_original expect_any_instance_of(Repository).to receive(:has_visible_content?).and_call_original |