Merge branch 'ide-markdown-temp-file-fix' into 'master'
Fixed markdown preview in IDE not working for new files See merge request gitlab-org/gitlab-ce!18287
This commit is contained in:
commit
7e3bb679a9
|
@ -22,7 +22,7 @@ export default {
|
||||||
...mapState(['rightPanelCollapsed', 'viewer', 'delayViewerUpdated', 'panelResizing']),
|
...mapState(['rightPanelCollapsed', 'viewer', 'delayViewerUpdated', 'panelResizing']),
|
||||||
...mapGetters(['currentMergeRequest']),
|
...mapGetters(['currentMergeRequest']),
|
||||||
shouldHideEditor() {
|
shouldHideEditor() {
|
||||||
return this.file && this.file.binary && !this.file.raw;
|
return this.file && this.file.binary && !this.file.content;
|
||||||
},
|
},
|
||||||
editTabCSS() {
|
editTabCSS() {
|
||||||
return {
|
return {
|
||||||
|
@ -212,7 +212,7 @@ export default {
|
||||||
<content-viewer
|
<content-viewer
|
||||||
v-if="shouldHideEditor || file.viewMode === 'preview'"
|
v-if="shouldHideEditor || file.viewMode === 'preview'"
|
||||||
:content="file.content || file.raw"
|
:content="file.content || file.raw"
|
||||||
:path="file.rawPath"
|
:path="file.rawPath || file.path"
|
||||||
:file-size="file.size"
|
:file-size="file.size"
|
||||||
:project-path="file.projectId"/>
|
:project-path="file.projectId"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
|
import MockAdapter from 'axios-mock-adapter';
|
||||||
|
import axios from '~/lib/utils/axios_utils';
|
||||||
import store from '~/ide/stores';
|
import store from '~/ide/stores';
|
||||||
import repoEditor from '~/ide/components/repo_editor.vue';
|
import repoEditor from '~/ide/components/repo_editor.vue';
|
||||||
import monacoLoader from '~/ide/monaco_loader';
|
import monacoLoader from '~/ide/monaco_loader';
|
||||||
import Editor from '~/ide/lib/editor';
|
import Editor from '~/ide/lib/editor';
|
||||||
import { createComponentWithStore } from '../../helpers/vue_mount_component_helper';
|
import { createComponentWithStore } from '../../helpers/vue_mount_component_helper';
|
||||||
|
import setTimeoutPromise from '../../helpers/set_timeout_promise_helper';
|
||||||
import { file, resetStore } from '../helpers';
|
import { file, resetStore } from '../helpers';
|
||||||
|
|
||||||
describe('RepoEditor', () => {
|
describe('RepoEditor', () => {
|
||||||
|
@ -35,7 +38,7 @@ describe('RepoEditor', () => {
|
||||||
|
|
||||||
resetStore(vm.$store);
|
resetStore(vm.$store);
|
||||||
|
|
||||||
Editor.editorInstance.modelManager.dispose();
|
Editor.editorInstance.dispose();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('renders an ide container', done => {
|
it('renders an ide container', done => {
|
||||||
|
@ -79,16 +82,30 @@ describe('RepoEditor', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('when file is markdown and viewer mode is review', () => {
|
describe('when file is markdown and viewer mode is review', () => {
|
||||||
|
let mock;
|
||||||
|
|
||||||
beforeEach(done => {
|
beforeEach(done => {
|
||||||
|
mock = new MockAdapter(axios);
|
||||||
|
|
||||||
|
vm.file.projectId = 'namespace/project';
|
||||||
vm.file.previewMode = {
|
vm.file.previewMode = {
|
||||||
id: 'markdown',
|
id: 'markdown',
|
||||||
previewTitle: 'Preview Markdown',
|
previewTitle: 'Preview Markdown',
|
||||||
};
|
};
|
||||||
|
vm.file.content = 'testing 123';
|
||||||
vm.$store.state.viewer = 'diff';
|
vm.$store.state.viewer = 'diff';
|
||||||
|
|
||||||
|
mock.onPost(/(.*)\/preview_markdown/).reply(200, {
|
||||||
|
body: '<p>testing 123</p>',
|
||||||
|
});
|
||||||
|
|
||||||
vm.$nextTick(done);
|
vm.$nextTick(done);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
mock.restore();
|
||||||
|
});
|
||||||
|
|
||||||
it('renders an Edit and a Preview Tab', done => {
|
it('renders an Edit and a Preview Tab', done => {
|
||||||
Vue.nextTick(() => {
|
Vue.nextTick(() => {
|
||||||
const tabs = vm.$el.querySelectorAll('.ide-mode-tabs .nav-links li');
|
const tabs = vm.$el.querySelectorAll('.ide-mode-tabs .nav-links li');
|
||||||
|
@ -99,6 +116,26 @@ describe('RepoEditor', () => {
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('renders markdown for tempFile', done => {
|
||||||
|
vm.file.tempFile = true;
|
||||||
|
vm.file.path = `${vm.file.path}.md`;
|
||||||
|
vm.$store.state.entries[vm.file.path] = vm.file;
|
||||||
|
|
||||||
|
vm
|
||||||
|
.$nextTick()
|
||||||
|
.then(() => {
|
||||||
|
vm.$el.querySelectorAll('.ide-mode-tabs .nav-links a')[1].click();
|
||||||
|
})
|
||||||
|
.then(setTimeoutPromise)
|
||||||
|
.then(() => {
|
||||||
|
expect(vm.$el.querySelector('.preview-container').innerHTML).toContain(
|
||||||
|
'<p>testing 123</p>',
|
||||||
|
);
|
||||||
|
})
|
||||||
|
.then(done)
|
||||||
|
.catch(done.fail);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('when open file is binary and not raw', () => {
|
describe('when open file is binary and not raw', () => {
|
||||||
|
|
|
@ -22,7 +22,7 @@ Vue.config.warnHandler = (msg, vm, trace) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
let hasVueErrors = false;
|
let hasVueErrors = false;
|
||||||
Vue.config.errorHandler = function (err) {
|
Vue.config.errorHandler = function(err) {
|
||||||
hasVueErrors = true;
|
hasVueErrors = true;
|
||||||
fail(err);
|
fail(err);
|
||||||
};
|
};
|
||||||
|
@ -43,10 +43,11 @@ window.gl = window.gl || {};
|
||||||
window.gl.TEST_HOST = TEST_HOST;
|
window.gl.TEST_HOST = TEST_HOST;
|
||||||
window.gon = window.gon || {};
|
window.gon = window.gon || {};
|
||||||
window.gon.test_env = true;
|
window.gon.test_env = true;
|
||||||
|
gon.relative_url_root = '';
|
||||||
|
|
||||||
let hasUnhandledPromiseRejections = false;
|
let hasUnhandledPromiseRejections = false;
|
||||||
|
|
||||||
window.addEventListener('unhandledrejection', (event) => {
|
window.addEventListener('unhandledrejection', event => {
|
||||||
hasUnhandledPromiseRejections = true;
|
hasUnhandledPromiseRejections = true;
|
||||||
console.error('Unhandled promise rejection:');
|
console.error('Unhandled promise rejection:');
|
||||||
console.error(event.reason.stack || event.reason);
|
console.error(event.reason.stack || event.reason);
|
||||||
|
@ -71,13 +72,13 @@ const axiosDefaultAdapter = getDefaultAdapter();
|
||||||
|
|
||||||
// render all of our tests
|
// render all of our tests
|
||||||
const testsContext = require.context('.', true, /_spec$/);
|
const testsContext = require.context('.', true, /_spec$/);
|
||||||
testsContext.keys().forEach(function (path) {
|
testsContext.keys().forEach(function(path) {
|
||||||
try {
|
try {
|
||||||
testsContext(path);
|
testsContext(path);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error('[ERROR] Unable to load spec: ', path);
|
console.error('[ERROR] Unable to load spec: ', path);
|
||||||
describe('Test bundle', function () {
|
describe('Test bundle', function() {
|
||||||
it(`includes '${path}'`, function () {
|
it(`includes '${path}'`, function() {
|
||||||
expect(err).toBeNull();
|
expect(err).toBeNull();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -85,7 +86,7 @@ testsContext.keys().forEach(function (path) {
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('test errors', () => {
|
describe('test errors', () => {
|
||||||
beforeAll((done) => {
|
beforeAll(done => {
|
||||||
if (hasUnhandledPromiseRejections || hasVueWarnings || hasVueErrors) {
|
if (hasUnhandledPromiseRejections || hasVueWarnings || hasVueErrors) {
|
||||||
setTimeout(done, 1000);
|
setTimeout(done, 1000);
|
||||||
} else {
|
} else {
|
||||||
|
@ -149,18 +150,18 @@ if (process.env.BABEL_ENV === 'coverage') {
|
||||||
'./issue_show/index.js',
|
'./issue_show/index.js',
|
||||||
];
|
];
|
||||||
|
|
||||||
describe('Uncovered files', function () {
|
describe('Uncovered files', function() {
|
||||||
const sourceFiles = require.context('~', true, /\.js$/);
|
const sourceFiles = require.context('~', true, /\.js$/);
|
||||||
|
|
||||||
$.holdReady(true);
|
$.holdReady(true);
|
||||||
|
|
||||||
sourceFiles.keys().forEach(function (path) {
|
sourceFiles.keys().forEach(function(path) {
|
||||||
// ignore if there is a matching spec file
|
// ignore if there is a matching spec file
|
||||||
if (testsContext.keys().indexOf(`${path.replace(/\.js$/, '')}_spec`) > -1) {
|
if (testsContext.keys().indexOf(`${path.replace(/\.js$/, '')}_spec`) > -1) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
it(`includes '${path}'`, function () {
|
it(`includes '${path}'`, function() {
|
||||||
try {
|
try {
|
||||||
sourceFiles(path);
|
sourceFiles(path);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
|
Loading…
Reference in New Issue