From 55f76ce8f6010458988ccbc99201f6b74d11e238 Mon Sep 17 00:00:00 2001 From: Winnie Hellmann Date: Tue, 5 Mar 2019 11:02:00 +0000 Subject: [PATCH] Revert "Merge branch 'winh-dequarantine-labels-autocomplete' into 'master'" This reverts merge request !25542 --- jest.config.js | 1 - spec/features/issues/gfm_autocomplete_spec.rb | 84 ++++++++++++++++- spec/frontend/gfm_auto_complete_spec.js | 94 +------------------ .../fixtures/autocomplete_sources.rb | 40 -------- 4 files changed, 85 insertions(+), 134 deletions(-) delete mode 100644 spec/javascripts/fixtures/autocomplete_sources.rb diff --git a/jest.config.js b/jest.config.js index 4e346005b8a..efbf2e602c1 100644 --- a/jest.config.js +++ b/jest.config.js @@ -18,7 +18,6 @@ module.exports = { moduleNameMapper: { '^~(.*)$': '/app/assets/javascripts$1', '^ee(.*)$': '/ee/app/assets/javascripts$1', - '^fixtures(.*)$': '/spec/javascripts/fixtures$1', '^helpers(.*)$': '/spec/frontend/helpers$1', '^vendor(.*)$': '/vendor/assets/javascripts$1', '\\.(jpg|jpeg|png|svg)$': '/spec/frontend/__mocks__/file_mock.js', diff --git a/spec/features/issues/gfm_autocomplete_spec.rb b/spec/features/issues/gfm_autocomplete_spec.rb index 8eb413bdd8d..986f3823275 100644 --- a/spec/features/issues/gfm_autocomplete_spec.rb +++ b/spec/features/issues/gfm_autocomplete_spec.rb @@ -278,7 +278,12 @@ describe 'GFM autocomplete', :js do end end - context 'labels' do + # This context has just one example in each contexts in order to improve spec performance. + context 'labels', :quarantine do + let!(:backend) { create(:label, project: project, title: 'backend') } + let!(:bug) { create(:label, project: project, title: 'bug') } + let!(:feature_proposal) { create(:label, project: project, title: 'feature proposal') } + it 'opens autocomplete menu for Labels when field starts with text with item escaping HTML characters' do create(:label, project: project, title: label_xss_title) @@ -293,6 +298,83 @@ describe 'GFM autocomplete', :js do expect(find('.atwho-view-ul').text).to have_content('alert label') end end + + context 'when no labels are assigned' do + it 'shows labels' do + note = find('#note-body') + + # It should show all the labels on "~". + type(note, '~') + wait_for_requests + expect_labels(shown: [backend, bug, feature_proposal]) + + # It should show all the labels on "/label ~". + type(note, '/label ~') + expect_labels(shown: [backend, bug, feature_proposal]) + + # It should show all the labels on "/relabel ~". + type(note, '/relabel ~') + expect_labels(shown: [backend, bug, feature_proposal]) + + # It should show no labels on "/unlabel ~". + type(note, '/unlabel ~') + expect_labels(not_shown: [backend, bug, feature_proposal]) + end + end + + context 'when some labels are assigned' do + before do + issue.labels << [backend] + end + + it 'shows labels' do + note = find('#note-body') + + # It should show all the labels on "~". + type(note, '~') + wait_for_requests + expect_labels(shown: [backend, bug, feature_proposal]) + + # It should show only unset labels on "/label ~". + type(note, '/label ~') + expect_labels(shown: [bug, feature_proposal], not_shown: [backend]) + + # It should show all the labels on "/relabel ~". + type(note, '/relabel ~') + expect_labels(shown: [backend, bug, feature_proposal]) + + # It should show only set labels on "/unlabel ~". + type(note, '/unlabel ~') + expect_labels(shown: [backend], not_shown: [bug, feature_proposal]) + end + end + + context 'when all labels are assigned' do + before do + issue.labels << [backend, bug, feature_proposal] + end + + it 'shows labels' do + note = find('#note-body') + + # It should show all the labels on "~". + type(note, '~') + wait_for_requests + expect_labels(shown: [backend, bug, feature_proposal]) + + # It should show no labels on "/label ~". + type(note, '/label ~') + expect_labels(not_shown: [backend, bug, feature_proposal]) + + # It should show all the labels on "/relabel ~". + type(note, '/relabel ~') + expect_labels(shown: [backend, bug, feature_proposal]) + + # It should show all the labels on "/unlabel ~". + type(note, '/unlabel ~') + expect_labels(shown: [backend, bug, feature_proposal]) + end + end end shared_examples 'autocomplete suggestions' do diff --git a/spec/frontend/gfm_auto_complete_spec.js b/spec/frontend/gfm_auto_complete_spec.js index b79e6e0fe7b..c7008c780d6 100644 --- a/spec/frontend/gfm_auto_complete_spec.js +++ b/spec/frontend/gfm_auto_complete_spec.js @@ -6,21 +6,17 @@ import GfmAutoComplete from '~/gfm_auto_complete'; import 'vendor/jquery.caret'; import 'vendor/jquery.atwho'; -import { TEST_HOST } from 'helpers/test_constants'; -import labelsFixture from 'fixtures/autocomplete_sources/labels.json'; // eslint-disable-line import/no-unresolved - describe('GfmAutoComplete', () => { const gfmAutoCompleteCallbacks = GfmAutoComplete.prototype.getDefaultCallbacks.call({ fetchData: () => {}, }); let atwhoInstance; + let items; let sorterValue; describe('DefaultOptions.sorter', () => { describe('assets loading', () => { - let items; - beforeEach(() => { jest.spyOn(GfmAutoComplete, 'isLoading').mockReturnValue(true); @@ -65,7 +61,7 @@ describe('GfmAutoComplete', () => { atwhoInstance = { setting: {} }; const query = 'query'; - const items = []; + items = []; const searchKey = 'searchKey'; gfmAutoCompleteCallbacks.sorter.call(atwhoInstance, query, items, searchKey); @@ -254,90 +250,4 @@ describe('GfmAutoComplete', () => { ).toBe('
  • grp/proj#5 Some Issue
  • '); }); }); - - describe('labels', () => { - const dataSources = { - labels: `${TEST_HOST}/autocomplete_sources/labels`, - }; - - const allLabels = labelsFixture; - const assignedLabels = allLabels.filter(label => label.set); - const unassignedLabels = allLabels.filter(label => !label.set); - - let autocomplete; - let $textarea; - - beforeEach(() => { - autocomplete = new GfmAutoComplete(dataSources); - $textarea = $(''); - autocomplete.setup($textarea, { labels: true }); - }); - - afterEach(() => { - autocomplete.destroy(); - }); - - const triggerDropdown = text => { - $textarea - .trigger('focus') - .val(text) - .caret('pos', -1); - $textarea.trigger('keyup'); - - return new Promise(window.requestAnimationFrame); - }; - - const getDropdownItems = () => { - const dropdown = document.getElementById('at-view-labels'); - const items = dropdown.getElementsByTagName('li'); - return [].map.call(items, item => item.textContent.trim()); - }; - - const expectLabels = ({ input, output }) => - triggerDropdown(input).then(() => { - expect(getDropdownItems()).toEqual(output.map(label => label.title)); - }); - - describe('with no labels assigned', () => { - beforeEach(() => { - autocomplete.cachedData['~'] = [...unassignedLabels]; - }); - - it.each` - input | output - ${'~'} | ${unassignedLabels} - ${'/label ~'} | ${unassignedLabels} - ${'/relabel ~'} | ${unassignedLabels} - ${'/unlabel ~'} | ${[]} - `('$input shows $output.length labels', expectLabels); - }); - - describe('with some labels assigned', () => { - beforeEach(() => { - autocomplete.cachedData['~'] = allLabels; - }); - - it.each` - input | output - ${'~'} | ${allLabels} - ${'/label ~'} | ${unassignedLabels} - ${'/relabel ~'} | ${allLabels} - ${'/unlabel ~'} | ${assignedLabels} - `('$input shows $output.length labels', expectLabels); - }); - - describe('with all labels assigned', () => { - beforeEach(() => { - autocomplete.cachedData['~'] = [...assignedLabels]; - }); - - it.each` - input | output - ${'~'} | ${assignedLabels} - ${'/label ~'} | ${[]} - ${'/relabel ~'} | ${assignedLabels} - ${'/unlabel ~'} | ${assignedLabels} - `('$input shows $output.length labels', expectLabels); - }); - }); }); diff --git a/spec/javascripts/fixtures/autocomplete_sources.rb b/spec/javascripts/fixtures/autocomplete_sources.rb deleted file mode 100644 index c117fb7cd24..00000000000 --- a/spec/javascripts/fixtures/autocomplete_sources.rb +++ /dev/null @@ -1,40 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -describe Projects::AutocompleteSourcesController, '(JavaScript fixtures)', type: :controller do - include JavaScriptFixturesHelpers - - set(:admin) { create(:admin) } - set(:group) { create(:group, name: 'frontend-fixtures') } - set(:project) { create(:project, namespace: group, path: 'autocomplete-sources-project') } - set(:issue) { create(:issue, project: project) } - - before(:all) do - clean_frontend_fixtures('autocomplete_sources/') - end - - before do - sign_in(admin) - end - - it 'autocomplete_sources/labels.json' do |example| - issue.labels << create(:label, project: project, title: 'bug') - issue.labels << create(:label, project: project, title: 'critical') - - create(:label, project: project, title: 'feature') - create(:label, project: project, title: 'documentation') - - get :labels, - format: :json, - params: { - namespace_id: group.path, - project_id: project.path, - type: issue.class.name, - type_id: issue.id - } - - expect(response).to be_success - store_frontend_fixture(response, example.description) - end -end -- GitLab