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);
+ });
+
+});