Commit b2f99c46 authored by GitLab Bot's avatar GitLab Bot

Automatic merge of gitlab-org/gitlab-ce master

parents aeb4e34a 3de4c8d0
...@@ -3,13 +3,13 @@ ...@@ -3,13 +3,13 @@
module FinderMethods module FinderMethods
# rubocop: disable CodeReuse/ActiveRecord # rubocop: disable CodeReuse/ActiveRecord
def find_by!(*args) def find_by!(*args)
raise_not_found_unless_authorized execute.find_by!(*args) raise_not_found_unless_authorized execute.reorder(nil).find_by!(*args)
end end
# rubocop: enable CodeReuse/ActiveRecord # rubocop: enable CodeReuse/ActiveRecord
# rubocop: disable CodeReuse/ActiveRecord # rubocop: disable CodeReuse/ActiveRecord
def find_by(*args) def find_by(*args)
if_authorized execute.find_by(*args) if_authorized execute.reorder(nil).find_by(*args)
end end
# rubocop: enable CodeReuse/ActiveRecord # rubocop: enable CodeReuse/ActiveRecord
......
/* eslint-disable import/no-commonjs, filenames/match-regex */
const BABEL_ENV = process.env.BABEL_ENV || process.env.NODE_ENV || null; const BABEL_ENV = process.env.BABEL_ENV || process.env.NODE_ENV || null;
const presets = [ const presets = [
......
...@@ -31,4 +31,5 @@ module.exports = { ...@@ -31,4 +31,5 @@ module.exports = {
'^.+\\.js$': 'babel-jest', '^.+\\.js$': 'babel-jest',
'^.+\\.vue$': 'vue-jest', '^.+\\.vue$': 'vue-jest',
}, },
transformIgnorePatterns: ['node_modules/(?!(@gitlab/ui)/)'],
}; };
...@@ -12,7 +12,7 @@ describe FinderMethods do ...@@ -12,7 +12,7 @@ describe FinderMethods do
end end
def execute def execute
Project.all Project.all.order(id: :desc)
end end
end end
end end
...@@ -38,6 +38,16 @@ describe FinderMethods do ...@@ -38,6 +38,16 @@ describe FinderMethods do
it 'raises not found the user does not have access' do it 'raises not found the user does not have access' do
expect { finder.find_by!(id: unauthorized_project.id) }.to raise_error(ActiveRecord::RecordNotFound) expect { finder.find_by!(id: unauthorized_project.id) }.to raise_error(ActiveRecord::RecordNotFound)
end end
it 'ignores ordering' do
# Memoise the finder result so we can add message expectations to it
relation = finder.execute
allow(finder).to receive(:execute).and_return(relation)
expect(relation).to receive(:reorder).with(nil).and_call_original
finder.find_by!(id: authorized_project.id)
end
end end
describe '#find' do describe '#find' do
...@@ -66,5 +76,15 @@ describe FinderMethods do ...@@ -66,5 +76,15 @@ describe FinderMethods do
it 'returns nil when the user does not have access' do it 'returns nil when the user does not have access' do
expect(finder.find_by(id: unauthorized_project.id)).to be_nil expect(finder.find_by(id: unauthorized_project.id)).to be_nil
end end
it 'ignores ordering' do
# Memoise the finder result so we can add message expectations to it
relation = finder.execute
allow(finder).to receive(:execute).and_return(relation)
expect(relation).to receive(:reorder).with(nil).and_call_original
finder.find_by(id: authorized_project.id)
end
end end
end end
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`JumpToNextDiscussionButton matches the snapshot 1`] = `
<div
class="btn-group"
role="group"
>
<button
class="btn btn-default discussion-next-btn"
data-original-title="Jump to next unresolved discussion"
title=""
>
<icon-stub
cssclasses=""
name="comment-next"
size="16"
/>
</button>
</div>
`;
import jumpToNextDiscussionButton from '~/notes/components/discussion_jump_to_next_button.vue'; import JumpToNextDiscussionButton from '~/notes/components/discussion_jump_to_next_button.vue';
import { shallowMount, createLocalVue } from '@vue/test-utils'; import { shallowMount } from '@vue/test-utils';
const localVue = createLocalVue(); describe('JumpToNextDiscussionButton', () => {
describe('jumpToNextDiscussionButton', () => {
let wrapper; let wrapper;
beforeEach(() => { beforeEach(() => {
wrapper = shallowMount(jumpToNextDiscussionButton, { wrapper = shallowMount(JumpToNextDiscussionButton, {
localVue,
sync: false, sync: false,
}); });
}); });
...@@ -17,17 +14,17 @@ describe('jumpToNextDiscussionButton', () => { ...@@ -17,17 +14,17 @@ describe('jumpToNextDiscussionButton', () => {
wrapper.destroy(); wrapper.destroy();
}); });
it('emits onClick event on button click', done => { it('matches the snapshot', () => {
expect(wrapper.vm.$el).toMatchSnapshot();
});
it('emits onClick event on button click', () => {
const button = wrapper.find({ ref: 'button' }); const button = wrapper.find({ ref: 'button' });
button.trigger('click'); button.trigger('click');
localVue.nextTick(() => { expect(wrapper.emitted()).toEqual({
expect(wrapper.emitted()).toEqual({ onClick: [[]],
onClick: [[]],
});
done();
}); });
}); });
}); });
import Vue from 'vue';
import Translate from '~/vue_shared/translate';
import axios from '~/lib/utils/axios_utils'; import axios from '~/lib/utils/axios_utils';
const testTimeoutInMs = 300; const testTimeoutInMs = 300;
...@@ -28,3 +30,5 @@ beforeEach(done => { ...@@ -28,3 +30,5 @@ beforeEach(done => {
done(); done();
}); });
Vue.use(Translate);
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