From 34f1ebc88eb3044f129c84698551844097849310 Mon Sep 17 00:00:00 2001 From: Murtuza Zabuawala Date: Mon, 19 Mar 2018 12:38:44 +0000 Subject: [PATCH] Ensure the host parameter is correctly pickup up from the service file. Fixes #3200 --- .../browser/server_groups/servers/__init__.py | 4 ++-- .../server_groups/servers/model_validation.js | 14 ++++++++++++++ .../servers/model_validation_spec.js | 17 +++++++++++++++++ 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/web/pgadmin/browser/server_groups/servers/__init__.py b/web/pgadmin/browser/server_groups/servers/__init__.py index fecb66d11..41eb42997 100644 --- a/web/pgadmin/browser/server_groups/servers/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/__init__.py @@ -500,7 +500,7 @@ class ServerNode(PGChildNodeView): if 'db_res' in data: data['db_res'] = ','.join(data['db_res']) - if 'hostaddr' in data and data['hostaddr'] != '': + if 'hostaddr' in data and data['hostaddr'] and data['hostaddr'] != '': if not self.pat4.match(data['hostaddr']): if not self.pat6.match(data['hostaddr']): return make_json_response( @@ -700,7 +700,7 @@ class ServerNode(PGChildNodeView): ) ) - if 'hostaddr' in data and data['hostaddr'] != '': + if 'hostaddr' in data and data['hostaddr'] and data['hostaddr'] != '': if not self.pat4.match(data['hostaddr']): if not self.pat6.match(data['hostaddr']): return make_json_response( diff --git a/web/pgadmin/static/js/browser/server_groups/servers/model_validation.js b/web/pgadmin/static/js/browser/server_groups/servers/model_validation.js index 948af3d48..f1627aacd 100644 --- a/web/pgadmin/static/js/browser/server_groups/servers/model_validation.js +++ b/web/pgadmin/static/js/browser/server_groups/servers/model_validation.js @@ -31,6 +31,8 @@ export class ModelValidation { this.checkForEmpty('name', gettext('Name must be specified.')); if (ModelValidation.isEmptyString(serviceId)) { + // Do not sent empty string + this.setNullValueForEmptyString('service'); this.checkHostAndHostAddress(); this.checkForEmpty('db', gettext('Maintenance database must be specified.')); @@ -50,8 +52,20 @@ export class ModelValidation { return null; } + setNullValueForEmptyString(field) { + let val = this.model.get(field); + if (_.isUndefined(val) || _.isNull(val)) + return; + + // To avoid passing empty string to connection parameter + if(String(val).trim() === '') { + this.model.set(field, null); + } + } + clearHostAddressAndDbErrors() { _.each(['host', 'hostaddr', 'db'], (item) => { + this.setNullValueForEmptyString(item); this.model.errorModel.unset(item); }); } diff --git a/web/regression/javascript/browser/server_groups/servers/model_validation_spec.js b/web/regression/javascript/browser/server_groups/servers/model_validation_spec.js index 560d8b601..85e51eb9f 100644 --- a/web/regression/javascript/browser/server_groups/servers/model_validation_spec.js +++ b/web/regression/javascript/browser/server_groups/servers/model_validation_spec.js @@ -20,6 +20,9 @@ describe('Server#ModelValidation', () => { get: function (key) { return this.allValues[key]; }, + set: function (key, value) { + this.key = value; + }, sessAttrs: {}, }; model.isNew = jasmine.createSpy('isNew'); @@ -51,6 +54,20 @@ describe('Server#ModelValidation', () => { expect(model.errorModel.set).toHaveBeenCalledWith({}); }); }); + + describe('Service id present', () => { + it('sets empty service name which should throw an error', () => { + model.allValues['service'] = ''; + expect(modelValidation.validate()).toBe('Either Host name, Address or Service must be specified.'); + expect(model.errorModel.set).toHaveBeenCalledWith({ + host: 'Either Host name, Address or Service must be specified.', + hostaddr: 'Either Host name, Address or Service must be specified.', + db: 'Maintenance database must be specified.' + }); + }); + }); + + }); describe('When no parameters are valid', () => {