Commit bcc059c4 authored by Lin Jen-Shin's avatar Lin Jen-Shin

Merge remote-tracking branch 'ee/master' into 2902-standalone-ee-dir

* ee/master:
  Removed EE specific inline JS
  Don't include EmailHelpers manually, pick with rspec
  Mention EES in protected branches feature
  Port of fix-oauth-checkboxes to EE
parents ce82d2ca 4afbcb28
......@@ -9,6 +9,7 @@ import 'bootstrap-sass/assets/javascripts/bootstrap/tab';
import 'bootstrap-sass/assets/javascripts/bootstrap/transition';
import 'bootstrap-sass/assets/javascripts/bootstrap/tooltip';
import 'bootstrap-sass/assets/javascripts/bootstrap/popover';
import 'bootstrap-sass/assets/javascripts/bootstrap/button';
// custom jQuery functions
$.fn.extend({
......
......@@ -82,6 +82,8 @@ import initIssuableSidebar from './init_issuable_sidebar';
// EE-only
import ApproversSelect from './approvers_select';
import AuditLogs from './audit_logs';
import initGeoInfoModal from './init_geo_info_modal';
import initGroupAnalytics from './init_group_analytics';
(function() {
var Dispatcher;
......@@ -119,6 +121,19 @@ import AuditLogs from './audit_logs';
});
});
function initBlobEE() {
const dataEl = document.getElementById('js-file-lock');
if (dataEl) {
const {
toggle_path,
path,
} = JSON.parse(dataEl.innerHTML);
PathLocks.init(toggle_path, path);
}
}
function initBlob() {
new LineHighlighter();
......@@ -144,6 +159,8 @@ import AuditLogs from './audit_logs';
actionTextPieces: document.querySelectorAll('.js-file-fork-suggestion-section-action'),
})
.init();
initBlobEE();
}
const filteredSearchEnabled = gl.FilteredSearchManager && document.querySelector('.filtered-search');
......@@ -347,9 +364,6 @@ import AuditLogs from './audit_logs';
shortcut_handler = new ShortcutsNavigation();
GpgBadges.fetch();
break;
case 'projects:edit':
new UsersSelect();
break;
case 'projects:imports:show':
new ProjectImport();
break;
......@@ -362,8 +376,11 @@ import AuditLogs from './audit_logs';
if ($('.blob-viewer').length) {
new BlobViewer();
}
initGeoInfoModal();
break;
case 'projects:edit':
new UsersSelect();
new GroupsSelect();
setupProjectEdit();
break;
case 'projects:pipelines:new':
......@@ -536,6 +553,23 @@ import AuditLogs from './audit_logs';
case 'admin:impersonation_tokens:index':
new gl.DueDateSelectors();
break;
case 'admin:licenses:new':
const $licenseFile = $('.license-file');
const $licenseKey = $('.license-key');
const showLicenseType = () => {
const $checkedFile = $('input[name="license_type"]:checked').val() === 'file';
$licenseFile.toggle($checkedFile);
$licenseKey.toggle(!$checkedFile);
};
$('input[name="license_type"]').on('change', showLicenseType);
showLicenseType();
break;
case 'groups:analytics:show':
initGroupAnalytics();
break;
}
switch (path.first()) {
case 'sessions':
......
export default () => {
const $modal = $('#modal-geo-info');
if (!$modal.length) return;
$modal
.appendTo('body')
.modal({
modal: true,
show: false,
})
.on('show.bs.modal', (e) => {
const {
cloneUrlPrimary,
cloneUrlSecondary,
} = $(e.currentTarget).data();
$('#geo-info-1').text(
`git clone ${(cloneUrlSecondary || '<clone url for secondary repository>')}`,
);
$('#geo-info-2').text(
`git remote set-url --push origin ${(cloneUrlPrimary || '<clone url for primary repository>')}`,
);
});
};
/* global Chart */
export default () => {
const dataEl = document.getElementById('js-analytics-data');
const data = JSON.parse(dataEl.innerHTML);
const labels = data.labels;
const outputElIds = ['push', 'issues_closed', 'merge_requests_created'];
outputElIds.forEach((id) => {
const el = document.getElementById(id);
const ctx = el.getContext('2d');
const chart = new Chart(ctx);
chart.Bar(
{
labels,
datasets: [{
fillColor: 'rgba(220,220,220,0.5)',
strokeColor: 'rgba(220,220,220,1)',
barStrokeWidth: 1,
barValueSpacing: 1,
barDatasetSpacing: 1,
data: data[id].data,
}],
},
{
scaleOverlay: true,
responsive: true,
maintainAspectRatio: false,
},
);
});
$('#event-stats').tablesorter();
};
......@@ -38,21 +38,3 @@
.form-actions
= f.submit 'Upload license', class: 'btn btn-primary'
:javascript
function showLicenseType() {
if ($("input[name='license_type']:checked").val() == "file")
{
$(".license-file").show();
$(".license-key").hide();
}
else
{
$(".license-file").hide();
$(".license-key").show();
}
}
$("input[name='license_type']").click(showLicenseType);
showLicenseType();
......@@ -121,24 +121,10 @@
%td= @stats[:total_events][index]
- [:push, :issues_closed, :merge_requests_created].each do |scope|
:javascript
var data = {
labels : #{@users.map(&:name).to_json},
datasets : [
{
fillColor : "rgba(220,220,220,0.5)",
strokeColor : "rgba(220,220,220,1)",
barStrokeWidth: 1,
barValueSpacing: 1,
barDatasetSpacing: 1,
data : #{@stats[scope].to_json}
}
]
}
var ctx = $("##{scope}").get(0).getContext("2d");
new Chart(ctx).Bar(data,{"scaleOverlay": true, responsive: true, maintainAspectRatio: false});
:javascript
$("#event-stats").tablesorter();
%script#js-analytics-data{ type: "application/json" }
- data = {}
- data[:labels] = @users.map(&:name)
- [:push, :issues_closed, :merge_requests_created].each do |scope|
- data[scope] = {}
- data[scope][:data] = @stats[scope]
= data.to_json.html_safe
......@@ -21,8 +21,8 @@
= render 'projects/fork_suggestion'
- if @project.feature_available?(:file_locks)
:javascript
PathLocks.init(
'#{toggle_project_path_locks_path(@project)}',
'#{@path}'
);
%script#js-file-lock{ type: "application/json" }
- data = {}
- data[:path] = @path
- data[:toggle_path] = toggle_project_path_locks_path(@project)
= data.to_json.html_safe
......@@ -27,19 +27,3 @@
%p
%strong= 'Done.'
You can now commit and push code as you normally do, but with increased speed.
:javascript
$('#modal-geo-info')
.appendTo('body')
.modal({ modal: true, show: false })
.on('show.bs.modal', function() {
var data = $(this).data();
$('#geo-info-1').text(
'git clone ' +
(data.cloneUrlSecondary || '<clone url for secondary repository>')
);
$('#geo-info-2').text(
'git remote set-url --push origin ' +
(data.cloneUrlPrimary || '<clone url for primary repository>')
);
});
---
title: Fixed sign-in restrictions buttons not toggling active state
merge_request:
author:
......@@ -15,16 +15,11 @@ By default, a protected branch does four simple things:
- it prevents **anyone** from force pushing to the branch
- it prevents **anyone** from deleting the branch
**Note**: A GitLab admin is allowed to push to the protected branches.
>**Note**:
A GitLab admin is allowed to push to the protected branches.
See the [Changelog](#changelog) section for changes over time.
>
>Additional functionality for GitLab Enterprise Edition:
>
>- Restrict push and merge access to [certain users][ee-restrict]
## Configuring protected branches
To protect a branch, you need to have at least Master permission level. Note
......@@ -73,7 +68,7 @@ they are set to "Masters" by default.
## Restricting push and merge access to certain users
> This feature was [introduced][ce-5081] in GitLab Enterprise Edition 8.11.
> This feature was [introduced][ce-5081] in [GitLab Enterprise Edition Starter][ee] 8.11.
With GitLab Enterprise Edition you can restrict access to protected branches
by choosing a role (Masters, Developers) as well as certain users. From the
......@@ -156,3 +151,4 @@ command line or a Git client application.
[ce-21393]: https://gitlab.com/gitlab-org/gitlab-ce/issues/21393
[ee-restrict]: http://docs.gitlab.com/ee/user/project/protected_branches.html#restricting-push-and-merge-access-to-certain-users
[perm]: ../permissions.md
[ee]: https://about.gitlab.com/gitlab-ee/
......@@ -49,6 +49,3 @@
Description parsed with #{link_to "GitLab Flavored Markdown", help_page_path('user/markdown'), target: '_blank'}.
= render 'projects/ee/merge_request_approvals_settings', project: project, form: form
:javascript
new GroupsSelect();
require 'spec_helper'
describe API::Issues do # rubocop:disable RSpec/FilePath
include EmailHelpers
describe API::Issues, :mailer do # rubocop:disable RSpec/FilePath
set(:user) { create(:user) }
set(:project) do
create(:project, :public, creator_id: user.id, namespace: user.namespace)
......
......@@ -92,6 +92,14 @@ feature 'Admin updates settings' do
expect(find('#service_push_channel').value).to eq '#test_channel'
end
context 'sign-in restrictions', :js do
it 'de-activates oauth sign-in source' do
find('.btn', text: 'GitLab.com').click
expect(find('.btn', text: 'GitLab.com')).not_to have_css('.active')
end
end
def check_all_events
page.check('Active')
page.check('Push')
......
require 'spec_helper'
describe Ci::Pipeline do
include EmailHelpers
describe Ci::Pipeline, :mailer do
let(:user) { create(:user) }
let(:project) { create(:project) }
......@@ -1252,8 +1250,6 @@ describe Ci::Pipeline do
pipeline.user.global_notification_setting
.update(level: 'custom', failed_pipeline: true, success_pipeline: true)
reset_delivered_emails!
perform_enqueued_jobs do
pipeline.enqueue
pipeline.run
......
require 'spec_helper'
describe DeployKey do
include EmailHelpers
describe DeployKey, :mailer do
describe "Associations" do
it { is_expected.to have_many(:deploy_keys_projects) }
it { is_expected.to have_many(:projects) }
......
......@@ -114,9 +114,7 @@ describe GpgKey do
end
end
describe 'notification' do
include EmailHelpers
describe 'notification', :mailer do
let(:user) { create(:user) }
it 'sends a notification' do
......
require 'spec_helper'
describe Key do
include EmailHelpers
describe Key, :mailer do
describe "Associations" do
it { is_expected.to belong_to(:user) }
end
......
require 'spec_helper'
describe PipelinesEmailService do
include EmailHelpers
describe PipelinesEmailService, :mailer do
let(:pipeline) do
create(:ci_pipeline, project: project, sha: project.commit('master').sha)
end
......@@ -14,10 +12,6 @@ describe PipelinesEmailService do
Gitlab::DataBuilder::Pipeline.build(pipeline)
end
before do
reset_delivered_emails!
end
describe 'Validations' do
context 'when service is active' do
before do
......
require 'spec_helper'
describe API::Issues do
include EmailHelpers
describe API::Issues, :mailer do
set(:user) { create(:user) }
set(:project) do
create(:project, :public, creator_id: user.id, namespace: user.namespace)
......
require 'spec_helper'
describe API::V3::Issues do
include EmailHelpers
describe API::V3::Issues, :mailer do
let(:user) { create(:user) }
let(:user2) { create(:user) }
let(:non_member) { create(:user) }
......
# coding: utf-8
require 'spec_helper'
describe Issues::UpdateService do
include EmailHelpers
describe Issues::UpdateService, :mailer do
let(:user) { create(:user) }
let(:user2) { create(:user) }
let(:user3) { create(:user) }
......
require 'spec_helper'
describe MergeRequests::UpdateService do
include EmailHelpers
describe MergeRequests::UpdateService, :mailer do
let(:project) { create(:project, :repository) }
let(:user) { create(:user) }
let(:user2) { create(:user) }
......
require 'spec_helper'
describe NotificationService do
include EmailHelpers
describe NotificationService, :mailer do
let(:notification) { described_class.new }
let(:assignee) { create(:user) }
......@@ -14,7 +12,6 @@ describe NotificationService do
shared_examples 'notifications for new mentions' do
def send_notifications(*new_mentions)
reset_delivered_emails!
notification.send(notification_method, mentionable, new_mentions, @u_disabled)
end
......@@ -137,12 +134,11 @@ describe NotificationService do
describe '#new_note' do
it do
add_users_with_subscription(note.project, issue)
reset_delivered_emails!
# Ensure create SentNotification by noteable = issue 6 times, not noteable = note
expect(SentNotification).to receive(:record).with(issue, any_args).exactly(8).times
reset_delivered_emails!
notification.new_note(note)
should_email(@u_watcher)
......@@ -165,9 +161,10 @@ describe NotificationService do
it "emails the note author if they've opted into notifications about their activity" do
add_users_with_subscription(note.project, issue)
note.author.notified_of_own_activity = true
reset_delivered_emails!
note.author.notified_of_own_activity = true
notification.new_note(note)
should_email(note.author)
......
......@@ -52,7 +52,7 @@ RSpec.configure do |config|
config.include SearchHelpers, type: :feature
config.include WaitForRequests, :js
config.include StubConfiguration
config.include EmailHelpers, type: :mailer
config.include EmailHelpers, :mailer, type: :mailer
config.include TestEnv
config.include ActiveJob::TestHelper
config.include ActiveSupport::Testing::TimeHelpers
......@@ -102,6 +102,10 @@ RSpec.configure do |config|
RequestStore.clear!
end
config.before(:example, :mailer) do
reset_delivered_emails!
end
if ENV['CI']
config.around(:each) do |ex|
ex.run_with_retry retry: 2
......
......@@ -7,7 +7,6 @@ shared_context 'gitlab email notification' do
let(:new_user_address) { 'newguy@example.com' }
before do
reset_delivered_emails!
email = recipient.emails.create(email: "notifications@example.com")
recipient.update_attribute(:notification_email, email.email)
stub_incoming_email_setting(enabled: true, address: "reply+%{key}@#{Gitlab.config.gitlab.host}")
......
......@@ -7,8 +7,6 @@ RSpec.shared_examples 'updating mentions' do |service_class|
end
def update_mentionable(opts)
reset_delivered_emails!
perform_enqueued_jobs do
service_class.new(project, user, opts).execute(mentionable)
end
......
require 'spec_helper'
describe EmailsOnPushWorker do
describe EmailsOnPushWorker, :mailer do
include RepoHelpers
include EmailHelpers
include EmailSpec::Matchers
let(:project) { create(:project, :repository) }
......@@ -90,7 +89,6 @@ describe EmailsOnPushWorker do
context "when there is an SMTP error" do
before do
reset_delivered_emails!
allow(Notify).to receive(:repository_push_email).and_raise(Net::SMTPFatalError)
allow(subject).to receive_message_chain(:logger, :info)
perform
......@@ -114,8 +112,6 @@ describe EmailsOnPushWorker do
allow_any_instance_of(Mail::TestMailer).to receive(:deliver!).and_wrap_original do |original, mail|
original.call(Mail.new(mail.encoded))
end
reset_delivered_emails!
end
it "sends the mail to each of the recipients" do
......
require 'spec_helper'
describe PipelineNotificationWorker do
include EmailHelpers
describe PipelineNotificationWorker, :mailer do
let(:pipeline) { create(:ci_pipeline) }
describe '#execute' do
......
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