diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-10-25 06:11:08 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-10-25 06:11:08 +0300 |
commit | 01fbd09ea9ea4eeae52ed9fb4f7cc4dd97b4eb69 (patch) | |
tree | d57374834ee53ba6394668c9b7f9d4677db5367a /spec | |
parent | 7162e84914ae8bbfaa3da643f17cd66dde321217 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
6 files changed, 191 insertions, 169 deletions
diff --git a/spec/frontend/gfm_auto_complete/mock_data.js b/spec/frontend/gfm_auto_complete/mock_data.js index 86795ffd0a5..9c5a9d7ef3d 100644 --- a/spec/frontend/gfm_auto_complete/mock_data.js +++ b/spec/frontend/gfm_auto_complete/mock_data.js @@ -32,3 +32,60 @@ export const eventlistenersMockDefaultMap = [ namespace: 'atwho', }, ]; + +export const crmContactsMock = [ + { + id: 1, + email: 'contact.1@email.com', + firstName: 'Contact', + lastName: 'One', + search: 'contact.1@email.com', + state: 'active', + set: false, + }, + { + id: 2, + email: 'contact.2@email.com', + firstName: 'Contact', + lastName: 'Two', + search: 'contact.2@email.com', + state: 'active', + set: false, + }, + { + id: 3, + email: 'contact.3@email.com', + firstName: 'Contact', + lastName: 'Three', + search: 'contact.3@email.com', + state: 'inactive', + set: false, + }, + { + id: 4, + email: 'contact.4@email.com', + firstName: 'Contact', + lastName: 'Four', + search: 'contact.4@email.com', + state: 'inactive', + set: true, + }, + { + id: 5, + email: 'contact.5@email.com', + firstName: 'Contact', + lastName: 'Five', + search: 'contact.5@email.com', + state: 'active', + set: true, + }, + { + id: 5, + email: 'contact.6@email.com', + firstName: 'Contact', + lastName: 'Six', + search: 'contact.6@email.com', + state: 'active', + set: undefined, // On purpose + }, +]; diff --git a/spec/frontend/gfm_auto_complete_spec.js b/spec/frontend/gfm_auto_complete_spec.js index c3dfc4570f9..68225f39c66 100644 --- a/spec/frontend/gfm_auto_complete_spec.js +++ b/spec/frontend/gfm_auto_complete_spec.js @@ -3,14 +3,23 @@ import MockAdapter from 'axios-mock-adapter'; import $ from 'jquery'; import labelsFixture from 'test_fixtures/autocomplete_sources/labels.json'; import { setHTMLFixture, resetHTMLFixture } from 'helpers/fixtures'; -import GfmAutoComplete, { membersBeforeSave, highlighter } from 'ee_else_ce/gfm_auto_complete'; +import GfmAutoComplete, { + membersBeforeSave, + highlighter, + CONTACT_STATE_ACTIVE, + CONTACTS_ADD_COMMAND, + CONTACTS_REMOVE_COMMAND, +} from 'ee_else_ce/gfm_auto_complete'; import { initEmojiMock, clearEmojiMock } from 'helpers/emoji'; import '~/lib/utils/jquery_at_who'; import { TEST_HOST } from 'helpers/test_constants'; import waitForPromises from 'helpers/wait_for_promises'; import AjaxCache from '~/lib/utils/ajax_cache'; import axios from '~/lib/utils/axios_utils'; -import { eventlistenersMockDefaultMap } from 'ee_else_ce_jest/gfm_auto_complete/mock_data'; +import { + eventlistenersMockDefaultMap, + crmContactsMock, +} from 'ee_else_ce_jest/gfm_auto_complete/mock_data'; describe('GfmAutoComplete', () => { const fetchDataMock = { fetchData: jest.fn() }; @@ -871,7 +880,87 @@ describe('GfmAutoComplete', () => { }); }); - describe('Contacts', () => { + describe('CRM Contacts', () => { + const dataSources = { + contacts: `${TEST_HOST}/autocomplete_sources/contacts`, + }; + + const allContacts = crmContactsMock; + const assignedContacts = allContacts.filter((contact) => contact.set); + const unassignedContacts = allContacts.filter( + (contact) => contact.state === CONTACT_STATE_ACTIVE && !contact.set, + ); + + let autocomplete; + let $textarea; + + beforeEach(() => { + setHTMLFixture('<textarea></textarea>'); + autocomplete = new GfmAutoComplete(dataSources); + $textarea = $('textarea'); + autocomplete.setup($textarea, { contacts: true }); + }); + + afterEach(() => { + autocomplete.destroy(); + resetHTMLFixture(); + }); + + const triggerDropdown = (text) => { + $textarea.trigger('focus').val(text).caret('pos', -1); + $textarea.trigger('keyup'); + + jest.runOnlyPendingTimers(); + }; + + const getDropdownItems = () => { + const dropdown = document.getElementById('at-view-contacts'); + const items = dropdown.getElementsByTagName('li'); + return [].map.call(items, (item) => item.textContent.trim()); + }; + + const expectContacts = ({ input, output }) => { + triggerDropdown(input); + + expect(getDropdownItems()).toEqual(output.map((contact) => contact.email)); + }; + + describe('with no contacts assigned', () => { + beforeEach(() => { + autocomplete.cachedData['[contact:'] = [...unassignedContacts]; + }); + + it.each` + input | output + ${`${CONTACTS_ADD_COMMAND} [contact:`} | ${unassignedContacts} + ${`${CONTACTS_REMOVE_COMMAND} [contact:`} | ${[]} + `('$input shows $output.length contacts', expectContacts); + }); + + describe('with some contacts assigned', () => { + beforeEach(() => { + autocomplete.cachedData['[contact:'] = allContacts; + }); + + it.each` + input | output + ${`${CONTACTS_ADD_COMMAND} [contact:`} | ${unassignedContacts} + ${`${CONTACTS_REMOVE_COMMAND} [contact:`} | ${assignedContacts} + `('$input shows $output.length contacts', expectContacts); + }); + + describe('with all contacts assigned', () => { + beforeEach(() => { + autocomplete.cachedData['[contact:'] = [...assignedContacts]; + }); + + it.each` + input | output + ${`${CONTACTS_ADD_COMMAND} [contact:`} | ${[]} + ${`${CONTACTS_REMOVE_COMMAND} [contact:`} | ${assignedContacts} + `('$input shows $output.length contacts', expectContacts); + }); + it('escapes name and email correct', () => { const xssPayload = '<script>alert(1)</script>'; const escapedPayload = '<script>alert(1)</script>'; diff --git a/spec/lib/gitlab/background_migration/backfill_projects_with_coverage_spec.rb b/spec/lib/gitlab/background_migration/backfill_projects_with_coverage_spec.rb deleted file mode 100644 index 4a65ecf8c75..00000000000 --- a/spec/lib/gitlab/background_migration/backfill_projects_with_coverage_spec.rb +++ /dev/null @@ -1,95 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -RSpec.describe Gitlab::BackgroundMigration::BackfillProjectsWithCoverage, - :suppress_gitlab_schemas_validate_connection, schema: 20210818185845 do - let(:projects) { table(:projects) } - let(:project_ci_feature_usages) { table(:project_ci_feature_usages) } - let(:ci_pipelines) { table(:ci_pipelines) } - let(:ci_daily_build_group_report_results) { table(:ci_daily_build_group_report_results) } - let(:group) { table(:namespaces).create!(name: 'user', path: 'user') } - let(:project_1) { projects.create!(namespace_id: group.id) } - let(:project_2) { projects.create!(namespace_id: group.id) } - let(:pipeline_1) { ci_pipelines.create!(project_id: project_1.id, source: 13) } - let(:pipeline_2) { ci_pipelines.create!(project_id: project_1.id, source: 13) } - let(:pipeline_3) { ci_pipelines.create!(project_id: project_2.id, source: 13) } - let(:pipeline_4) { ci_pipelines.create!(project_id: project_2.id, source: 13) } - - subject { described_class.new } - - describe '#perform' do - before do - ci_daily_build_group_report_results.create!( - id: 1, - project_id: project_1.id, - date: 4.days.ago, - last_pipeline_id: pipeline_1.id, - ref_path: 'main', - group_name: 'rspec', - data: { coverage: 95.0 }, - default_branch: true, - group_id: group.id - ) - - ci_daily_build_group_report_results.create!( - id: 2, - project_id: project_1.id, - date: 3.days.ago, - last_pipeline_id: pipeline_2.id, - ref_path: 'main', - group_name: 'rspec', - data: { coverage: 95.0 }, - default_branch: true, - group_id: group.id - ) - - ci_daily_build_group_report_results.create!( - id: 3, - project_id: project_2.id, - date: 2.days.ago, - last_pipeline_id: pipeline_3.id, - ref_path: 'main', - group_name: 'rspec', - data: { coverage: 95.0 }, - default_branch: true, - group_id: group.id - ) - - ci_daily_build_group_report_results.create!( - id: 4, - project_id: project_2.id, - date: 1.day.ago, - last_pipeline_id: pipeline_4.id, - ref_path: 'test_branch', - group_name: 'rspec', - data: { coverage: 95.0 }, - default_branch: false, - group_id: group.id - ) - - stub_const("#{described_class}::INSERT_DELAY_SECONDS", 0) - end - - it 'creates entries per project and default_branch combination in the given range', :aggregate_failures do - subject.perform(1, 4, 2) - - entries = project_ci_feature_usages.order('project_id ASC, default_branch DESC') - - expect(entries.count).to eq(3) - expect(entries[0]).to have_attributes(project_id: project_1.id, feature: 1, default_branch: true) - expect(entries[1]).to have_attributes(project_id: project_2.id, feature: 1, default_branch: true) - expect(entries[2]).to have_attributes(project_id: project_2.id, feature: 1, default_branch: false) - end - - context 'when an entry for the project and default branch combination already exists' do - before do - subject.perform(1, 4, 2) - end - - it 'does not create a new entry' do - expect { subject.perform(1, 4, 2) }.not_to change { project_ci_feature_usages.count } - end - end - end -end diff --git a/spec/lib/gitlab/usage/metrics/instrumentations/dormant_user_period_setting_metric_spec.rb b/spec/lib/gitlab/usage/metrics/instrumentations/dormant_user_period_setting_metric_spec.rb new file mode 100644 index 00000000000..a63616aeb48 --- /dev/null +++ b/spec/lib/gitlab/usage/metrics/instrumentations/dormant_user_period_setting_metric_spec.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Gitlab::Usage::Metrics::Instrumentations::DormantUserPeriodSettingMetric do + using RSpec::Parameterized::TableSyntax + + where(:deactivate_dormant_users_period_value, :expected_value) do + 90 | 90 # default + 365 | 365 + end + + with_them do + before do + stub_env('IN_MEMORY_APPLICATION_SETTINGS', 'false') + stub_application_setting(deactivate_dormant_users_period: deactivate_dormant_users_period_value) + end + + it_behaves_like 'a correct instrumented metric value', {} + end +end diff --git a/spec/lib/gitlab/usage/metrics/instrumentations/dormant_user_setting_enabled_metric_spec.rb b/spec/lib/gitlab/usage/metrics/instrumentations/dormant_user_setting_enabled_metric_spec.rb new file mode 100644 index 00000000000..5c8ca502f82 --- /dev/null +++ b/spec/lib/gitlab/usage/metrics/instrumentations/dormant_user_setting_enabled_metric_spec.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Gitlab::Usage::Metrics::Instrumentations::DormantUserSettingEnabledMetric do + using RSpec::Parameterized::TableSyntax + + where(:deactivate_dormant_users_enabled, :expected_value) do + 1 | 1 + 0 | 0 + end + + with_them do + before do + stub_env('IN_MEMORY_APPLICATION_SETTINGS', 'false') + stub_application_setting(deactivate_dormant_users: deactivate_dormant_users_enabled) + end + + it_behaves_like 'a correct instrumented metric value', {} + end +end diff --git a/spec/migrations/20210818185845_backfill_projects_with_coverage_spec.rb b/spec/migrations/20210818185845_backfill_projects_with_coverage_spec.rb deleted file mode 100644 index 13a6aa5413e..00000000000 --- a/spec/migrations/20210818185845_backfill_projects_with_coverage_spec.rb +++ /dev/null @@ -1,71 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' -require_migration! - -RSpec.describe BackfillProjectsWithCoverage, :suppress_gitlab_schemas_validate_connection do - let(:projects) { table(:projects) } - let(:ci_pipelines) { table(:ci_pipelines) } - let(:ci_daily_build_group_report_results) { table(:ci_daily_build_group_report_results) } - let(:group) { table(:namespaces).create!(name: 'user', path: 'user') } - let(:project_1) { projects.create!(namespace_id: group.id) } - let(:project_2) { projects.create!(namespace_id: group.id) } - let(:pipeline_1) { ci_pipelines.create!(project_id: project_1.id) } - let(:pipeline_2) { ci_pipelines.create!(project_id: project_2.id) } - let(:pipeline_3) { ci_pipelines.create!(project_id: project_2.id) } - - describe '#up' do - before do - stub_const("#{described_class}::BATCH_SIZE", 2) - stub_const("#{described_class}::SUB_BATCH_SIZE", 1) - - ci_daily_build_group_report_results.create!( - id: 1, - project_id: project_1.id, - date: 3.days.ago, - last_pipeline_id: pipeline_1.id, - ref_path: 'main', - group_name: 'rspec', - data: { coverage: 95.0 }, - default_branch: true, - group_id: group.id - ) - - ci_daily_build_group_report_results.create!( - id: 2, - project_id: project_2.id, - date: 2.days.ago, - last_pipeline_id: pipeline_2.id, - ref_path: 'main', - group_name: 'rspec', - data: { coverage: 95.0 }, - default_branch: true, - group_id: group.id - ) - - ci_daily_build_group_report_results.create!( - id: 3, - project_id: project_2.id, - date: 1.day.ago, - last_pipeline_id: pipeline_3.id, - ref_path: 'test_branch', - group_name: 'rspec', - data: { coverage: 95.0 }, - default_branch: false, - group_id: group.id - ) - end - - it 'schedules BackfillProjectsWithCoverage background jobs', :aggregate_failures do - Sidekiq::Testing.fake! do - freeze_time do - migrate! - - expect(described_class::MIGRATION).to be_scheduled_delayed_migration(2.minutes, 1, 2, 1) - expect(described_class::MIGRATION).to be_scheduled_delayed_migration(4.minutes, 3, 3, 1) - expect(BackgroundMigrationWorker.jobs.size).to eq(2) - end - end - end - end -end |