diff --git a/app/assets/javascripts/issue_show/components/app.vue b/app/assets/javascripts/issue_show/components/app.vue index 25b6b207d51..37326d2ae5b 100644 --- a/app/assets/javascripts/issue_show/components/app.vue +++ b/app/assets/javascripts/issue_show/components/app.vue @@ -54,6 +54,14 @@ export default { type: String, required: true, }, + projectPath: { + type: String, + required: true, + }, + projectNamespace: { + type: String, + required: true, + }, }, data() { const store = new Store({ @@ -161,7 +169,9 @@ export default { :can-destroy="canDestroy" :issuable-templates="issuableTemplates" :markdown-docs="markdownDocs" - :markdown-preview-url="markdownPreviewUrl" /> + :markdown-preview-url="markdownPreviewUrl" + :project-path="projectPath" + :project-namespace="projectNamespace" />
export default { props: { + formState: { + type: Object, + required: true, + }, issuableTemplates: { type: Array, required: false, default: () => [], }, + projectPath: { + type: String, + required: true, + }, + projectNamespace: { + type: String, + required: true, + }, }, mounted() { - return new gl.IssuableTemplateSelectors(); + // Create the editor for the template + const editor = $('.detail-page-description .note-textarea'); + editor.setValue = (val) => { + this.formState.description = val; + }; + editor.getValue = () => this.formState.description; + + this.issuableTemplate = new gl.IssuableTemplateSelectors({ + $dropdowns: $(this.$refs.toggle), + editor, + }); }, }; @@ -20,13 +42,14 @@
- +
{ + vm.issuableTemplate.editor.setValue('test new template'); + + expect( + formState.description, + ).toBe('test new template'); + }); + + it('returns formState description with editor getValue', () => { + formState.description = 'testing new template'; + + expect( + vm.issuableTemplate.editor.getValue(), + ).toBe('testing new template'); + }); +}); diff --git a/spec/javascripts/issue_show/components/fields/title_spec.js b/spec/javascripts/issue_show/components/fields/title_spec.js index 91a2ada8d9b..53ae038a6a2 100644 --- a/spec/javascripts/issue_show/components/fields/title_spec.js +++ b/spec/javascripts/issue_show/components/fields/title_spec.js @@ -1,7 +1,6 @@ import Vue from 'vue'; import Store from '~/issue_show/stores'; import titleField from '~/issue_show/components/fields/title.vue'; -import '~/templates/issuable_template_selectors'; describe('Title field component', () => { let vm; @@ -28,23 +27,4 @@ describe('Title field component', () => { vm.$el.querySelector('.form-control').value, ).toBe('test'); }); - - it('does not render template selector if no templates exist', () => { - expect( - vm.$el.querySelector('.js-issuable-selector-wrap'), - ).toBeNull(); - }); - - it('renders template selector when templates exists', (done) => { - spyOn(gl, 'IssuableTemplateSelectors'); - vm.issuableTemplates = ['test']; - - Vue.nextTick(() => { - expect( - vm.$el.querySelector('.js-issuable-selector-wrap'), - ).not.toBeNull(); - - done(); - }); - }); }); diff --git a/spec/javascripts/issue_show/components/form_spec.js b/spec/javascripts/issue_show/components/form_spec.js new file mode 100644 index 00000000000..a2bf1de0576 --- /dev/null +++ b/spec/javascripts/issue_show/components/form_spec.js @@ -0,0 +1,45 @@ +import Vue from 'vue'; +import formComponent from '~/issue_show/components/form.vue'; +import '~/templates/issuable_template_selector'; +import '~/templates/issuable_template_selectors'; + +describe('Inline edit form component', () => { + let vm; + + beforeEach((done) => { + const Component = Vue.extend(formComponent); + + vm = new Component({ + propsData: { + canDestroy: true, + formState: { + title: 'b', + description: 'a', + }, + markdownPreviewUrl: '/', + markdownDocs: '/', + }, + }).$mount(); + + Vue.nextTick(done); + }); + + it('does not render template selector if no templates exist', () => { + expect( + vm.$el.querySelector('.js-issuable-selector-wrap'), + ).toBeNull(); + }); + + it('renders template selector when templates exists', (done) => { + spyOn(gl, 'IssuableTemplateSelectors'); + vm.issuableTemplates = ['test']; + + Vue.nextTick(() => { + expect( + vm.$el.querySelector('.js-issuable-selector-wrap'), + ).not.toBeNull(); + + done(); + }); + }); +});