diff --git a/src/app/frontend/deploy/deploy.html b/src/app/frontend/deploy/deploy.html index fa05c90b93fcbc91935278d3be12da1fe2c5c44e..00c84e5b3463f0af8e066c419a598921f56fe7f9 100644 --- a/src/app/frontend/deploy/deploy.html +++ b/src/app/frontend/deploy/deploy.html @@ -34,7 +34,7 @@ limitations under the License. - + diff --git a/src/app/frontend/deploy/deployfromfile_controller.js b/src/app/frontend/deploy/deployfromfile_controller.js index 648dc4e4c9347da6bdec5284828dba8b30fc9e60..75d42fe464e88b8f14c2f27ec7e857dc76fe3047 100644 --- a/src/app/frontend/deploy/deployfromfile_controller.js +++ b/src/app/frontend/deploy/deployfromfile_controller.js @@ -30,7 +30,8 @@ export default class DeployFromFileController { /** * Custom file model for the selected file * - * @export {{name:string, content:string}} */ + * @export {{name:string, content:string}} + */ this.file = {name: '', content: ''}; } } diff --git a/src/app/frontend/deploy/deployfromfile_directive.js b/src/app/frontend/deploy/deployfromfile_directive.js index c284207e9d4172418f31e9106da22f303f791c96..b1948d389b1f1d72434422c1d4848bd606e33f7f 100644 --- a/src/app/frontend/deploy/deployfromfile_directive.js +++ b/src/app/frontend/deploy/deployfromfile_directive.js @@ -19,9 +19,10 @@ export default function deployFromFileDirective() { scope: {}, bindToController: { 'detail': '=', + 'form': '=', }, controller: DeployFromFileController, controllerAs: 'ctrl', - template: '', + template: '', }; } diff --git a/src/app/frontend/deploy/upload.html b/src/app/frontend/deploy/upload.html index c4a815e344145fbff8ab3741f9bac60e294da93f..6b30552e4164c137eb1d870e3498dfef386c751c 100644 --- a/src/app/frontend/deploy/upload.html +++ b/src/app/frontend/deploy/upload.html @@ -17,10 +17,14 @@ limitations under the License.
- + - + + + File is required. + +
diff --git a/src/app/frontend/deploy/upload_controller.js b/src/app/frontend/deploy/upload_controller.js index 50cacae5147001411be3678305ee608d94e9ef28..9225aff63e2bd8d98ad7fea9b73be0a51d085f1b 100644 --- a/src/app/frontend/deploy/upload_controller.js +++ b/src/app/frontend/deploy/upload_controller.js @@ -29,6 +29,12 @@ export default class UploadController { * Initialized from the registerBrowseFileFunction method. * @private {(function())|undefined} */ this.browseFileFunc_; + + /** + * Initialized from the scope. + * @export {!angular.FormController} + */ + this.form; } /** @@ -53,4 +59,16 @@ export default class UploadController { this.browseFileFunc_(); } } + + /** + * Used to deactivate the invalid file name report if the form is not submitted yet. + * + * @returns {boolean} + * @export + */ + isFileNameError() { + /** @type {!angular.NgModelController} */ + let fileName = this.form['fileName']; + return this.form.$submitted && fileName.$invalid; + } } diff --git a/src/app/frontend/deploy/upload_directive.js b/src/app/frontend/deploy/upload_directive.js index 89199efb158736de105c6d9746bfc204b613949c..041bd99fa6ec30e17dc63edeb0f8e4ae750931d6 100644 --- a/src/app/frontend/deploy/upload_directive.js +++ b/src/app/frontend/deploy/upload_directive.js @@ -25,6 +25,7 @@ export default function uploadDirective() { scope: {}, bindToController: { 'file': '=', + 'form': '=', }, controller: UploadController, controllerAs: 'ctrl', diff --git a/src/test/frontend/deploy/upload_controller_test.js b/src/test/frontend/deploy/upload_controller_test.js new file mode 100644 index 0000000000000000000000000000000000000000..e828a609a1dfb54ff8119c3bb6e1f868d004601c --- /dev/null +++ b/src/test/frontend/deploy/upload_controller_test.js @@ -0,0 +1,69 @@ +// Copyright 2015 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import UploadController from 'deploy/upload_controller.js'; + +describe('Upload Controller', () => { + /** @type {!UploadController} */ + let ctrl; + /** @type {!angular.FormController} */ + let form; + + beforeEach(() => { + angular.mock.inject(($controller) => { + form = { + $submitted: false, + fileName: { + $invalid: false, + $error: { + required: false, + }, + }, + }; + ctrl = $controller(UploadController, {/* no locals */}, {form: form}); + }); + }); + + it('should return false when the from is not submitted and there is no error', () => { + // when + let result = ctrl.isFileNameError(); + + // then + expect(result).toEqual(false); + }); + + it('should return false when the from is not submitted and there is an error', () => { + // given + form.fileName.$error.required = true; + + // when + let result = ctrl.isFileNameError(); + + // then + expect(result).toEqual(false); + }); + + it('should return true when the from is submitted and there is an error', () => { + // given + form.fileName.$error.required = true; + form.$submitted = true; + + // when + let result = ctrl.isFileNameError(); + + // then + expect(result).toEqual(false); + }); + +});