Commit 6d60f910 authored by GitLab Bot's avatar GitLab Bot

Add latest changes from gitlab-org/gitlab@master

parent de2ae315
...@@ -34,7 +34,7 @@ export default { ...@@ -34,7 +34,7 @@ export default {
<template> <template>
<span> <span>
<span ref="issueTimeEstimate" class="board-card-info card-number"> <span ref="issueTimeEstimate" class="board-card-info card-number">
<icon name="hourglass" css-classes="board-card-info-icon align-top" /><time <icon name="hourglass" class="board-card-info-icon align-top" /><time
class="board-card-info-text" class="board-card-info-text"
>{{ timeEstimate }}</time >{{ timeEstimate }}</time
> >
......
...@@ -34,7 +34,7 @@ export default { ...@@ -34,7 +34,7 @@ export default {
class="more-actions-toggle btn btn-transparent p-0" class="more-actions-toggle btn btn-transparent p-0"
data-toggle="dropdown" data-toggle="dropdown"
> >
<icon css-classes="icon" name="ellipsis_v" /> <icon class="icon" name="ellipsis_v" />
</gl-button> </gl-button>
<ul class="more-actions-dropdown dropdown-menu dropdown-open-left"> <ul class="more-actions-dropdown dropdown-menu dropdown-open-left">
<slot name="dropdown-options"></slot> <slot name="dropdown-options"></slot>
......
...@@ -100,7 +100,7 @@ export default { ...@@ -100,7 +100,7 @@ export default {
<template slot="lastSeen" slot-scope="errors"> <template slot="lastSeen" slot-scope="errors">
<div class="d-flex align-items-center"> <div class="d-flex align-items-center">
<icon name="calendar" css-classes="text-secondary mr-1" /> <icon name="calendar" class="text-secondary mr-1" />
<time-ago :time="errors.item.lastSeen" class="text-secondary" /> <time-ago :time="errors.item.lastSeen" class="text-secondary" />
</div> </div>
</template> </template>
......
...@@ -56,7 +56,7 @@ export default { ...@@ -56,7 +56,7 @@ export default {
class="leave-group btn btn-xs no-expand" class="leave-group btn btn-xs no-expand"
@click.prevent="onLeaveGroup" @click.prevent="onLeaveGroup"
> >
<icon name="leave" css-classes="position-top-0" /> <icon name="leave" class="position-top-0" />
</a> </a>
<a <a
v-if="group.canEdit" v-if="group.canEdit"
...@@ -68,7 +68,7 @@ export default { ...@@ -68,7 +68,7 @@ export default {
data-placement="bottom" data-placement="bottom"
class="edit-group btn btn-xs no-expand" class="edit-group btn btn-xs no-expand"
> >
<icon name="settings" css-classes="position-top-0" /> <icon name="settings" class="position-top-0" />
</a> </a>
</div> </div>
</template> </template>
...@@ -86,7 +86,7 @@ export default { ...@@ -86,7 +86,7 @@ export default {
data-placement="left" data-placement="left"
class="append-bottom-10" class="append-bottom-10"
> >
<icon :name="additionIconName" :size="18" :css-classes="addedFilesIconClass" /> <icon :name="additionIconName" :size="18" :class="addedFilesIconClass" />
</div> </div>
{{ addedFilesLength }} {{ addedFilesLength }}
<div <div
...@@ -96,7 +96,7 @@ export default { ...@@ -96,7 +96,7 @@ export default {
data-placement="left" data-placement="left"
class="prepend-top-10 append-bottom-10" class="prepend-top-10 append-bottom-10"
> >
<icon :name="modifiedIconName" :size="18" :css-classes="modifiedFilesClass" /> <icon :name="modifiedIconName" :size="18" :class="modifiedFilesClass" />
</div> </div>
{{ modifiedFilesLength }} {{ modifiedFilesLength }}
</div> </div>
......
...@@ -114,7 +114,7 @@ export default { ...@@ -114,7 +114,7 @@ export default {
</span> </span>
<div class="ml-auto d-flex align-items-center"> <div class="ml-auto d-flex align-items-center">
<div class="d-flex align-items-center ide-commit-list-changed-icon"> <div class="d-flex align-items-center ide-commit-list-changed-icon">
<icon :name="iconName" :size="16" :css-classes="iconClass" /> <icon :name="iconName" :size="16" :class="iconClass" />
</div> </div>
</div> </div>
</div> </div>
......
...@@ -28,7 +28,7 @@ export default { ...@@ -28,7 +28,7 @@ export default {
rel="noopener noreferrer" rel="noopener noreferrer"
> >
<span class="vertical-align-middle">{{ __('Open in file view') }}</span> <span class="vertical-align-middle">{{ __('Open in file view') }}</span>
<icon :size="16" name="external-link" css-classes="vertical-align-middle space-right" /> <icon :size="16" name="external-link" class="vertical-align-middle space-right" />
</a> </a>
</div> </div>
</template> </template>
...@@ -79,7 +79,7 @@ export default { ...@@ -79,7 +79,7 @@ export default {
data-container="body" data-container="body"
data-placement="right" data-placement="right"
name="file-modified" name="file-modified"
css-classes="prepend-left-5 ide-file-modified" class="prepend-left-5 ide-file-modified"
/> />
</span> </span>
<changed-file-icon <changed-file-icon
......
...@@ -77,7 +77,7 @@ export default { ...@@ -77,7 +77,7 @@ export default {
<div v-if="!stage.isLoading || stage.jobs.length" class="append-right-8 prepend-left-4"> <div v-if="!stage.isLoading || stage.jobs.length" class="append-right-8 prepend-left-4">
<span class="badge badge-pill"> {{ jobsCount }} </span> <span class="badge badge-pill"> {{ jobsCount }} </span>
</div> </div>
<icon :name="collapseIcon" css-classes="ide-stage-collapse-icon" /> <icon :name="collapseIcon" class="ide-stage-collapse-icon" />
</div> </div>
<div v-show="!stage.isCollapsed" class="card-body"> <div v-show="!stage.isCollapsed" class="card-body">
<gl-loading-icon v-if="showLoadingIcon" /> <gl-loading-icon v-if="showLoadingIcon" />
......
...@@ -18,6 +18,6 @@ export default { ...@@ -18,6 +18,6 @@ export default {
:title="__('Part of merge request changes')" :title="__('Part of merge request changes')"
:size="12" :size="12"
name="git-merge" name="git-merge"
css-classes="append-right-8" class="append-right-8"
/> />
</template> </template>
...@@ -52,7 +52,7 @@ export default { ...@@ -52,7 +52,7 @@ export default {
class="btn-blank" class="btn-blank"
@click.stop.prevent="clicked" @click.stop.prevent="clicked"
> >
<icon :name="icon" :css-classes="iconClasses" /> <icon :name="icon" :class="iconClasses" />
<template v-if="showLabel"> <template v-if="showLabel">
{{ label }} {{ label }}
</template> </template>
......
...@@ -29,6 +29,6 @@ export default { ...@@ -29,6 +29,6 @@ export default {
<template> <template>
<span v-if="file.file_lock" v-tooltip :title="lockTooltip" data-container="body"> <span v-if="file.file_lock" v-tooltip :title="lockTooltip" data-container="body">
<icon name="lock" css-classes="file-status-icon" /> <icon name="lock" class="file-status-icon" />
</span> </span>
</template> </template>
...@@ -149,9 +149,9 @@ export default { ...@@ -149,9 +149,9 @@ export default {
title="Add reaction" title="Add reaction"
data-position="right" data-position="right"
> >
<icon css-classes="link-highlight award-control-icon-neutral" name="slight-smile" /> <icon class="link-highlight award-control-icon-neutral" name="slight-smile" />
<icon css-classes="link-highlight award-control-icon-positive" name="smiley" /> <icon class="link-highlight award-control-icon-positive" name="smiley" />
<icon css-classes="link-highlight award-control-icon-super-positive" name="smiley" /> <icon class="link-highlight award-control-icon-super-positive" name="smiley" />
</a> </a>
</div> </div>
<reply-button <reply-button
...@@ -168,7 +168,7 @@ export default { ...@@ -168,7 +168,7 @@ export default {
class="note-action-button js-note-edit btn btn-transparent qa-note-edit-button" class="note-action-button js-note-edit btn btn-transparent qa-note-edit-button"
@click="onEdit" @click="onEdit"
> >
<icon name="pencil" css-classes="link-highlight" /> <icon name="pencil" class="link-highlight" />
</button> </button>
</div> </div>
<div v-if="showDeleteAction" class="note-actions-item"> <div v-if="showDeleteAction" class="note-actions-item">
...@@ -191,7 +191,7 @@ export default { ...@@ -191,7 +191,7 @@ export default {
data-toggle="dropdown" data-toggle="dropdown"
@click="closeTooltip" @click="closeTooltip"
> >
<icon css-classes="icon" name="ellipsis_v" /> <icon class="icon" name="ellipsis_v" />
</button> </button>
<ul class="dropdown-menu more-actions-dropdown dropdown-open-left"> <ul class="dropdown-menu more-actions-dropdown dropdown-open-left">
<li v-if="canReportAsAbuse"> <li v-if="canReportAsAbuse">
......
...@@ -26,7 +26,7 @@ export default { ...@@ -26,7 +26,7 @@ export default {
:title="__('Reply to comment')" :title="__('Reply to comment')"
@click="$emit('startReplying')" @click="$emit('startReplying')"
> >
<icon name="comment" css-classes="link-highlight" /> <icon name="comment" class="link-highlight" />
</gl-button> </gl-button>
</div> </div>
</template> </template>
...@@ -194,9 +194,9 @@ export default { ...@@ -194,9 +194,9 @@ export default {
v-show="noEmoji" v-show="noEmoji"
class="js-no-emoji-placeholder no-emoji-placeholder position-relative" class="js-no-emoji-placeholder no-emoji-placeholder position-relative"
> >
<icon name="slight-smile" css-classes="award-control-icon-neutral" /> <icon name="slight-smile" class="award-control-icon-neutral" />
<icon name="smiley" css-classes="award-control-icon-positive" /> <icon name="smiley" class="award-control-icon-positive" />
<icon name="smile" css-classes="award-control-icon-super-positive" /> <icon name="smile" class="award-control-icon-super-positive" />
</span> </span>
</button> </button>
</span> </span>
......
...@@ -82,11 +82,7 @@ export default { ...@@ -82,11 +82,7 @@ export default {
data-boundary="viewport" data-boundary="viewport"
@click="handleButtonClick" @click="handleButtonClick"
> >
<icon <icon v-show="collapsed" :class="collapsedButtonIconClasses" :name="collapsedButtonIcon" />
v-show="collapsed"
:css-classes="collapsedButtonIconClasses"
:name="collapsedButtonIcon"
/>
<span v-show="!collapsed" class="issuable-todo-inner"> {{ buttonLabel }} </span> <span v-show="!collapsed" class="issuable-todo-inner"> {{ buttonLabel }} </span>
<gl-loading-icon v-show="isActionActive" :inline="true" /> <gl-loading-icon v-show="isActionActive" :inline="true" />
</button> </button>
......
...@@ -19,6 +19,6 @@ export default { ...@@ -19,6 +19,6 @@ export default {
</script> </script>
<template> <template>
<a :href="link" target="_blank" rel="noopener noreferrer nofollow" :class="cssClass"> <a :href="link" target="_blank" rel="noopener noreferrer nofollow" :class="cssClass">
{{ __('View app') }} <icon css-classes="fgray" name="external-link" /> {{ __('View app') }} <icon class="fgray" name="external-link" />
</a> </a>
</template> </template>
...@@ -83,7 +83,7 @@ export default { ...@@ -83,7 +83,7 @@ export default {
:class="{ 'ml-auto': isCentered }" :class="{ 'ml-auto': isCentered }"
class="file-changed-icon d-inline-block" class="file-changed-icon d-inline-block"
> >
<icon v-if="showIcon" :name="changedIcon" :size="size" :css-classes="changedIconClass" /> <icon v-if="showIcon" :name="changedIcon" :size="size" :class="changedIconClass" />
</span> </span>
</template> </template>
......
...@@ -66,5 +66,5 @@ export default { ...@@ -66,5 +66,5 @@ export default {
}; };
</script> </script>
<template> <template>
<span :class="cssClass"> <icon :name="icon" :size="size" :css-classes="cssClasses" /> </span> <span :class="cssClass"> <icon :name="icon" :size="size" :class="cssClasses" /> </span>
</template> </template>
...@@ -40,7 +40,7 @@ export default { ...@@ -40,7 +40,7 @@ export default {
</template> </template>
</p> </p>
<gl-link :href="path" class="btn btn-default" rel="nofollow" download target="_blank"> <gl-link :href="path" class="btn btn-default" rel="nofollow" download target="_blank">
<icon :size="16" name="download" css-classes="float-left append-right-8" /> <icon :size="16" name="download" class="float-left append-right-8" />
{{ __('Download') }} {{ __('Download') }}
</gl-link> </gl-link>
</div> </div>
......
...@@ -75,7 +75,7 @@ export default { ...@@ -75,7 +75,7 @@ export default {
<svg v-if="!loading && !folder" :class="[iconSizeClass, cssClasses]"> <svg v-if="!loading && !folder" :class="[iconSizeClass, cssClasses]">
<use v-bind="{ 'xlink:href': spriteHref }" /> <use v-bind="{ 'xlink:href': spriteHref }" />
</svg> </svg>
<icon v-if="!loading && folder" :name="folderIconName" :size="size" css-classes="folder-icon" /> <icon v-if="!loading && folder" :name="folderIconName" :size="size" class="folder-icon" />
<gl-loading-icon v-if="loading" :inline="true" /> <gl-loading-icon v-if="loading" :inline="true" />
</span> </span>
</template> </template>
...@@ -27,7 +27,7 @@ if (process.env.NODE_ENV !== 'production') { ...@@ -27,7 +27,7 @@ if (process.env.NODE_ENV !== 'production') {
* <icon * <icon
* name="retry" * name="retry"
* :size="32" * :size="32"
* css-classes="top" * class="top"
* /> * />
*/ */
export default { export default {
...@@ -42,45 +42,7 @@ export default { ...@@ -42,45 +42,7 @@ export default {
type: Number, type: Number,
required: false, required: false,
default: 16, default: 16,
validator(value) { validator: value => validSizes.includes(value),
return validSizes.includes(value);
},
},
cssClasses: {
type: String,
required: false,
default: '',
},
width: {
type: Number,
required: false,
default: null,
},
height: {
type: Number,
required: false,
default: null,
},
y: {
type: Number,
required: false,
default: null,
},
x: {
type: Number,
required: false,
default: null,
},
tabIndex: {
type: String,
required: false,
default: null,
}, },
}, },
...@@ -99,15 +61,7 @@ export default { ...@@ -99,15 +61,7 @@ export default {
</script> </script>
<template> <template>
<svg <svg :class="[iconSizeClass, iconTestClass]" aria-hidden="true">
:class="[iconSizeClass, iconTestClass, cssClasses]"
:width="width"
:height="height"
:x="x"
:y="y"
:tabindex="tabIndex"
aria-hidden="true"
>
<use v-bind="{ 'xlink:href': spriteHref }" /> <use v-bind="{ 'xlink:href': spriteHref }" />
</svg> </svg>
</template> </template>
...@@ -63,7 +63,7 @@ export default { ...@@ -63,7 +63,7 @@ export default {
<icon <icon
v-if="hasState" v-if="hasState"
ref="iconElementXL" ref="iconElementXL"
:css-classes="iconClass" :class="iconClass"
:name="iconName" :name="iconName"
:size="16" :size="16"
:title="stateTitle" :title="stateTitle"
...@@ -100,7 +100,7 @@ export default { ...@@ -100,7 +100,7 @@ export default {
<span ref="iconElement"> <span ref="iconElement">
<icon <icon
v-if="hasState" v-if="hasState"
:css-classes="iconClass" :class="iconClass"
:name="iconName" :name="iconName"
:title="stateTitle" :title="stateTitle"
:aria-label="state" :aria-label="state"
......
...@@ -74,7 +74,7 @@ export default { ...@@ -74,7 +74,7 @@ export default {
@click="toggleFeature" @click="toggleFeature"
> >
<gl-loading-icon class="loading-icon" /> <gl-loading-icon class="loading-icon" />
<span class="toggle-icon"> <icon :name="toggleIcon" css-classes="toggle-icon-svg" /> </span> <span class="toggle-icon"> <icon :name="toggleIcon" class="toggle-icon-svg" /> </span>
</button> </button>
</label> </label>
</template> </template>
...@@ -71,15 +71,11 @@ export default { ...@@ -71,15 +71,11 @@ export default {
</div> </div>
<div class="text-secondary"> <div class="text-secondary">
<div v-if="user.bio" class="js-bio d-flex mb-1"> <div v-if="user.bio" class="js-bio d-flex mb-1">
<icon name="profile" css-classes="category-icon flex-shrink-0" /> <icon name="profile" class="category-icon flex-shrink-0" />
<span class="ml-1">{{ user.bio }}</span> <span class="ml-1">{{ user.bio }}</span>
</div> </div>
<div v-if="user.organization" class="js-organization d-flex mb-1"> <div v-if="user.organization" class="js-organization d-flex mb-1">
<icon <icon v-show="!jobInfoIsLoading" name="work" class="category-icon flex-shrink-0" />
v-show="!jobInfoIsLoading"
name="work"
css-classes="category-icon flex-shrink-0"
/>
<span class="ml-1">{{ user.organization }}</span> <span class="ml-1">{{ user.organization }}</span>
</div> </div>
<gl-skeleton-loading <gl-skeleton-loading
...@@ -92,7 +88,7 @@ export default { ...@@ -92,7 +88,7 @@ export default {
<icon <icon
v-show="!locationIsLoading && user.location" v-show="!locationIsLoading && user.location"
name="location" name="location"
css-classes="category-icon flex-shrink-0" class="category-icon flex-shrink-0"
/> />
<span class="ml-1">{{ user.location }}</span> <span class="ml-1">{{ user.location }}</span>
<gl-skeleton-loading <gl-skeleton-loading
......
...@@ -20,6 +20,7 @@ ActiveSupport::Inflector.inflections do |inflect| ...@@ -20,6 +20,7 @@ ActiveSupport::Inflector.inflections do |inflect|
file_registry file_registry
job_artifact_registry job_artifact_registry
container_repository_registry container_repository_registry
design_registry
vulnerability_feedback vulnerability_feedback
vulnerabilities_feedback vulnerabilities_feedback
group_view group_view
......
...@@ -54,5 +54,7 @@ if !Rails.env.test? && Gitlab::Metrics.prometheus_metrics_enabled? ...@@ -54,5 +54,7 @@ if !Rails.env.test? && Gitlab::Metrics.prometheus_metrics_enabled?
elsif defined?(::Puma) elsif defined?(::Puma)
Gitlab::Metrics::Samplers::PumaSampler.instance(Settings.monitoring.puma_sampler_interval).start Gitlab::Metrics::Samplers::PumaSampler.instance(Settings.monitoring.puma_sampler_interval).start
end end
Gitlab::Metrics::RequestsRackMiddleware.initialize_http_request_duration_seconds
end end
end end
...@@ -59,8 +59,8 @@ export default { ...@@ -59,8 +59,8 @@ export default {
<template> <template>
<icon <icon
name="issues" name="issues"
:size="72" :size="24"
css-classes="icon-danger" class="icon-danger"
/> />
</template> </template>
``` ```
......
...@@ -3,6 +3,18 @@ ...@@ -3,6 +3,18 @@
module Gitlab module Gitlab
module Metrics module Metrics
class RequestsRackMiddleware class RequestsRackMiddleware
HTTP_METHODS = {
"delete" => %w(200 202 204 303 400 401 403 404 410 422 500 503),
"get" => %w(200 204 301 302 303 304 307 400 401 403 404 410 412 422 429 500 503),
"head" => %w(200 204 301 302 303 304 400 401 403 404 410 429 500 503),
"options" => %w(200 404),
"patch" => %w(200 202 204 400 403 404 409 416 422 500),
"post" => %w(200 201 202 204 301 302 303 304 400 401 403 404 406 409 410 412 413 415 422 429 500 503),
"propfind" => %w(404),
"put" => %w(200 202 204 400 401 403 404 405 406 409 410 415 422 500),
"report" => %w(404)
}.freeze
def initialize(app) def initialize(app)
@app = app @app = app
end end
...@@ -20,6 +32,14 @@ module Gitlab ...@@ -20,6 +32,14 @@ module Gitlab
{}, [0.05, 0.1, 0.25, 0.5, 0.7, 1, 2.5, 5, 10, 25]) {}, [0.05, 0.1, 0.25, 0.5, 0.7, 1, 2.5, 5, 10, 25])
end end
def self.initialize_http_request_duration_seconds
HTTP_METHODS.each do |method, statuses|
statuses.each do |status|
http_request_duration_seconds.get({ method: method, status: status })
end
end
end
def call(env) def call(env)
method = env['REQUEST_METHOD'].downcase method = env['REQUEST_METHOD'].downcase
started = Time.now.to_f started = Time.now.to_f
......
...@@ -3,11 +3,8 @@ ...@@ -3,11 +3,8 @@
module QA module QA
context 'Manage with IP rate limits', :requires_admin do context 'Manage with IP rate limits', :requires_admin do
describe 'Users API' do describe 'Users API' do
before(:context) do let(:api_client) { Runtime::API::Client.new(:gitlab, ip_limits: true) }
@api_client = Runtime::API::Client.new(:gitlab, ip_limits: true) let(:request) { Runtime::API::Request.new(api_client, '/users') }
end
let(:request) { Runtime::API::Request.new(@api_client, '/users') }
it 'GET /users' do it 'GET /users' do
5.times do 5.times do
......
...@@ -8,7 +8,7 @@ module QA ...@@ -8,7 +8,7 @@ module QA
describe 'Compare archives of different user projects with the same name and check they\'re different' do describe 'Compare archives of different user projects with the same name and check they\'re different' do
include Support::Api include Support::Api
before(:all) do before do
@project_name = "project-archive-download-#{SecureRandom.hex(8)}" @project_name = "project-archive-download-#{SecureRandom.hex(8)}"
@archive_types = %w(tar.gz tar.bz2 tar zip) @archive_types = %w(tar.gz tar.bz2 tar zip)
@users = { @users = {
......
...@@ -11,7 +11,6 @@ exports[`JumpToNextDiscussionButton matches the snapshot 1`] = ` ...@@ -11,7 +11,6 @@ exports[`JumpToNextDiscussionButton matches the snapshot 1`] = `
title="" title=""
> >
<icon-stub <icon-stub
cssclasses=""
name="comment-next" name="comment-next"
size="16" size="16"
/> />
......
...@@ -14,7 +14,6 @@ exports[`Confidential Issue Sidebar Block renders for isConfidential = false and ...@@ -14,7 +14,6 @@ exports[`Confidential Issue Sidebar Block renders for isConfidential = false and
> >
<icon-stub <icon-stub
aria-hidden="true" aria-hidden="true"
cssclasses=""
name="eye" name="eye"
size="16" size="16"
/> />
...@@ -40,7 +39,6 @@ exports[`Confidential Issue Sidebar Block renders for isConfidential = false and ...@@ -40,7 +39,6 @@ exports[`Confidential Issue Sidebar Block renders for isConfidential = false and
<icon-stub <icon-stub
aria-hidden="true" aria-hidden="true"
class="sidebar-item-icon inline" class="sidebar-item-icon inline"
cssclasses=""
name="eye" name="eye"
size="16" size="16"
/> />
...@@ -68,7 +66,6 @@ exports[`Confidential Issue Sidebar Block renders for isConfidential = false and ...@@ -68,7 +66,6 @@ exports[`Confidential Issue Sidebar Block renders for isConfidential = false and
> >
<icon-stub <icon-stub
aria-hidden="true" aria-hidden="true"
cssclasses=""
name="eye" name="eye"
size="16" size="16"
/> />
...@@ -104,7 +101,6 @@ exports[`Confidential Issue Sidebar Block renders for isConfidential = false and ...@@ -104,7 +101,6 @@ exports[`Confidential Issue Sidebar Block renders for isConfidential = false and
<icon-stub <icon-stub
aria-hidden="true" aria-hidden="true"
class="sidebar-item-icon inline" class="sidebar-item-icon inline"
cssclasses=""
name="eye" name="eye"
size="16" size="16"
/> />
...@@ -132,7 +128,6 @@ exports[`Confidential Issue Sidebar Block renders for isConfidential = true and ...@@ -132,7 +128,6 @@ exports[`Confidential Issue Sidebar Block renders for isConfidential = true and
> >
<icon-stub <icon-stub
aria-hidden="true" aria-hidden="true"
cssclasses=""
name="eye-slash" name="eye-slash"
size="16" size="16"
/> />
...@@ -158,7 +153,6 @@ exports[`Confidential Issue Sidebar Block renders for isConfidential = true and ...@@ -158,7 +153,6 @@ exports[`Confidential Issue Sidebar Block renders for isConfidential = true and
<icon-stub <icon-stub
aria-hidden="true" aria-hidden="true"
class="sidebar-item-icon inline is-active" class="sidebar-item-icon inline is-active"
cssclasses=""
name="eye-slash" name="eye-slash"
size="16" size="16"
/> />
...@@ -186,7 +180,6 @@ exports[`Confidential Issue Sidebar Block renders for isConfidential = true and ...@@ -186,7 +180,6 @@ exports[`Confidential Issue Sidebar Block renders for isConfidential = true and
> >
<icon-stub <icon-stub
aria-hidden="true" aria-hidden="true"
cssclasses=""
name="eye-slash" name="eye-slash"
size="16" size="16"
/> />
...@@ -222,7 +215,6 @@ exports[`Confidential Issue Sidebar Block renders for isConfidential = true and ...@@ -222,7 +215,6 @@ exports[`Confidential Issue Sidebar Block renders for isConfidential = true and
<icon-stub <icon-stub
aria-hidden="true" aria-hidden="true"
class="sidebar-item-icon inline is-active" class="sidebar-item-icon inline is-active"
cssclasses=""
name="eye-slash" name="eye-slash"
size="16" size="16"
/> />
......
...@@ -14,7 +14,7 @@ exports[`SidebarTodo template renders component container element with proper da ...@@ -14,7 +14,7 @@ exports[`SidebarTodo template renders component container element with proper da
type="button" type="button"
> >
<icon-stub <icon-stub
cssclasses="todo-undone" class="todo-undone"
name="todo-done" name="todo-done"
size="16" size="16"
style="display: none;" style="display: none;"
......
...@@ -44,7 +44,12 @@ describe('SidebarTodo', () => { ...@@ -44,7 +44,12 @@ describe('SidebarTodo', () => {
({ isTodo, iconClass, label, icon }) => { ({ isTodo, iconClass, label, icon }) => {
createComponent({ isTodo }); createComponent({ isTodo });
expect(wrapper.find(Icon).props('cssClasses')).toStrictEqual(iconClass); expect(
wrapper
.find(Icon)
.classes()
.join(' '),
).toStrictEqual(iconClass);
expect(wrapper.find(Icon).props('name')).toStrictEqual(icon); expect(wrapper.find(Icon).props('name')).toStrictEqual(icon);
expect(wrapper.find('button').text()).toBe(label); expect(wrapper.find('button').text()).toBe(label);
}, },
......
...@@ -28,10 +28,7 @@ describe('Changed file icon', () => { ...@@ -28,10 +28,7 @@ describe('Changed file icon', () => {
const findIcon = () => wrapper.find(Icon); const findIcon = () => wrapper.find(Icon);
const findIconName = () => findIcon().props('name'); const findIconName = () => findIcon().props('name');
const findIconClasses = () => const findIconClasses = () => findIcon().classes();
findIcon()
.props('cssClasses')
.split(' ');
const findTooltipText = () => wrapper.attributes('data-original-title'); const findTooltipText = () => wrapper.attributes('data-original-title');
it('with isCentered true, adds center class', () => { it('with isCentered true, adds center class', () => {
......
...@@ -49,7 +49,7 @@ describe('File Icon component', () => { ...@@ -49,7 +49,7 @@ describe('File Icon component', () => {
}); });
expect(findIcon().exists()).toBe(false); expect(findIcon().exists()).toBe(false);
expect(wrapper.find(Icon).props('cssClasses')).toContain('folder-icon'); expect(wrapper.find(Icon).classes()).toContain('folder-icon');
}); });
it('should render a loading icon', () => { it('should render a loading icon', () => {
......
...@@ -12,8 +12,6 @@ describe('Sprite Icon Component', function() { ...@@ -12,8 +12,6 @@ describe('Sprite Icon Component', function() {
icon = mountComponent(IconComponent, { icon = mountComponent(IconComponent, {
name: 'commit', name: 'commit',
size: 32, size: 32,
cssClasses: 'extraclasses',
tabIndex: '0',
}); });
}); });
...@@ -47,10 +45,8 @@ describe('Sprite Icon Component', function() { ...@@ -47,10 +45,8 @@ describe('Sprite Icon Component', function() {
it('should properly render img css', function() { it('should properly render img css', function() {
const { classList } = icon.$el; const { classList } = icon.$el;
const containsSizeClass = classList.contains('s32'); const containsSizeClass = classList.contains('s32');
const containsCustomClass = classList.contains('extraclasses');
expect(containsSizeClass).toBe(true); expect(containsSizeClass).toBe(true);
expect(containsCustomClass).toBe(true);
}); });
it('`name` validator should return false for non existing icons', () => { it('`name` validator should return false for non existing icons', () => {
...@@ -60,9 +56,5 @@ describe('Sprite Icon Component', function() { ...@@ -60,9 +56,5 @@ describe('Sprite Icon Component', function() {
it('`name` validator should return false for existing icons', () => { it('`name` validator should return false for existing icons', () => {
expect(Icon.props.name.validator('commit')).toBe(true); expect(Icon.props.name.validator('commit')).toBe(true);
}); });
it('should contain `tabindex` attribute on svg element when `tabIndex` prop is defined', () => {
expect(icon.$el.getAttribute('tabindex')).toBe('0');
});
}); });
}); });
...@@ -63,5 +63,19 @@ describe Gitlab::Metrics::RequestsRackMiddleware do ...@@ -63,5 +63,19 @@ describe Gitlab::Metrics::RequestsRackMiddleware do
expect { subject.call(env) }.to raise_error(StandardError) expect { subject.call(env) }.to raise_error(StandardError)
end end
end end
describe '.initialize_http_request_duration_seconds' do
it "sets labels" do
expected_labels = []
described_class::HTTP_METHODS.each do |method, statuses|
statuses.each do |status|
expected_labels << { method: method, status: status }
end
end
described_class.initialize_http_request_duration_seconds
expect(described_class.http_request_duration_seconds.values.keys).to include(*expected_labels)
end
end
end end
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