Commit 9cdb3ae6 authored by Filipa Lacerda's avatar Filipa Lacerda

Merge branch 'ce-to-ee-2018-06-12' into 'master'

CE upstream - 2018-06-12 00:21 UTC

Closes #6211

See merge request gitlab-org/gitlab-ee!6086
parents e14a12cd bebb2523
...@@ -89,6 +89,10 @@ a { ...@@ -89,6 +89,10 @@ a {
color: $gl-link-color; color: $gl-link-color;
} }
hr {
overflow: hidden;
}
.form-group.row .col-form-label { .form-group.row .col-form-label {
// Bootstrap 4 aligns labels to the left // Bootstrap 4 aligns labels to the left
// for horizontal forms // for horizontal forms
...@@ -209,6 +213,10 @@ table { ...@@ -209,6 +213,10 @@ table {
border-bottom: 1px solid $well-inner-border; border-bottom: 1px solid $well-inner-border;
} }
} }
.badge.badge-gray {
background-color: $well-expand-item;
}
} }
.card { .card {
...@@ -258,9 +266,17 @@ pre code { ...@@ -258,9 +266,17 @@ pre code {
.alert-danger { .alert-danger {
background-color: $red-500; background-color: $red-500;
border-color: $red-500; border-color: $red-500;
}
.alert-warning,
.alert-danger,
.flash-notice {
border-radius: 0;
color: $white-light; color: $white-light;
h4 { h4,
a,
.alert-link {
color: $white-light; color: $white-light;
} }
} }
...@@ -268,3 +284,11 @@ pre code { ...@@ -268,3 +284,11 @@ pre code {
input[type=color].form-control { input[type=color].form-control {
height: $input-height; height: $input-height;
} }
.toggle-sidebar-button {
.collapse-text,
.icon-angle-double-left,
.icon-angle-double-right {
color: $gl-text-color-secondary;
}
}
...@@ -309,10 +309,6 @@ img.emoji { ...@@ -309,10 +309,6 @@ img.emoji {
margin-bottom: 10px; margin-bottom: 10px;
} }
.available-groups form {
margin: 5px 0;
}
.side-filters { .side-filters {
fieldset { fieldset {
margin-bottom: 15px; margin-bottom: 15px;
......
...@@ -170,7 +170,7 @@ label { ...@@ -170,7 +170,7 @@ label {
} }
.form-control::-webkit-input-placeholder { .form-control::-webkit-input-placeholder {
color: $gl-text-color-secondary; color: $placeholder-text-color;
} }
.input-group { .input-group {
......
...@@ -459,10 +459,6 @@ ...@@ -459,10 +459,6 @@
} }
} }
.with-performance-bar header.navbar-gitlab {
top: $performance-bar-height;
}
.navbar-nav { .navbar-nav {
li { li {
.badge.badge-pill { .badge.badge-pill {
......
...@@ -4,3 +4,11 @@ ...@@ -4,3 +4,11 @@
text-decoration: none; text-decoration: none;
} }
} }
.page-item {
&.active {
.page-link {
z-index: 3;
}
}
}
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
padding: 0; padding: 0;
&::before { &::before {
@include notes-media('max', map-get($grid-breakpoints, xs)) { @include notes-media('max', map-get($grid-breakpoints, sm)) {
background: none; background: none;
} }
} }
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
.timeline-entry-inner { .timeline-entry-inner {
position: relative; position: relative;
@include notes-media('max', map-get($grid-breakpoints, xs)) { @include notes-media('max', map-get($grid-breakpoints, sm)) {
.timeline-icon { .timeline-icon {
display: none; display: none;
} }
......
...@@ -100,7 +100,7 @@ $theme-gray-200: #dfdfdf; ...@@ -100,7 +100,7 @@ $theme-gray-200: #dfdfdf;
$theme-gray-300: #cccccc; $theme-gray-300: #cccccc;
$theme-gray-400: #bababa; $theme-gray-400: #bababa;
$theme-gray-500: #a7a7a7; $theme-gray-500: #a7a7a7;
$theme-gray-600: #949494; $theme-gray-600: #919191;
$theme-gray-700: #707070; $theme-gray-700: #707070;
$theme-gray-800: #4f4f4f; $theme-gray-800: #4f4f4f;
$theme-gray-900: #2e2e2e; $theme-gray-900: #2e2e2e;
...@@ -192,7 +192,7 @@ $gl-font-weight-normal: 400; ...@@ -192,7 +192,7 @@ $gl-font-weight-normal: 400;
$gl-font-weight-bold: 600; $gl-font-weight-bold: 600;
$gl-text-color: #2e2e2e; $gl-text-color: #2e2e2e;
$gl-text-color-secondary: #707070; $gl-text-color-secondary: #707070;
$gl-text-color-tertiary: #949494; $gl-text-color-tertiary: #919191;
$gl-text-color-quaternary: #d6d6d6; $gl-text-color-quaternary: #d6d6d6;
$gl-text-color-inverted: rgba(255, 255, 255, 1); $gl-text-color-inverted: rgba(255, 255, 255, 1);
$gl-text-color-secondary-inverted: rgba(255, 255, 255, 0.85); $gl-text-color-secondary-inverted: rgba(255, 255, 255, 0.85);
...@@ -443,6 +443,22 @@ $gl-btn-horz-padding: 12px; ...@@ -443,6 +443,22 @@ $gl-btn-horz-padding: 12px;
$badge-bg: rgba(0, 0, 0, 0.07); $badge-bg: rgba(0, 0, 0, 0.07);
$badge-color: $gl-text-color-secondary; $badge-color: $gl-text-color-secondary;
/*
* Pagination
*/
$pagination-padding-y: 6px;
$pagination-padding-x: 16px;
$pagination-line-height: 20px;
$pagination-border-color: $border-color;
$pagination-active-bg: $blue-600;
$pagination-active-border-color: $blue-600;
$pagination-hover-bg: $blue-50;
$pagination-hover-border-color: $border-color;
$pagination-hover-color: $gl-text-color;
$pagination-disabled-color: #cdcdcd;
$pagination-disabled-bg: $gray-light;
$pagination-disabled-border-color: $border-color;
/* /*
* Status icons * Status icons
*/ */
......
...@@ -1634,6 +1634,7 @@ class Project < ActiveRecord::Base ...@@ -1634,6 +1634,7 @@ class Project < ActiveRecord::Base
def after_import def after_import
repository.after_import repository.after_import
wiki.repository.after_import
import_finish import_finish
remove_import_jid remove_import_jid
update_project_counter_caches update_project_counter_caches
......
...@@ -6,10 +6,10 @@ ...@@ -6,10 +6,10 @@
- if @gitaly_servers.any? - if @gitaly_servers.any?
.table-holder .table-holder
%table.table.responsive-table %table.table.responsive-table
%thead.d-none.d-sm-none.d-md-block %thead
%tr %tr
%th= _("Storage") %th= _("Storage")
%th= n_("Gitaly|Address") %th= s_("Gitaly|Address")
%th= _("Server version") %th= _("Server version")
%th= _("Git version") %th= _("Git version")
%th= _("Up to date") %th= _("Up to date")
......
...@@ -37,6 +37,6 @@ ...@@ -37,6 +37,6 @@
.form-group .form-group
= file_field_tag :file, class: '' = file_field_tag :file, class: ''
.row .row
.form-actions .form-actions.col-sm-12
= submit_tag 'Import project', class: 'btn btn-create' = submit_tag 'Import project', class: 'btn btn-create'
= link_to 'Cancel', new_project_path, class: 'btn btn-cancel' = link_to 'Cancel', new_project_path, class: 'btn btn-cancel'
...@@ -20,18 +20,18 @@ ...@@ -20,18 +20,18 @@
%span{ "aria-hidden": true } &times; %span{ "aria-hidden": true } &times;
.modal-body .modal-body
- if description - if description
%p.append-bottom-20= description %p= description
= form_tag [type.underscore, @project.namespace.becomes(Namespace), @project, commit], method: :post, remote: false, class: "js-#{type}-form js-requires-input" do = form_tag [type.underscore, @project.namespace.becomes(Namespace), @project, commit], method: :post, remote: false, class: "js-#{type}-form js-requires-input" do
.form-group.row.branch .form-group.branch
= label_tag 'start_branch', branch_label, class: 'col-form-label col-sm-2' = label_tag 'start_branch', branch_label, class: 'label-light'
.col-sm-10
= hidden_field_tag :start_branch, @project.default_branch, id: 'start_branch'
= dropdown_tag(@project.default_branch, options: { title: s_("BranchSwitcherTitle|Switch branch"), filter: true, placeholder: s_("BranchSwitcherPlaceholder|Search branches"), toggle_class: 'js-project-refs-dropdown dynamic', dropdown_class: 'dropdown-menu-selectable', data: { field_name: "start_branch", selected: @project.default_branch, start_branch: @project.default_branch, refs_url: project_branches_path(@project), submit_form_on_click: false } })
- if can?(current_user, :push_code, @project) = hidden_field_tag :start_branch, @project.default_branch, id: 'start_branch'
= render 'shared/new_merge_request_checkbox' = dropdown_tag(@project.default_branch, options: { title: s_("BranchSwitcherTitle|Switch branch"), filter: true, placeholder: s_("BranchSwitcherPlaceholder|Search branches"), toggle_class: 'js-project-refs-dropdown dynamic', dropdown_class: 'dropdown-menu-selectable', data: { field_name: "start_branch", selected: @project.default_branch, start_branch: @project.default_branch, refs_url: project_branches_path(@project), submit_form_on_click: false } })
- else
= hidden_field_tag 'create_merge_request', 1, id: nil - if can?(current_user, :push_code, @project)
= render 'shared/new_merge_request_checkbox'
- else
= hidden_field_tag 'create_merge_request', 1, id: nil
.form-actions .form-actions
= submit_tag label, class: 'btn btn-create' = submit_tag label, class: 'btn btn-create'
= link_to _("Cancel"), '#', class: "btn btn-cancel", "data-dismiss" => "modal" = link_to _("Cancel"), '#', class: "btn btn-cancel", "data-dismiss" => "modal"
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
- if @branches.any? || @tags.any? || @tags_limit_exceeded - if @branches.any? || @tags.any? || @tags_limit_exceeded
%span %span
= link_to "#", class: "js-details-expand label label-gray ref-name" do = link_to "#", class: "js-details-expand badge badge-gray ref-name" do
= sprite_icon('ellipsis_h', size: 12, css_class: 'vertical-align-middle') = sprite_icon('ellipsis_h', size: 12, css_class: 'vertical-align-middle')
%span.js-details-content.hide %span.js-details-content.hide
= commit_branches_links(@project, @branches) = commit_branches_links(@project, @branches)
......
.form-check .form-check.prepend-top-8
- nonce = SecureRandom.hex - nonce = SecureRandom.hex
= check_box_tag 'create_merge_request', 1, true, class: 'js-create-merge-request form-check-input', id: "create_merge_request-#{nonce}" = check_box_tag 'create_merge_request', 1, true, class: 'js-create-merge-request form-check-input', id: "create_merge_request-#{nonce}"
= label_tag "create_merge_request-#{nonce}", class: 'form-check-label' do = label_tag "create_merge_request-#{nonce}", class: 'form-check-label' do
......
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
.selectbox.hide-collapsed .selectbox.hide-collapsed
= f.hidden_field 'milestone_id', value: issuable.milestone_id, id: nil = f.hidden_field 'milestone_id', value: issuable.milestone_id, id: nil
= dropdown_tag('Milestone', options: { title: _('Assign milestone'), toggle_class: 'js-milestone-select js-extra-options', filter: true, dropdown_class: 'dropdown-menu-selectable', placeholder: _('Search milestones'), data: { show_no: true, field_name: "#{issuable.to_ability_name}[milestone_id]", project_id: @project.id, issuable_id: issuable.id, milestones: project_milestones_path(@project, :json), ability_name: issuable.to_ability_name, issue_update: issuable_json_path(issuable), use_id: true, default_no: true, selected: (issuable.milestone.name if issuable.milestone), null_default: true }}) = dropdown_tag('Milestone', options: { title: _('Assign milestone'), toggle_class: 'js-milestone-select js-extra-options', filter: true, dropdown_class: 'dropdown-menu-selectable', placeholder: _('Search milestones'), data: { show_no: true, field_name: "#{issuable.to_ability_name}[milestone_id]", project_id: @project.id, issuable_id: issuable.id, milestones: project_milestones_path(@project, :json), ability_name: issuable.to_ability_name, issue_update: issuable_json_path(issuable), use_id: true, default_no: true, selected: (issuable.milestone.name if issuable.milestone), null_default: true, display: 'static' }})
- if issuable.has_attribute?(:time_estimate) - if issuable.has_attribute?(:time_estimate)
#issuable-time-tracker.block #issuable-time-tracker.block
// Fallback while content is loading // Fallback while content is loading
...@@ -77,7 +77,7 @@ ...@@ -77,7 +77,7 @@
.selectbox.hide-collapsed .selectbox.hide-collapsed
= f.hidden_field :due_date, value: issuable.due_date.try(:strftime, 'yy-mm-dd') = f.hidden_field :due_date, value: issuable.due_date.try(:strftime, 'yy-mm-dd')
.dropdown .dropdown
%button.dropdown-menu-toggle.js-due-date-select{ type: 'button', data: { toggle: 'dropdown', field_name: "#{issuable.to_ability_name}[due_date]", ability_name: issuable.to_ability_name, issue_update: issuable_json_path(issuable) } } %button.dropdown-menu-toggle.js-due-date-select{ type: 'button', data: { toggle: 'dropdown', field_name: "#{issuable.to_ability_name}[due_date]", ability_name: issuable.to_ability_name, issue_update: issuable_json_path(issuable), display: 'static' } }
%span.dropdown-toggle-text %span.dropdown-toggle-text
= _('Due date') = _('Due date')
= icon('chevron-down', 'aria-hidden': 'true') = icon('chevron-down', 'aria-hidden': 'true')
...@@ -109,7 +109,7 @@ ...@@ -109,7 +109,7 @@
- selected_labels.each do |label| - selected_labels.each do |label|
= hidden_field_tag "#{issuable.to_ability_name}[label_names][]", label.id, id: nil = hidden_field_tag "#{issuable.to_ability_name}[label_names][]", label.id, id: nil
.dropdown .dropdown
%button.dropdown-menu-toggle.js-label-select.js-multiselect.js-label-sidebar-dropdown{ type: "button", data: {toggle: "dropdown", default_label: "Labels", field_name: "#{issuable.to_ability_name}[label_names][]", ability_name: issuable.to_ability_name, show_no: "true", show_any: "true", namespace_path: @project.try(:namespace).try(:full_path), project_path: @project.try(:path), issue_update: issuable_json_path(issuable), labels: (labels_filter_path(false) if @project) } } %button.dropdown-menu-toggle.js-label-select.js-multiselect.js-label-sidebar-dropdown{ type: "button", data: {toggle: "dropdown", default_label: "Labels", field_name: "#{issuable.to_ability_name}[label_names][]", ability_name: issuable.to_ability_name, show_no: "true", show_any: "true", namespace_path: @project.try(:namespace).try(:full_path), project_path: @project.try(:path), issue_update: issuable_json_path(issuable), labels: (labels_filter_path(false) if @project), display: 'static' } }
%span.dropdown-toggle-text{ class: ("is-default" if selected_labels.empty?) } %span.dropdown-toggle-text{ class: ("is-default" if selected_labels.empty?) }
= multi_label_name(selected_labels, "Labels") = multi_label_name(selected_labels, "Labels")
= icon('chevron-down', 'aria-hidden': 'true') = icon('chevron-down', 'aria-hidden': 'true')
......
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
- issuable.assignees.each do |assignee| - issuable.assignees.each do |assignee|
= hidden_field_tag "#{issuable.to_ability_name}[assignee_ids][]", assignee.id, id: nil, data: { avatar_url: assignee.avatar_url, name: assignee.name, username: assignee.username } = hidden_field_tag "#{issuable.to_ability_name}[assignee_ids][]", assignee.id, id: nil, data: { avatar_url: assignee.avatar_url, name: assignee.name, username: assignee.username }
- options = { toggle_class: 'js-user-search js-author-search', title: _('Assign to'), filter: true, dropdown_class: 'dropdown-menu-user dropdown-menu-selectable dropdown-menu-author', placeholder: _('Search users'), data: { first_user: current_user&.username, current_user: true, project_id: @project&.id, author_id: issuable.author_id, field_name: "#{issuable.to_ability_name}[assignee_ids][]", issue_update: issuable_json_path(issuable), ability_name: issuable.to_ability_name, null_user: true } } - options = { toggle_class: 'js-user-search js-author-search', title: _('Assign to'), filter: true, dropdown_class: 'dropdown-menu-user dropdown-menu-selectable dropdown-menu-author', placeholder: _('Search users'), data: { first_user: current_user&.username, current_user: true, project_id: @project&.id, author_id: issuable.author_id, field_name: "#{issuable.to_ability_name}[assignee_ids][]", issue_update: issuable_json_path(issuable), ability_name: issuable.to_ability_name, null_user: true, display: 'static' } }
- title = _('Select assignee') - title = _('Select assignee')
- if issuable.is_a?(Issue) - if issuable.is_a?(Issue)
......
...@@ -7,11 +7,11 @@ ...@@ -7,11 +7,11 @@
%hr %hr
.form-group .form-group.row
.col-form-label %label.col-form-label.col-sm-2
= _('Contribution') = _('Contribution')
.col-sm-10 .col-sm-10
.form-check .form-check.prepend-top-5
= form.check_box :allow_collaboration, disabled: !issuable.can_allow_collaboration?(current_user), class: 'form-check-input' = form.check_box :allow_collaboration, disabled: !issuable.can_allow_collaboration?(current_user), class: 'form-check-input'
= form.label :allow_collaboration, class: 'form-check-label' do = form.label :allow_collaboration, class: 'form-check-label' do
= _('Allow commits from members who can merge to the target branch.') = _('Allow commits from members who can merge to the target branch.')
......
---
title: Make avatars/icons hidden on mobile
merge_request: 19585
author: Takuya Noguchi
type: fixed
---
title: Expire Wiki content cache after importing a repository
merge_request:
author:
type: fixed
...@@ -42,8 +42,6 @@ module Gitlab ...@@ -42,8 +42,6 @@ module Gitlab
klass.new(project, client, parallel: false).execute klass.new(project, client, parallel: false).execute
end end
project.repository.after_import
true true
end end
end end
......
...@@ -9,7 +9,10 @@ class GithubImport ...@@ -9,7 +9,10 @@ class GithubImport
def initialize(token, gitlab_username, project_path, extras) def initialize(token, gitlab_username, project_path, extras)
@options = { token: token } @options = { token: token }
@project_path = project_path @project_path = project_path
@current_user = User.find_by_username(gitlab_username) @current_user = User.find_by(username: gitlab_username)
raise "GitLab user #{gitlab_username} not found. Please specify a valid username." unless @current_user
@github_repo = extras.empty? ? nil : extras.first @github_repo = extras.empty? ? nil : extras.first
end end
...@@ -50,7 +53,7 @@ class GithubImport ...@@ -50,7 +53,7 @@ class GithubImport
end end
if import_success if import_success
@project.import_finish @project.after_import
puts "Import finished. Timings: #{timings}".color(:green) puts "Import finished. Timings: #{timings}".color(:green)
else else
puts "Import was not successful. Errors were as follows:" puts "Import was not successful. Errors were as follows:"
......
...@@ -2814,6 +2814,9 @@ msgstr "" ...@@ -2814,6 +2814,9 @@ msgstr ""
msgid "Gitaly" msgid "Gitaly"
msgstr "" msgstr ""
msgid "Gitaly|Address"
msgstr ""
msgid "Gitaly Servers" msgid "Gitaly Servers"
msgstr "" msgstr ""
......
...@@ -156,12 +156,18 @@ describe Boards::ListsController do ...@@ -156,12 +156,18 @@ describe Boards::ListsController do
def move(user:, board:, list:, position:) def move(user:, board:, list:, position:)
sign_in(user) sign_in(user)
patch :update, namespace_id: project.namespace.to_param, params = { namespace_id: project.namespace.to_param,
project_id: project, project_id: project,
board_id: board.to_param, board_id: board.to_param,
id: list.to_param, id: list.to_param,
list: { position: position }, list: { position: position },
format: :json format: :json }
if Gitlab.rails5?
patch :update, params: params, as: :json
else
patch :update, params
end
end end
end end
......
...@@ -30,7 +30,6 @@ describe Gitlab::GithubImport::SequentialImporter do ...@@ -30,7 +30,6 @@ describe Gitlab::GithubImport::SequentialImporter do
expect(instance).to receive(:execute) expect(instance).to receive(:execute)
end end
expect(repository).to receive(:after_import)
expect(importer.execute).to eq(true) expect(importer.execute).to eq(true)
end end
end end
......
...@@ -1884,7 +1884,11 @@ describe Project do ...@@ -1884,7 +1884,11 @@ describe Project do
.with(project.repository_storage, project.disk_path, project.import_url) .with(project.repository_storage, project.disk_path, project.import_url)
.and_return(true) .and_return(true)
expect_any_instance_of(Repository).to receive(:after_import) # Works around https://github.com/rspec/rspec-mocks/issues/910
allow(described_class).to receive(:find).with(project.id).and_return(project)
expect(project.repository).to receive(:after_import)
.and_call_original
expect(project.wiki.repository).to receive(:after_import)
.and_call_original .and_call_original
end end
...@@ -3761,10 +3765,11 @@ describe Project do ...@@ -3761,10 +3765,11 @@ describe Project do
end end
describe '#after_import' do describe '#after_import' do
let(:project) { build(:project) } let(:project) { create(:project) }
it 'runs the correct hooks' do it 'runs the correct hooks' do
expect(project.repository).to receive(:after_import) expect(project.repository).to receive(:after_import)
expect(project.wiki.repository).to receive(:after_import)
expect(project).to receive(:import_finish) expect(project).to receive(:import_finish)
expect(project).to receive(:update_project_counter_caches) expect(project).to receive(:update_project_counter_caches)
expect(project).to receive(:remove_import_jid) expect(project).to receive(:remove_import_jid)
......
...@@ -55,10 +55,15 @@ describe RepositoryForkWorker do ...@@ -55,10 +55,15 @@ describe RepositoryForkWorker do
it 'flushes various caches' do it 'flushes various caches' do
expect_fork_repository.and_return(true) expect_fork_repository.and_return(true)
expect_any_instance_of(Repository).to receive(:expire_emptiness_caches) # Works around https://github.com/rspec/rspec-mocks/issues/910
expect(Project).to receive(:find).with(fork_project.id).and_return(fork_project)
expect(fork_project.repository).to receive(:expire_emptiness_caches)
.and_call_original .and_call_original
expect(fork_project.repository).to receive(:expire_exists_cache)
expect_any_instance_of(Repository).to receive(:expire_exists_cache) .and_call_original
expect(fork_project.wiki.repository).to receive(:expire_emptiness_caches)
.and_call_original
expect(fork_project.wiki.repository).to receive(:expire_exists_cache)
.and_call_original .and_call_original
perform! perform!
......
...@@ -22,8 +22,11 @@ describe RepositoryImportWorker do ...@@ -22,8 +22,11 @@ describe RepositoryImportWorker do
expect_any_instance_of(Projects::ImportService).to receive(:execute) expect_any_instance_of(Projects::ImportService).to receive(:execute)
.and_return({ status: :ok }) .and_return({ status: :ok })
expect_any_instance_of(Repository).to receive(:expire_emptiness_caches) # Works around https://github.com/rspec/rspec-mocks/issues/910
expect_any_instance_of(Project).to receive(:import_finish) expect(Project).to receive(:find).with(project.id).and_return(project)
expect(project.repository).to receive(:expire_emptiness_caches)
expect(project.wiki.repository).to receive(:expire_emptiness_caches)
expect(project).to receive(:import_finish)
subject.perform(project.id) subject.perform(project.id)
end end
...@@ -34,9 +37,11 @@ describe RepositoryImportWorker do ...@@ -34,9 +37,11 @@ describe RepositoryImportWorker do
expect_any_instance_of(Projects::ImportService).to receive(:execute) expect_any_instance_of(Projects::ImportService).to receive(:execute)
.and_return({ status: :ok }) .and_return({ status: :ok })
expect_any_instance_of(Project).to receive(:after_import).and_call_original # Works around https://github.com/rspec/rspec-mocks/issues/910
expect_any_instance_of(Repository).to receive(:expire_emptiness_caches) expect(Project).to receive(:find).with(project.id).and_return(project)
expect_any_instance_of(Project).to receive(:import_finish) expect(project.repository).to receive(:expire_emptiness_caches)
expect(project.wiki.repository).to receive(:expire_emptiness_caches)
expect(project).to receive(:import_finish)
subject.perform(project.id) subject.perform(project.id)
end end
......
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