Commit 7e307738 authored by GitLab Bot's avatar GitLab Bot

Automatic merge of gitlab-org/gitlab master

parents 6c9d0bb5 7e2be326
...@@ -128,11 +128,13 @@ update-storybook-yarn-cache: ...@@ -128,11 +128,13 @@ update-storybook-yarn-cache:
- tmp/tests/frontend/ - tmp/tests/frontend/
- knapsack/ - knapsack/
rspec frontend_fixture: # In gitlab-foss, generates FOSS fixtures. In gitlab, generates FOSS & EE fixtures.
# That way, we don't need to have two separate jobs.
rspec-all frontend_fixture:
extends: extends:
- .frontend-fixtures-base - .frontend-fixtures-base
- .frontend:rules:default-frontend-jobs - .frontend:rules:default-frontend-jobs
parallel: 2 parallel: 5
rspec frontend_fixture as-if-foss: rspec frontend_fixture as-if-foss:
extends: extends:
...@@ -140,12 +142,6 @@ rspec frontend_fixture as-if-foss: ...@@ -140,12 +142,6 @@ rspec frontend_fixture as-if-foss:
- .frontend:rules:default-frontend-jobs-as-if-foss - .frontend:rules:default-frontend-jobs-as-if-foss
- .as-if-foss - .as-if-foss
rspec-ee frontend_fixture:
extends:
- .frontend-fixtures-base
- .frontend:rules:default-frontend-jobs-ee
parallel: 3
graphql-schema-dump: graphql-schema-dump:
variables: variables:
SETUP_DB: "false" SETUP_DB: "false"
...@@ -196,9 +192,7 @@ jest: ...@@ -196,9 +192,7 @@ jest:
- .frontend:rules:jest - .frontend:rules:jest
needs: needs:
- job: "detect-tests" - job: "detect-tests"
- job: "rspec frontend_fixture" - job: "rspec-all frontend_fixture"
- job: "rspec-ee frontend_fixture"
optional: true
artifacts: artifacts:
name: coverage-frontend name: coverage-frontend
expire_in: 31d expire_in: 31d
...@@ -225,9 +219,7 @@ jest-integration: ...@@ -225,9 +219,7 @@ jest-integration:
script: script:
- run_timed_command "yarn jest:integration --ci" - run_timed_command "yarn jest:integration --ci"
needs: needs:
- job: "rspec frontend_fixture" - job: "rspec-all frontend_fixture"
- job: "rspec-ee frontend_fixture"
optional: true
- job: "graphql-schema-dump" - job: "graphql-schema-dump"
jest-as-if-foss: jest-as-if-foss:
...@@ -341,9 +333,7 @@ startup-css-check: ...@@ -341,9 +333,7 @@ startup-css-check:
- .frontend:rules:default-frontend-jobs - .frontend:rules:default-frontend-jobs
needs: needs:
- job: "compile-test-assets" - job: "compile-test-assets"
- job: "rspec frontend_fixture" - job: "rspec-all frontend_fixture"
- job: "rspec-ee frontend_fixture"
optional: true
startup-css-check as-if-foss: startup-css-check as-if-foss:
extends: extends:
......
...@@ -495,13 +495,6 @@ ...@@ -495,13 +495,6 @@
- <<: *if-default-refs - <<: *if-default-refs
changes: *code-backstage-patterns changes: *code-backstage-patterns
.frontend:rules:default-frontend-jobs-ee:
rules:
- <<: *if-not-ee
when: never
- <<: *if-default-refs
changes: *code-backstage-patterns
.frontend:rules:default-frontend-jobs-as-if-foss: .frontend:rules:default-frontend-jobs-as-if-foss:
rules: rules:
- <<: *if-not-ee - <<: *if-not-ee
......
...@@ -29,8 +29,7 @@ update-tests-metadata: ...@@ -29,8 +29,7 @@ update-tests-metadata:
- retrieve-tests-metadata - retrieve-tests-metadata
- setup-test-env - setup-test-env
- rspec migration pg12 - rspec migration pg12
- rspec frontend_fixture - rspec-all frontend_fixture
- rspec-ee frontend_fixture
- rspec unit pg12 - rspec unit pg12
- rspec integration pg12 - rspec integration pg12
- rspec system pg12 - rspec system pg12
......
...@@ -316,7 +316,7 @@ export default { ...@@ -316,7 +316,7 @@ export default {
</p> </p>
</gl-tooltip> </gl-tooltip>
<span ref="countBadge" class="issue-count-badge board-card-info gl-mr-0 gl-pr-0"> <span ref="countBadge" class="board-card-info gl-mr-0 gl-pr-0 gl-pl-3">
<span v-if="allowSubEpics" class="gl-mr-3"> <span v-if="allowSubEpics" class="gl-mr-3">
<gl-icon name="epic" /> <gl-icon name="epic" />
{{ totalEpicsCount }} {{ totalEpicsCount }}
...@@ -334,7 +334,7 @@ export default { ...@@ -334,7 +334,7 @@ export default {
<span <span
v-if="shouldRenderEpicProgress" v-if="shouldRenderEpicProgress"
ref="progressBadge" ref="progressBadge"
class="issue-count-badge board-card-info gl-pl-0" class="board-card-info gl-pl-0"
> >
<span class="gl-mr-3" data-testid="epic-progress"> <span class="gl-mr-3" data-testid="epic-progress">
<gl-icon name="progress" /> <gl-icon name="progress" />
......
...@@ -365,7 +365,7 @@ export default { ...@@ -365,7 +365,7 @@ export default {
> >
<span class="gl-display-inline-flex"> <span class="gl-display-inline-flex">
<gl-tooltip :target="() => $refs.itemCount" :title="itemsTooltipLabel" /> <gl-tooltip :target="() => $refs.itemCount" :title="itemsTooltipLabel" />
<span ref="itemCount" class="issue-count-badge-count"> <span ref="itemCount" class="gl-display-inline-flex gl-align-items-center">
<gl-icon class="gl-mr-2" :name="countIcon" /> <gl-icon class="gl-mr-2" :name="countIcon" />
<item-count :items-size="itemsCount" :max-issue-count="list.maxIssueCount" /> <item-count :items-size="itemsCount" :max-issue-count="list.maxIssueCount" />
</span> </span>
...@@ -388,7 +388,7 @@ export default { ...@@ -388,7 +388,7 @@ export default {
v-gl-tooltip.hover v-gl-tooltip.hover
:aria-label="$options.i18n.newIssue" :aria-label="$options.i18n.newIssue"
:title="$options.i18n.newIssue" :title="$options.i18n.newIssue"
class="issue-count-badge-add-button no-drag" class="no-drag"
icon="plus" icon="plus"
@click="showNewIssueForm" @click="showNewIssueForm"
/> />
......
...@@ -162,7 +162,6 @@ export default { ...@@ -162,7 +162,6 @@ export default {
icon="plus" icon="plus"
:aria-label="__('Add a related issue')" :aria-label="__('Add a related issue')"
:class="qaClass" :class="qaClass"
class="js-issue-count-badge-add-button"
@click="$emit('toggleAddRelatedIssuesForm', $event)" @click="$emit('toggleAddRelatedIssuesForm', $event)"
/> />
</div> </div>
......
...@@ -81,13 +81,13 @@ export default { ...@@ -81,13 +81,13 @@ export default {
{{ __('Related merge requests') }} {{ __('Related merge requests') }}
</span> </span>
<div v-if="totalCount" class="d-inline-flex lh-100 align-middle"> <div v-if="totalCount" class="d-inline-flex lh-100 align-middle">
<div class="mr-count-badge gl-display-inline-flex"> <div
<div class="mr-count-badge-count"> class="mr-count-badge gl-display-inline-flex gl-align-items-center gl-py-2 gl-px-3"
<svg class="s16 mr-1 text-secondary"> >
<gl-icon name="merge-request" class="mr-1 text-secondary" /> <svg class="s16 mr-1 text-secondary">
</svg> <gl-icon name="merge-request" class="mr-1 text-secondary" />
<span class="js-items-count">{{ totalCount }}</span> </svg>
</div> <span class="js-items-count">{{ totalCount }}</span>
</div> </div>
</div> </div>
</div> </div>
......
...@@ -10,7 +10,6 @@ ...@@ -10,7 +10,6 @@
@import './pages/groups'; @import './pages/groups';
@import './pages/help'; @import './pages/help';
@import './pages/issuable'; @import './pages/issuable';
@import './pages/issues/issue_count_badge';
@import './pages/issues'; @import './pages/issues';
@import './pages/labels'; @import './pages/labels';
@import './pages/login'; @import './pages/login';
......
.issue-count-badge,
.mr-count-badge {
padding: 5px $gl-padding-8;
}
.issue-count-badge-count,
.mr-count-badge-count {
display: inline-flex;
align-items: center;
}
...@@ -252,7 +252,7 @@ graph RL; ...@@ -252,7 +252,7 @@ graph RL;
2_1-1 & 2_1-2 & 2_1-3 & 2_1-4 --> 1-6; 2_1-1 & 2_1-2 & 2_1-3 & 2_1-4 --> 1-6;
end end
2_2-2["rspec frontend_fixture/rspec-ee frontend_fixture (7 minutes)"]; 2_2-2["rspec-all frontend_fixture (7 minutes)"];
class 2_2-2 criticalPath; class 2_2-2 criticalPath;
click 2_2-2 "https://app.periscopedata.com/app/gitlab/652085/Engineering-Productivity---Pipeline-Build-Durations?widget=7910143&udv=0" click 2_2-2 "https://app.periscopedata.com/app/gitlab/652085/Engineering-Productivity---Pipeline-Build-Durations?widget=7910143&udv=0"
2_2-4["memory-on-boot (3.5 minutes)"]; 2_2-4["memory-on-boot (3.5 minutes)"];
...@@ -284,7 +284,7 @@ graph RL; ...@@ -284,7 +284,7 @@ graph RL;
3_1-1["jest (14.5 minutes)"]; 3_1-1["jest (14.5 minutes)"];
class 3_1-1 criticalPath; class 3_1-1 criticalPath;
click 3_1-1 "https://app.periscopedata.com/app/gitlab/652085/Engineering-Productivity---Pipeline-Build-Durations?widget=6914204&udv=0" click 3_1-1 "https://app.periscopedata.com/app/gitlab/652085/Engineering-Productivity---Pipeline-Build-Durations?widget=6914204&udv=0"
subgraph "Needs `rspec frontend_fixture/rspec-ee frontend_fixture`"; subgraph "Needs `rspec-all frontend_fixture`";
3_1-1 --> 2_2-2; 3_1-1 --> 2_2-2;
end end
...@@ -355,7 +355,7 @@ graph RL; ...@@ -355,7 +355,7 @@ graph RL;
2_1-1 & 2_1-2 & 2_1-3 & 2_1-4 --> 1-6; 2_1-1 & 2_1-2 & 2_1-3 & 2_1-4 --> 1-6;
end end
2_2-2["rspec frontend_fixture/rspec-ee frontend_fixture (7 minutes)"]; 2_2-2["rspec-all frontend_fixture (7 minutes)"];
class 2_2-2 criticalPath; class 2_2-2 criticalPath;
click 2_2-2 "https://app.periscopedata.com/app/gitlab/652085/Engineering-Productivity---Pipeline-Build-Durations?widget=7910143&udv=0" click 2_2-2 "https://app.periscopedata.com/app/gitlab/652085/Engineering-Productivity---Pipeline-Build-Durations?widget=7910143&udv=0"
2_2-4["memory-on-boot (3.5 minutes)"]; 2_2-4["memory-on-boot (3.5 minutes)"];
...@@ -395,7 +395,7 @@ graph RL; ...@@ -395,7 +395,7 @@ graph RL;
3_1-1["jest (14.5 minutes)"]; 3_1-1["jest (14.5 minutes)"];
class 3_1-1 criticalPath; class 3_1-1 criticalPath;
click 3_1-1 "https://app.periscopedata.com/app/gitlab/652085/Engineering-Productivity---Pipeline-Build-Durations?widget=6914204&udv=0" click 3_1-1 "https://app.periscopedata.com/app/gitlab/652085/Engineering-Productivity---Pipeline-Build-Durations?widget=6914204&udv=0"
subgraph "Needs `rspec frontend_fixture/rspec-ee frontend_fixture`"; subgraph "Needs `rspec-all frontend_fixture`";
3_1-1 --> 2_2-2; 3_1-1 --> 2_2-2;
end end
......
...@@ -178,7 +178,7 @@ export default { ...@@ -178,7 +178,7 @@ export default {
<gl-loading-icon v-if="loading" size="md" class="mt-8" /> <gl-loading-icon v-if="loading" size="md" class="mt-8" />
<div v-if="showChart" class="issues-analytics-chart"> <div v-if="showChart" class="issues-analytics-chart">
<h4 class="chart-title">{{ s__('IssuesAnalytics|Issues opened per month') }}</h4> <h4 class="gl-mt-6 gl-mb-7">{{ s__('IssuesAnalytics|Issues opened per month') }}</h4>
<gl-column-chart <gl-column-chart
data-qa-selector="issues_analytics_graph" data-qa-selector="issues_analytics_graph"
...@@ -191,10 +191,10 @@ export default { ...@@ -191,10 +191,10 @@ export default {
/> />
<div class="d-flex"> <div class="d-flex">
<gl-chart-legend v-if="chart" :chart="chart" :series-info="seriesInfo" /> <gl-chart-legend v-if="chart" :chart="chart" :series-info="seriesInfo" />
<div class="issues-analytics-legend"> <div class="gl-font-sm gl-text-gray-500">
<span>{{ s__('IssuesAnalytics|Total:') }} {{ seriesTotal }}</span> {{ s__('IssuesAnalytics|Total:') }} {{ seriesTotal }}
<span>&#8226;</span> &#8226;
<span>{{ s__('IssuesAnalytics|Avg/Month:') }} {{ seriesAverage }}</span> {{ s__('IssuesAnalytics|Avg/Month:') }} {{ seriesAverage }}
</div> </div>
</div> </div>
</div> </div>
......
...@@ -233,7 +233,7 @@ export default { ...@@ -233,7 +233,7 @@ export default {
<div <div
v-if="isEpic" v-if="isEpic"
ref="countBadge" ref="countBadge"
class="issue-count-badge text-secondary gl-display-inline-flex gl-py-0 p-lg-0" class="gl-text-gray-500 gl-display-inline-flex gl-py-0 p-lg-0"
> >
<span <span
v-if="allowSubEpics" v-if="allowSubEpics"
......
...@@ -11,14 +11,3 @@ ...@@ -11,14 +11,3 @@
max-width: px-to-rem($milestone-title-max-width); max-width: px-to-rem($milestone-title-max-width);
} }
} }
.issues-analytics-chart {
.chart-title {
margin: $gl-padding-24 0 $gl-padding-32;
}
}
.issues-analytics-legend {
font-size: $gl-font-size-small;
color: $gl-text-color-secondary;
}
...@@ -119,12 +119,12 @@ RSpec.describe 'epics swimlanes', :js do ...@@ -119,12 +119,12 @@ RSpec.describe 'epics swimlanes', :js do
end end
it 'displays new issue button' do it 'displays new issue button' do
expect(first('.board')).to have_selector('.issue-count-badge-add-button', count: 1) expect(first('.board')).to have_button('New issue', count: 1)
end end
it 'shows form in unassigned issues lane when clicking button' do it 'shows form in unassigned issues lane when clicking button' do
page.within(first('.board')) do page.within(first('.board')) do
find('.issue-count-badge-add-button').click click_button 'New issue'
end end
page.within("[data-testid='board-lane-unassigned-issues']") do page.within("[data-testid='board-lane-unassigned-issues']") do
...@@ -134,7 +134,7 @@ RSpec.describe 'epics swimlanes', :js do ...@@ -134,7 +134,7 @@ RSpec.describe 'epics swimlanes', :js do
it 'hides form when clicking cancel' do it 'hides form when clicking cancel' do
page.within(first('.board')) do page.within(first('.board')) do
find('.issue-count-badge-add-button').click click_button 'New issue'
end end
page.within("[data-testid='board-lane-unassigned-issues']") do page.within("[data-testid='board-lane-unassigned-issues']") do
...@@ -148,7 +148,7 @@ RSpec.describe 'epics swimlanes', :js do ...@@ -148,7 +148,7 @@ RSpec.describe 'epics swimlanes', :js do
it 'creates new issue in unassigned issues lane' do it 'creates new issue in unassigned issues lane' do
page.within(first('.board')) do page.within(first('.board')) do
find('.issue-count-badge-add-button').click click_button 'New issue'
end end
wait_for_all_requests wait_for_all_requests
...@@ -160,7 +160,7 @@ RSpec.describe 'epics swimlanes', :js do ...@@ -160,7 +160,7 @@ RSpec.describe 'epics swimlanes', :js do
wait_for_all_requests wait_for_all_requests
page.within(first('.board .issue-count-badge-count')) do page.within(first('.board [data-testid="issue-count-badge"]')) do
expect(page).to have_content('3') expect(page).to have_content('3')
end end
......
...@@ -32,7 +32,7 @@ RSpec.describe 'create epic in board', :js do ...@@ -32,7 +32,7 @@ RSpec.describe 'create epic in board', :js do
wait_for_requests wait_for_requests
page.within(first('.board .issue-count-badge-count')) do page.within(first('.board [data-testid="issue-count-badge"]')) do
expect(page).to have_content('1') expect(page).to have_content('1')
end end
......
...@@ -51,7 +51,7 @@ RSpec.describe 'Related issues', :js do ...@@ -51,7 +51,7 @@ RSpec.describe 'Related issues', :js do
context 'with "Relates to", "Blocks", "Is blocked by" groupings' do context 'with "Relates to", "Blocks", "Is blocked by" groupings' do
def add_linked_issue(issue, radio_input_value) def add_linked_issue(issue, radio_input_value)
find('.js-issue-count-badge-add-button').click click_button 'Add a related issue'
find('.js-add-issuable-form-input').set "#{issue.to_reference(project)} " find('.js-add-issuable-form-input').set "#{issue.to_reference(project)} "
find("input[name=\"linked-issue-type-radio\"][value=\"#{radio_input_value}\"]").click find("input[name=\"linked-issue-type-radio\"][value=\"#{radio_input_value}\"]").click
find('.js-add-issuable-form-add-button').click find('.js-add-issuable-form-add-button').click
......
...@@ -109,14 +109,18 @@ function rspec_paralellized_job() { ...@@ -109,14 +109,18 @@ function rspec_paralellized_job() {
local test_level="${job_name[1]}" local test_level="${job_name[1]}"
local report_name=$(echo "${CI_JOB_NAME}" | sed -E 's|[/ ]|_|g') # e.g. 'rspec unit pg12 1/24' would become 'rspec_unit_pg12_1_24' local report_name=$(echo "${CI_JOB_NAME}" | sed -E 's|[/ ]|_|g') # e.g. 'rspec unit pg12 1/24' would become 'rspec_unit_pg12_1_24'
local rspec_opts="${1}" local rspec_opts="${1}"
local spec_folder_prefix="" local spec_folder_prefixes=""
if [[ "${test_tool}" =~ "-ee" ]]; then if [[ "${test_tool}" =~ "-ee" ]]; then
spec_folder_prefix="ee/" spec_folder_prefixes="'ee/'"
fi fi
if [[ "${test_tool}" =~ "-jh" ]]; then if [[ "${test_tool}" =~ "-jh" ]]; then
spec_folder_prefix="jh/" spec_folder_prefixes="'jh/'"
fi
if [[ "${test_tool}" =~ "-all" ]]; then
spec_folder_prefixes="['', 'ee/']"
fi fi
export KNAPSACK_LOG_LEVEL="debug" export KNAPSACK_LOG_LEVEL="debug"
...@@ -131,7 +135,7 @@ function rspec_paralellized_job() { ...@@ -131,7 +135,7 @@ function rspec_paralellized_job() {
cp "${KNAPSACK_RSPEC_SUITE_REPORT_PATH}" "${KNAPSACK_REPORT_PATH}" cp "${KNAPSACK_RSPEC_SUITE_REPORT_PATH}" "${KNAPSACK_REPORT_PATH}"
if [[ -z "${KNAPSACK_TEST_FILE_PATTERN}" ]]; then if [[ -z "${KNAPSACK_TEST_FILE_PATTERN}" ]]; then
pattern=$(ruby -r./tooling/quality/test_level.rb -e "puts Quality::TestLevel.new(%(${spec_folder_prefix})).pattern(:${test_level})") pattern=$(ruby -r./tooling/quality/test_level.rb -e "puts Quality::TestLevel.new(${spec_folder_prefixes}).pattern(:${test_level})")
export KNAPSACK_TEST_FILE_PATTERN="${pattern}" export KNAPSACK_TEST_FILE_PATTERN="${pattern}"
fi fi
......
...@@ -68,7 +68,7 @@ RSpec.describe 'Issue Boards new issue', :js do ...@@ -68,7 +68,7 @@ RSpec.describe 'Issue Boards new issue', :js do
wait_for_requests wait_for_requests
page.within(first('.board .issue-count-badge-count')) do page.within(first('.board [data-testid="issue-count-badge"]')) do
expect(page).to have_content('1') expect(page).to have_content('1')
end end
......
...@@ -16,7 +16,7 @@ RSpec.describe 'Ensure Boards do not show stale data on browser back', :js do ...@@ -16,7 +16,7 @@ RSpec.describe 'Ensure Boards do not show stale data on browser back', :js do
visit project_board_path(project, board) visit project_board_path(project, board)
wait_for_requests wait_for_requests
page.within(first('.board .issue-count-badge-count')) do page.within(first('.board [data-testid="issue-count-badge"]')) do
expect(page).to have_content('0') expect(page).to have_content('0')
end end
end end
...@@ -35,7 +35,7 @@ RSpec.describe 'Ensure Boards do not show stale data on browser back', :js do ...@@ -35,7 +35,7 @@ RSpec.describe 'Ensure Boards do not show stale data on browser back', :js do
page.go_back page.go_back
wait_for_requests wait_for_requests
page.within(first('.board .issue-count-badge-count')) do page.within(first('.board [data-testid="issue-count-badge"]')) do
expect(page).to have_content('1') expect(page).to have_content('1')
end end
......
...@@ -24,7 +24,7 @@ RSpec.describe 'Group Boards' do ...@@ -24,7 +24,7 @@ RSpec.describe 'Group Boards' do
it 'adds an issue to the backlog' do it 'adds an issue to the backlog' do
page.within(find('.board', match: :first)) do page.within(find('.board', match: :first)) do
issue_title = 'New Issue' issue_title = 'New Issue'
find(:css, '.issue-count-badge-add-button').click click_button 'New issue'
wait_for_requests wait_for_requests
......
...@@ -41,13 +41,13 @@ RSpec.describe 'Related issues', :js do ...@@ -41,13 +41,13 @@ RSpec.describe 'Related issues', :js do
visit project_issue_path(project, issue) visit project_issue_path(project, issue)
expect(page).to have_css('.related-issues-block') expect(page).to have_css('.related-issues-block')
expect(page).not_to have_selector('.js-issue-count-badge-add-button') expect(page).not_to have_button 'Add a related issue'
end end
end end
context 'when logged in but not a member' do context 'when logged in but not a member' do
before do before do
gitlab_sign_in(user) sign_in(user)
end end
it 'shows widget when internal project' do it 'shows widget when internal project' do
...@@ -57,7 +57,7 @@ RSpec.describe 'Related issues', :js do ...@@ -57,7 +57,7 @@ RSpec.describe 'Related issues', :js do
visit project_issue_path(project, issue) visit project_issue_path(project, issue)
expect(page).to have_css('.related-issues-block') expect(page).to have_css('.related-issues-block')
expect(page).not_to have_selector('.js-issue-count-badge-add-button') expect(page).not_to have_button 'Add a related issue'
end end
it 'does not show widget when private project' do it 'does not show widget when private project' do
...@@ -76,7 +76,7 @@ RSpec.describe 'Related issues', :js do ...@@ -76,7 +76,7 @@ RSpec.describe 'Related issues', :js do
visit project_issue_path(project, issue) visit project_issue_path(project, issue)
expect(page).to have_css('.related-issues-block') expect(page).to have_css('.related-issues-block')
expect(page).not_to have_selector('.js-issue-count-badge-add-button') expect(page).not_to have_button 'Add a related issue'
end end
it 'shows widget on their own public issue' do it 'shows widget on their own public issue' do
...@@ -86,13 +86,13 @@ RSpec.describe 'Related issues', :js do ...@@ -86,13 +86,13 @@ RSpec.describe 'Related issues', :js do
visit project_issue_path(project, issue) visit project_issue_path(project, issue)
expect(page).to have_css('.related-issues-block') expect(page).to have_css('.related-issues-block')
expect(page).not_to have_selector('.js-issue-count-badge-add-button') expect(page).not_to have_button 'Add a related issue'
end end
end end
context 'when logged in and a guest' do context 'when logged in and a guest' do
before do before do
gitlab_sign_in(user) sign_in(user)
end end
it 'shows widget when internal project' do it 'shows widget when internal project' do
...@@ -103,7 +103,7 @@ RSpec.describe 'Related issues', :js do ...@@ -103,7 +103,7 @@ RSpec.describe 'Related issues', :js do
visit project_issue_path(project, issue) visit project_issue_path(project, issue)
expect(page).to have_css('.related-issues-block') expect(page).to have_css('.related-issues-block')
expect(page).not_to have_selector('.js-issue-count-badge-add-button') expect(page).not_to have_button 'Add a related issue'
end end
it 'shows widget when private project' do it 'shows widget when private project' do
...@@ -114,7 +114,7 @@ RSpec.describe 'Related issues', :js do ...@@ -114,7 +114,7 @@ RSpec.describe 'Related issues', :js do
visit project_issue_path(project, issue) visit project_issue_path(project, issue)
expect(page).to have_css('.related-issues-block') expect(page).to have_css('.related-issues-block')
expect(page).not_to have_selector('.js-issue-count-badge-add-button') expect(page).not_to have_button 'Add a related issue'
end end
it 'shows widget when public project' do it 'shows widget when public project' do
...@@ -125,13 +125,13 @@ RSpec.describe 'Related issues', :js do ...@@ -125,13 +125,13 @@ RSpec.describe 'Related issues', :js do
visit project_issue_path(project, issue) visit project_issue_path(project, issue)
expect(page).to have_css('.related-issues-block') expect(page).to have_css('.related-issues-block')
expect(page).not_to have_selector('.js-issue-count-badge-add-button') expect(page).not_to have_button 'Add a related issue'
end end
end end
context 'when logged in and a reporter' do context 'when logged in and a reporter' do
before do before do
gitlab_sign_in(user) sign_in(user)
end end
it 'shows widget when internal project' do it 'shows widget when internal project' do
...@@ -142,7 +142,7 @@ RSpec.describe 'Related issues', :js do ...@@ -142,7 +142,7 @@ RSpec.describe 'Related issues', :js do
visit project_issue_path(project, issue) visit project_issue_path(project, issue)
expect(page).to have_css('.related-issues-block') expect(page).to have_css('.related-issues-block')
expect(page).to have_selector('.js-issue-count-badge-add-button') expect(page).to have_button 'Add a related issue'
end end
it 'shows widget when private project' do it 'shows widget when private project' do
...@@ -153,7 +153,7 @@ RSpec.describe 'Related issues', :js do ...@@ -153,7 +153,7 @@ RSpec.describe 'Related issues', :js do
visit project_issue_path(project, issue) visit project_issue_path(project, issue)
expect(page).to have_css('.related-issues-block') expect(page).to have_css('.related-issues-block')
expect(page).to have_selector('.js-issue-count-badge-add-button') expect(page).to have_button 'Add a related issue'
end end
it 'shows widget when public project' do it 'shows widget when public project' do
...@@ -164,7 +164,7 @@ RSpec.describe 'Related issues', :js do ...@@ -164,7 +164,7 @@ RSpec.describe 'Related issues', :js do
visit project_issue_path(project, issue) visit project_issue_path(project, issue)
expect(page).to have_css('.related-issues-block') expect(page).to have_css('.related-issues-block')
expect(page).to have_selector('.js-issue-count-badge-add-button') expect(page).to have_button 'Add a related issue'
end end
it 'shows widget on their own public issue' do it 'shows widget on their own public issue' do
...@@ -175,7 +175,7 @@ RSpec.describe 'Related issues', :js do ...@@ -175,7 +175,7 @@ RSpec.describe 'Related issues', :js do
visit project_issue_path(project, issue) visit project_issue_path(project, issue)
expect(page).to have_css('.related-issues-block') expect(page).to have_css('.related-issues-block')
expect(page).to have_selector('.js-issue-count-badge-add-button') expect(page).to have_button 'Add a related issue'
end end
end end
end end
...@@ -186,7 +186,7 @@ RSpec.describe 'Related issues', :js do ...@@ -186,7 +186,7 @@ RSpec.describe 'Related issues', :js do
before do before do
project.add_guest(user) project.add_guest(user)
gitlab_sign_in(user) sign_in(user)
end end
context 'visiting some issue someone else created' do context 'visiting some issue someone else created' do
...@@ -216,7 +216,7 @@ RSpec.describe 'Related issues', :js do ...@@ -216,7 +216,7 @@ RSpec.describe 'Related issues', :js do
before do before do
project.add_maintainer(user) project.add_maintainer(user)
project_b.add_maintainer(user) project_b.add_maintainer(user)
gitlab_sign_in(user) sign_in(user)
end end
context 'without existing related issues' do context 'without existing related issues' do
...@@ -230,7 +230,7 @@ RSpec.describe 'Related issues', :js do ...@@ -230,7 +230,7 @@ RSpec.describe 'Related issues', :js do
end end
it 'add related issue' do it 'add related issue' do
find('.js-issue-count-badge-add-button').click click_button 'Add a related issue'
find('.js-add-issuable-form-input').set "#{issue_b.to_reference(project)} " find('.js-add-issuable-form-input').set "#{issue_b.to_reference(project)} "
find('.js-add-issuable-form-add-button').click find('.js-add-issuable-form-add-button').click
...@@ -247,7 +247,7 @@ RSpec.describe 'Related issues', :js do ...@@ -247,7 +247,7 @@ RSpec.describe 'Related issues', :js do
end end
it 'add cross-project related issue' do it 'add cross-project related issue' do
find('.js-issue-count-badge-add-button').click click_button 'Add a related issue'
find('.js-add-issuable-form-input').set "#{issue_project_b_a.to_reference(project)} " find('.js-add-issuable-form-input').set "#{issue_project_b_a.to_reference(project)} "
find('.js-add-issuable-form-add-button').click find('.js-add-issuable-form-add-button').click
...@@ -261,7 +261,7 @@ RSpec.describe 'Related issues', :js do ...@@ -261,7 +261,7 @@ RSpec.describe 'Related issues', :js do
end end
it 'pressing enter should submit the form' do it 'pressing enter should submit the form' do
find('.js-issue-count-badge-add-button').click click_button 'Add a related issue'
find('.js-add-issuable-form-input').set "#{issue_project_b_a.to_reference(project)} " find('.js-add-issuable-form-input').set "#{issue_project_b_a.to_reference(project)} "
find('.js-add-issuable-form-input').native.send_key(:enter) find('.js-add-issuable-form-input').native.send_key(:enter)
...@@ -275,7 +275,7 @@ RSpec.describe 'Related issues', :js do ...@@ -275,7 +275,7 @@ RSpec.describe 'Related issues', :js do
end end
it 'disallows duplicate entries' do it 'disallows duplicate entries' do
find('.js-issue-count-badge-add-button').click click_button 'Add a related issue'
find('.js-add-issuable-form-input').set 'duplicate duplicate duplicate' find('.js-add-issuable-form-input').set 'duplicate duplicate duplicate'
items = all('.js-add-issuable-form-token-list-item') items = all('.js-add-issuable-form-token-list-item')
...@@ -288,7 +288,7 @@ RSpec.describe 'Related issues', :js do ...@@ -288,7 +288,7 @@ RSpec.describe 'Related issues', :js do
it 'allows us to remove pending issues' do it 'allows us to remove pending issues' do
# Tests against https://gitlab.com/gitlab-org/gitlab/issues/11625 # Tests against https://gitlab.com/gitlab-org/gitlab/issues/11625
find('.js-issue-count-badge-add-button').click click_button 'Add a related issue'
find('.js-add-issuable-form-input').set 'issue1 issue2 issue3 ' find('.js-add-issuable-form-input').set 'issue1 issue2 issue3 '
items = all('.js-add-issuable-form-token-list-item') items = all('.js-add-issuable-form-token-list-item')
...@@ -351,7 +351,7 @@ RSpec.describe 'Related issues', :js do ...@@ -351,7 +351,7 @@ RSpec.describe 'Related issues', :js do
end end
it 'add related issue' do it 'add related issue' do
find('.js-issue-count-badge-add-button').click click_button 'Add a related issue'
find('.js-add-issuable-form-input').set "##{issue_d.iid} " find('.js-add-issuable-form-input').set "##{issue_d.iid} "
find('.js-add-issuable-form-add-button').click find('.js-add-issuable-form-add-button').click
...@@ -367,7 +367,7 @@ RSpec.describe 'Related issues', :js do ...@@ -367,7 +367,7 @@ RSpec.describe 'Related issues', :js do
end end
it 'add invalid related issue' do it 'add invalid related issue' do
find('.js-issue-count-badge-add-button').click click_button 'Add a related issue'
find('.js-add-issuable-form-input').set "#9999999 " find('.js-add-issuable-form-input').set "#9999999 "
find('.js-add-issuable-form-add-button').click find('.js-add-issuable-form-add-button').click
...@@ -382,7 +382,7 @@ RSpec.describe 'Related issues', :js do ...@@ -382,7 +382,7 @@ RSpec.describe 'Related issues', :js do
end end
it 'add unauthorized related issue' do it 'add unauthorized related issue' do
find('.js-issue-count-badge-add-button').click click_button 'Add a related issue'
find('.js-add-issuable-form-input').set "#{issue_project_unauthorized_a.to_reference(project)} " find('.js-add-issuable-form-input').set "#{issue_project_unauthorized_a.to_reference(project)} "
find('.js-add-issuable-form-add-button').click find('.js-add-issuable-form-add-button').click
......
...@@ -71,7 +71,7 @@ module FeatureFlagHelpers ...@@ -71,7 +71,7 @@ module FeatureFlagHelpers
end end
def add_linked_issue_button def add_linked_issue_button
find('.js-issue-count-badge-add-button') find_button 'Add a related issue'
end end
def remove_linked_issue_button def remove_linked_issue_button
......
...@@ -63,7 +63,14 @@ RSpec.describe Quality::TestLevel do ...@@ -63,7 +63,14 @@ RSpec.describe Quality::TestLevel do
context 'with a prefix' do context 'with a prefix' do
it 'returns a pattern' do it 'returns a pattern' do
expect(described_class.new('ee/').pattern(:system)) expect(described_class.new('ee/').pattern(:system))
.to eq("ee/spec/{features}{,/**/}*_spec.rb") .to eq("{ee/}spec/{features}{,/**/}*_spec.rb")
end
end
context 'with several prefixes' do
it 'returns a pattern' do
expect(described_class.new(['', 'ee/', 'jh/']).pattern(:system))
.to eq("{,ee/,jh/}spec/{features}{,/**/}*_spec.rb")
end end
end end
...@@ -138,7 +145,14 @@ RSpec.describe Quality::TestLevel do ...@@ -138,7 +145,14 @@ RSpec.describe Quality::TestLevel do
context 'with a prefix' do context 'with a prefix' do
it 'returns a regexp' do it 'returns a regexp' do
expect(described_class.new('ee/').regexp(:system)) expect(described_class.new('ee/').regexp(:system))
.to eq(%r{ee/spec/(features)}) .to eq(%r{(ee/)spec/(features)})
end
end
context 'with several prefixes' do
it 'returns a regexp' do
expect(described_class.new(['', 'ee/', 'jh/']).regexp(:system))
.to eq(%r{(|ee/|jh/)spec/(features)})
end end
end end
......
...@@ -60,20 +60,20 @@ module Quality ...@@ -60,20 +60,20 @@ module Quality
system: ['features'] system: ['features']
}.freeze }.freeze
attr_reader :prefix attr_reader :prefixes
def initialize(prefix = nil) def initialize(prefixes = nil)
@prefix = prefix @prefixes = Array(prefixes)
@patterns = {} @patterns = {}
@regexps = {} @regexps = {}
end end
def pattern(level) def pattern(level)
@patterns[level] ||= "#{prefix}spec/#{folders_pattern(level)}{,/**/}*#{suffix(level)}" @patterns[level] ||= "#{prefixes_for_pattern}spec/#{folders_pattern(level)}{,/**/}*#{suffix(level)}"
end end
def regexp(level) def regexp(level)
@regexps[level] ||= Regexp.new("#{prefix}spec/#{folders_regex(level)}").freeze @regexps[level] ||= Regexp.new("#{prefixes_for_regex}spec/#{folders_regex(level)}").freeze
end end
def level_for(file_path) def level_for(file_path)
...@@ -102,6 +102,20 @@ module Quality ...@@ -102,6 +102,20 @@ module Quality
private private
def prefixes_for_pattern
return '' if prefixes.empty?
"{#{prefixes.join(',')}}"
end
def prefixes_for_regex
return '' if prefixes.empty?
regex_prefix = prefixes.map(&Regexp.method(:escape)).join('|')
"(#{regex_prefix})"
end
def suffix(level) def suffix(level)
case level case level
when :frontend_fixture when :frontend_fixture
......
...@@ -964,20 +964,20 @@ ...@@ -964,20 +964,20 @@
stylelint-declaration-strict-value "1.7.7" stylelint-declaration-strict-value "1.7.7"
stylelint-scss "3.18.0" stylelint-scss "3.18.0"
"@gitlab/svgs@1.212.0": "@gitlab/svgs@1.213.0":
version "1.212.0" version "1.213.0"
resolved "https://registry.yarnpkg.com/@gitlab/svgs/-/svgs-1.212.0.tgz#21a5df04c52b10cc1b8521cd8ff7c7d6d13716db" resolved "https://registry.yarnpkg.com/@gitlab/svgs/-/svgs-1.213.0.tgz#fcd9794049d2b15f5796dbab2a3d501679153582"
integrity sha512-dv0bYTHA3hwi3mNU3bGMq1cd4HVKKFNwCNPgkF91JSp4Xt8DDtJ0Yq4X49ASsq4zCJ3odgkq2aPjEa/Sr5nINQ== integrity sha512-3d9EGpEkPDeW92Xx3FueFCJFZ/yL+uv5MWCUHmSt1tP9YmUhMXw/51c43c5+V17FuCyvhJS5tm3aEg3VYoWIRA==
"@gitlab/tributejs@1.0.0": "@gitlab/tributejs@1.0.0":
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/@gitlab/tributejs/-/tributejs-1.0.0.tgz#672befa222aeffc83e7d799b0500a7a4418e59b8" resolved "https://registry.yarnpkg.com/@gitlab/tributejs/-/tributejs-1.0.0.tgz#672befa222aeffc83e7d799b0500a7a4418e59b8"
integrity sha512-nmKw1+hB6MHvlmPz63yPwVs1qQkycHwsKgxpEbzmky16Y6mL4EJMk3w1b8QlOAF/AIAzjCERPhe/R4MJiohbZw== integrity sha512-nmKw1+hB6MHvlmPz63yPwVs1qQkycHwsKgxpEbzmky16Y6mL4EJMk3w1b8QlOAF/AIAzjCERPhe/R4MJiohbZw==
"@gitlab/ui@32.11.4": "@gitlab/ui@32.12.0":
version "32.11.4" version "32.12.0"
resolved "https://registry.yarnpkg.com/@gitlab/ui/-/ui-32.11.4.tgz#ead781c4fd57b4f7bc6818de99e56d023f94c397" resolved "https://registry.yarnpkg.com/@gitlab/ui/-/ui-32.12.0.tgz#a2e45a7587beb2b9a5014f36c10bac30e6f90f78"
integrity sha512-plxOvtAIo+PIng1jBssj/QCx2ATIbZqQvLvCeezgAABgY107XhqZDw50VZL0texTX+0jGwB5PaXthmU/wnCk2w== integrity sha512-WP7uyf8Ujd2ONOIYLG6s3oIl8/IWpI2H12r7rwNG+yD8EOhvHdK8QS9+b5gpAewYJjT4r2AV8m9QJXZChmmO6w==
dependencies: dependencies:
"@babel/standalone" "^7.0.0" "@babel/standalone" "^7.0.0"
bootstrap-vue "2.18.1" bootstrap-vue "2.18.1"
......
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