summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhil Hughes <me@iamphill.com>2019-03-05 11:02:00 +0000
committerPhil Hughes <me@iamphill.com>2019-03-05 11:02:00 +0000
commitdf0d3f9c6740a0036b73d07a1613f39fd5ce691e (patch)
tree13990833ab21f150f944b093e30d6f6f382dea8c
parent83cb7482560c04d14fda372fcb4f95d667cd1962 (diff)
parent55f76ce8f6010458988ccbc99201f6b74d11e238 (diff)
downloadgitlab-ce-df0d3f9c6740a0036b73d07a1613f39fd5ce691e.tar.gz
Merge branch 'revert-2dcbc0fa' into 'master'
Revert "Merge branch 'winh-dequarantine-labels-autocomplete' into 'master'" See merge request gitlab-org/gitlab-ce!25762
-rw-r--r--jest.config.js1
-rw-r--r--spec/features/issues/gfm_autocomplete_spec.rb84
-rw-r--r--spec/frontend/gfm_auto_complete_spec.js94
-rw-r--r--spec/javascripts/fixtures/autocomplete_sources.rb40
4 files changed, 85 insertions, 134 deletions
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: {
'^~(.*)$': '<rootDir>/app/assets/javascripts$1',
'^ee(.*)$': '<rootDir>/ee/app/assets/javascripts$1',
- '^fixtures(.*)$': '<rootDir>/spec/javascripts/fixtures$1',
'^helpers(.*)$': '<rootDir>/spec/frontend/helpers$1',
'^vendor(.*)$': '<rootDir>/vendor/assets/javascripts$1',
'\\.(jpg|jpeg|png|svg)$': '<rootDir>/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('<li><small>grp/proj#5</small> Some Issue</li>');
});
});
-
- 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 = $('<textarea></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