Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2022-01-21 15:13:54 +00:00
parent cb6f08be88
commit 48fc1ad899
129 changed files with 600 additions and 505 deletions

View File

@ -1 +1 @@
7cd8ef212eccee3ffd388f1b88ccdeca15971435
639d1a25d4de3e2a60cf10e8c3afc0121c27c317

View File

@ -99,7 +99,10 @@ export default {
allRunnersCount: {
...runnersCountSmartQuery,
variables() {
return this.countVariables;
return {
...this.countVariables,
type: null,
};
},
},
instanceRunnersCount: {

View File

@ -85,7 +85,11 @@ class Admin::RunnersController < Admin::ApplicationController
# rubocop: disable CodeReuse/ActiveRecord
def assign_builds_and_projects
@builds = runner.builds.order('id DESC').preload_project_and_pipeline_project.first(30)
@builds = runner
.builds
.order_id_desc
.preload_project_and_pipeline_project.first(30)
@projects =
if params[:search].present?
::Project.search(params[:search])
@ -93,12 +97,10 @@ class Admin::RunnersController < Admin::ApplicationController
Project.all
end
::Gitlab::Database.allow_cross_joins_across_databases(url: 'https://gitlab.com/gitlab-org/gitlab/-/issues/338659') do
@projects = @projects.where.not(id: runner.projects.select(:id)) if runner.projects.any?
@projects = @projects.allow_cross_joins_across_databases(url: 'https://gitlab.com/gitlab-org/gitlab/-/issues/338659')
@projects = @projects.inc_routes
@projects = @projects.page(params[:page]).per(30).without_count
end
runner_projects_ids = runner.runner_projects.pluck(:project_id)
@projects = @projects.where.not(id: runner_projects_ids) if runner_projects_ids.any?
@projects = @projects.inc_routes
@projects = @projects.page(params[:page]).per(30).without_count
end
# rubocop: enable CodeReuse/ActiveRecord
end

View File

@ -67,7 +67,7 @@ module Ci
has_many :builds
has_many :runner_projects, inverse_of: :runner, autosave: true, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent
has_many :projects, through: :runner_projects
has_many :projects, through: :runner_projects, disable_joins: -> { ::Feature.enabled?(:ci_runner_projects_disable_joins, default_enabled: :yaml) }
has_many :runner_namespaces, inverse_of: :runner, autosave: true
has_many :groups, through: :runner_namespaces, disable_joins: true
@ -378,9 +378,7 @@ module Ci
end
def only_for?(project)
::Gitlab::Database.allow_cross_joins_across_databases(url: 'https://gitlab.com/gitlab-org/gitlab/-/issues/338659') do
projects == [project]
end
!runner_projects.where.not(project_id: project.id).exists?
end
def short_sha

View File

@ -17,7 +17,7 @@ module RateLimitedService
end
def log_request(request, current_user)
rate_limiter.class.log_request(request, "#{key}_request_limit".to_sym, current_user)
rate_limiter.log_request(request, "#{key}_request_limit".to_sym, current_user)
end
private
@ -26,20 +26,19 @@ module RateLimitedService
end
class RateLimiterScopedAndKeyed
attr_reader :key, :opts, :rate_limiter_klass
attr_reader :key, :opts, :rate_limiter
def initialize(key:, opts:, rate_limiter_klass:)
def initialize(key:, opts:, rate_limiter:)
@key = key
@opts = opts
@rate_limiter_klass = rate_limiter_klass
@rate_limiter = rate_limiter
end
def rate_limit!(service)
evaluated_scope = evaluated_scope_for(service)
return if feature_flag_disabled?(evaluated_scope[:project])
rate_limiter = new_rate_limiter(evaluated_scope)
if rate_limiter.throttled?
if rate_limiter.throttled?(key, **opts.merge(scope: evaluated_scope.values, users_allowlist: users_allowlist))
raise RateLimitedError.new(key: key, rate_limiter: rate_limiter), _('This endpoint has been requested too many times. Try again later.')
end
end
@ -59,20 +58,16 @@ module RateLimitedService
def feature_flag_disabled?(project)
Feature.disabled?("rate_limited_service_#{key}", project, default_enabled: :yaml)
end
def new_rate_limiter(evaluated_scope)
rate_limiter_klass.new(key, **opts.merge(scope: evaluated_scope.values, users_allowlist: users_allowlist))
end
end
prepended do
attr_accessor :rate_limiter_bypassed
cattr_accessor :rate_limiter_scoped_and_keyed
def self.rate_limit(key:, opts:, rate_limiter_klass: ::Gitlab::ApplicationRateLimiter)
def self.rate_limit(key:, opts:, rate_limiter: ::Gitlab::ApplicationRateLimiter)
self.rate_limiter_scoped_and_keyed = RateLimiterScopedAndKeyed.new(key: key,
opts: opts,
rate_limiter_klass: rate_limiter_klass)
rate_limiter: rate_limiter)
end
end

View File

@ -0,0 +1,8 @@
---
name: ci_runner_projects_disable_joins
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/78372
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/350538
milestone: '14.8'
type: development
group: group::pipeline execution
default_enabled: false

View File

@ -0,0 +1,8 @@
---
name: gitlab_shell_upload_pack_sidechannel
introduced_by_url:
rollout_issue_url:
milestone: '14.8'
type: development
group: group::scalability
default_enabled: false

View File

@ -10,3 +10,14 @@ require 'signet/errors'
# enabling retries is strongly encouraged but disabled by default. Large uploads
# that may hit timeouts will mainly benefit from this.
Google::Apis::RequestOptions.default.retries = 3 if Gitlab::Utils.to_boolean(ENV.fetch('ENABLE_GOOGLE_API_RETRIES', true))
# By default, httpclient will set a send timeout of 120 seconds (https://github.com/nahi/httpclient/blob/82929c4baae14c2319c3f9aba49488c6f6def875/lib/httpclient/session.rb#L147),
# which causes any request to be interrupted every 2 minutes (https://github.com/nahi/httpclient/blob/82929c4baae14c2319c3f9aba49488c6f6def875/lib/httpclient/session.rb#L515).
#
# The Google API client uses resumable uploads so that if a transfer
# request is interrupted, it can retry where it left off. The client
# will retry at most N + 1 times, which means transfers can only last as
# long as this (N + 1) * send timeout. We raise this timeout to an hour
# since otherwise transfers can only last 8 minutes (4 * 2 min) before
# being interrupted.
Google::Apis::ClientOptions.default.send_timeout_sec = 3600

View File

@ -0,0 +1,67 @@
# frozen_string_literal: true
require 'google/apis/core/http_command'
raise 'This patch is only tested with google-api-client-ruby v0.50.0' unless Google::Apis::VERSION == "0.50.0"
# The google-api-ruby-client does not have a way to increase or disable
# the maximum allowed time for a request to be retried. By default, it
# is using the Retriable gem's 15-minute timeout, which appears to be
# too low for uploads over 10 GB. This patches the gem with the upstream
# changes:
# https://github.com/googleapis/google-api-ruby-client/pull/8106
module Google
module Apis
module Core
# Command for HTTP request/response.
class HttpCommand
MAX_ELAPSED_TIME = 3600
# Execute the command, retrying as necessary
#
# @param [HTTPClient] client
# HTTP client
# @yield [result, err] Result or error if block supplied
# @return [Object]
# @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
# @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
# @raise [Google::Apis::AuthorizationError] Authorization is required
def execute(client)
prepare!
opencensus_begin_span
begin
Retriable.retriable tries: options.retries + 1,
max_elapsed_time: MAX_ELAPSED_TIME,
base_interval: 1,
multiplier: 2,
on: RETRIABLE_ERRORS do |try|
# This 2nd level retriable only catches auth errors, and supports 1 retry, which allows
# auth to be re-attempted without having to retry all sorts of other failures like
# NotFound, etc
auth_tries = (try == 1 && authorization_refreshable? ? 2 : 1)
Retriable.retriable tries: auth_tries,
on: [Google::Apis::AuthorizationError, Signet::AuthorizationError, Signet::RemoteServerError, Signet::UnexpectedStatusError],
on_retry: proc { |*| refresh_authorization } do
execute_once(client).tap do |result|
if block_given?
yield result, nil
end
end
end
end
rescue => e # rubocop:disable Style/RescueStandardError
if block_given?
yield nil, e
else
raise e
end
end
ensure
opencensus_end_span
@http_res = nil
release!
end
end
end
end
end

View File

@ -0,0 +1,19 @@
# frozen_string_literal: true
class AddCiRunnerProjectIndexToRunnerIdAndProjectId < Gitlab::Database::Migration[1.0]
disable_ddl_transaction!
OLD_INDEX_NAME = 'index_ci_runner_projects_on_runner_id'
NEW_INDEX_NAME = 'index_ci_runner_projects_on_runner_id_and_project_id'
TABLE_NAME = :ci_runner_projects
def up
add_concurrent_index(TABLE_NAME, [:runner_id, :project_id], name: NEW_INDEX_NAME)
remove_concurrent_index_by_name(TABLE_NAME, OLD_INDEX_NAME)
end
def down
add_concurrent_index(TABLE_NAME, :runner_id, name: OLD_INDEX_NAME)
remove_concurrent_index_by_name(TABLE_NAME, NEW_INDEX_NAME)
end
end

View File

@ -0,0 +1,17 @@
# frozen_string_literal: true
class RemoveCiPipelinesVulnerabilityOccurrencePipelinesPipelineIdFk < Gitlab::Database::Migration[1.0]
disable_ddl_transaction!
def up
with_lock_retries do
execute('LOCK ci_pipelines, vulnerability_occurrence_pipelines IN ACCESS EXCLUSIVE MODE')
remove_foreign_key_if_exists(:vulnerability_occurrence_pipelines, :ci_pipelines, name: "fk_rails_6421e35d7d")
end
end
def down
add_concurrent_foreign_key(:vulnerability_occurrence_pipelines, :ci_pipelines, name: "fk_rails_6421e35d7d", column: :pipeline_id, target_column: :id, on_delete: :cascade)
end
end

View File

@ -0,0 +1 @@
c0f29fd7f960ffd92a65a00e8dce123b91a604f4d89b7cf0bc419fa80495e2e5

View File

@ -0,0 +1 @@
966c42749e9d200f2b7295fdbb86e596c33510f0abbf431d40b09629e5e4a6aa

View File

@ -25707,7 +25707,7 @@ CREATE UNIQUE INDEX index_ci_runner_namespaces_on_runner_id_and_namespace_id ON
CREATE INDEX index_ci_runner_projects_on_project_id ON ci_runner_projects USING btree (project_id);
CREATE INDEX index_ci_runner_projects_on_runner_id ON ci_runner_projects USING btree (runner_id);
CREATE INDEX index_ci_runner_projects_on_runner_id_and_project_id ON ci_runner_projects USING btree (runner_id, project_id);
CREATE INDEX index_ci_runners_on_active ON ci_runners USING btree (active, id);
@ -30631,9 +30631,6 @@ ALTER TABLE ONLY evidences
ALTER TABLE ONLY jira_imports
ADD CONSTRAINT fk_rails_63cbe52ada FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE;
ALTER TABLE ONLY vulnerability_occurrence_pipelines
ADD CONSTRAINT fk_rails_6421e35d7d FOREIGN KEY (pipeline_id) REFERENCES ci_pipelines(id) ON DELETE CASCADE;
ALTER TABLE ONLY group_deploy_tokens
ADD CONSTRAINT fk_rails_6477b01f6b FOREIGN KEY (deploy_token_id) REFERENCES deploy_tokens(id) ON DELETE CASCADE;

View File

@ -30,7 +30,7 @@ You can also manually start the `review-qa-all`: it runs the full QA suite.
After the end-to-end test runs have finished, [Allure reports](https://github.com/allure-framework/allure2) are generated and published by
the `allure-report-qa-smoke`, `allure-report-qa-reliable`, and `allure-report-qa-all` jobs. A comment with links to the reports are added to the merge request.
Errors can be found in the `gitlab-review-apps` Sentry project and [filterable by Review App URL](https://sentry.gitlab.net/gitlab/gitlab-review-apps/?query=url%3A%22https%3A%2F%2Fgitlab-review-require-ve-u92nn2.gitlab-review.app%2F%22).
Errors can be found in the `gitlab-review-apps` Sentry project and [filterable by Review App URL](https://sentry.gitlab.net/gitlab/gitlab-review-apps/?query=url%3A%22https%3A%2F%2Fgitlab-review-require-ve-u92nn2.gitlab-review.app%2F%22) or [commit SHA](https://sentry.gitlab.net/gitlab/gitlab-review-apps/releases/6095b501da7/all-events/).
## Performance Metrics

View File

@ -97,13 +97,13 @@ The following table lists project permissions available for each role:
| [Incident Management](../operations/incident_management/index.md):<br>Manage [escalation policies](../operations/incident_management/escalation_policies.md) | | | | ✓ | ✓ |
| [Issues](project/issues/index.md):<br>Add Labels | ✓ (*16*) | ✓ | ✓ | ✓ | ✓ |
| [Issues](project/issues/index.md):<br>Assign | ✓ (*16*) | ✓ | ✓ | ✓ | ✓ |
| [Issues](project/issues/index.md):<br>Create | ✓ | ✓ | ✓ | ✓ | ✓ |
| [Issues](project/issues/index.md):<br>Create (*19*) | ✓ | ✓ | ✓ | ✓ | ✓ |
| [Issues](project/issues/index.md):<br>Create [confidential issues](project/issues/confidential_issues.md) | ✓ | ✓ | ✓ | ✓ | ✓ |
| [Issues](project/issues/index.md):<br>View [Design Management](project/issues/design_management.md) pages | ✓ | ✓ | ✓ | ✓ | ✓ |
| [Issues](project/issues/index.md):<br>View related issues | ✓ | ✓ | ✓ | ✓ | ✓ |
| [Issues](project/issues/index.md):<br>Set weight | ✓ (*16*) | ✓ | ✓ | ✓ | ✓ |
| [Issues](project/issues/index.md):<br>View [confidential issues](project/issues/confidential_issues.md) | (*2*) | ✓ | ✓ | ✓ | ✓ |
| [Issues](project/issues/index.md):<br>Close / reopen | | ✓ | ✓ | ✓ | ✓ |
| [Issues](project/issues/index.md):<br>Close / reopen (*20*) | | ✓ | ✓ | ✓ | ✓ |
| [Issues](project/issues/index.md):<br>Lock threads | | ✓ | ✓ | ✓ | ✓ |
| [Issues](project/issues/index.md):<br>Manage related issues | | ✓ | ✓ | ✓ | ✓ |
| [Issues](project/issues/index.md):<br>Manage tracker | | ✓ | ✓ | ✓ | ✓ |
@ -234,7 +234,10 @@ The following table lists project permissions available for each role:
1. Guest users can only set metadata (for example, labels, assignees, or milestones)
when creating an issue. They cannot change the metadata on existing issues.
1. In GitLab 14.5 or later, Guests are not allowed to [create incidents](../operations/incident_management/incidents.md#incident-creation).
A guest who created an incident when they had the Reporter role or who is assigned to the incident can modify the title, description and metrics. They can also close and reopen the incident.
1. In projects that accept contributions from external members, users can create, edit, and close their own merge requests.
1. Authors and assignees of issues can modify the title and description even if they don't have the Reporter role.
1. Authors and assignees can close and reopen issues even if they don't have the Reporter role.
## Project features permissions

View File

@ -224,7 +224,7 @@ You can edit an issue's title and description.
Prerequisites:
- You must have at least the [Reporter role](../../permissions.md) for the project.
- You must have at least the [Reporter role](../../permissions.md) for the project, be the author of the issue, or be assigned to the issue.
To edit an issue:
@ -351,7 +351,7 @@ The issue is marked as closed but is not deleted.
Prerequisites:
- You must have at least the [Reporter role](../../permissions.md) for the project.
- You must have at least the [Reporter role](../../permissions.md) for the project, be the author of the issue, or be assigned to the issue.
To close an issue, you can do the following:
@ -364,7 +364,7 @@ To close an issue, you can do the following:
Prerequisites:
- You must have at least the [Reporter role](../../permissions.md) for the project.
- You must have at least the [Reporter role](../../permissions.md) for the project, be the author of the issue, or be assigned to the issue.
To reopen a closed issue, at the top of the issue, select **Reopen issue**.
A reopened issue is no different from any other open issue.
@ -476,7 +476,7 @@ of your installation.
Prerequisites:
- You must be the issue author or have at least the [Reporter role](../../permissions.md) for the project.
- You must be the issue author or have at least the [Reporter role](../../permissions.md) for the project, be the author of the issue, or be assigned to the issue.
To change issue type:

View File

@ -15,18 +15,18 @@ module API
# rubocop: disable CodeReuse/ActiveRecord
expose :projects, with: Entities::BasicProjectDetails do |runner, options|
if options[:current_user].admin? # rubocop: disable Cop/UserAdmin
runner.projects.allow_cross_joins_across_databases(url: 'https://gitlab.com/gitlab-org/gitlab/-/issues/338659')
runner.projects
else
options[:current_user].authorized_projects.where(id: runner.projects).allow_cross_joins_across_databases(url: 'https://gitlab.com/gitlab-org/gitlab/-/issues/338659')
options[:current_user].authorized_projects.where(id: runner.runner_projects.pluck(:project_id))
end
end
# rubocop: enable CodeReuse/ActiveRecord
# rubocop: disable CodeReuse/ActiveRecord
expose :groups, with: Entities::BasicGroupDetails do |runner, options|
if options[:current_user].admin? # rubocop: disable Cop/UserAdmin
runner.groups.allow_cross_joins_across_databases(url: 'https://gitlab.com/gitlab-org/gitlab/-/issues/338659')
runner.groups
else
options[:current_user].authorized_groups.where(id: runner.groups).allow_cross_joins_across_databases(url: 'https://gitlab.com/gitlab-org/gitlab/-/issues/338659')
options[:current_user].authorized_groups.where(id: runner.runner_namespaces.pluck(:namespace_id))
end
end
# rubocop: enable CodeReuse/ActiveRecord

View File

@ -124,7 +124,8 @@ module API
repository: repository.gitaly_repository.to_h,
address: Gitlab::GitalyClient.address(repository.shard),
token: Gitlab::GitalyClient.token(repository.shard),
features: Feature::Gitaly.server_feature_flags(repository.project)
features: Feature::Gitaly.server_feature_flags(repository.project),
use_sidechannel: Feature.enabled?(:gitlab_shell_upload_pack_sidechannel, repository.project, default_enabled: :yaml)
}
end
end

View File

@ -5,7 +5,7 @@ module API
# == RateLimiter
#
# Helper that checks if the rate limit for a given endpoint is throttled by calling the
# Gitlab::ApplicationRateLimiter class. If the action is throttled for the current user, the request
# Gitlab::ApplicationRateLimiter module. If the action is throttled for the current user, the request
# will be logged and an error message will be rendered with a Too Many Requests response status.
# See app/controllers/concerns/check_rate_limit.rb for Rails controllers version
module RateLimiter

View File

@ -1,30 +1,13 @@
# frozen_string_literal: true
module Gitlab
# This class implements a simple rate limiter that can be used to throttle
# This module implements a simple rate limiter that can be used to throttle
# certain actions. Unlike Rack Attack and Rack::Throttle, which operate at
# the middleware level, this can be used at the controller or API level.
# See CheckRateLimit concern for usage.
class ApplicationRateLimiter
module ApplicationRateLimiter
InvalidKeyError = Class.new(StandardError)
def initialize(key, **options)
@key = key
@options = options
end
def throttled?
self.class.throttled?(key, **options)
end
def threshold_value
options[:threshold] || self.class.threshold(key)
end
def interval_value
self.class.interval(key)
end
class << self
# Application rate limits
#
@ -201,9 +184,5 @@ module Gitlab
scoped_user.username.downcase.in?(users_allowlist)
end
end
private
attr_reader :key, :options
end
end

View File

@ -40,13 +40,13 @@ module QA
testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347608'
) do
expect_import_finished
expect(imported_issues.count).to eq(1)
aggregate_failures do
expect(imported_issues.count).to eq(1)
expect(imported_issue).to eq(source_issue.reload!)
expect(imported_comments.count).to eq(1)
expect(imported_comments.first[:body]).to include(source_comment[:body])
expect(imported_comments.first&.fetch(:body)).to include(source_comment[:body])
end
end
end

View File

@ -52,9 +52,9 @@ module QA
testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/348478'
) do
expect_import_finished
expect(imported_mrs.count).to eq(1)
aggregate_failures do
expect(imported_mrs.count).to eq(1)
# TODO: remove custom comparison after member migration is implemented
# https://gitlab.com/gitlab-org/gitlab/-/issues/341886
expect(imported_mr.comparable.except(:author)).to eq(source_mr.reload!.comparable.except(:author))

View File

@ -254,6 +254,18 @@ RSpec.describe "Admin Runners" do
expect(page).not_to have_content 'runner-group'
end
it 'show the same counts after selecting another tab' do
visit admin_runners_path
page.within('[data-testid="runner-type-tabs"]') do
click_on('Project')
expect(page).to have_link('All 2')
expect(page).to have_link('Group 1')
expect(page).to have_link('Project 1')
end
end
it 'shows no runner when type does not match' do
visit admin_runners_path

View File

@ -1,5 +1,6 @@
import { GlModal, GlSearchBoxByType } from '@gitlab/ui';
import { shallowMount, createLocalVue } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import getDiffWithCommit from 'test_fixtures/merge_request_diffs/with_commit.json';
import AddReviewItemsModal from '~/add_context_commits_modal/components/add_context_commits_modal_wrapper.vue';
@ -8,8 +9,7 @@ import * as actions from '~/add_context_commits_modal/store/actions';
import mutations from '~/add_context_commits_modal/store/mutations';
import defaultState from '~/add_context_commits_modal/store/state';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('AddContextCommitsModal', () => {
let wrapper;
@ -36,7 +36,6 @@ describe('AddContextCommitsModal', () => {
});
wrapper = shallowMount(AddReviewItemsModal, {
localVue,
store,
propsData: {
contextCommitsPath: '',

View File

@ -1,5 +1,6 @@
import { GlModal } from '@gitlab/ui';
import { shallowMount, createLocalVue } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import BadgeList from '~/badges/components/badge_list.vue';
import BadgeListRow from '~/badges/components/badge_list_row.vue';
@ -7,8 +8,7 @@ import BadgeSettings from '~/badges/components/badge_settings.vue';
import store from '~/badges/store';
import { createDummyBadge } from '../dummy_badge';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('BadgeSettings component', () => {
let wrapper;
@ -21,7 +21,6 @@ describe('BadgeSettings component', () => {
wrapper = shallowMount(BadgeSettings, {
store,
localVue,
stubs: {
'badge-list': BadgeList,
'badge-list-row': BadgeListRow,

View File

@ -1,11 +1,10 @@
import { shallowMount, createLocalVue } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import DiffFileDrafts from '~/batch_comments/components/diff_file_drafts.vue';
import DraftNote from '~/batch_comments/components/draft_note.vue';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('Batch comments diff file drafts component', () => {
let vm;
@ -22,9 +21,8 @@ describe('Batch comments diff file drafts component', () => {
},
});
vm = shallowMount(localVue.extend(DiffFileDrafts), {
vm = shallowMount(DiffFileDrafts, {
store,
localVue,
propsData: { fileHash: 'filehash' },
});
}

View File

@ -1,5 +1,5 @@
import { getByRole } from '@testing-library/dom';
import { shallowMount, createLocalVue } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import { stubComponent } from 'helpers/stub_component';
import DraftNote from '~/batch_comments/components/draft_note.vue';
import { createStore } from '~/batch_comments/stores';
@ -7,8 +7,6 @@ import NoteableNote from '~/notes/components/noteable_note.vue';
import '~/behaviors/markdown/render_gfm';
import { createDraft } from '../mock_data';
const localVue = createLocalVue();
const NoteableNoteStub = stubComponent(NoteableNote, {
template: `
<div>
@ -31,10 +29,9 @@ describe('Batch comments draft note component', () => {
const getList = () => getByRole(wrapper.element, 'list');
const createComponent = (propsData = { draft }) => {
wrapper = shallowMount(localVue.extend(DraftNote), {
wrapper = shallowMount(DraftNote, {
store,
propsData,
localVue,
stubs: {
NoteableNote: NoteableNoteStub,
},

View File

@ -1,13 +1,13 @@
import { GlDropdown, GlDropdownItem } from '@gitlab/ui';
import { shallowMount, createLocalVue } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import PreviewDropdown from '~/batch_comments/components/preview_dropdown.vue';
import { createStore } from '~/mr_notes/stores';
import '~/behaviors/markdown/render_gfm';
import { createDraft } from '../mock_data';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('Batch comments publish dropdown component', () => {
let wrapper;

View File

@ -1,4 +1,5 @@
import { shallowMount, createLocalVue } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import BoardNewIssue from '~/boards/components/board_new_issue.vue';
import BoardNewItem from '~/boards/components/board_new_item.vue';
@ -7,9 +8,7 @@ import eventHub from '~/boards/eventhub';
import { mockList, mockGroupProjects } from '../mock_data';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
const addListNewIssuesSpy = jest.fn().mockResolvedValue();
const mockActions = { addListNewIssue: addListNewIssuesSpy };
@ -20,7 +19,6 @@ const createComponent = ({
getters = { isGroupBoard: () => true, isProjectBoard: () => false },
} = {}) =>
shallowMount(BoardNewIssue, {
localVue,
store: new Vuex.Store({
state,
actions,

View File

@ -1,10 +1,10 @@
import { GlDropdown, GlDropdownItem, GlIcon } from '@gitlab/ui';
import { mount, createLocalVue } from '@vue/test-utils';
import { mount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import CiEnvironmentsDropdown from '~/ci_variable_list/components/ci_environments_dropdown.vue';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('Ci environments dropdown', () => {
let wrapper;
@ -22,7 +22,6 @@ describe('Ci environments dropdown', () => {
wrapper = mount(CiEnvironmentsDropdown, {
store,
localVue,
propsData: {
value: term,
},

View File

@ -1,5 +1,6 @@
import { GlButton, GlFormInput } from '@gitlab/ui';
import { createLocalVue, shallowMount, mount } from '@vue/test-utils';
import { shallowMount, mount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import { mockTracking } from 'helpers/tracking_helper';
import CiEnvironmentsDropdown from '~/ci_variable_list/components/ci_environments_dropdown.vue';
@ -9,8 +10,7 @@ import createStore from '~/ci_variable_list/store';
import mockData from '../services/mock_data';
import ModalStub from '../stubs';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('Ci variable modal', () => {
let wrapper;
@ -26,7 +26,6 @@ describe('Ci variable modal', () => {
stubs: {
GlModal: ModalStub,
},
localVue,
store,
...options,
});

View File

@ -1,10 +1,10 @@
import { createLocalVue, shallowMount } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import CiVariableSettings from '~/ci_variable_list/components/ci_variable_settings.vue';
import createStore from '~/ci_variable_list/store';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('Ci variable table', () => {
let wrapper;
@ -16,7 +16,6 @@ describe('Ci variable table', () => {
store.state.isGroup = groupState;
jest.spyOn(store, 'dispatch').mockImplementation();
wrapper = shallowMount(CiVariableSettings, {
localVue,
store,
});
};

View File

@ -1,11 +1,11 @@
import { createLocalVue, mount } from '@vue/test-utils';
import { mount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import CiVariableTable from '~/ci_variable_list/components/ci_variable_table.vue';
import createStore from '~/ci_variable_list/store';
import mockData from '../services/mock_data';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('Ci variable table', () => {
let wrapper;
@ -16,7 +16,6 @@ describe('Ci variable table', () => {
jest.spyOn(store, 'dispatch').mockImplementation();
wrapper = mount(CiVariableTable, {
attachTo: document.body,
localVue,
store,
});
};

View File

@ -1,11 +1,11 @@
import { GlToggle, GlButton } from '@gitlab/ui';
import { shallowMount, createLocalVue } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import IntegrationForm from '~/clusters/forms/components/integration_form.vue';
import { createStore } from '~/clusters/forms/stores/index';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('ClusterIntegrationForm', () => {
let wrapper;
@ -19,7 +19,6 @@ describe('ClusterIntegrationForm', () => {
const createWrapper = (storeValues = defaultStoreValues) => {
wrapper = shallowMount(IntegrationForm, {
localVue,
store: createStore(storeValues),
provide: {
autoDevopsHelpPath: 'topics/autodevops/index',

View File

@ -1,5 +1,5 @@
import { GlCard, GlLoadingIcon, GlButton, GlSprintf, GlBadge } from '@gitlab/ui';
import { createLocalVue } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import { shallowMountExtended } from 'helpers/vue_test_utils_helper';
import ClustersViewAll from '~/clusters_list/components/clusters_view_all.vue';
@ -16,8 +16,7 @@ import {
} from '~/clusters_list/constants';
import { sprintf } from '~/locale';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
const addClusterPath = '/path/to/add/cluster';
const defaultBranchName = 'default-branch';
@ -59,7 +58,6 @@ describe('ClustersViewAllComponent', () => {
const createWrapper = ({ initialState }) => {
wrapper = shallowMountExtended(ClustersViewAll, {
localVue,
store: createStore(initialState),
propsData,
provide: provideData,

View File

@ -1,15 +1,15 @@
import { shallowMount, createLocalVue } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import App from '~/code_navigation/components/app.vue';
import Popover from '~/code_navigation/components/popover.vue';
import createState from '~/code_navigation/store/state';
const localVue = createLocalVue();
const fetchData = jest.fn();
const showDefinition = jest.fn();
let wrapper;
localVue.use(Vuex);
Vue.use(Vuex);
function factory(initialState = {}) {
const store = new Vuex.Store({
@ -24,7 +24,7 @@ function factory(initialState = {}) {
},
});
wrapper = shallowMount(App, { store, localVue });
wrapper = shallowMount(App, { store });
}
describe('Code navigation app component', () => {

View File

@ -1,12 +1,12 @@
import { shallowMount, createLocalVue } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import CreateEksCluster from '~/create_cluster/eks_cluster/components/create_eks_cluster.vue';
import EksClusterConfigurationForm from '~/create_cluster/eks_cluster/components/eks_cluster_configuration_form.vue';
import ServiceCredentialsForm from '~/create_cluster/eks_cluster/components/service_credentials_form.vue';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('CreateEksCluster', () => {
let vm;
@ -33,7 +33,6 @@ describe('CreateEksCluster', () => {
externalLinkIcon,
kubernetesIntegrationHelpPath,
},
localVue,
store,
});
});

View File

@ -1,5 +1,5 @@
import { GlFormCheckbox } from '@gitlab/ui';
import { shallowMount, createLocalVue } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
@ -7,8 +7,7 @@ import EksClusterConfigurationForm from '~/create_cluster/eks_cluster/components
import eksClusterFormState from '~/create_cluster/eks_cluster/store/state';
import clusterDropdownStoreState from '~/create_cluster/store/cluster_dropdown/state';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('EksClusterConfigurationForm', () => {
let store;
@ -151,7 +150,6 @@ describe('EksClusterConfigurationForm', () => {
const buildWrapper = () => {
vm = shallowMount(EksClusterConfigurationForm, {
localVue,
store,
propsData: {
gitlabManagedClusterHelpPath: '',

View File

@ -1,11 +1,11 @@
import { GlButton } from '@gitlab/ui';
import { shallowMount, createLocalVue } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import ServiceCredentialsForm from '~/create_cluster/eks_cluster/components/service_credentials_form.vue';
import eksClusterState from '~/create_cluster/eks_cluster/store/state';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('ServiceCredentialsForm', () => {
let vm;
@ -33,7 +33,6 @@ describe('ServiceCredentialsForm', () => {
createRoleArnHelpPath: '',
externalLinkIcon: '',
},
localVue,
store,
});
});

View File

@ -1,4 +1,5 @@
import { shallowMount, createLocalVue } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import GkeMachineTypeDropdown from '~/create_cluster/gke_cluster/components/gke_machine_type_dropdown.vue';
import createState from '~/create_cluster/gke_cluster/store/state';
@ -19,15 +20,12 @@ const LABELS = {
DEFAULT: 'Select machine type',
};
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
const createComponent = (store, propsData = componentConfig) =>
shallowMount(GkeMachineTypeDropdown, {
propsData,
store,
localVue,
});
const createStore = (initialState = {}, getters = {}) =>

View File

@ -1,12 +1,11 @@
import { shallowMount, createLocalVue } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import ClusterFormDropdown from '~/create_cluster/components/cluster_form_dropdown.vue';
import GkeNetworkDropdown from '~/create_cluster/gke_cluster/components/gke_network_dropdown.vue';
import createClusterDropdownState from '~/create_cluster/store/cluster_dropdown/state';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('GkeNetworkDropdown', () => {
let wrapper;
@ -54,7 +53,6 @@ describe('GkeNetworkDropdown', () => {
shallowMount(GkeNetworkDropdown, {
propsData,
store,
localVue,
});
afterEach(() => {

View File

@ -1,4 +1,5 @@
import { shallowMount, createLocalVue } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import GkeProjectIdDropdown from '~/create_cluster/gke_cluster/components/gke_project_id_dropdown.vue';
import createState from '~/create_cluster/gke_cluster/store/state';
@ -19,9 +20,7 @@ const LABELS = {
EMPTY: 'No projects found',
};
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('GkeProjectIdDropdown', () => {
let wrapper;
@ -52,7 +51,6 @@ describe('GkeProjectIdDropdown', () => {
shallowMount(GkeProjectIdDropdown, {
propsData,
store,
localVue,
});
const bootstrap = (initialState, getters) => {

View File

@ -1,10 +1,9 @@
import { shallowMount, createLocalVue } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import GkeSubmitButton from '~/create_cluster/gke_cluster/components/gke_submit_button.vue';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('GkeSubmitButton', () => {
let wrapper;
@ -21,7 +20,6 @@ describe('GkeSubmitButton', () => {
const buildWrapper = () =>
shallowMount(GkeSubmitButton, {
store,
localVue,
});
const bootstrap = () => {

View File

@ -1,12 +1,11 @@
import { shallowMount, createLocalVue } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import ClusterFormDropdown from '~/create_cluster/components/cluster_form_dropdown.vue';
import GkeSubnetworkDropdown from '~/create_cluster/gke_cluster/components/gke_subnetwork_dropdown.vue';
import createClusterDropdownState from '~/create_cluster/store/cluster_dropdown/state';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('GkeSubnetworkDropdown', () => {
let wrapper;
@ -41,7 +40,6 @@ describe('GkeSubnetworkDropdown', () => {
shallowMount(GkeSubnetworkDropdown, {
propsData,
store,
localVue,
});
afterEach(() => {

View File

@ -1,4 +1,5 @@
import { createLocalVue, shallowMount } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import axios from 'axios';
import MockAdapter from 'axios-mock-adapter';
import Vuex from 'vuex';
@ -15,8 +16,7 @@ import * as utils from '~/vue_shared/components/filtered_search_bar/filtered_sea
import initialFiltersState from '~/vue_shared/components/filtered_search_bar/store/modules/filters/state';
import UrlSync from '~/vue_shared/components/url_sync.vue';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
const milestoneTokenType = 'milestone';
const labelsTokenType = 'labels';
@ -77,7 +77,6 @@ describe('Filter bar', () => {
const createComponent = (initialStore) => {
return shallowMount(FilterBar, {
localVue,
store: initialStore,
propsData: {
groupPath: 'foo',

View File

@ -1,4 +1,5 @@
import { createLocalVue, shallowMount } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import DeployFreezeModal from '~/deploy_freeze/components/deploy_freeze_modal.vue';
import DeployFreezeSettings from '~/deploy_freeze/components/deploy_freeze_settings.vue';
@ -6,8 +7,7 @@ import DeployFreezeTable from '~/deploy_freeze/components/deploy_freeze_table.vu
import createStore from '~/deploy_freeze/store';
import { timezoneDataFixture } from '../helpers';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('Deploy freeze settings', () => {
let wrapper;
@ -20,7 +20,6 @@ describe('Deploy freeze settings', () => {
});
jest.spyOn(store, 'dispatch').mockImplementation();
wrapper = shallowMount(DeployFreezeSettings, {
localVue,
store,
});
});

View File

@ -1,13 +1,13 @@
import { GlModal } from '@gitlab/ui';
import { createLocalVue, mount } from '@vue/test-utils';
import { mount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import DeployFreezeTable from '~/deploy_freeze/components/deploy_freeze_table.vue';
import createStore from '~/deploy_freeze/store';
import { RECEIVE_FREEZE_PERIODS_SUCCESS } from '~/deploy_freeze/store/mutation_types';
import { freezePeriodsFixture, timezoneDataFixture } from '../helpers';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('Deploy freeze table', () => {
let wrapper;
@ -21,7 +21,6 @@ describe('Deploy freeze table', () => {
jest.spyOn(store, 'dispatch').mockImplementation();
wrapper = mount(DeployFreezeTable, {
attachTo: document.body,
localVue,
store,
});
};

View File

@ -1,12 +1,12 @@
import { GlDropdownItem, GlDropdown } from '@gitlab/ui';
import { shallowMount, createLocalVue } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import createStore from '~/deploy_freeze/store';
import TimezoneDropdown from '~/vue_shared/components/timezone_dropdown.vue';
import { findTzByName, formatTz, timezoneDataFixture } from '../helpers';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('Deploy freeze timezone dropdown', () => {
let wrapper;
@ -19,7 +19,6 @@ describe('Deploy freeze timezone dropdown', () => {
});
wrapper = shallowMount(TimezoneDropdown, {
store,
localVue,
propsData: {
value: selectedTimezone,
timezoneData: timezoneDataFixture,

View File

@ -1,11 +1,11 @@
import { GlIcon, GlLoadingIcon, GlIntersectionObserver } from '@gitlab/ui';
import { createLocalVue, shallowMount } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import VueRouter from 'vue-router';
import { extendedWrapper } from 'helpers/vue_test_utils_helper';
import Item from '~/design_management/components/list/item.vue';
const localVue = createLocalVue();
localVue.use(VueRouter);
Vue.use(VueRouter);
const router = new VueRouter();
// Referenced from: gitlab_schema.graphql:DesignVersionEvent
@ -34,7 +34,6 @@ describe('Design management list item component', () => {
} = {}) {
wrapper = extendedWrapper(
shallowMount(Item, {
localVue,
router,
propsData: {
id: imgId,

View File

@ -1,12 +1,12 @@
import { GlButton } from '@gitlab/ui';
import { createLocalVue, shallowMount } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import VueRouter from 'vue-router';
import DeleteButton from '~/design_management/components/delete_button.vue';
import Toolbar from '~/design_management/components/toolbar/index.vue';
import { DESIGNS_ROUTE_NAME } from '~/design_management/router/constants';
const localVue = createLocalVue();
localVue.use(VueRouter);
Vue.use(VueRouter);
const router = new VueRouter();
const RouterLinkStub = {
@ -28,7 +28,6 @@ describe('Design management toolbar component', () => {
updatedAt.setHours(updatedAt.getHours() - 1);
wrapper = shallowMount(Toolbar, {
localVue,
router,
propsData: {
id: '1',

View File

@ -1,5 +1,6 @@
import { GlAlert } from '@gitlab/ui';
import { shallowMount, createLocalVue } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import { ApolloMutation } from 'vue-apollo';
import VueRouter from 'vue-router';
import { mockTracking, unmockTracking } from 'helpers/tracking_helper';
@ -78,8 +79,7 @@ const createDiscussionMutationVariables = {
},
};
const localVue = createLocalVue();
localVue.use(VueRouter);
Vue.use(VueRouter);
describe('Design management design index page', () => {
let wrapper;
@ -128,7 +128,6 @@ describe('Design management design index page', () => {
...data,
};
},
localVue,
router,
});
}

View File

@ -1,5 +1,5 @@
import { mount, createLocalVue } from '@vue/test-utils';
import { nextTick } from 'vue';
import { mount } from '@vue/test-utils';
import Vue, { nextTick } from 'vue';
import VueRouter from 'vue-router';
import App from '~/design_management/components/app.vue';
import DesignDetail from '~/design_management/pages/design/index.vue';
@ -9,8 +9,7 @@ import { DESIGNS_ROUTE_NAME, DESIGN_ROUTE_NAME } from '~/design_management/route
import '~/commons/bootstrap';
function factory(routeArg) {
const localVue = createLocalVue();
localVue.use(VueRouter);
Vue.use(VueRouter);
window.gon = { sprite_icons: '' };
@ -20,7 +19,6 @@ function factory(routeArg) {
}
return mount(App, {
localVue,
router,
mocks: {
$apollo: {

View File

@ -1,5 +1,5 @@
import { shallowMount, mount, createLocalVue } from '@vue/test-utils';
import { nextTick } from 'vue';
import { shallowMount, mount } from '@vue/test-utils';
import Vue, { nextTick } from 'vue';
import Vuex from 'vuex';
import CollapsedFilesWarning from '~/diffs/components/collapsed_files_warning.vue';
import { CENTERED_LIMITED_CONTAINER_CLASSES, EVT_EXPAND_ALL_FILES } from '~/diffs/constants';
@ -23,11 +23,10 @@ async function files(store, count) {
}
describe('CollapsedFilesWarning', () => {
const localVue = createLocalVue();
let store;
let wrapper;
localVue.use(Vuex);
Vue.use(Vuex);
const getAlertActionButton = () =>
wrapper.find(CollapsedFilesWarning).find('button.gl-alert-action:first-child');
@ -43,7 +42,6 @@ describe('CollapsedFilesWarning', () => {
wrapper = mounter(CollapsedFilesWarning, {
propsData: { ...propsData, ...props },
localVue,
store,
});
};

View File

@ -1,4 +1,5 @@
import { mount, createLocalVue } from '@vue/test-utils';
import { mount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import getDiffWithCommit from 'test_fixtures/merge_request_diffs/with_commit.json';
import setWindowLocation from 'helpers/set_window_location_helper';
@ -8,8 +9,7 @@ import CompareVersionsComponent from '~/diffs/components/compare_versions.vue';
import { createStore } from '~/mr_notes/stores';
import diffsMockData from '../mock_data/merge_request_diffs';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
const NEXT_COMMIT_URL = `${TEST_HOST}/?commit_id=next`;
const PREV_COMMIT_URL = `${TEST_HOST}/?commit_id=prev`;
@ -30,7 +30,6 @@ describe('CompareVersions', () => {
}
wrapper = mount(CompareVersionsComponent, {
localVue,
store,
propsData: {
mergeRequestDiffs: diffsMockData,

View File

@ -1,5 +1,6 @@
import { GlLoadingIcon } from '@gitlab/ui';
import { shallowMount, createLocalVue } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import DiffContentComponent from '~/diffs/components/diff_content.vue';
import DiffDiscussions from '~/diffs/components/diff_discussions.vue';
@ -11,8 +12,7 @@ import NoPreviewViewer from '~/vue_shared/components/diff_viewer/viewers/no_prev
import NotDiffableViewer from '~/vue_shared/components/diff_viewer/viewers/not_diffable.vue';
import diffFileMockData from '../mock_data/diff_file';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('DiffContent', () => {
let wrapper;
@ -88,7 +88,6 @@ describe('DiffContent', () => {
...defaultProps,
...props,
},
localVue,
store: fakeStore,
provide: { glFeatures },
});

View File

@ -1,11 +1,11 @@
import { shallowMount, createLocalVue } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import DiffDiscussionReply from '~/diffs/components/diff_discussion_reply.vue';
import ReplyPlaceholder from '~/notes/components/discussion_reply_placeholder.vue';
import NoteSignedOutWidget from '~/notes/components/note_signed_out_widget.vue';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('DiffDiscussionReply', () => {
let wrapper;
@ -15,7 +15,6 @@ describe('DiffDiscussionReply', () => {
const createComponent = (props = {}, slots = {}) => {
wrapper = shallowMount(DiffDiscussionReply, {
store,
localVue,
propsData: {
...props,
},

View File

@ -1,5 +1,5 @@
import { GlIcon } from '@gitlab/ui';
import { mount, createLocalVue } from '@vue/test-utils';
import { mount } from '@vue/test-utils';
import DiffDiscussions from '~/diffs/components/diff_discussions.vue';
import { createStore } from '~/mr_notes/stores';
import DiscussionNotes from '~/notes/components/discussion_notes.vue';
@ -8,8 +8,6 @@ import TimelineEntryItem from '~/vue_shared/components/notes/timeline_entry_item
import '~/behaviors/markdown/render_gfm';
import discussionsMockData from '../mock_data/diff_discussions';
const localVue = createLocalVue();
describe('DiffDiscussions', () => {
let store;
let wrapper;
@ -17,13 +15,12 @@ describe('DiffDiscussions', () => {
const createComponent = (props) => {
store = createStore();
wrapper = mount(localVue.extend(DiffDiscussions), {
wrapper = mount(DiffDiscussions, {
store,
propsData: {
discussions: getDiscussionsMockData(),
...props,
},
localVue,
});
};

View File

@ -1,4 +1,5 @@
import { shallowMount, createLocalVue } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import { cloneDeep } from 'lodash';
import Vuex from 'vuex';
@ -37,8 +38,7 @@ const diffFile = Object.freeze(
}),
);
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('DiffFileHeader component', () => {
let wrapper;
@ -103,7 +103,6 @@ describe('DiffFileHeader component', () => {
...props,
},
...options,
localVue,
store,
});
};

View File

@ -1,6 +1,6 @@
import { shallowMount, createLocalVue } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import MockAdapter from 'axios-mock-adapter';
import { nextTick } from 'vue';
import Vue, { nextTick } from 'vue';
import Vuex from 'vuex';
import DiffContentComponent from 'jh_else_ce/diffs/components/diff_content.vue';
@ -70,9 +70,7 @@ function markFileToBeRendered(store, index = 0) {
}
function createComponent({ file, first = false, last = false, options = {}, props = {} }) {
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
const store = new Vuex.Store({
...createNotesStore(),
@ -85,7 +83,6 @@ function createComponent({ file, first = false, last = false, options = {}, prop
const wrapper = shallowMount(DiffFileComponent, {
store,
localVue,
propsData: {
file,
canCurrentUserFork: false,
@ -98,7 +95,6 @@ function createComponent({ file, first = false, last = false, options = {}, prop
});
return {
localVue,
wrapper,
store,
};

View File

@ -1,12 +1,12 @@
import { GlButton } from '@gitlab/ui';
import { createLocalVue, shallowMount, mount } from '@vue/test-utils';
import { shallowMount, mount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import NoChanges from '~/diffs/components/no_changes.vue';
import { createStore } from '~/mr_notes/stores';
import diffsMockData from '../mock_data/merge_request_diffs';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
const TEST_TARGET_BRANCH = 'foo';
const TEST_SOURCE_BRANCH = 'dev/update';
@ -17,7 +17,6 @@ describe('Diff no changes empty state', () => {
function createComponent(mountFn = shallowMount) {
wrapper = mountFn(NoChanges, {
localVue,
store,
propsData: {
changesEmptyStateIllustration: '',

View File

@ -1,4 +1,5 @@
import { shallowMount, mount, createLocalVue } from '@vue/test-utils';
import { shallowMount, mount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import TreeList from '~/diffs/components/tree_list.vue';
import createStore from '~/diffs/store/modules';
@ -8,13 +9,11 @@ describe('Diffs tree list component', () => {
let wrapper;
let store;
const getFileRows = () => wrapper.findAll('.file-row');
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
const createComponent = (mountFn = mount) => {
wrapper = mountFn(TreeList, {
store,
localVue,
propsData: { hideFileStats: false },
});
};

View File

@ -7,7 +7,8 @@ import {
GlAlert,
GlSprintf,
} from '@gitlab/ui';
import { createLocalVue, shallowMount } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import {
severityLevel,
@ -27,8 +28,7 @@ import Tracking from '~/tracking';
jest.mock('~/flash');
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('ErrorDetails', () => {
let store;
@ -53,7 +53,6 @@ describe('ErrorDetails', () => {
function mountComponent() {
wrapper = shallowMount(ErrorDetails, {
stubs: { GlButton, GlSprintf },
localVue,
store,
mocks,
propsData: {

View File

@ -1,5 +1,6 @@
import { GlEmptyState, GlLoadingIcon, GlFormInput, GlPagination, GlDropdown } from '@gitlab/ui';
import { createLocalVue, mount } from '@vue/test-utils';
import { mount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import stubChildren from 'helpers/stub_children';
import ErrorTrackingActions from '~/error_tracking/components/error_tracking_actions.vue';
@ -8,8 +9,7 @@ import { trackErrorListViewsOptions, trackErrorStatusUpdateOptions } from '~/err
import Tracking from '~/tracking';
import errorsList from './list_mock.json';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('ErrorTrackingList', () => {
let store;
@ -32,7 +32,6 @@ describe('ErrorTrackingList', () => {
stubs = {},
} = {}) {
wrapper = mount(ErrorTrackingList, {
localVue,
store,
propsData: {
indexPath: '/path',

View File

@ -1,6 +1,6 @@
import { GlFormRadioGroup, GlFormRadio, GlFormInputGroup } from '@gitlab/ui';
import { createLocalVue, shallowMount } from '@vue/test-utils';
import { nextTick } from 'vue';
import { shallowMount } from '@vue/test-utils';
import Vue, { nextTick } from 'vue';
import Vuex from 'vuex';
import ClipboardButton from '~/vue_shared/components/clipboard_button.vue';
import { TEST_HOST } from 'helpers/test_constants';
@ -10,8 +10,7 @@ import ErrorTrackingForm from '~/error_tracking_settings/components/error_tracki
import ProjectDropdown from '~/error_tracking_settings/components/project_dropdown.vue';
import createStore from '~/error_tracking_settings/store';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
const TEST_GITLAB_DSN = 'https://gitlab.example.com/123456';
@ -22,7 +21,6 @@ describe('error tracking settings app', () => {
function mountComponent() {
wrapper = extendedWrapper(
shallowMount(ErrorTrackingSettings, {
localVue,
store, // Override the imported store
propsData: {
initialEnabled: 'true',

View File

@ -1,12 +1,12 @@
import { GlFormInput, GlButton } from '@gitlab/ui';
import { createLocalVue, shallowMount } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import ErrorTrackingForm from '~/error_tracking_settings/components/error_tracking_form.vue';
import createStore from '~/error_tracking_settings/store';
import { defaultProps } from '../mock';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('error tracking settings form', () => {
let wrapper;
@ -14,7 +14,6 @@ describe('error tracking settings form', () => {
function mountComponent() {
wrapper = shallowMount(ErrorTrackingForm, {
localVue,
store,
propsData: defaultProps,
});

View File

@ -1,19 +1,18 @@
import { GlDropdown, GlDropdownItem } from '@gitlab/ui';
import { createLocalVue, shallowMount } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import { pick, clone } from 'lodash';
import Vuex from 'vuex';
import ProjectDropdown from '~/error_tracking_settings/components/project_dropdown.vue';
import { defaultProps, projectList, staleProject } from '../mock';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('error tracking settings project dropdown', () => {
let wrapper;
function mountComponent() {
wrapper = shallowMount(ProjectDropdown, {
localVue,
propsData: {
...pick(
defaultProps,

View File

@ -1,5 +1,6 @@
import { GlAlert, GlEmptyState, GlLoadingIcon } from '@gitlab/ui';
import { mount, createLocalVue } from '@vue/test-utils';
import { mount } from '@vue/test-utils';
import Vue from 'vue';
import MockAdapter from 'axios-mock-adapter';
import Vuex from 'vuex';
import waitForPromises from 'helpers/wait_for_promises';
@ -13,8 +14,7 @@ import axios from '~/lib/utils/axios_utils';
import TablePagination from '~/vue_shared/components/pagination/table_pagination.vue';
import { getRequestData } from '../mock_data';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('Feature flags', () => {
const mockData = {
@ -45,7 +45,6 @@ describe('Feature flags', () => {
const factory = (provide = mockData, fn = mount) => {
store = createStore(mockState);
wrapper = fn(FeatureFlagsComponent, {
localVue,
store,
provide,
stubs: {

View File

@ -1,5 +1,6 @@
import { GlAlert } from '@gitlab/ui';
import { shallowMount, createLocalVue } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import { TEST_HOST } from 'spec/test_constants';
import Form from '~/feature_flags/components/form.vue';
@ -10,8 +11,7 @@ import { allUsersStrategy } from '../mock_data';
const userCalloutId = 'feature_flags_new_version';
const userCalloutsPath = `${TEST_HOST}/user_callouts`;
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('New feature flag form', () => {
let wrapper;
@ -27,7 +27,6 @@ describe('New feature flag form', () => {
wrapper = null;
}
wrapper = shallowMount(NewFeatureFlag, {
localVue,
store,
provide: {
showUserCallout: true,

View File

@ -1,5 +1,6 @@
import { GlDropdown, GlDropdownItem, GlSearchBoxByType, GlLoadingIcon } from '@gitlab/ui';
import { mount, createLocalVue } from '@vue/test-utils';
import { mount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import Api from '~/api';
import GitlabUserList from '~/feature_flags/components/strategies/gitlab_user_list.vue';
@ -12,15 +13,13 @@ const DEFAULT_PROPS = {
strategy: userListStrategy,
};
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('~/feature_flags/components/strategies/gitlab_user_list.vue', () => {
let wrapper;
const factory = (props = {}) =>
mount(GitlabUserList, {
localVue,
store: createStore({ projectId: '1' }),
propsData: { ...DEFAULT_PROPS, ...props },
});

View File

@ -1,5 +1,6 @@
import { GlAlert, GlFormSelect, GlLink, GlToken, GlButton } from '@gitlab/ui';
import { mount, createLocalVue } from '@vue/test-utils';
import { mount } from '@vue/test-utils';
import Vue from 'vue';
import { last } from 'lodash';
import Vuex from 'vuex';
import Api from '~/api';
@ -26,8 +27,7 @@ const provide = {
environmentsEndpoint: '',
};
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('Feature flags strategy', () => {
let wrapper;
@ -48,7 +48,7 @@ describe('Feature flags strategy', () => {
wrapper.destroy();
wrapper = null;
}
wrapper = mount(Strategy, { localVue, store: createStore({ projectId: '1' }), ...opts });
wrapper = mount(Strategy, { store: createStore({ projectId: '1' }), ...opts });
};
beforeEach(() => {

View File

@ -1,5 +1,6 @@
import { GlButton } from '@gitlab/ui';
import { shallowMount, createLocalVue } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import { trimText } from 'helpers/text_helper';
import { mockTracking, unmockTracking } from 'helpers/tracking_helper';
@ -8,8 +9,7 @@ import { createStore } from '~/frequent_items/store';
import ProjectAvatar from '~/vue_shared/components/project_avatar.vue';
import { mockProject } from '../mock_data';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('FrequentItemsListItemComponent', () => {
let wrapper;
@ -40,7 +40,6 @@ describe('FrequentItemsListItemComponent', () => {
provide: {
vuexModule: 'frequentProjects',
},
localVue,
});
};

View File

@ -1,12 +1,12 @@
import { mount, createLocalVue } from '@vue/test-utils';
import { mount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import frequentItemsListComponent from '~/frequent_items/components/frequent_items_list.vue';
import frequentItemsListItemComponent from '~/frequent_items/components/frequent_items_list_item.vue';
import { createStore } from '~/frequent_items/store';
import { mockFrequentProjects } from '../mock_data';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('FrequentItemsListComponent', () => {
let wrapper;
@ -22,7 +22,6 @@ describe('FrequentItemsListComponent', () => {
matcher: 'lab',
...props,
},
localVue,
provide: {
vuexModule: 'frequentProjects',
},

View File

@ -1,12 +1,12 @@
import { GlSearchBoxByType } from '@gitlab/ui';
import { shallowMount, createLocalVue } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import { mockTracking, unmockTracking } from 'helpers/tracking_helper';
import searchComponent from '~/frequent_items/components/frequent_items_search_input.vue';
import { createStore } from '~/frequent_items/store';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('FrequentItemsSearchInputComponent', () => {
let wrapper;
@ -18,7 +18,6 @@ describe('FrequentItemsSearchInputComponent', () => {
shallowMount(searchComponent, {
store,
propsData: { namespace },
localVue,
provide: {
vuexModule: 'frequentProjects',
},

View File

@ -1,13 +1,13 @@
import { GlLoadingIcon } from '@gitlab/ui';
import { shallowMount, createLocalVue } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import Item from '~/ide/components/branches/item.vue';
import List from '~/ide/components/branches/search_list.vue';
import { __ } from '~/locale';
import { branches } from '../../mock_data';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('IDE branches search list', () => {
let wrapper;
@ -31,7 +31,6 @@ describe('IDE branches search list', () => {
});
wrapper = shallowMount(List, {
localVue,
store: fakeStore,
});
};

View File

@ -1,11 +1,11 @@
import { mount, createLocalVue } from '@vue/test-utils';
import { mount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import EditorHeader from '~/ide/components/commit_sidebar/editor_header.vue';
import { createStore } from '~/ide/stores';
import { file } from '../../helpers';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
const TEST_FILE_PATH = 'test/file/path';
@ -16,7 +16,6 @@ describe('IDE commit editor header', () => {
const createComponent = (fileProps = {}) => {
wrapper = mount(EditorHeader, {
store,
localVue,
propsData: {
activeFile: {
...file(TEST_FILE_PATH),

View File

@ -1,10 +1,10 @@
import { GlLoadingIcon } from '@gitlab/ui';
import { mount, createLocalVue } from '@vue/test-utils';
import { mount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import ErrorMessage from '~/ide/components/error_message.vue';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('IDE error message component', () => {
let wrapper;
@ -25,7 +25,6 @@ describe('IDE error message component', () => {
},
},
store: fakeStore,
localVue,
});
};

View File

@ -1,11 +1,11 @@
import { GlLoadingIcon } from '@gitlab/ui';
import { shallowMount, createLocalVue } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import $ from 'jquery';
import Vuex from 'vuex';
import Dropdown from '~/ide/components/file_templates/dropdown.vue';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('IDE file templates dropdown component', () => {
let wrapper;
@ -44,7 +44,6 @@ describe('IDE file templates dropdown component', () => {
...props,
},
store: fakeStore,
localVue,
});
({ element } = wrapper);

View File

@ -1,12 +1,12 @@
import { createLocalVue, mount } from '@vue/test-utils';
import { mount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import FileRowExtra from '~/ide/components/file_row_extra.vue';
import IdeFileRow from '~/ide/components/ide_file_row.vue';
import { createStore } from '~/ide/stores';
import FileRow from '~/vue_shared/components/file_row.vue';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
const TEST_EXTRA_PROPS = {
testattribute: 'abc',
@ -30,7 +30,6 @@ describe('Ide File Row component', () => {
...props,
},
store: createStore(),
localVue,
...options,
});
};

View File

@ -1,4 +1,4 @@
import { createLocalVue, mount } from '@vue/test-utils';
import { mount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import { keepAlive } from 'helpers/keep_alive_component_helper';
@ -9,8 +9,7 @@ import { createStore } from '~/ide/stores';
import { file } from '../helpers';
import { projectData } from '../mock_data';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('IDE review mode', () => {
let wrapper;
@ -28,7 +27,6 @@ describe('IDE review mode', () => {
wrapper = mount(keepAlive(IdeReview), {
store,
localVue,
});
});

View File

@ -1,5 +1,6 @@
import { GlSkeletonLoading } from '@gitlab/ui';
import { mount, createLocalVue } from '@vue/test-utils';
import { mount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import waitForPromises from 'helpers/wait_for_promises';
import IdeReview from '~/ide/components/ide_review.vue';
@ -10,8 +11,7 @@ import { leftSidebarViews } from '~/ide/constants';
import { createStore } from '~/ide/stores';
import { projectData } from '../mock_data';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('IdeSidebar', () => {
let wrapper;
@ -26,7 +26,6 @@ describe('IdeSidebar', () => {
return mount(IdeSidebar, {
store,
localVue,
});
}

View File

@ -1,4 +1,5 @@
import { createLocalVue, shallowMount } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import waitForPromises from 'helpers/wait_for_promises';
import CannotPushCodeAlert from '~/ide/components/cannot_push_code_alert.vue';
@ -9,8 +10,7 @@ import { createStore } from '~/ide/stores';
import { file } from '../helpers';
import { projectData } from '../mock_data';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
const TEST_FORK_IDE_PATH = '/test/ide/path';
@ -34,7 +34,6 @@ describe('WebIDE', () => {
wrapper = shallowMount(Ide, {
store,
localVue,
});
};

View File

@ -1,5 +1,6 @@
import { GlLink } from '@gitlab/ui';
import { createLocalVue, shallowMount } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import IdeStatusList from '~/ide/components/ide_status_list.vue';
import TerminalSyncStatusSafe from '~/ide/components/terminal_sync/terminal_sync_status_safe.vue';
@ -16,8 +17,7 @@ const TEST_FILE_EDITOR = {
};
const TEST_EDITOR_POSITION = `${TEST_FILE_EDITOR.editorRow}:${TEST_FILE_EDITOR.editorColumn}`;
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('ide/components/ide_status_list', () => {
let activeFileEditor;
@ -42,7 +42,6 @@ describe('ide/components/ide_status_list', () => {
});
wrapper = shallowMount(IdeStatusList, {
localVue,
store,
...options,
});

View File

@ -1,4 +1,4 @@
import { mount, createLocalVue } from '@vue/test-utils';
import { mount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import { keepAlive } from 'helpers/keep_alive_component_helper';
@ -7,8 +7,7 @@ import { createStore } from '~/ide/stores';
import { file } from '../helpers';
import { projectData } from '../mock_data';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('IdeTree', () => {
let store;
@ -27,7 +26,6 @@ describe('IdeTree', () => {
wrapper = mount(keepAlive(IdeTree), {
store,
localVue,
});
});

View File

@ -1,11 +1,11 @@
import { GlLoadingIcon } from '@gitlab/ui';
import { shallowMount, mount, createLocalVue } from '@vue/test-utils';
import { shallowMount, mount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import StageList from '~/ide/components/jobs/list.vue';
import Stage from '~/ide/components/jobs/stage.vue';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
const storeActions = {
fetchJobs: jest.fn(),
toggleStageCollapsed: jest.fn(),
@ -42,7 +42,6 @@ describe('IDE stages list', () => {
...defaultProps,
...props,
},
localVue,
store,
});
};
@ -92,7 +91,6 @@ describe('IDE stages list', () => {
wrapper = mount(StageList, {
propsData: { ...defaultProps, stages },
store,
localVue,
});
});

View File

@ -1,4 +1,5 @@
import { mount, createLocalVue } from '@vue/test-utils';
import { mount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import Item from '~/ide/components/merge_requests/item.vue';
import { createRouter } from '~/ide/ide_router';
@ -11,8 +12,7 @@ const TEST_ITEM = {
};
describe('IDE merge request item', () => {
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
let wrapper;
let store;
@ -28,7 +28,6 @@ describe('IDE merge request item', () => {
currentProjectId: TEST_ITEM.projectPathWithNamespace,
...props,
},
localVue,
router,
store,
});

View File

@ -1,13 +1,13 @@
import { GlLoadingIcon } from '@gitlab/ui';
import { shallowMount, createLocalVue } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import Item from '~/ide/components/merge_requests/item.vue';
import List from '~/ide/components/merge_requests/list.vue';
import TokenedInput from '~/ide/components/shared/tokened_input.vue';
import { mergeRequests as mergeRequestsMock } from '../../mock_data';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('IDE merge requests list', () => {
let wrapper;
@ -41,7 +41,6 @@ describe('IDE merge requests list', () => {
wrapper = shallowMount(List, {
store: fakeStore,
localVue,
});
};

View File

@ -1,12 +1,12 @@
import { createLocalVue, shallowMount } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import IdeSidebarNav from '~/ide/components/ide_sidebar_nav.vue';
import CollapsibleSidebar from '~/ide/components/panes/collapsible_sidebar.vue';
import { createStore } from '~/ide/stores';
import paneModule from '~/ide/stores/modules/pane';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('ide/components/panes/collapsible_sidebar.vue', () => {
let wrapper;
@ -17,7 +17,6 @@ describe('ide/components/panes/collapsible_sidebar.vue', () => {
const createComponent = (props) => {
wrapper = shallowMount(CollapsibleSidebar, {
localVue,
store,
propsData: {
extensionTabs: [],
@ -46,7 +45,7 @@ describe('ide/components/panes/collapsible_sidebar.vue', () => {
let extensionTabs;
beforeEach(() => {
const FakeComponent = localVue.component(fakeComponentName, {
const FakeComponent = Vue.component(fakeComponentName, {
render: () => null,
});

View File

@ -1,4 +1,4 @@
import { createLocalVue, shallowMount } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import CollapsibleSidebar from '~/ide/components/panes/collapsible_sidebar.vue';
@ -7,8 +7,7 @@ import { rightSidebarViews } from '~/ide/constants';
import { createStore } from '~/ide/stores';
import extendStore from '~/ide/stores/extend';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('ide/components/panes/right.vue', () => {
let wrapper;
@ -18,7 +17,6 @@ describe('ide/components/panes/right.vue', () => {
extendStore(store, document.createElement('div'));
wrapper = shallowMount(RightPane, {
localVue,
store,
propsData: {
...props,

View File

@ -1,5 +1,6 @@
import { GlLoadingIcon } from '@gitlab/ui';
import { shallowMount, createLocalVue } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import smooshpack from 'smooshpack';
import Vuex from 'vuex';
import Clientside from '~/ide/components/preview/clientside.vue';
@ -9,8 +10,7 @@ jest.mock('smooshpack', () => ({
Manager: jest.fn(),
}));
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
const dummyPackageJson = () => ({
raw: JSON.stringify({
@ -67,7 +67,6 @@ describe('IDE clientside preview', () => {
wrapper = shallowMount(Clientside, {
store,
localVue,
});
};

View File

@ -1,5 +1,6 @@
import { GlTab } from '@gitlab/ui';
import { mount, createLocalVue } from '@vue/test-utils';
import { mount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import { stubComponent } from 'helpers/stub_component';
import RepoTab from '~/ide/components/repo_tab.vue';
@ -7,8 +8,7 @@ import { createRouter } from '~/ide/ide_router';
import { createStore } from '~/ide/stores';
import { file } from '../helpers';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
const GlTabStub = stubComponent(GlTab, {
template: '<li><slot name="title" /></li>',
@ -23,7 +23,6 @@ describe('RepoTab', () => {
function createComponent(propsData) {
wrapper = mount(RepoTab, {
localVue,
store,
propsData,
stubs: {

View File

@ -1,11 +1,11 @@
import { mount, createLocalVue } from '@vue/test-utils';
import { mount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import RepoTabs from '~/ide/components/repo_tabs.vue';
import { createStore } from '~/ide/stores';
import { file } from '../helpers';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('RepoTabs', () => {
let wrapper;
@ -22,7 +22,6 @@ describe('RepoTabs', () => {
activeFile: file('activeFile'),
},
store,
localVue,
});
});

View File

@ -1,4 +1,5 @@
import { shallowMount, createLocalVue } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import ResizablePanel from '~/ide/components/resizable_panel.vue';
import { SIDE_LEFT, SIDE_RIGHT } from '~/ide/constants';
@ -8,8 +9,7 @@ const TEST_WIDTH = 500;
const TEST_MIN_WIDTH = 400;
describe('~/ide/components/resizable_panel', () => {
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
let wrapper;
let store;
@ -33,7 +33,6 @@ describe('~/ide/components/resizable_panel', () => {
...props,
},
store,
localVue,
});
};
const findResizer = () => wrapper.find(PanelResizer);

View File

@ -1,5 +1,6 @@
import { GlButton } from '@gitlab/ui';
import { createLocalVue, shallowMount } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import TerminalSession from '~/ide/components/terminal/session.vue';
import Terminal from '~/ide/components/terminal/terminal.vue';
@ -13,8 +14,7 @@ import {
const TEST_TERMINAL_PATH = 'terminal/path';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('IDE TerminalSession', () => {
let wrapper;
@ -33,7 +33,6 @@ describe('IDE TerminalSession', () => {
});
wrapper = shallowMount(TerminalSession, {
localVue,
store,
...options,
});

View File

@ -1,4 +1,5 @@
import { shallowMount, createLocalVue } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import waitForPromises from 'helpers/wait_for_promises';
import { TEST_HOST } from 'spec/test_constants';
@ -9,8 +10,7 @@ import TerminalView from '~/ide/components/terminal/view.vue';
const TEST_HELP_PATH = `${TEST_HOST}/help`;
const TEST_SVG_PATH = `${TEST_HOST}/illustration.svg`;
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('IDE TerminalView', () => {
let state;
@ -30,7 +30,7 @@ describe('IDE TerminalView', () => {
},
});
wrapper = shallowMount(TerminalView, { localVue, store });
wrapper = shallowMount(TerminalView, { store });
// Uses deferred components, so wait for those to load...
await waitForPromises();

View File

@ -1,10 +1,10 @@
import { createLocalVue, shallowMount } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import TerminalSyncStatus from '~/ide/components/terminal_sync/terminal_sync_status.vue';
import TerminalSyncStatusSafe from '~/ide/components/terminal_sync/terminal_sync_status_safe.vue';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('ide/components/terminal_sync/terminal_sync_status_safe', () => {
let store;
@ -16,7 +16,6 @@ describe('ide/components/terminal_sync/terminal_sync_status_safe', () => {
});
wrapper = shallowMount(TerminalSyncStatusSafe, {
localVue,
store,
});
};

View File

@ -1,5 +1,6 @@
import { GlLoadingIcon, GlIcon } from '@gitlab/ui';
import { createLocalVue, shallowMount } from '@vue/test-utils';
import { shallowMount } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import TerminalSyncStatus from '~/ide/components/terminal_sync/terminal_sync_status.vue';
import {
@ -11,8 +12,7 @@ import {
const TEST_MESSAGE = 'lorem ipsum dolar sit';
const START_LOADING = 'START_LOADING';
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('ide/components/terminal_sync/terminal_sync_status', () => {
let moduleState;
@ -35,7 +35,6 @@ describe('ide/components/terminal_sync/terminal_sync_status', () => {
});
wrapper = shallowMount(TerminalSyncStatus, {
localVue,
store,
});
};

View File

@ -1,4 +1,4 @@
import { createLocalVue } from '@vue/test-utils';
import Vue from 'vue';
import Vuex from 'vuex';
import { TEST_HOST } from 'helpers/test_constants';
import terminalModule from '~/ide/stores/modules/terminal';
@ -11,8 +11,7 @@ const TEST_DATASET = {
eeWebTerminalConfigHelpPath: `${TEST_HOST}/web/terminal/config/help`,
eeWebTerminalRunnersHelpPath: `${TEST_HOST}/web/terminal/runners/help`,
};
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
describe('ide/stores/extend', () => {
let store;

View File

@ -1,6 +1,6 @@
import { GlLoadingIcon, GlButton, GlIntersectionObserver, GlFormInput } from '@gitlab/ui';
import { createLocalVue, shallowMount } from '@vue/test-utils';
import { nextTick } from 'vue';
import { shallowMount } from '@vue/test-utils';
import Vue, { nextTick } from 'vue';
import Vuex from 'vuex';
import { STATUSES } from '~/import_entities/constants';
import ImportProjectsTable from '~/import_entities/import_projects/components/import_projects_table.vue';
@ -46,8 +46,7 @@ describe('ImportProjectsTable', () => {
filterable,
paginatable,
} = {}) {
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
const store = new Vuex.Store({
state: { ...state(), defaultTargetNamespace: USER_NAMESPACE, ...initialState },
@ -67,7 +66,6 @@ describe('ImportProjectsTable', () => {
});
wrapper = shallowMount(ImportProjectsTable, {
localVue,
store,
propsData: {
providerTitle,

View File

@ -1,6 +1,6 @@
import { GlBadge, GlButton, GlDropdown } from '@gitlab/ui';
import { createLocalVue, shallowMount } from '@vue/test-utils';
import { nextTick } from 'vue';
import { shallowMount } from '@vue/test-utils';
import Vue, { nextTick } from 'vue';
import Vuex from 'vuex';
import { STATUSES } from '~/import_entities//constants';
import ImportGroupDropdown from '~/import_entities/components/group_dropdown.vue';
@ -38,13 +38,11 @@ describe('ProviderRepoTableRow', () => {
};
function mountComponent(props) {
const localVue = createLocalVue();
localVue.use(Vuex);
Vue.use(Vuex);
const store = initStore();
wrapper = shallowMount(ProviderRepoTableRow, {
localVue,
store,
propsData: { availableNamespaces, userNamespace, ...props },
});

Some files were not shown because too many files have changed in this diff Show More