diff --git a/web/pgadmin/browser/server_groups/servers/__init__.py b/web/pgadmin/browser/server_groups/servers/__init__.py index 6f3453b..489d324 100644 --- a/web/pgadmin/browser/server_groups/servers/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/__init__.py @@ -14,12 +14,12 @@ from flask.ext.security import current_user from pgadmin.model import db, Server, ServerGroup, User from pgadmin.utils.menu import MenuItem from pgadmin.utils.ajax import make_json_response, bad_request, forbidden, \ - make_response as ajax_response, internal_server_error, unauthorized, gone + make_response as ajax_response, internal_server_error, unauthorized from pgadmin.browser.utils import PGChildNodeView import traceback from flask.ext.babel import gettext import pgadmin.browser.server_groups as sg -from pgadmin.utils.crypto import encrypt, decrypt, pqencryptpassword +from pgadmin.utils.crypto import encrypt from config import PG_DEFAULT_DRIVER from pgadmin.browser.server_groups.servers.types import ServerType import config @@ -70,22 +70,14 @@ class ServerModule(sg.ServerGroupPluginModule): conn = manager.connection() connected = conn.connected() if connected: - status, result = conn.execute_dict(""" + status, in_recovery = conn.execute_scalar(""" SELECT CASE WHEN usesuper THEN pg_is_in_recovery() ELSE FALSE - END as inrecovery, - CASE WHEN usesuper AND pg_is_in_recovery() - THEN pg_is_xlog_replay_paused() - ELSE FALSE - END as isreplaypaused + END as inrecovery FROM pg_user WHERE usename=current_user""") - - in_recovery = result['rows'][0]['inrecovery']; - wal_paused = result['rows'][0]['isreplaypaused'] else: in_recovery = None - wal_paused = None yield self.generate_browser_node( "%d" % (server.id), @@ -100,8 +92,7 @@ class ServerModule(sg.ServerGroupPluginModule): version=manager.version, db=manager.db, user=manager.user_info if connected else None, - in_recovery=in_recovery, - wal_pause=wal_paused + in_recovery=in_recovery ) @property @@ -170,7 +161,7 @@ class ServerModule(sg.ServerGroupPluginModule): Override it so that - it does not register the show_node preference for server type. """ - ServerType.register_preferences() + pass class ServerMenuItem(MenuItem): def __init__(self, **kwargs): @@ -204,11 +195,7 @@ class ServerNode(PGChildNodeView): [{'post': 'create_restore_point'}], 'connect': [{ 'get': 'connect_status', 'post': 'connect', 'delete': 'disconnect' - }], - 'change_password': [{'post': 'change_password'}], - 'wal_replay': [{ - 'delete': 'pause_wal_replay', 'put': 'resume_wal_replay' - }] + }] }) def nodes(self, gid): @@ -228,24 +215,6 @@ class ServerNode(PGChildNodeView): conn = manager.connection() connected = conn.connected() - if connected: - status, result = conn.execute_dict(""" - SELECT CASE WHEN usesuper - THEN pg_is_in_recovery() - ELSE FALSE - END as inrecovery, - CASE WHEN usesuper AND pg_is_in_recovery() - THEN pg_is_xlog_replay_paused() - ELSE FALSE - END as isreplaypaused - FROM pg_user WHERE usename=current_user""") - - in_recovery = result['rows'][0]['inrecovery']; - wal_paused = result['rows'][0]['isreplaypaused'] - else: - in_recovery = None - wal_paused = None - res.append( self.blueprint.generate_browser_node( "%d" % (server.id), @@ -259,9 +228,7 @@ class ServerNode(PGChildNodeView): server_type=manager.server_type if connected else 'pg', version=manager.version, db=manager.db, - user=manager.user_info if connected else None, - in_recovery=in_recovery, - wal_pause=wal_paused + user=manager.user_info if connected else None ) ) return make_json_response(result=res) @@ -288,24 +255,6 @@ class ServerNode(PGChildNodeView): conn = manager.connection() connected = conn.connected() - if connected: - status, result = conn.execute_dict(""" - SELECT CASE WHEN usesuper - THEN pg_is_in_recovery() - ELSE FALSE - END as inrecovery, - CASE WHEN usesuper AND pg_is_in_recovery() - THEN pg_is_xlog_replay_paused() - ELSE FALSE - END as isreplaypaused - FROM pg_user WHERE usename=current_user""") - - in_recovery = result['rows'][0]['inrecovery']; - wal_paused = result['rows'][0]['isreplaypaused'] - else: - in_recovery = None - wal_paused = None - return make_json_response( result=self.blueprint.generate_browser_node( "%d" % (server.id), @@ -319,9 +268,7 @@ class ServerNode(PGChildNodeView): server_type=manager.server_type if connected else 'pg', version=manager.version, db=manager.db, - user=manager.user_info if connected else None, - in_recovery=in_recovery, - wal_pause=wal_paused + user=manager.user_info if connected else None ) ) @@ -350,14 +297,14 @@ class ServerNode(PGChildNodeView): success=0, errormsg=e.message) - try: - info = traceback.format_exc() - except Exception as e: - current_app.logger.exception(e) - info = str(e) + # try: + # info = traceback.format_exc() + # except Exception as e: + # current_app.logger.exception(e) + # info = str(e) return make_json_response(success=1, - info=info) + info= "success") def update(self, gid, sid): """Update the server settings""" @@ -782,24 +729,6 @@ class ServerNode(PGChildNodeView): current_app.logger.info('Connection Established for server: \ %s - %s' % (server.id, server.name)) - # Update the recovery and wal pause option for the server if connected successfully - status, result = conn.execute_dict(""" - SELECT CASE WHEN usesuper - THEN pg_is_in_recovery() - ELSE FALSE - END as inrecovery, - CASE WHEN usesuper AND pg_is_in_recovery() - THEN pg_is_xlog_replay_paused() - ELSE FALSE - END as isreplaypaused - FROM pg_user WHERE usename=current_user""") - if status: - in_recovery = result['rows'][0]['inrecovery']; - wal_paused = result['rows'][0]['isreplaypaused'] - else: - in_recovery = None - wal_paused = None - return make_json_response( success=1, info=gettext("Server connected."), @@ -811,9 +740,7 @@ class ServerNode(PGChildNodeView): 'type': manager.server_type, 'version': manager.version, 'db': manager.db, - 'user': manager.user_info, - 'in_recovery': in_recovery, - 'wal_pause': wal_paused + 'user': manager.user_info } ) @@ -911,177 +838,4 @@ class ServerNode(PGChildNodeView): ) return internal_server_error(errormsg=str(e)) - def change_password(self, gid, sid): - """ - This function is used to change the password of the - Database Server. - - Args: - gid: Group id - sid: Server id - """ - try: - data = json.loads(request.form['data']) - if data and ('password' not in data or - data['password'] == '' or - 'newPassword' not in data or - data['newPassword'] == '' or - 'confirmPassword' not in data or - data['confirmPassword'] == ''): - return make_json_response( - status=400, - success=0, - errormsg=gettext( - "Couldn't find the required parameter(s)." - ) - ) - - if data['newPassword'] != data['confirmPassword']: - return make_json_response( - status=200, - success=0, - errormsg=gettext( - "Passwords do not match." - ) - ) - - # Fetch Server Details - server = Server.query.filter_by(id=sid).first() - if server is None: - return bad_request(gettext("Server not found.")) - - # Fetch User Details. - user = User.query.filter_by(id=current_user.id).first() - if user is None: - return unauthorized(gettext("Unauthorized request.")) - - from pgadmin.utils.driver import get_driver - manager = get_driver(PG_DEFAULT_DRIVER).connection_manager(sid) - conn = manager.connection() - - decrypted_password = decrypt(manager.password, user.password) - - if isinstance(decrypted_password, bytes): - decrypted_password = decrypted_password.decode() - - password = data['password'] - - # Validate old password before setting new. - if password != decrypted_password: - return unauthorized(gettext("Incorrect password.")) - - # Hash new password before saving it. - password = pqencryptpassword(data['newPassword'], manager.user) - - SQL = render_template("/".join([ - 'servers/sql', - '9.2_plus' if manager.version >= 90200 else '9.1_plus', - 'change_password.sql' - ]), - conn=conn, _=gettext, - user=manager.user, encrypted_password=password) - - status, res = conn.execute_scalar(SQL) - - if not status: - return internal_server_error(errormsg=res) - - password = encrypt(data['newPassword'], user.password) - # Check if old password was stored in pgadmin4 sqlite database. - # If yes then update that password. - if server.password is not None: - setattr(server, 'password', password) - db.session.commit() - # Also update password in connection manager. - manager.password = password - manager.update_session() - - return make_json_response( - status=200, - success=1, - info=gettext( - "Password changed successfully." - ) - ) - - except Exception as e: - return internal_server_error(errormsg=str(e)) - - def wal_replay(self, sid, pause=True): - """ - Utility function for wal_replay for resume/pause. - """ - server = Server.query.filter_by( - user_id=current_user.id, id=sid - ).first() - - if server is None: - return make_json_response( - success=0, - errormsg=gettext("Could not find the required server.") - ) - - try: - from pgadmin.utils.driver import get_driver - manager = get_driver(PG_DEFAULT_DRIVER).connection_manager(sid) - conn = manager.connection() - - # Execute SQL to pause or resume WAL replay - if conn.connected(): - if pause: - status, res = conn.execute_scalar( - "SELECT pg_xlog_replay_pause();" - ) - if not status: - return internal_server_error( - errormsg=str(res) - ) - else: - status, res = conn.execute_scalar( - "SELECT pg_xlog_replay_resume();" - ) - if not status: - return internal_server_error( - errormsg=str(res) - ) - return make_json_response( - success=1, - info=gettext('WAL replay paused'), - data={'in_recovery': True, 'wal_pause': pause} - ) - return gone(errormsg=_('Please connect the server!')) - except Exception as e: - current_app.logger.error( - 'WAL replay pause/resume failed' - ) - return internal_server_error(errormsg=str(e)) - - def resume_wal_replay(self, gid, sid): - """ - This method will resume WAL replay - - Args: - gid: Server group ID - sid: Server ID - - Returns: - None - """ - return self.wal_replay(sid, False) - - def pause_wal_replay(self, gid, sid): - """ - This method will pause WAL replay - - Args: - gid: Server group ID - sid: Server ID - - Returns: - None - """ - return self.wal_replay(sid, True) - - - ServerNode.register_node_view(blueprint) diff --git a/web/pgadmin/browser/server_groups/servers/databases/casts/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/casts/tests/__init__.py new file mode 100644 index 0000000..bfb0263 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/casts/tests/__init__.py @@ -0,0 +1,16 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from pgadmin.utils.route import BaseTestGenerator + + +class CastTestGenerator(BaseTestGenerator): + + def runTest(self): + return [] diff --git a/web/pgadmin/browser/server_groups/servers/databases/casts/tests/test_cast_add.py b/web/pgadmin/browser/server_groups/servers/databases/casts/tests/test_cast_add.py new file mode 100644 index 0000000..5f22f84 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/casts/tests/test_cast_add.py @@ -0,0 +1,77 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data, pickle_path +from pgadmin.browser.tests.test_login import LoginTestCase +import json, pickle, os +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes + + +class CastsAddTestCase(LoginTestCase): + """This class will add cast under database node. """ + + priority = 19 + + scenarios = [ + # Fetching default URL for cast node. + ('Check Cast Node', dict(url='/browser/cast/obj/')) + ] + + def runTest(self): + """ This function will add cast under 1st server of tree node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + data =\ + { + "castcontext": config_data['test_casts_credentials'] + ['test_cast_context'], + "encoding": config_data['test_casts_credentials'] + ['test_encoding'], + "name": config_data['test_casts_credentials'] + ['test_name'], + "srctyp": config_data['test_casts_credentials'] + ['test_source_type'], + "trgtyp": config_data['test_casts_credentials'] + ['test_target_type'] + + } + + response = self.tester.post(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(db_id) + '/', + data=json.dumps(data), + content_type='html/json') + + self.assertTrue(response.status_code, 200) + + respdata = json.loads(response.data.decode()) + + cast_id = respdata['node']['_id'] + + if os.path.isfile(pickle_path): + exst_server_id = open(pickle_path, 'rb') + all_id = pickle.load(exst_server_id) + pickle_id_dict = all_id + + pickle_id_dict["cid"].append(cast_id) + + cast_output = open(pickle_path, 'wb') + pickle.dump(pickle_id_dict, cast_output) + cast_output.close() + + diff --git a/web/pgadmin/browser/server_groups/servers/databases/casts/tests/test_cast_delete.py b/web/pgadmin/browser/server_groups/servers/databases/casts/tests/test_cast_delete.py new file mode 100644 index 0000000..0340b42 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/casts/tests/test_cast_delete.py @@ -0,0 +1,62 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +import json +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes + + +class CastsDeleteTestCase(LoginTestCase): + """ + This class will delete cast node present on the object browser's + tree node by response code. + """ + + priority = 22 + + scenarios = [ + # Fetching default URL for cast node. + ('Check Cast Node', dict(url='/browser/cast/obj/')) + ] + + def runTest(self): + """ This function will delete added cast node under database node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + cast_id = all_id["cid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + # Fetch added cast node. + response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(db_id) + + '/' + str(cast_id), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + if len(respdata) == 0: + raise Exception("No cast(s) to delete.") + + del_response = self.tester.delete(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + + str(db_id) + '/' + str(cast_id), + follow_redirects=True) + + del_respdata = json.loads(del_response.data.decode()) + + self.assertTrue(del_respdata['success'], 1) \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/casts/tests/test_cast_get.py b/web/pgadmin/browser/server_groups/servers/databases/casts/tests/test_cast_get.py new file mode 100644 index 0000000..5603707 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/casts/tests/test_cast_get.py @@ -0,0 +1,46 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes + + +class CastsGetTestCase(LoginTestCase): + """ This class will fetch the cast node added under database. """ + + priority = 20 + + scenarios = [ + # Fetching default URL for cast node. + ('Check Cast Node', dict(url='/browser/cast/obj/')) + ] + + def runTest(self): + """ This function will get cast under 1st server of tree node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + cast_id = all_id["cid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(db_id) + + '/' + str(cast_id), + content_type='html/json') + + self.assertEquals(response.status_code, 200) + diff --git a/web/pgadmin/browser/server_groups/servers/databases/casts/tests/test_cast_put.py b/web/pgadmin/browser/server_groups/servers/databases/casts/tests/test_cast_put.py new file mode 100644 index 0000000..432ec8e --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/casts/tests/test_cast_put.py @@ -0,0 +1,67 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +import json +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes + + +class CastsUpdateTestCase(LoginTestCase): + """ + This class will update cast node present on the object browser's + tree node by response code. + """ + priority = 21 + + scenarios = [ + # Fetching default URL for cast node. + ('Check Cast Node', dict(url='/browser/cast/obj/')) + ] + + def runTest(self): + """ This function will update cast under 1st server of tree node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + cast_id = all_id["cid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + # Fetch added cast node. + response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(db_id) + + '/' + str(cast_id), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + if len(respdata) == 0: + raise Exception("No cast(s) to update.") + + data = { + "description": config_data["test_cast_update_data"] + ["test_comment"], + "id": cast_id + } + + put_response = self.tester.put(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(db_id) + + '/' + str(cast_id), + data=json.dumps(data), + follow_redirects=True) + + self.assertEquals(put_response.status_code, 200) + diff --git a/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/__init__.py new file mode 100644 index 0000000..4b8df06 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/__init__.py @@ -0,0 +1,16 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from pgadmin.utils.route import BaseTestGenerator + + +class EventTriggerGeneratorTestCase(BaseTestGenerator): + + def runTest(self): + return [] \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/test_event_trigger_add.py b/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/test_event_trigger_add.py new file mode 100644 index 0000000..51a7ed9 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/test_event_trigger_add.py @@ -0,0 +1,77 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data, pickle_path +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes +import json +import pickle +import os + + +class EventTriggerAddTestCase(LoginTestCase): + """ This class will add new event trigger under schema node. """ + + priority = 39 + + scenarios = [ + # Fetching default URL for event trigger node. + ('Fetch Event Trigger Node URL', + dict(url='/browser/event_trigger/obj/')) + ] + + def runTest(self): + """ This function will add event trigger under database node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + data = \ + { + "enabled": config_data['test_event_trigger_credentials'] + ['test_enable'], + "eventfunname": config_data['test_event_trigger_credentials'] + ['test_event_func'], + "eventname": config_data['test_event_trigger_credentials'] + ['test_event_name'], + "eventowner": config_data['test_event_trigger_credentials'] + ['test_event_owner'], + "name": config_data['test_event_trigger_credentials'] + ['test_name'], + "providers": config_data['test_event_trigger_credentials'] + ['test_provider'] + } + + response = self.tester.post(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(db_id) + + '/', data=json.dumps(data), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + event_trigger_id = respdata['node']['_id'] + + if os.path.isfile(pickle_path): + exst_server_id = open(pickle_path, 'rb') + all_id = pickle.load(exst_server_id) + pickle_id_dict = all_id + + pickle_id_dict["etid"].append(event_trigger_id) + + event_trigger_output = open(pickle_path, 'wb') + pickle.dump(pickle_id_dict, event_trigger_output) + event_trigger_output.close() diff --git a/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/test_event_trigger_delete.py b/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/test_event_trigger_delete.py new file mode 100644 index 0000000..8081e52 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/test_event_trigger_delete.py @@ -0,0 +1,61 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes +import json + + +class EventTriggerDeleteTestCase(LoginTestCase): + """ This class will delete added event trigger under database node. """ + + priority = 42 + + scenarios = [ + # Fetching default URL for event trigger node. + ('Fetch Event Trigger Node URL', + dict(url='/browser/event_trigger/obj/')) + ] + + def runTest(self): + """ This function will delete event trigger under database node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + event_trigger_id = all_id["etid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + # Fetch added event trigger node. + response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(db_id) + + '/' + str(event_trigger_id), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + if len(respdata) == 0: + raise Exception("No event trigger(s) to delete.") + + del_response = self.tester.delete(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + + str(db_id) + '/' + + str(event_trigger_id), + follow_redirects=True) + + del_respdata = json.loads(del_response.data.decode()) + + self.assertTrue(del_respdata['success'], 1) \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/test_event_trigger_get.py b/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/test_event_trigger_get.py new file mode 100644 index 0000000..92b417b --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/test_event_trigger_get.py @@ -0,0 +1,47 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes + + +class EventTriggerGetTestCase(LoginTestCase): + """ This class will fetch added event trigger under schema node. """ + + priority = 40 + + scenarios = [ + # Fetching default URL for event trigger node. + ('Fetch Event Trigger Node URL', + dict(url='/browser/event_trigger/obj/')) + ] + + def runTest(self): + """ This function will fetch event trigger under database node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + event_trigger_id = all_id["etid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(db_id) + + '/' + str(event_trigger_id), + content_type='html/json') + + self.assertEquals(response.status_code, 200) + diff --git a/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/test_event_trigger_put.py b/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/test_event_trigger_put.py new file mode 100644 index 0000000..2cfd04c --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/test_event_trigger_put.py @@ -0,0 +1,66 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes +import json + + +class EventTriggerPutTestCase(LoginTestCase): + """ This class will update added event trigger under schema node. """ + + priority = 41 + + scenarios = [ + # Fetching default URL for event trigger node. + ('Fetch Event Trigger Node URL', + dict(url='/browser/event_trigger/obj/')) + ] + + def runTest(self): + """ This function will update event trigger under database node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + event_trigger_id = all_id["etid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + # Fetch added event trigger node. + response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(db_id) + + '/' + str(event_trigger_id), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + if len(respdata) == 0: + raise Exception("No event trigger(s) to update.") + + data = \ + { + "comment": config_data['test_event_trigger_update_data'] + ['test_comment'], + "id": event_trigger_id + } + + put_response = self.tester.put(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(db_id) + + '/' + str(event_trigger_id), + data=json.dumps(data), + follow_redirects=True) + + self.assertEquals(put_response.status_code, 200) diff --git a/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/__init__.py new file mode 100644 index 0000000..025b57e --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/__init__.py @@ -0,0 +1,16 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from pgadmin.utils.route import BaseTestGenerator + + +class ExtensionGeneratorTestCase(BaseTestGenerator): + + def runTest(self): + return [] \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/test_extension_add.py b/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/test_extension_add.py new file mode 100644 index 0000000..11c61c2 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/test_extension_add.py @@ -0,0 +1,74 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data, pickle_path +from pgadmin.browser.tests.test_login import LoginTestCase +import json +import pickle +import os +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes + + +class ExtensionsAddTestCase(LoginTestCase): + """ This class will add new extension under extension node. """ + priority = 33 + + scenarios = [ + # Fetching default URL for extension node. + ('Check Extension Node', dict(url='/browser/extension/obj/')) + ] + + def runTest(self): + """ This function will add extension under 1st server of tree node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + data =\ + { + "name": config_data['test_extension_credentials'] + ['test_name'], + "relocatable": config_data['test_extension_credentials'] + ['test_relocate'], + "schema": config_data['test_extension_credentials'] + ['test_schema'], + "version": config_data['test_extension_credentials'] + ['test_version'] + + } + + response = self.tester.post(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(db_id) + '/', + data=json.dumps(data), + content_type='html/json') + + self.assertTrue(response.status_code, 200) + + respdata = json.loads(response.data.decode()) + + extension_id = respdata['node']['_id'] + + if os.path.isfile(pickle_path): + exst_server_id = open(pickle_path, 'rb') + all_id = pickle.load(exst_server_id) + pickle_id_dict = all_id + + pickle_id_dict["eid"].append(extension_id) + + extension_output = open(pickle_path, 'wb') + pickle.dump(pickle_id_dict, extension_output) + extension_output.close() \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/test_extension_delete.py b/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/test_extension_delete.py new file mode 100644 index 0000000..a775c8e --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/test_extension_delete.py @@ -0,0 +1,60 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +import json +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes + + +class ExtensionDeleteTestCase(LoginTestCase): + """ This class will delete extension node added under database node. """ + + priority = 96 + + scenarios = [ + # Fetching default URL for extension node. + ('Check Cast Node', dict(url='/browser/extension/obj/')) + ] + + def runTest(self): + """ This function will delete added extension under database node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + extension_id = all_id["eid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + # Fetch added extension node. + response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + + str(db_id) + '/' + str(extension_id), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + if len(respdata) == 0: + raise Exception("No extension(s) to delete.") + + del_response = self.tester.delete(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + + str(db_id) + '/' + + str(extension_id), + follow_redirects=True) + + del_respdata = json.loads(del_response.data.decode()) + + self.assertTrue(del_respdata['success'], 1) \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/test_extension_get.py b/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/test_extension_get.py new file mode 100644 index 0000000..0fba2c7 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/test_extension_get.py @@ -0,0 +1,45 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes + + +class ExtensionGetTestCase(LoginTestCase): + """ This class will fetch the extension node added under database. """ + + priority = 34 #24 + + scenarios = [ + # Fetching default URL for extension node. + ('Check extension Node', dict(url='/browser/extension/obj/')) + ] + + def runTest(self): + """ This function will fetch added extension under database node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + extension_id = all_id["eid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(db_id) + + '/' + str(extension_id), + content_type='html/json') + + self.assertEquals(response.status_code, 200) diff --git a/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/test_extension_put.py b/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/test_extension_put.py new file mode 100644 index 0000000..5645af3 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/test_extension_put.py @@ -0,0 +1,67 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +import json +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes + + +class ExtensionPutTestCase(LoginTestCase): + """ + This class will update extension node present on the object browser's + tree node by response code. + """ + priority = 35 + + scenarios = [ + # Fetching default URL for extension node. + ('Check extension Node', dict(url='/browser/extension/obj/')) + ] + + def runTest(self): + """ This function will update extension node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + extension_id = all_id["eid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + # Fetch added extension node. + response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(db_id) + + '/' + str(extension_id), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + if len(respdata) == 0: + raise Exception("No extension(s) to update.") + + data = \ + { + "id": extension_id, + "schema": config_data["test_extension_update_data"] + ["test_schema"] + } + + put_response = self.tester.put(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(db_id) + + '/' + str(extension_id), + data=json.dumps(data), + follow_redirects=True) + + self.assertEquals(put_response.status_code, 200) \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/__init__.py new file mode 100644 index 0000000..f5a240e --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/__init__.py @@ -0,0 +1,16 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from pgadmin.utils.route import BaseTestGenerator + + +class LanguageTestGenerator(BaseTestGenerator): + + def generate_tests(self): + return [] diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/tests/test_language_get.py b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/test_language_get.py new file mode 100644 index 0000000..14ec42d --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/test_language_get.py @@ -0,0 +1,47 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_nodes import test_getnodes +from regression.test_utils import get_ids + + +class LanguageGetTestCase(LoginTestCase): + """ + This class will fetch default language node available under database node. + """ + priority = 31 + + scenarios = [ + # Fetching default URL for language node. + ('Check language Node', dict(url='/browser/language/obj/')) + ] + + def runTest(self): + """ This function will fetch default language node present under + database. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + lang_id = all_id["lid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + + str(db_id) + '/' + str(lang_id), + content_type='html/json') + + self.assertEquals(response.status_code, 200) diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/tests/test_language_put.py b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/test_language_put.py new file mode 100644 index 0000000..63fab63 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/test_language_put.py @@ -0,0 +1,64 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +import json +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes + + +class LanguageUpdateTestCase(LoginTestCase): + """ This class will update available language node under database node. """ + + priority = 32 + + scenarios = [ + # Fetching default URL for cast node. + ('Check Language Node URL', dict(url='/browser/language/obj/')) + ] + + def runTest(self): + """ This function will update language node's comments field. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + lang_id = all_id["lid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + # Fetch available language node. + response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(db_id) + + '/' + str(lang_id), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + if len(respdata) == 0: + raise Exception("No language(s) to update.") + + data = { + "description": config_data["test_language_update_data"] + ["test_comment"], + "id": lang_id + } + + put_response = self.tester.put(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(db_id) + + '/' + str(lang_id), + data=json.dumps(data), + follow_redirects=True) + + self.assertEquals(put_response.status_code, 200) \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/__init__.py new file mode 100644 index 0000000..ba78cb1 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/__init__.py @@ -0,0 +1,16 @@ +########################################################################## +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +########################################################################## + +from pgadmin.utils.route import BaseTestGenerator + + +class CollationTestGenerator(BaseTestGenerator): + + def generate_tests(self): + return [] diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/test_collation_add.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/test_collation_add.py new file mode 100644 index 0000000..4dcc565 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/test_collation_add.py @@ -0,0 +1,80 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data, pickle_path +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes +import json +import pickle +import os + + +class CollationAddTestCase(LoginTestCase): + """ This class will add new collation under schema node. """ + + priority = 48 + + scenarios = [ + # Fetching default URL for collation node. + ('Default Node URL', dict(url='/browser/collation/obj/')) + ] + + def runTest(self): + """ This function will add collation under schema node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + schema_id = all_id["scid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + # Fetch added schema node. + response = self.tester.get('/browser/schema/obj/' + str(srv_grp) + + '/' + str(server_id) + '/' + + str(db_id) + '/' + str(schema_id), + content_type='html/json') + + data = \ + { + "copy_collation": config_data['test_collation_credentials'] + ['test_copy_collation'], + "name": config_data['test_collation_credentials'] + ['test_name'], + "owner": config_data['test_collation_credentials'] + ['test_owner'], + "schema": config_data['test_collation_credentials'] + ['test_schema'] + } + + response = self.tester.post(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(db_id) + + '/' + str(schema_id) + '/', + data=json.dumps(data), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + collation_id = respdata['node']['_id'] + + if os.path.isfile(pickle_path): + exst_server_id = open(pickle_path, 'rb') + all_id = pickle.load(exst_server_id) + pickle_id_dict = all_id + + pickle_id_dict["coid"].append(collation_id) + + collation_output = open(pickle_path, 'wb') + pickle.dump(pickle_id_dict, collation_output) + collation_output.close() diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/test_collation_delete.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/test_collation_delete.py new file mode 100644 index 0000000..9187c5a --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/test_collation_delete.py @@ -0,0 +1,73 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes +import json + + +class CollationDeleteTestCase(LoginTestCase): + """ This class will delete added collation under schema node. """ + + priority = 51 + + scenarios = [ + # Fetching default URL for collation node. + ('Fetch collation Node URL', dict(url='/browser/collation/obj/')) + ] + + def runTest(self): + """ This function will delete collation under schema node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + schema_id = all_id["scid"][0] + collation_id = all_id["coid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + # Fetch added schema node. + response = self.tester.get('/browser/schema/obj/' + '{0}/{1}/{2}/{3}'.format + (srv_grp, server_id, db_id, schema_id), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + if len(respdata) != 0: + + get_response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id) + '/' + + str(collation_id), + content_type='html/json') + + get_respdata = json.loads(get_response.data.decode()) + + if len(get_respdata) == 0: + raise Exception("No collation node to delete.") + + del_response = self.tester.delete(self.url + str(srv_grp) + + '/' + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id) + '/' + + str(collation_id), + follow_redirects=True) + + del_respdata = json.loads(del_response.data.decode()) + + self.assertTrue(del_respdata['success'], 1) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/test_collation_get.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/test_collation_get.py new file mode 100644 index 0000000..4c95915 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/test_collation_get.py @@ -0,0 +1,59 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes +import json + + +class CollationGetTestCase(LoginTestCase): + """ This class will fetch new collation under schema node. """ + + priority = 49 + + scenarios = [ + # Fetching default URL for collation node. + ('Fecth collation Node URL', dict(url='/browser/collation/obj/')) + ] + + def runTest(self): + """ This function will fetch collation under schema node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + schema_id = all_id["scid"][0] + collation_id = all_id["coid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + # Fetch added schema node. + response = self.tester.get('/browser/schema/obj/' + '{0}/{1}/{2}/{3}'.format + (srv_grp, server_id, db_id, schema_id), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + if len(respdata) != 0: + + get_response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id) + '/' + + str(collation_id), + content_type='html/json') + + self.assertEquals(get_response.status_code, 200) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/test_collation_put.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/test_collation_put.py new file mode 100644 index 0000000..069d22e --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/test_collation_put.py @@ -0,0 +1,79 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes +import json + + +class CollationPutTestCase(LoginTestCase): + """ This class will update added collation under schema node. """ + + priority = 50 + + scenarios = [ + # Fetching default URL for collation node. + ('Fetch collation Node URL', dict(url='/browser/collation/obj/')) + ] + + def runTest(self): + """ This function will update collation under schema node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + schema_id = all_id["scid"][0] + collation_id = all_id["coid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + # Fetch added schema node. + response = self.tester.get('/browser/schema/obj/' + '{0}/{1}/{2}/{3}'.format + (srv_grp, server_id, db_id, schema_id), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + if len(respdata) != 0: + + get_response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id) + '/' + + str(collation_id), + content_type='html/json') + + get_respdata = json.loads(get_response.data.decode()) + + if len(get_respdata) == 0: + raise Exception("No collation node to update.") + + data = \ + { + "description": config_data['test_collation_update_data'] + ['test_comment'], + "id": collation_id, + } + + put_response = self.tester.put(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id) + '/' + + str(collation_id), + data=json.dumps(data), + follow_redirects=True) + + self.assertEquals(put_response.status_code, 200) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/tests/__init__.py new file mode 100644 index 0000000..7dca204 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/tests/__init__.py @@ -0,0 +1,16 @@ +########################################################################## +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +########################################################################## + +from pgadmin.utils.route import BaseTestGenerator + + +class DomainTestGenerator(BaseTestGenerator): + + def generate_tests(self): + return [] diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/tests/test_domain_add.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/tests/test_domain_add.py new file mode 100644 index 0000000..60518e6 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/tests/test_domain_add.py @@ -0,0 +1,96 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data, pickle_path +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes +import json +import pickle +import os + + +class DomainAddTestCase(LoginTestCase): + """ This class will add new domain under schema node. """ + + priority = 52 + + scenarios = [ + # Fetching default URL for domain node. + ('Fecth domain Node URL', dict(url='/browser/domain/obj/')) + ] + + def runTest(self): + """ This function will add domain under schema node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + schema_id = all_id["scid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + # Fetch added schema node. + response = self.tester.get('/browser/schema/obj/' + '{0}/{1}/{2}/{3}'.format + (srv_grp, server_id, db_id, schema_id), + content_type='html/json') + + data = \ + { + "basensp": config_data['test_domain_data'] + ['test_schema'], + "basetype": config_data['test_domain_data'] + ['test_basetype'], + "collname": config_data['test_domain_data'] + ['test_collation'], + "constraints": config_data['test_domain_data'] + ['test_constraints'], + "is_tlength": config_data['test_domain_data'] + ['test_lenght'], + "max_val": config_data['test_domain_data'] + ['test_max_value'], + "min_val": config_data['test_domain_data'] + ['test_min_value'], + "name": config_data['test_domain_data'] + ['test_name'], + "owner": config_data['test_domain_data'] + ['test_owner'], + "seclabels": config_data['test_domain_data'] + ['test_security'], + "typdefault": config_data['test_domain_data'] + ['test_defalt_type'], + "typlen": config_data['test_domain_data'] + ['test_type_len'], + } + + response = self.tester.post(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(db_id) + + '/' + str(schema_id) + '/', + data=json.dumps(data), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + domain_id = respdata['node']['_id'] + + if os.path.isfile(pickle_path): + exst_server_id = open(pickle_path, 'rb') + all_id = pickle.load(exst_server_id) + pickle_id_dict = all_id + + pickle_id_dict["doid"].append(domain_id) + + domain_output = open(pickle_path, 'wb') + pickle.dump(pickle_id_dict, domain_output) + domain_output.close() \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/tests/test_domain_delete.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/tests/test_domain_delete.py new file mode 100644 index 0000000..906ee45 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/tests/test_domain_delete.py @@ -0,0 +1,72 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes +import json + + +class DomainDeleteTestCase(LoginTestCase): + """ This class will delete new domain under schema node. """ + + priority = 55 + + scenarios = [ + # Fetching default URL for domain node. + ('Fecth domain Node URL', dict(url='/browser/domain/obj/')) + ] + + def runTest(self): + """ This function will delete domain under schema node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + schema_id = all_id["scid"][0] + domain_id= all_id["doid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + # Fetch added schema node. + response = self.tester.get('/browser/schema/obj/' + '{0}/{1}/{2}/{3}'.format + (srv_grp, server_id, db_id, schema_id), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + if len(respdata) != 0: + get_response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id) + '/' + + str(domain_id), + content_type='html/json') + + get_respdata = json.loads(get_response.data.decode()) + + if len(get_respdata) == 0: + raise Exception("No domain node to delete.") + + del_response = self.tester.delete(self.url + str(srv_grp) + + '/' + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id) + '/' + + str(domain_id), + follow_redirects=True) + + del_respdata = json.loads(del_response.data.decode()) + + self.assertTrue(del_respdata['success'], 1) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/tests/test_domain_get.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/tests/test_domain_get.py new file mode 100644 index 0000000..cc0fe5c --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/tests/test_domain_get.py @@ -0,0 +1,59 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes +import json + + +class DomainGetTestCase(LoginTestCase): + """ This class will fetch new collation under schema node. """ + + priority = 53 + + scenarios = [ + # Fetching default URL for domain node. + ('Fetch domain Node URL', dict(url='/browser/domain/obj/')) + ] + + def runTest(self): + """ This function will add domain under schema node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + schema_id = all_id["scid"][0] + domain_id= all_id["doid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + # Fetch added schema node. + response = self.tester.get('/browser/schema/obj/' + '{0}/{1}/{2}/{3}'.format + (srv_grp, server_id, db_id, schema_id), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + if len(respdata) != 0: + + get_response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id) + '/' + + str(domain_id), + content_type='html/json') + + self.assertEquals(response.status_code, 200) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/tests/test_domain_put.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/tests/test_domain_put.py new file mode 100644 index 0000000..b2ab972 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/tests/test_domain_put.py @@ -0,0 +1,79 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes +import json + + +class DomainPutTestCase(LoginTestCase): + """ This class will fetch new collation under schema node. """ + + priority = 54 + + scenarios = [ + # Fetching default URL for domain node. + ('Fecth domain Node URL', dict(url='/browser/domain/obj/')) + ] + + def runTest(self): + """ This function will update domain under schema node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + schema_id = all_id["scid"][0] + domain_id= all_id["doid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + # Fetch added schema node. + response = self.tester.get('/browser/schema/obj/' + '{0}/{1}/{2}/{3}'.format + (srv_grp, server_id, db_id, schema_id), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + if len(respdata) != 0: + + get_response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id) + '/' + + str(domain_id), + content_type='html/json') + + get_respdata = json.loads(get_response.data.decode()) + + if len(get_respdata) == 0: + raise Exception("No domain node to update.") + + data = \ + { + "description": config_data['test_domain_update_data'] + ['test_comment'], + "id": domain_id, + } + + put_response = self.tester.put(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id) + '/' + + str(domain_id), + data=json.dumps(data), + follow_redirects=True) + + self.assertEquals(put_response.status_code, 200) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/__init__.py new file mode 100644 index 0000000..03bf3f6 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/__init__.py @@ -0,0 +1,16 @@ +########################################################################## +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +########################################################################## + +from pgadmin.utils.route import BaseTestGenerator + + +class TriggerFunctionTestGenerator(BaseTestGenerator): + + def generate_tests(self): + return [] diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_trigger_func_add.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_trigger_func_add.py new file mode 100644 index 0000000..365248b --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_trigger_func_add.py @@ -0,0 +1,109 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data, pickle_path +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes +import json +import pickle +import os + + +class TriggerFuncAddTestCase(LoginTestCase): + """ This class will add new trigger function under schema node. """ + + priority = 36 + + scenarios = [ + # Fetching default URL for trigger function node. + ('Fecth Trigger Function Node URL', + dict(url='/browser/trigger_function/obj/')) + ] + + def runTest(self): + """ This function will add trigger function under schema node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + schema_id = all_id["scid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + response = self.tester.get('/browser/schema/obj/' + str(srv_grp) + + '/' + str(server_id) + '/' + + str(db_id) + '/' + str(schema_id), + content_type='html/json') + + data = \ + { + "acl": config_data + ['test_trigger_function_credentials']['test_acl'], + "arguments": config_data + ['test_trigger_function_credentials']['test_args'], + "funcowner": config_data + ['test_trigger_function_credentials']['test_fun_owner'], + "lanname": config_data + ['test_trigger_function_credentials']['test_language'], + "name": config_data + ['test_trigger_function_credentials']['test_name'], + "options": config_data + ['test_trigger_function_credentials']['test_options'], + "probin": config_data + ['test_trigger_function_credentials']['test_probe'], + "proleakproof": config_data + ['test_trigger_function_credentials']['test_leak_proof'], + "pronamespace": config_data + ['test_trigger_function_credentials']['test_namespace'], + "prorettypename": config_data + ['test_trigger_function_credentials']['test_type'], + "prosecdef": config_data + ['test_trigger_function_credentials']['test_sec_def'], + "prosrc": config_data + ['test_trigger_function_credentials']['test_code'], + "provolatile": config_data + ['test_trigger_function_credentials']['test_volitile'], + "seclabels": config_data + ['test_trigger_function_credentials']['test_sec_label'], + "variables": config_data + ['test_trigger_function_credentials']['test_Variable'] + } + + if schema_id: + data['pronamespace'] = schema_id + else: + schema_id = data['pronamespace'] + + response = self.tester.post(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(db_id) + + '/' + str(schema_id) + '/', + data=json.dumps(data), + content_type='html/json') + + self.assertTrue(response.status_code, 200) + + respdata = json.loads(response.data.decode()) + + trg_func__id = respdata['node']['_id'] + + if os.path.isfile(pickle_path): + exst_server_id = open(pickle_path, 'rb') + all_id = pickle.load(exst_server_id) + pickle_id_dict = all_id + + pickle_id_dict["tfnid"].append(trg_func__id) + + extension_output = open(pickle_path, 'wb') + pickle.dump(pickle_id_dict, extension_output) + extension_output.close() diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_trigger_func_delete.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_trigger_func_delete.py new file mode 100644 index 0000000..a64cd5f --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_trigger_func_delete.py @@ -0,0 +1,74 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes +import json + + +class TriggerFuncDeleteTestCase(LoginTestCase): + """ This class will add new trigger function under schema node. """ + + priority = 43 + + scenarios = [ + # Fetching default URL for trigger function node. + ('Fetch Trigger Function Node URL', + dict(url='/browser/trigger_function/obj/')) + ] + + def runTest(self): + """ This function will delete trigger function under database node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + schema_id = all_id["scid"][0] + trg_func__id = all_id["tfnid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + # Fetch added schema node. + response = self.tester.get('/browser/schema/obj/' + '{0}/{1}/{2}/{3}'.format + (srv_grp, server_id, db_id, schema_id), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + if len(respdata) != 0: + get_response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id) + '/' + + str(trg_func__id), + content_type='html/json') + + respdata = json.loads(get_response.data.decode()) + + if len(respdata) == 0: + raise Exception("No trigger function(s) to delete.") + + del_response = self.tester.delete(self.url + str(srv_grp) + + '/' + + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id) + '/' + + str(trg_func__id), + follow_redirects=True) + + del_respdata = json.loads(del_response.data.decode()) + + self.assertTrue(del_respdata['success'], 1) \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_trigger_func_get.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_trigger_func_get.py new file mode 100644 index 0000000..ab05fe0 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_trigger_func_get.py @@ -0,0 +1,61 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes +import json + + +class TriggerFuncGetTestCase(LoginTestCase): + """ This class will fetch added trigger function under schema node. """ + + priority = 37 + + scenarios = [ + # Fetching default URL for trigger function node. + ('Fetch Trigger Function Node URL', + dict(url='/browser/trigger_function/obj/')) + ] + + def runTest(self): + """ This function will fetch trigger function under database node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + schema_id = all_id["scid"][0] + trg_func__id = all_id["tfnid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + # Get schema id + response = self.tester.get('/browser/schema/obj/' + '{0}/{1}/{2}/{3}'.format + (srv_grp, server_id, db_id, schema_id), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + if len(respdata) != 0: + + get_response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id) + '/' + + str(trg_func__id), + content_type='html/json') + + self.assertEquals(response.status_code, 200) + diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_trigger_func_put.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_trigger_func_put.py new file mode 100644 index 0000000..619f4ea --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_trigger_func_put.py @@ -0,0 +1,80 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes +import json + + +class TriggerFuncPutTestCase(LoginTestCase): + """ This class will update new trigger function under schema node. """ + + priority = 38 + + scenarios = [ + # Fetching default URL for trigger function node. + ('Fecth Trigger Function Node URL', + dict(url='/browser/trigger_function/obj/')) + ] + + def runTest(self): + """ This function will update trigger function under database node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + schema_id = all_id["scid"][0] + trg_func__id = all_id["tfnid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + # Get schema id + response = self.tester.get('/browser/schema/obj/' + '{0}/{1}/{2}/{3}'.format + (srv_grp, server_id, db_id, schema_id), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + if len(respdata) != 0: + get_response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id) + '/' + + str(trg_func__id), + content_type='html/json') + + respdata = json.loads(get_response.data.decode()) + + if len(respdata) == 0: + raise Exception("No trigger function(s) to update.") + + data = \ + { + "description": config_data + ['test_trigger_func_update_data']['test_comment'], + "id": trg_func__id + } + + put_response = self.tester.put(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id) + '/' + + str(trg_func__id), + data=json.dumps(data), + follow_redirects=True) + + self.assertEquals(put_response.status_code, 200) + diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/__init__.py new file mode 100644 index 0000000..ff11e3e --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/__init__.py @@ -0,0 +1,16 @@ +########################################################################## +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +########################################################################## + +from pgadmin.utils.route import BaseTestGenerator + + +class SequenceTestGenerator(BaseTestGenerator): + + def generate_tests(self): + return [] diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/test_sequence_add.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/test_sequence_add.py new file mode 100644 index 0000000..b833972 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/test_sequence_add.py @@ -0,0 +1,94 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data, pickle_path +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes +import json +import pickle +import os + + +class SequenceAddTestCase(LoginTestCase): + """ This class will add new collation under schema node. """ + + priority = 56 + + scenarios = [ + # Fetching default URL for sequence node. + ('Fetch sequence Node URL', dict(url='/browser/sequence/obj/')) + ] + + def runTest(self): + """ This function will add sequence under schema node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + schema_id = all_id["scid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + # Get schema id + response = self.tester.get('/browser/schema/obj/' + '{0}/{1}/{2}/{3}'.format + (srv_grp, server_id, db_id, schema_id), + content_type='html/json') + + data = \ + { + "cache": config_data['test_sequence_credentials'] + ['test_cache'], + "cycled": config_data['test_sequence_credentials'] + ['test_cycled'], + "increment": config_data['test_sequence_credentials'] + ['test_increment'], + "maximum": config_data['test_sequence_credentials'] + ['test_max_value'], + "minimum": config_data['test_sequence_credentials'] + ['test_min_value'], + "name": config_data['test_sequence_credentials'] + ['test_name'], + "relacl": config_data['test_sequence_credentials'] + ['test_acl'], + "schema": config_data['test_sequence_credentials'] + ['test_schema_name'], + "securities": config_data['test_sequence_credentials'] + ['test_security'], + "seqowner": config_data['test_sequence_credentials'] + ['test_owner'], + "start": config_data['test_sequence_credentials'] + ['test_start_val'] + } + + response = self.tester.post(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(db_id) + + '/' + str(schema_id) + '/', + data=json.dumps(data), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + sequence_id = respdata['node']['_id'] + + if os.path.isfile(pickle_path): + exst_server_id = open(pickle_path, 'rb') + all_id = pickle.load(exst_server_id) + pickle_id_dict = all_id + + pickle_id_dict["seid"].append(sequence_id) + + sequence_output = open(pickle_path, 'wb') + pickle.dump(pickle_id_dict, sequence_output) + sequence_output.close() \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/test_sequence_delete.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/test_sequence_delete.py new file mode 100644 index 0000000..3f952e4 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/test_sequence_delete.py @@ -0,0 +1,73 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes +import json + + +class SequenceDeleteTestCase(LoginTestCase): + """ This class will delete added sequence node under schema node. """ + + priority = 59 + + scenarios = [ + # Fetching default URL for sequence node. + ('Fecth sequence Node URL', dict(url='/browser/sequence/obj/')) + ] + + def runTest(self): + """ This function will delete added sequence under schema node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + schema_id = all_id["scid"][0] + sequence_id = all_id["seid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + # Fetch added schema node. + response = self.tester.get('/browser/schema/obj/' + '{0}/{1}/{2}/{3}'.format + (srv_grp, server_id, db_id, schema_id), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + if len(respdata) != 0: + + get_response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id) + '/' + + str(sequence_id), + content_type='html/json') + + get_respdata = json.loads(get_response.data.decode()) + + if len(get_respdata) == 0: + raise Exception("No sequence node to delete.") + + del_response = self.tester.delete(self.url + str(srv_grp) + + '/' + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id) + '/' + + str(sequence_id), + follow_redirects=True) + + del_respdata = json.loads(del_response.data.decode()) + + self.assertTrue(del_respdata['success'], 1) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/test_sequence_get.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/test_sequence_get.py new file mode 100644 index 0000000..f3b6f10 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/test_sequence_get.py @@ -0,0 +1,59 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes +import json + + +class SequenceGetTestCase(LoginTestCase): + """ This class will add new collation under schema node. """ + + priority = 57 + + scenarios = [ + # Fetching default URL for sequence node. + ('Fetch sequence Node URL', dict(url='/browser/sequence/obj/')) + ] + + def runTest(self): + """ This function will fetch added sequence under schema node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + schema_id = all_id["scid"][0] + sequence_id = all_id["seid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + # Fetch added schema node. + response = self.tester.get('/browser/schema/obj/' + '{0}/{1}/{2}/{3}'.format + (srv_grp, server_id, db_id, schema_id), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + if len(respdata) != 0: + + get_response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id) + '/' + + str(sequence_id), + content_type='html/json') + + self.assertEquals(response.status_code, 200) \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/test_sequence_put.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/test_sequence_put.py new file mode 100644 index 0000000..035315f --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/test_sequence_put.py @@ -0,0 +1,80 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes +import json + + +class SequenceUpdateTestCase(LoginTestCase): + """ This class will update new sequence node under schema node. """ + + priority = 58 + + scenarios = [ + # Fetching default URL for sequence node. + ('Fetch sequence Node URL', dict(url='/browser/sequence/obj/')) + ] + + def runTest(self): + """ This function will update added sequence under schema node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + schema_id = all_id["scid"][0] + sequence_id = all_id["seid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + # Fetch added schema node. + response = self.tester.get('/browser/schema/obj/' + '{0}/{1}/{2}/{3}'.format + (srv_grp, server_id, db_id, schema_id), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + if len(respdata) != 0: + + get_response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id) + '/' + + str(sequence_id), + content_type='html/json') + + get_respdata = json.loads(get_response.data.decode()) + + if len(get_respdata) == 0: + raise Exception("No sequence node to update.") + + data =\ + { + "comment": config_data['test_sequnce_update_data'] + ['test_comment'], + "id": sequence_id + } + + put_response = self.tester.put(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id) + '/' + + str(sequence_id), + data=json.dumps(data), + follow_redirects=True) + + self.assertEquals(put_response.status_code, 200) + diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/__init__.py new file mode 100644 index 0000000..2450edb --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/__init__.py @@ -0,0 +1,16 @@ +########################################################################## +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +########################################################################## + +from pgadmin.utils.route import BaseTestGenerator + + +class TableTestGenerator(BaseTestGenerator): + + def generate_tests(self): + return [] diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_table_add.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_table_add.py new file mode 100644 index 0000000..42011c2 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_table_add.py @@ -0,0 +1,113 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data, pickle_path +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes +import json +import pickle +import os + + +class TableAddTestCase(LoginTestCase): + """ This class will add new collation under schema node. """ + + priority = 60 + + scenarios = [ + # Fetching default URL for table node. + ('Fecth table Node URL', dict(url='/browser/table/obj/')) + ] + + def runTest(self): + """ This function will add table under schema node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + schema_id = all_id["scid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + # Fetch added schema node. + response = self.tester.get('/browser/schema/obj/' + '{0}/{1}/{2}/{3}'.format + (srv_grp, server_id, db_id, schema_id), + content_type='html/json') + data = \ + { + "check_constraint": config_data + ['test_table_credentials']['test_constraint'], + "coll_inherits": config_data + ['test_table_credentials']['test_col_inherit'], + "columns": config_data + ['test_table_credentials']['test_columns'], + "exclude_constraint": config_data + ['test_table_credentials']['test_has_constraint'], + "fillfactor": config_data + ['test_table_credentials']['test_fillfactor'], + "foreign_key": config_data + ['test_table_credentials']['test_has_FK'], + "hastoasttable": config_data + ['test_table_credentials']['test_has_toast_tbl'], + "like_constraints": config_data + ['test_table_credentials']['test_like_constraint'], + "like_default_value": config_data + ['test_table_credentials']['test_like_default_value'], + "like_relation": config_data + ['test_table_credentials']['test_like_relation'], + "name": config_data + ['test_table_credentials']['test_name'], + "primary_key": config_data + ['test_table_credentials']['test_PK'], + "relacl": config_data + ['test_table_credentials']['test_acl'], + "relhasoids": config_data + ['test_table_credentials']['test_has_oid'], + "relowner": config_data + ['test_table_credentials']['test_owner'], + "schema": config_data + ['test_table_credentials']['test_schema'], + "seclabels": config_data + ['test_table_credentials']['test_sec_acl'], + "spcname": config_data + ['test_table_credentials']['test_tbscp'], + "unique_constraint": config_data + ['test_table_credentials']['test_unique_constraint'], + "vacuum_table": config_data + ['test_table_credentials']['test_vacuum_tbl'], + "vacuum_toast": config_data + ['test_table_credentials']['test_vacuum_toast'] + } + + response = self.tester.post(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(db_id) + + '/' + str(schema_id) + '/', + data=json.dumps(data), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + table_id = respdata['node']['_id'] + + if os.path.isfile(pickle_path): + exst_server_id = open(pickle_path, 'rb') + all_id = pickle.load(exst_server_id) + pickle_id_dict = all_id + + pickle_id_dict["tid"].append(table_id) + + table_output = open(pickle_path, 'wb') + pickle.dump(pickle_id_dict, table_output) + table_output.close() \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_table_delete.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_table_delete.py new file mode 100644 index 0000000..6481815 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_table_delete.py @@ -0,0 +1,73 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes +import json + + +class TableDeleteTestCase(LoginTestCase): + """ This class will delete new table under schema node. """ + + priority = 97 + + scenarios = [ + # Fetching default URL for table node. + ('Fetch table Node URL', dict(url='/browser/table/obj/')) + ] + + def runTest(self): + """ This function will delete added table under schema node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + schema_id = all_id["scid"][0] + table_id = all_id["tid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + # Fetch added schema node. + response = self.tester.get('/browser/schema/obj/' + '{0}/{1}/{2}/{3}'.format + (srv_grp, server_id, db_id, schema_id), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + if len(respdata) != 0: + + get_response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id) + '/' + + str(table_id), + content_type='html/json') + + get_respdata = json.loads(get_response.data.decode()) + + if len(get_respdata) == 0: + raise Exception("No table(s) to delete.") + + del_response = self.tester.delete(self.url + str(srv_grp) + + '/' + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id) + '/' + + str(table_id), + follow_redirects=True) + + del_respdata = json.loads(del_response.data.decode()) + + self.assertTrue(del_respdata['success'], 1) \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_table_get.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_table_get.py new file mode 100644 index 0000000..a98a3d3 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_table_get.py @@ -0,0 +1,59 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes +import json + + +class TableGetTestCase(LoginTestCase): + """ This class will add new collation under schema node. """ + + priority = 61 + + scenarios = [ + # Fetching default URL for table node. + ('Fecth table Node URL', dict(url='/browser/table/obj/')) + ] + + def runTest(self): + """ This function will fetch added table under schema node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + schema_id = all_id["scid"][0] + table_id = all_id["tid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + # Get schema id + response = self.tester.get('/browser/schema/obj/' + '{0}/{1}/{2}/{3}'.format + (srv_grp, server_id, db_id, schema_id), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + if len(respdata) != 0: + + get_response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id) + '/' + + str(table_id), + content_type='html/json') + + self.assertEquals(response.status_code, 200) \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_table_put.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_table_put.py new file mode 100644 index 0000000..0ce42bc --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_table_put.py @@ -0,0 +1,79 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes +import json + + +class TableUpdateTestCase(LoginTestCase): + """ This class will add new collation under schema node. """ + + priority = 62 + + scenarios = [ + # Fetching default URL for table node. + ('Fecth table Node URL', dict(url='/browser/table/obj/')) + ] + + def runTest(self): + """ This function will fetch added table under schema node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + schema_id = all_id["scid"][0] + table_id = all_id["tid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + # Fetch added schema node. + response = self.tester.get('/browser/schema/obj/' + '{0}/{1}/{2}/{3}'.format + (srv_grp, server_id, db_id, schema_id), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + if len(respdata) != 0: + + get_response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id) + '/' + + str(table_id), + content_type='html/json') + + get_respdata = json.loads(get_response.data.decode()) + + if len(get_respdata) == 0: + raise Exception("No table(s) to update.") + + data =\ + { + "description": config_data['test_table_update_data'] + ['test_comment'], + "id": table_id + } + + put_response = self.tester.put(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id) + '/' + + str(table_id), + data=json.dumps(data), + follow_redirects=True) + + self.assertEquals(put_response.status_code, 200) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/__init__.py new file mode 100644 index 0000000..3403f4f --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/__init__.py @@ -0,0 +1,16 @@ +########################################################################## +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +########################################################################## + +from pgadmin.utils.route import BaseTestGenerator + + +class SchemaTestGenerator(BaseTestGenerator): + + def generate_tests(self): + return [] diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_add.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_add.py new file mode 100644 index 0000000..ecc0952 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_add.py @@ -0,0 +1,87 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data, pickle_path +from pgadmin.browser.tests.test_login import LoginTestCase +import json +import pickle +import os +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes + + +class SchemaAddTestCase(LoginTestCase): + """ This class will add new schema under database node. """ + + priority = 23 + + scenarios = [ + # Fetching default URL for schema node. + ('Check Schema Node URL', dict(url='/browser/schema/obj/')) + ] + + def runTest(self): + """ This function will add schema under database node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + data =\ + { + "deffuncacl": config_data['test_schema_credentials'] + ['test_func_acl'], + "defseqacl": config_data['test_schema_credentials'] + ['test_seq_acl'], + "deftblacl": config_data['test_schema_credentials'] + ['test_tbl_acl'], + "deftypeacl": config_data['test_schema_credentials'] + ['test_type_acl'], + "name": config_data['test_schema_credentials'] + ['test_name'], + "namespaceowner": config_data['test_schema_credentials'] + ['test_owner'], + "nspacl": config_data['test_schema_credentials'] + ['test_privilege'], + "seclabels": config_data['test_schema_credentials'] + ['test_sec_label'] + } + + response = self.tester.post(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(db_id) + + '/', data=json.dumps(data), + content_type='html/json') + + self.assertTrue(response.status_code, 200) + + respdata = json.loads(response.data.decode()) + + schema_id = respdata['node']['_id'] + + if os.path.isfile(pickle_path): + exst_server_id = open(pickle_path, 'rb') + all_id = pickle.load(exst_server_id) + pickle_id_dict = all_id + + pickle_id_dict["scid"].append(schema_id) + + schema_output = open(pickle_path, 'wb') + pickle.dump(pickle_id_dict, schema_output) + schema_output.close() + + + + + diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_delete.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_delete.py new file mode 100644 index 0000000..e1649dc --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_delete.py @@ -0,0 +1,60 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes +import json + + +class SchemaDeleteTestCase(LoginTestCase): + """ This class will add new schema under database node. """ + + priority = 98 + + scenarios = [ + # Fetching default URL for extension node. + ('Check Schema Node URL', dict(url='/browser/schema/obj/')) + ] + + def runTest(self): + """ This function will delete schema under database node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + schema_id = all_id["scid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + # Fetch added schema node. + response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(db_id) + + '/' + str(schema_id), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + if len(respdata) == 0: + raise Exception("No schema(s) to delete.") + + del_response = self.tester.delete(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id), + follow_redirects=True) + + del_respdata = json.loads(del_response.data.decode()) + + self.assertTrue(del_respdata['success'], 1) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_get.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_get.py new file mode 100644 index 0000000..a8a9b93 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_get.py @@ -0,0 +1,44 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes + + +class SchemaGetTestCase(LoginTestCase): + """ This class will add new schema under database node. """ + + priority = 24 #34 + + scenarios = [ + # Fetching default URL for extension node. + ('Check Schema Node URL', dict(url='/browser/schema/obj/')) + ] + + def runTest(self): + """ This function will fetch schema under database node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + schema_id = all_id["scid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(db_id) + + '/' + str(schema_id), + content_type='html/json') + + self.assertEquals(response.status_code, 200) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_put.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_put.py new file mode 100644 index 0000000..67e778e --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_put.py @@ -0,0 +1,71 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes +import json + + +class SchemaPutTestCase(LoginTestCase): + """ This class will add new schema under database node. """ + + priority = 25 + + scenarios = [ + # Fetching default URL for schema node. + ('Check Schema Node URL', dict(url='/browser/schema/obj/')) + ] + + def runTest(self): + """ This function will update schema under database node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + schema_id = all_id["scid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + # Fetch added schema node. + response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(db_id) + + '/' + str(schema_id), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + if len(respdata) == 0: + raise Exception("No schema(s) to update.") + + data =\ + { + "deffuncacl": config_data["test_schema_update_data"] + ["test_func_acl"], + "defseqacl": config_data["test_schema_update_data"] + ["test_seq_acl"], + "deftblacl": config_data["test_schema_update_data"] + ["test_tbl_acl"], + "id": schema_id + } + + put_response = self.tester.put(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(db_id) + + '/' + str(schema_id), + data=json.dumps(data), + follow_redirects=True) + + self.assertEquals(put_response.status_code, 200) + respdata = json.loads(put_response.data.decode()) + self.assertTrue(respdata['success'], 1) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/__init__.py new file mode 100644 index 0000000..138c249 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/__init__.py @@ -0,0 +1,16 @@ +########################################################################## +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +########################################################################## + +from pgadmin.utils.route import BaseTestGenerator + + +class ViewTestGenerator(BaseTestGenerator): + + def generate_tests(self): + return [] diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_mview_add.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_mview_add.py new file mode 100644 index 0000000..f0ccde1 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_mview_add.py @@ -0,0 +1,99 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data, pickle_path +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes +import json +import pickle +import os + + +class MViewAddTestCase(LoginTestCase): + """ This class will add new view under schema node. """ + + priority = 67 + + scenarios = [ + # Fetching default URL for materialized view node. + ('Fecth materialized view Node URL', dict(url='/browser/mview/obj/')) + ] + + def runTest(self): + """ This function will add materialized view under schema node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + schema_id = all_id["scid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + # Get schema id + response = self.tester.get('/browser/schema/obj/' + '{0}/{1}/{2}/{3}'.format + (srv_grp, server_id, db_id, schema_id), + content_type='html/json') + + data = \ + { + "datacl": config_data + ['test_mview_credentials']['test_acl'], + "definition": config_data + ['test_mview_credentials']['test_definition'], + "fillfactor": config_data + ['test_mview_credentials']['test_fillfactor'], + "name": config_data + ['test_mview_credentials']['test_name'], + "owner": config_data + ['test_mview_credentials']['test_owner'], + "schema": config_data + ['test_mview_credentials']['test_schema_name'], + "seclabels": config_data + ['test_mview_credentials']['test_sec_label'], + "spcname": config_data + ['test_mview_credentials']['test_tbscp'], + "toast_autovacuum": config_data + ['test_mview_credentials']['test_toast_autovacuum'], + "toast_autovacuum_enabled": config_data + ['test_mview_credentials']['test_toast_autovacuum_enabled'], + "vacuum_table": config_data + ['test_mview_credentials']['test_vacuum_tbl'], + "vacuum_toast": config_data + ['test_mview_credentials']['test_vacuum_toast'], + "with_data": config_data + ['test_mview_credentials']['test_with_data'] + + } + + response = self.tester.post(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(db_id) + + '/' + str(schema_id) + '/', + data=json.dumps(data), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + mview_id = respdata['node']['_id'] + + if os.path.isfile(pickle_path): + exst_server_id = open(pickle_path, 'rb') + all_id = pickle.load(exst_server_id) + pickle_id_dict = all_id + + pickle_id_dict["mvid"].append(mview_id) + + mview_output = open(pickle_path, 'wb') + pickle.dump(pickle_id_dict, mview_output) + mview_output.close() \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_mview_delete.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_mview_delete.py new file mode 100644 index 0000000..bb64dc0 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_mview_delete.py @@ -0,0 +1,75 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes +import json +import pickle +import os + + +class MViewDeleteTestCase(LoginTestCase): + """ This class will delete new materialized view under schema node. """ + + priority = 70 + + scenarios = [ + # Fetching default URL for materialized view node. + ('Fetch materialized view Node URL', dict(url='/browser/mview/obj/')) + ] + + def runTest(self): + """ This function will add materialized view under schema node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + schema_id = all_id["scid"][0] + mview_id = all_id["mvid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + # Fetch added schema node. + response = self.tester.get('/browser/schema/obj/' + '{0}/{1}/{2}/{3}'.format + (srv_grp, server_id, db_id, schema_id), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + if len(respdata) != 0: + + get_response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id) + '/' + + str(mview_id), + content_type='html/json') + + get_respdata = json.loads(get_response.data.decode()) + + if len(get_respdata) == 0: + raise Exception("No materialized view to delete.") + + del_response = self.tester.delete(self.url + str(srv_grp) + + '/' + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id) + '/' + + str(mview_id), + follow_redirects=True) + + del_respdata = json.loads(del_response.data.decode()) + + self.assertTrue(del_respdata['success'], 1) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_mview_get.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_mview_get.py new file mode 100644 index 0000000..432e9a9 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_mview_get.py @@ -0,0 +1,60 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes +import json + + +class MViewGetTestCase(LoginTestCase): + """ This class will fetch new materialized view under schema node. """ + + priority = 68 + + scenarios = [ + # Fetching default URL for materialized view node. + ('Fetch materialized view Node URL', dict(url='/browser/mview/obj/')) + ] + + def runTest(self): + """ This function will add materialized view under schema node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + schema_id = all_id["scid"][0] + mview_id = all_id["mvid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + # Fetch added schema node. + response = self.tester.get('/browser/schema/obj' + '/{0}/{1}/{2}/{3}'.format + (srv_grp, server_id, db_id, schema_id), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + if len(respdata) != 0: + + get_response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id) + '/' + + str(mview_id), + content_type='html/json') + + self.assertEquals(response.status_code, 200) + diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_mview_put.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_mview_put.py new file mode 100644 index 0000000..36ccebe --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_mview_put.py @@ -0,0 +1,80 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes +import json + + +class MViewPutTestCase(LoginTestCase): + """ This class will fetch new materialized view under schema node. """ + + priority = 69 + + scenarios = [ + # Fetching default URL for materialized view node. + ('Fetch materialized view Node URL', dict(url='/browser/mview/obj/')) + ] + + def runTest(self): + """ This function will add materialized view under schema node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + schema_id = all_id["scid"][0] + mview_id = all_id["mvid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + # Fetch added schema node. + response = self.tester.get('/browser/schema/obj/' + '{0}/{1}/{2}/{3}'.format + (srv_grp, server_id, db_id, schema_id), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + if len(respdata) != 0: + + get_response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id) + '/' + + str(mview_id), + content_type='html/json') + + get_respdata = json.loads(get_response.data.decode()) + + if len(get_respdata) == 0: + raise Exception("No materialized view to update.") + + data =\ + { + "comment": config_data['test_view_update_data'] + ['test_comment'], + "id": mview_id + } + + put_response = self.tester.put(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id) + '/' + + str(mview_id), + data=json.dumps(data), + follow_redirects=True) + + self.assertEquals(put_response.status_code, 200) + diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_view_add.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_view_add.py new file mode 100644 index 0000000..0cbde19 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_view_add.py @@ -0,0 +1,86 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data, pickle_path +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes +import json +import pickle +import os + + +class ViewAddTestCase(LoginTestCase): + """ This class will add new view under schema node. """ + + priority = 63 + + scenarios = [ + # Fetching default URL for view node. + ('Fetch view Node URL', dict(url='/browser/view/obj/')) + ] + + def runTest(self): + """ This function will add view under schema node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + schema_id = all_id["scid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + # Fetch added schema node. + response = self.tester.get('/browser/schema/obj/' + '{0}/{1}/{2}/{3}'.format + (srv_grp, server_id, db_id, schema_id), + content_type='html/json') + + data = \ + { + "check_option": config_data + ['test_view_credentials']['test_check_options'], + "datacl": config_data + ['test_view_credentials']['test_acl'], + "definition": config_data + ['test_view_credentials']['test_definition'], + "name": config_data + ['test_view_credentials']['test_name'], + "owner": config_data + ['test_view_credentials']['test_owner'], + "schema": config_data + ['test_view_credentials']['test_schema_name'], + "seclabels": config_data + ['test_view_credentials']['test_sec_label'] + } + + response = self.tester.post(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(db_id) + + '/' + str(schema_id) + '/', + data=json.dumps(data), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + view_id = respdata['node']['_id'] + + if os.path.isfile(pickle_path): + exst_server_id = open(pickle_path, 'rb') + all_id = pickle.load(exst_server_id) + pickle_id_dict = all_id + + pickle_id_dict["vid"].append(view_id) + + view_output = open(pickle_path, 'wb') + pickle.dump(pickle_id_dict, view_output) + view_output.close() diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_view_delete.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_view_delete.py new file mode 100644 index 0000000..d552ece --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_view_delete.py @@ -0,0 +1,75 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes +import json + + +class ViewDeleteTestCase(LoginTestCase): + """ This class will update new view under schema node. """ + + priority = 66 + + scenarios = [ + # Fetching default URL for view node. + ('Fetch view Node URL', dict(url='/browser/view/obj/')) + ] + + def runTest(self): + """ This function will delete view under schema node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + schema_id = all_id["scid"][0] + view_id = all_id["vid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + # Fetch added schema node. + response = self.tester.get('/browser/schema/obj/' + '{0}/{1}/{2}/{3}'.format + (srv_grp, server_id, db_id, schema_id), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + if len(respdata) != 0: + + get_response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id) + '/' + + str(view_id), + content_type='html/json') + + get_respdata = json.loads(get_response.data.decode()) + + if len(get_respdata) == 0: + raise Exception("No view to delete.") + + del_response = self.tester.delete(self.url + str(srv_grp) + + '/' + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id) + '/' + + str(view_id), + follow_redirects=True) + + del_respdata = json.loads(del_response.data.decode()) + + self.assertTrue(del_respdata['success'], 1) + + diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_view_get.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_view_get.py new file mode 100644 index 0000000..611018f --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_view_get.py @@ -0,0 +1,61 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes +import json +import pickle +import os + + +class ViewGetTestCase(LoginTestCase): + """ This class will fetch new view under schema node. """ + + priority = 64 + + scenarios = [ + # Fetching default URL for view node. + ('Fetch view Node URL', dict(url='/browser/view/obj/')) + ] + + def runTest(self): + """ This function will add view under schema node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + schema_id = all_id["scid"][0] + view_id = all_id["vid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + # Fetch added schema node. + response = self.tester.get('/browser/schema/obj/' + '{0}/{1}/{2}/{3}'.format + (srv_grp, server_id, db_id, schema_id), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + if len(respdata) != 0: + + get_response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id) + '/' + + str(view_id), + content_type='html/json') + + self.assertEquals(response.status_code, 200) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_view_put.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_view_put.py new file mode 100644 index 0000000..8c9421c --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_view_put.py @@ -0,0 +1,79 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes +import json + + +class ViewPutTestCase(LoginTestCase): + """ This class will update new view under schema node. """ + + priority = 65 + + scenarios = [ + # Fetching default URL for view node. + ('Fecth view Node URL', dict(url='/browser/view/obj/')) + ] + + def runTest(self): + """ This function will update view under schema node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + schema_id = all_id["scid"][0] + view_id = all_id["vid"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + # Fetch added schema node. + response = self.tester.get('/browser/schema/obj/' + '{0}/{1}/{2}/{3}'.format + (srv_grp, server_id, db_id, schema_id), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + if len(respdata) != 0: + + get_response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id) + '/' + + str(view_id), + content_type='html/json') + + get_respdata = json.loads(get_response.data.decode()) + + if len(get_respdata) == 0: + raise Exception("No view to update.") + + data =\ + { + "comment": config_data['test_view_update_data'] + ['test_comment'], + "id": view_id + } + + put_response = self.tester.put(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + + str(db_id) + '/' + + str(schema_id) + '/' + + str(view_id), + data=json.dumps(data), + follow_redirects=True) + + self.assertEquals(put_response.status_code, 200) diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/tests/__init__.py new file mode 100644 index 0000000..60ed4c7 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/__init__.py @@ -0,0 +1,16 @@ +# ########################################################################## +# +# #pgAdmin 4 - PostgreSQL Tools +# +# #Copyright (C) 2013 - 2016, The pgAdmin Development Team +# #This software is released under the PostgreSQL Licence +# +# ########################################################################## + +from pgadmin.utils.route import BaseTestGenerator + + +class DatabaseGenerateTestCase(BaseTestGenerator): + + def runTest(self): + return diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_add.py b/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_add.py new file mode 100644 index 0000000..02dda68 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_add.py @@ -0,0 +1,99 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data, pickle_path +from pgadmin.browser.tests.test_login import LoginTestCase +import json, pickle, uuid, os +from regression.test_utils import get_ids + + +class DatabaseAddTestCase(LoginTestCase): + """ + This class will check server group node present on the object browser's + tree node by response code. + """ + priority = 8 + + scenarios = [ + # Fetching default URL for database node. + ('Check Databases Node URL', dict(url='/browser/database/obj/')) + ] + + def runTest(self): + """ This function will add database under 1st server of tree node. """ + + srv_id = get_ids() + + server_id = srv_id["sid"][0] + srv_grp = config_data['test_server_group'] + + response = self.tester.post('browser/server/connect/' + str(srv_grp) + + '/' + server_id, + data=dict( + password=config_data + ['test_server_credentials'][0] + ['test_db_password']), + follow_redirects=True) + + self.assertEquals(response.status_code, 200) + + srv_connect = json.loads(response.data.decode()) + + if srv_connect['data']['connected']: + + data = { + "datacl": config_data['test_add_database_data'] + ['test_privileges_acl'], + "datconnlimit": config_data['test_add_database_data'] + ['test_conn_limit'], + "datowner": config_data['test_add_database_data'] + ['test_owner'], + "deffuncacl": config_data['test_add_database_data'] + ['test_fun_acl'], + "defseqacl": config_data['test_add_database_data'] + ['test_seq_acl'], + "deftblacl": config_data['test_add_database_data'] + ['test_tbl_acl'], + "deftypeacl": config_data['test_add_database_data'] + ['test_type_acl'], + "encoding": config_data['test_add_database_data'] + ['test_encoding'], + "name": str(uuid.uuid4())[1:8], + "privileges": config_data['test_add_database_data'] + ['test_privileges'], + "securities": config_data['test_add_database_data'] + ['test_securities'], + "variables": config_data['test_add_database_data'] + ['test_variables'] + } + + db_response = self.tester.post(self.url + str(srv_grp) + "/" + + server_id + "/", + data=json.dumps(data), + content_type='html/json') + + self.assertTrue(db_response.status_code, 200) + + respdata = json.loads(db_response.data.decode()) + + db_id = respdata['node']['_id'] + + if os.path.isfile(pickle_path): + + exst_server_id = open(pickle_path, 'rb') + + tol_server_id = pickle.load(exst_server_id) + pickle_id_dict = tol_server_id + + pickle_id_dict["did"].append(db_id) + + db_output = open(pickle_path, 'wb') + pickle.dump(pickle_id_dict, db_output) + db_output.close() + diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_delete.py b/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_delete.py new file mode 100644 index 0000000..e008df3 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_delete.py @@ -0,0 +1,47 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +import json +from regression.test_nodes import test_getnodes +from regression.test_utils import get_ids + + +class DatabaseDeleteTestCase(LoginTestCase): + """ This class will delete the database under last added server. """ + + priority = 99 + + scenarios = [ + # Fetching default URL for database node. + ('Check Databases Node URL', dict(url='/browser/database/obj/')) + ] + + def runTest(self): + """ This function will delete the database.""" + + all_id = get_ids() + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if len(db_con) == 0: + raise Exception("No database(s) to delete.") + + response = self.tester.delete(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(db_id), + follow_redirects=True) + + respdata = json.loads(response.data.decode()) + + self.assertTrue(respdata['success'], 1) + diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_get.py b/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_get.py new file mode 100644 index 0000000..bbbd7ec --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_get.py @@ -0,0 +1,43 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.test_nodes import test_getnodes +from regression.test_utils import get_ids + + +class DatabasesGetTestCase(LoginTestCase): + """ + This class will fetch database added under last added server. + """ + priority = 9 + + scenarios = [ + # Fetching default URL for database node. + ('Check Databases Node URL', dict(url='/browser/database/obj/')) + ] + + def runTest(self): + """ This function will fetch added database. """ + + all_id = get_ids() + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con["info"] == "Database Connected.": + + response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(db_id), + follow_redirects=True) + + self.assertEquals(response.status_code, 200) diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_put.py b/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_put.py new file mode 100644 index 0000000..809a51e --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_put.py @@ -0,0 +1,50 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +import json +from regression.test_utils import get_ids +from regression.test_nodes import test_getnodes + + +class DatabasesUpdateTestCase(LoginTestCase): + """ + This class will update the database under last added server. + """ + priority = 10 + + scenarios = [ + # Fetching default URL for database node. + ('Check Databases Node', dict(url='/browser/database/obj/')) + ] + + def runTest(self): + """ This function will update the comments field of database.""" + + all_id = get_ids() + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + srv_grp = config_data['test_server_group'] + + db_con = test_getnodes(node=self) + + if db_con['data']["connected"]: + + data = {"comments": config_data["test_db_update_data"] + ["test_comment"], + "id": db_id + } + + put_response = self.tester.put(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(db_id), + data=json.dumps(data), + follow_redirects=True) + + self.assertEquals(put_response.status_code, 200) diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/roles/tests/__init__.py new file mode 100644 index 0000000..4a11bf8 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/__init__.py @@ -0,0 +1,16 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from pgadmin.utils.route import BaseTestGenerator + + +class RoleGeneratorTestCase(BaseTestGenerator): + + def runTest(self): + return diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/test_role_add.py b/web/pgadmin/browser/server_groups/servers/roles/tests/test_role_add.py new file mode 100644 index 0000000..66de64c --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/test_role_add.py @@ -0,0 +1,89 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data, pickle_path +from pgadmin.browser.tests.test_login import LoginTestCase +import json, pickle, uuid, os +from regression.test_utils import get_ids + + +class LoginRoleAddTestCase(LoginTestCase): + """ This class will add login role node under added server. """ + + priority = 12 + + scenarios = [ + # Fetching default URL for roles node. + ('Check Role Node', dict(url='/browser/role/obj/')) + ] + + def runTest(self): + """ This function will add new role under 1st server of tree node. """ + + srv_id = get_ids() + + server_id = srv_id["sid"][0] + + srv_grp = config_data['test_server_group'] + + response = self.tester.post('browser/server/connect/' + str(srv_grp) + + '/' + server_id, + data=dict( + password=config_data + ['test_server_credentials'][0] + ['test_db_password']), + follow_redirects=True) + + srv_connect = json.loads(response.data.decode()) + + if srv_connect['data']['connected']: + + data = { + "rolcanlogin": config_data['test_lr_credentials'] + ['test_can_login'], + "rolconnlimit": config_data['test_lr_credentials'] + ['test_conn_limit'], + "rolcreaterole": config_data['test_lr_credentials'] + ['test_create_role'], + "rolinherit": config_data['test_lr_credentials'] + ['test_role_inherit'], + "rolmembership": config_data['test_lr_credentials'] + ['test_role_membership'], + "rolname": str(uuid.uuid4())[1:8], + "rolpassword": config_data['test_lr_credentials'] + ['test_lr_password'], + "rolvaliduntil": config_data['test_lr_credentials'] + ['test_lr_validity'], + "seclabels": config_data['test_lr_credentials'] + ['test_sec_lable'], + "variables": config_data['test_lr_credentials'] + ['test_variable'] + } + + response = self.tester.post(self.url + str(srv_grp) + '/' + + server_id + '/', data=json.dumps(data), + content_type='html/json') + + self.assertTrue(response.status_code, 200) + + respdata = json.loads(response.data.decode()) + + lr_id = respdata['node']['_id'] + + if os.path.isfile(pickle_path): + exst_server_id = open(pickle_path, 'rb') + all_id = pickle.load(exst_server_id) + pickle_id_dict = all_id + + pickle_id_dict["lrid"].append(lr_id) + + lr_output = open(pickle_path, 'wb') + pickle.dump(pickle_id_dict, lr_output) + lr_output.close() + diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/test_role_delete.py b/web/pgadmin/browser/server_groups/servers/roles/tests/test_role_delete.py new file mode 100644 index 0000000..445fd7c --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/test_role_delete.py @@ -0,0 +1,47 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +import json +from .test_role_func import test_getrole +from regression.test_utils import get_ids + + +class LoginRoleDeleteTestCase(LoginTestCase): + """ This class will delete added login role present under server node. """ + + priority = 14 + + scenarios = [ + # Fetching default URL for roles node. + ('Check Role Node', dict(url='/browser/role/obj/')) + ] + + def runTest(self): + """ This function will delete the role. """ + + all_id = get_ids() + server_id = all_id["sid"][0] + srv_grp = config_data['test_server_group'] + + respdata = test_getrole(node=self) + + role_id = respdata['oid'] + + if len(respdata) == 0: + raise Exception("No roles(s) to delete!!!") + + del_response = self.tester.delete(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(role_id), + follow_redirects=True) + + del_respdata = json.loads(del_response.data.decode()) + + self.assertTrue(del_respdata['success'], 1) \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/test_role_func.py b/web/pgadmin/browser/server_groups/servers/roles/tests/test_role_func.py new file mode 100644 index 0000000..3e06b08 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/test_role_func.py @@ -0,0 +1,48 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +import json +from regression.test_utils import get_ids + + +def test_getrole(node=None): + + if not node: + return None + + all_id = get_ids() + + server_id = all_id["sid"][0] + role_id = all_id["lrid"][0] + + srv_grp = config_data['test_server_group'] + + response = node.tester.post('browser/server/connect/{0}/{1}'.format + (srv_grp, server_id), + data=dict( + password=config_data + ['test_server_credentials'][0] + ['test_db_password']), + follow_redirects=True) + + srv_connect = json.loads(response.data.decode()) + + if srv_connect['data']['connected']: + + response = node.tester.get('/browser/role/obj/{0}/{1}/{2}'.format + (srv_grp, server_id, role_id), + content_type='html/json') + + respdata = json.loads(response.data.decode()) + + return respdata + + + diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/test_role_get.py b/web/pgadmin/browser/server_groups/servers/roles/tests/test_role_get.py new file mode 100644 index 0000000..636ce1c --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/test_role_get.py @@ -0,0 +1,56 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +import json +from regression.utils import get_ids + + +class LoginRoleGetTestCase(LoginTestCase): + """ + This class will fetch login roles node present under the object browser's + tree node by response code. + """ + + priority = 13 + + scenarios = [ + # Fetching default URL for roles node. + ('Check Role Node', dict(url='/browser/role/obj/')) + ] + + def runTest(self): + """ This function will fetch added login role under tree node. """ + + all_id = get_ids() + + server_id = all_id["sid"][0] + role_id = all_id["lrid"][0] + srv_grp = config_data['test_server_group'] + + response = self.tester.post('browser/server/connect/' + str(srv_grp) + + '/' + server_id, + data=dict( + password=config_data + ['test_server_credentials'][0] + ['test_db_password']), + follow_redirects=True) + + srv_connect = json.loads(response.data.decode()) + + if srv_connect['data']['connected']: + + response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(role_id), + content_type='html/json') + + self.assertEquals(response.status_code, 200) + + diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/test_role_put.py b/web/pgadmin/browser/server_groups/servers/roles/tests/test_role_put.py new file mode 100644 index 0000000..34879f4 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/test_role_put.py @@ -0,0 +1,51 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +import json +from .test_role_func import test_getrole +from regression.test_utils import get_ids + + +class LoginRolePutTestCase(LoginTestCase): + """This class update the comment field of login roles node.""" + + priority = 13 + + scenarios = [ + # Fetching default URL for roles node. + ('Check Role Node', dict(url='/browser/role/obj/')) + ] + + def runTest(self): + """ This function will update the role's comment field.""" + + all_id = get_ids() + + srv_grp = config_data['test_server_group'] + + server_id = all_id["sid"][0] + + respdata = test_getrole(node=self) + + role_id = respdata['oid'] + + data = { + "description": config_data["test_lr_update_data"] + ["test_comment"], + "oid": role_id + } + + put_response = self.tester.put(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(role_id), + data=json.dumps(data), + follow_redirects=True) + + self.assertEquals(put_response.status_code, 200) \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/tablespaces/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/tablespaces/tests/__init__.py new file mode 100644 index 0000000..28fcc16 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/tablespaces/tests/__init__.py @@ -0,0 +1,16 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from pgadmin.utils.route import BaseTestGenerator + + +class TblspaceGeneratorTestCase(BaseTestGenerator): + + def runTest(self): + return \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/tablespaces/tests/test_tbspc_add.py b/web/pgadmin/browser/server_groups/servers/tablespaces/tests/test_tbspc_add.py new file mode 100644 index 0000000..2d1651f --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/tablespaces/tests/test_tbspc_add.py @@ -0,0 +1,78 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data, pickle_path +from pgadmin.browser.tests.test_login import LoginTestCase +import json, pickle, uuid, os +from regression.test_utils import get_ids + + +class TbspcAddTestCase(LoginTestCase): + """ This class will add tablespace node under server. """ + priority = 15 + + scenarios = [ + # Fetching default URL for tablespace node. + ('Check Tablespace Node', dict(url='/browser/tablespace/obj/')) + ] + + def runTest(self): + """ This function will add new tablespace under server node.""" + + srv_id = get_ids() + + srv_grp = config_data['test_server_group'] + + server_id = srv_id["sid"][0] + + response = self.tester.post('browser/server/connect/' + str(srv_grp) + + '/' + server_id, + data=dict( + password=config_data + ['test_server_credentials'][0] + ['test_db_password']), + follow_redirects=True) + + srv_connect = json.loads(response.data.decode()) + + if srv_connect['data']['connected']: + data = \ + { + "name": str(uuid.uuid4())[1:8], + "seclabels": config_data["test_tablespc_credentials"] + ["test_spc_seclable"], + "spcacl": config_data["test_tablespc_credentials"] + ["test_spc_acl"], + "spclocation": config_data["test_tablespc_credentials"] + ["test_spc_location"], + "spcoptions": config_data["test_tablespc_credentials"] + ["test_spc_opts"], + "spcuser": config_data["test_tablespc_credentials"] + ["test_spc_user"] + } +# + response = self.tester.post(self.url + str(srv_grp) + '/' + + server_id + '/', + data=json.dumps(data), + content_type='html/json') + self.assertTrue(response.status_code, 200) + respdata = json.loads(response.data.decode()) + tbspc_id = respdata['node']['_id'] + + if os.path.isfile(pickle_path): + exst_ids = open(pickle_path, 'rb') + all_id = pickle.load(exst_ids) + pickle_id_dict = all_id + + pickle_id_dict["tsid"].append(tbspc_id) + + spc_output = open(pickle_path, 'wb') + pickle.dump(pickle_id_dict, spc_output) + spc_output.close() + diff --git a/web/pgadmin/browser/server_groups/servers/tablespaces/tests/test_tbspc_delete.py b/web/pgadmin/browser/server_groups/servers/tablespaces/tests/test_tbspc_delete.py new file mode 100644 index 0000000..8674ba4 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/tablespaces/tests/test_tbspc_delete.py @@ -0,0 +1,51 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +import json +from regression.test_utils import get_ids +from .test_tbspc_func import test_gettblspc + +class TbspcDeleteTestCase(LoginTestCase): + """ + This class will delete tablespace node present under the object browser's + tree node by response code. + """ + + priority = 18 + + scenarios = [ + # Fetching default URL for tablespace node. + ('Check Tablespace Node', dict(url='/browser/tablespace/obj/')) + ] + + def runTest(self): + """ This function will delete the added tablespace""" + + all_id = get_ids() + + srv_grp = config_data['test_server_group'] + + server_id = all_id["sid"][0] + + respdata = test_gettblspc(node=self) + + tbspc_id = respdata['oid'] + + if len(respdata) == 0: + raise Exception("No tablespace(s) to delete!!!") + + del_response = self.tester.delete(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(tbspc_id), + follow_redirects=True) + + del_respdata = json.loads(del_response.data.decode()) + + self.assertTrue(del_respdata['success'], 1) \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/tablespaces/tests/test_tbspc_func.py b/web/pgadmin/browser/server_groups/servers/tablespaces/tests/test_tbspc_func.py new file mode 100644 index 0000000..2abcf8d --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/tablespaces/tests/test_tbspc_func.py @@ -0,0 +1,45 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.test_utils import get_ids +from regression.config import config_data +import json + + +def test_gettblspc(node=None): + + if not node: + return None + + all_id = get_ids() + + server_id = all_id["sid"][0] + tbspc_id = all_id["tsid"][0] + + srv_grp = config_data['test_server_group'] + + response = node.tester.post('browser/server/connect/{0}/{1}'.format + (srv_grp, server_id), + data=dict(password=config_data + ['test_server_credentials'][0] + ['test_db_password']), follow_redirects=True) + + srv_connect = json.loads(response.data.decode()) + + if srv_connect['data']['connected']: + + response = node.tester.get('/browser/tablespace/obj/{0}/{1}/{2}'.format + (srv_grp, server_id, tbspc_id), + content_type='html/json') + + node.assertEquals(response.status_code, 200) + + respdata = json.loads(response.data.decode()) + + return respdata \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/tablespaces/tests/test_tbspc_get.py b/web/pgadmin/browser/server_groups/servers/tablespaces/tests/test_tbspc_get.py new file mode 100644 index 0000000..0d85f46 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/tablespaces/tests/test_tbspc_get.py @@ -0,0 +1,57 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +import json +from regression.test_utils import get_ids + + +class TbspcGetTestCase(LoginTestCase): + """ + This class will fetch added tablespace under the object browser's + tree node by response code. + """ + priority = 16 + + scenarios = [ + # Fetching default URL for tablespace node. + ('Check Tablespace Node', dict(url='/browser/tablespace/obj/')) + ] + + def runTest(self): + """ This function will get the added tablespace.""" + + all_id = get_ids() + + srv_grp = config_data['test_server_group'] + + server_id = all_id["sid"][0] + tbspc_id = all_id["tsid"][0] + + response = self.tester.post('browser/server/connect/' + str(srv_grp) + + '/' + server_id, + data=dict( + password=config_data + ['test_server_credentials'][0] + ['test_db_password']), + follow_redirects=True) + + srv_connect = json.loads(response.data.decode()) + + if srv_connect['data']['connected']: + + response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(tbspc_id), + content_type='html/json') + + self.assertEquals(response.status_code, 200) + + respdata = json.loads(response.data.decode()) + self.assertTrue(respdata['oid'], tbspc_id) diff --git a/web/pgadmin/browser/server_groups/servers/tablespaces/tests/test_tbspc_put.py b/web/pgadmin/browser/server_groups/servers/tablespaces/tests/test_tbspc_put.py new file mode 100644 index 0000000..59a38f3 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/tablespaces/tests/test_tbspc_put.py @@ -0,0 +1,56 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +from pgadmin.browser.tests.test_login import LoginTestCase +import json +from .test_tbspc_func import test_gettblspc +from regression.test_utils import get_ids + + +class TbspcUpdateTestCase(LoginTestCase): + """ + This class will update comment field of added tablespace under the + object browser's tree node. + """ + + priority = 17 + + scenarios = [ + # Fetching default URL for tablespace node. + ('Check Tablespace Node', dict(url='/browser/tablespace/obj/')) + ] + + def runTest(self): + """ This function will update the added tablespace.""" + + all_id = get_ids() + + server_id = all_id["sid"][0] + srv_grp = config_data['test_server_group'] + + respdata = test_gettblspc(node=self) + + tbspc_id = respdata['oid'] + + data = \ + { + "description": config_data["test_lr_update_data"] + ["test_comment"], + "id": tbspc_id + } + + put_response = self.tester.put(self.url + str(srv_grp) + '/' + + str(server_id) + '/' + str(tbspc_id), + data=json.dumps(data), + follow_redirects=True) + + self.assertEquals(put_response.status_code, 200) + + diff --git a/web/pgadmin/browser/server_groups/servers/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/tests/__init__.py index 28cdb94..39d4823 100644 --- a/web/pgadmin/browser/server_groups/servers/tests/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/tests/__init__.py @@ -12,4 +12,4 @@ from pgadmin.utils.route import BaseTestGenerator class ServerGenerateTestCase(BaseTestGenerator): def runTest(self): - print ("In ServerGenerateTestCase...") + return diff --git a/web/pgadmin/browser/server_groups/servers/tests/test_server_add.py b/web/pgadmin/browser/server_groups/servers/tests/test_server_add.py index 0af13d3..74526ae 100644 --- a/web/pgadmin/browser/server_groups/servers/tests/test_server_add.py +++ b/web/pgadmin/browser/server_groups/servers/tests/test_server_add.py @@ -8,16 +8,14 @@ # ########################################################################## import json - +import pickle +import os from pgadmin.browser.tests.test_login import LoginTestCase -from regression.config import config_data +from regression.config import config_data, pickle_path class ServersAddTestCase(LoginTestCase): - """ - This class will add the servers under default server group and verify with - server's name. - """ + """ This class will add the servers under default server group. """ priority = 4 @@ -27,10 +25,31 @@ class ServersAddTestCase(LoginTestCase): ] def runTest(self): - """ - This function will add the server under default server group. - Verify the added server with response code as well as server name. - """ + """ This function will add the server under default server group.""" + + # Storing parent id's into pickle dict + pickle_id_dict = { + "sid": [], #server + "did": [], #database + "lrid": [], #login role + "tsid": [], #tablspace + "cid": [], #cast + "eid": [], #extention + "lid": [12397], #language + "scid": [], #schema + "tfnid": [], #trigger function + "etid": [], #event trigger + "coid": [], #collation + "fid": [], #FDW + "doid": [], #Domain + "seid": [], #Sequence + "tid": [], #table + "vid": [], #view + "mvid": [], #mview + "fsid": [], #foreign server + "umid": [], #User mapping + "foid": [] #foreign table + } srv_grp = config_data['test_server_group'] @@ -48,6 +67,17 @@ class ServersAddTestCase(LoginTestCase): response = self.tester.post(url, data=json.dumps(data), content_type='html/json') + self.assertTrue(response.status_code, 200) - respdata = json.loads(response.data) - self.assertTrue(respdata['node']['label'], srv['test_name']) + respdata = json.loads(response.data.decode()) + + server_id = respdata['node']['_id'] + + if os.path.isfile(pickle_path): + exst_server_id = open(pickle_path, 'rb') + pickle_id_dict = pickle.load(exst_server_id) + + pickle_id_dict["sid"].append(server_id) + output = open(pickle_path, 'wb') + pickle.dump(pickle_id_dict, output) + output.close() \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/tests/test_server_delete.py b/web/pgadmin/browser/server_groups/servers/tests/test_server_delete.py index 329d74f..4bde3ee 100644 --- a/web/pgadmin/browser/server_groups/servers/tests/test_server_delete.py +++ b/web/pgadmin/browser/server_groups/servers/tests/test_server_delete.py @@ -8,16 +8,13 @@ # ################################################################## import json - from pgadmin.browser.tests.test_login import LoginTestCase from regression.config import config_data -class ServersDeleteTestCase(LoginTestCase): - """ - This class will check server node present on the object browser's tree node - by response code. - """ +class ServerDeleteTestCase(LoginTestCase): + """ This class will delete the last server present under tree node.""" + priority = 7 scenarios = [ @@ -26,32 +23,22 @@ class ServersDeleteTestCase(LoginTestCase): ] def runTest(self): - """ - This function will get all available servers under object browser - and delete the servers using server id. - """ + """ This function will get all available servers under object browser + and delete the last server using server id.""" srv_grp = config_data['test_server_group'] - for srv in config_data['test_server_credentials']: - - data = {"name": srv['test_name'], - "host": srv['test_host'], - "port": srv['test_db_port'], - "db": srv['test_maintenance_db'], - "username": srv['test_db_username'], - "role": "", - "sslmode": srv['test_sslmode']} + url = self.url + str(srv_grp) + "/" - url = self.url + str(srv_grp) + "/" + response = self.tester.get(url) + respdata = json.loads(response.data.decode()) - response = self.tester.get(url, data=json.dumps(data), - content_type='html/json') - self.assertTrue(response.status_code, 200) - respdata = json.loads(response.data) + if len(respdata) == 0: + raise Exception("No server(s) to delete.") - for server in respdata: - response = self.tester.delete(url + json.dumps(server['id'])) - self.assertTrue(response.status_code, 200) - respdata = json.loads(response.data) - self.assertTrue(respdata['success'], 1) + # delete last server + server = respdata[-1] + response = self.tester.delete(url + str(server['id'])) + self.assertTrue(response.status_code, 200) + respdata = json.loads(response.data.decode()) + self.assertTrue(respdata['success'], 1) diff --git a/web/pgadmin/browser/server_groups/servers/tests/test_server_get.py b/web/pgadmin/browser/server_groups/servers/tests/test_server_get.py index 050843e..163fef3 100644 --- a/web/pgadmin/browser/server_groups/servers/tests/test_server_get.py +++ b/web/pgadmin/browser/server_groups/servers/tests/test_server_get.py @@ -7,15 +7,14 @@ # # ########################################################################## -import json - from pgadmin.browser.tests.test_login import LoginTestCase from regression.config import config_data +from regression.test_utils import get_ids class ServersGetTestCase(LoginTestCase): """ - This class will check server node present on the object browser's tree node + This class will fetch added servers under default server group by response code. """ @@ -27,23 +26,16 @@ class ServersGetTestCase(LoginTestCase): ] def runTest(self): - """ - This function will get all available servers present under - object browser. - """ + """ This function will fetch the added servers to object browser. """ + all_id = get_ids() + server_id = all_id["sid"] srv_grp = config_data['test_server_group'] - for srv in config_data['test_server_credentials']: - data = {"name": srv['test_name'], - "host": srv['test_host'], - "port": srv['test_db_port'], - "db": srv['test_maintenance_db'], - "username": srv['test_db_username'], - "role": "", - "sslmode": srv['test_sslmode']} - - url = self.url + str(srv_grp) + "/" - response = self.tester.get(url, data=json.dumps(data), + for srv in server_id: + + response = self.tester.get(self.url + str(srv_grp) + '/' + + str(srv), content_type='html/json') - self.assertTrue(response.status_code, 200) + + self.assertEquals(response.status_code, 200) diff --git a/web/pgadmin/browser/server_groups/servers/tests/test_server_put.py b/web/pgadmin/browser/server_groups/servers/tests/test_server_put.py index 306bb03..8c02a41 100644 --- a/web/pgadmin/browser/server_groups/servers/tests/test_server_put.py +++ b/web/pgadmin/browser/server_groups/servers/tests/test_server_put.py @@ -8,16 +8,13 @@ # ########################################################################## import json - from pgadmin.browser.tests.test_login import LoginTestCase from regression.config import config_data +from regression.test_utils import get_ids -class ServersUpdateTestCase(LoginTestCase): - """ - This class will check server node present on the object browser's tree node - by response code. - """ +class ServerUpdateTestCase(LoginTestCase): + """ This class will update server's comment field. """ priority = 6 @@ -27,39 +24,40 @@ class ServersUpdateTestCase(LoginTestCase): ] def runTest(self): - """ - This function will edit and update the server's comment field - by the server id. - """ + """ This function will update the server's comment field. """ + all_id = get_ids() + server_id = all_id["sid"][0] srv_grp = config_data['test_server_group'] - for srv in config_data['test_server_credentials']: + response = self.tester.get(self.url + str(srv_grp) + '/' + + str(server_id), + follow_redirects=True) - data = {"name": srv['test_name'], - "host": srv['test_host'], - "port": srv['test_db_port'], - "db": srv['test_maintenance_db'], - "username": srv['test_db_username'], - "role": "", - "sslmode": srv['test_sslmode']} + con_response = self.tester.post('browser/server/connect/{0}/{1}'.format + (srv_grp, server_id), + data=dict(password=config_data + ['test_server_credentials'][0] + ['test_db_password']), + follow_redirects=True) - url = self.url + str(srv_grp) + "/" + srv_con = json.loads(con_response.data.decode()) - response = self.tester.get(url, data=json.dumps(data), - content_type='html/json') + if len(srv_con) == 0: + raise Exception("No Server(s) connected to update.") - self.assertTrue(response.status_code, 200) - respdata = json.loads(response.data) + data = \ + { + "comment": config_data + ['test_server_update_data']['test_comment'], + "id": server_id + } - for server in respdata: + put_response = self.tester.put(self.url + str(srv_grp) + '/' + + str(server_id), data=json.dumps(data), + content_type='html/json') - url = self.url + str(srv_grp) + "/" + json.dumps(server['id']) + self.assertEquals(put_response.status_code, 200) - for server in config_data['test_server_update_data']: - data = {"comment": server['test_comment']} - response = self.tester.put(url, data=json.dumps(data), - content_type='html/json') - self.assertTrue(response.status_code, 200) - respdata = json.loads(response.data) - self.assertTrue(respdata['success'], 1) + respdata = json.loads(put_response.data.decode()) + self.assertTrue(respdata['success'], 1) diff --git a/web/pgadmin/browser/server_groups/tests/test_sg_add.py b/web/pgadmin/browser/server_groups/tests/test_sg_add.py deleted file mode 100644 index e70bb65..0000000 --- a/web/pgadmin/browser/server_groups/tests/test_sg_add.py +++ /dev/null @@ -1,36 +0,0 @@ -########################################################################### -# -# pgAdmin 4 - PostgreSQL Tools -# -# Copyright (C) 2013 - 2016, The pgAdmin Development Team -# This software is released under the PostgreSQL Licence -# -########################################################################### - -import json - -from pgadmin.browser.tests.test_login import LoginTestCase -from regression.config import config_data - - -class SgNodeTestCase(LoginTestCase): - """ - This class will check available server groups in pgAdmin. - """ - - priority = 1 - - scenarios = [ - # Fetching the default url for server group node - ('Check Server Group Node', dict(url='/browser/server-group/obj/')) - ] - - def runTest(self): - """This function will check available server groups.""" - - i = config_data['test_server_group'] - - response = self.tester.get(self.url + str(i), content_type='html/json') - self.assertTrue(response.status_code, 200) - respdata = json.loads(response.data) - self.assertTrue(respdata['id'], i) diff --git a/web/pgadmin/browser/server_groups/tests/test_sg_get.py b/web/pgadmin/browser/server_groups/tests/test_sg_get.py new file mode 100644 index 0000000..c552d8e --- /dev/null +++ b/web/pgadmin/browser/server_groups/tests/test_sg_get.py @@ -0,0 +1,36 @@ +########################################################################### +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +########################################################################### + +import json +from pgadmin.browser.tests.test_login import LoginTestCase +from regression.config import config_data + + +class SgGetTestCase(LoginTestCase): + """ + This class will check available server groups in pgAdmin. + """ + + priority = 3 + + scenarios = [ + # Fetching the default url for server group node + ('Check Server Group Node', dict(url='/browser/server-group/obj/')) + ] + + def runTest(self): + """This function will check available server groups.""" + + srv_grp = config_data['test_server_group'] + + response = self.tester.get(self.url + str(srv_grp), + content_type='html/json') + self.assertEquals(response.status_code, 200) + respdata = json.loads(response.data.decode()) + self.assertTrue(respdata['id'], srv_grp) diff --git a/web/pgadmin/browser/tests/test_change_password.py b/web/pgadmin/browser/tests/test_change_password.py index ca89b4c..e911903 100644 --- a/web/pgadmin/browser/tests/test_change_password.py +++ b/web/pgadmin/browser/tests/test_change_password.py @@ -77,17 +77,16 @@ class ChangePasswordTestCase(LoginTestCase): config_data['pgAdmin4_login_credentials'] ['test_login_password']), respdata='You successfully changed your password.')) - ] def runTest(self): """This function will check change password functionality.""" response = self.tester.get('/change', follow_redirects=True) - self.assertIn('pgAdmin 4 Password Change', response.data) + self.assertIn('pgAdmin 4 Password Change', response.data.decode()) response = self.tester.post('/change', data=dict( password=self.password, new_password=self.new_password, new_password_confirm=self.new_password_confirm), follow_redirects=True) - self.assertIn(self.respdata, response.data) + self.assertIn(self.respdata, response.data.decode('utf-8')) diff --git a/web/pgadmin/browser/tests/test_login.py b/web/pgadmin/browser/tests/test_login.py index 7c2b796..d272a63 100644 --- a/web/pgadmin/browser/tests/test_login.py +++ b/web/pgadmin/browser/tests/test_login.py @@ -8,7 +8,6 @@ ########################################################################## import uuid - from pgadmin.utils.route import BaseTestGenerator from regression.config import config_data @@ -67,7 +66,9 @@ class LoginTestCase(BaseTestGenerator): ['test_login_username']), password=(config_data['pgAdmin4_login_credentials'] ['test_login_password']), - respdata='You are currently running version')) + respdata='Gravatar image for %s' % + config_data['pgAdmin4_login_credentials'] + ['test_login_username'])) ] def runTest(self): @@ -76,4 +77,4 @@ class LoginTestCase(BaseTestGenerator): response = self.tester.post('/login', data=dict( email=self.email, password=self.password), follow_redirects=True) - self.assertIn(self.respdata, response.data) + self.assertIn(self.respdata, response.data.decode('utf8')) diff --git a/web/pgadmin/browser/tests/test_logout.py b/web/pgadmin/browser/tests/test_logout.py index 8971e72..d9611ae 100644 --- a/web/pgadmin/browser/tests/test_logout.py +++ b/web/pgadmin/browser/tests/test_logout.py @@ -14,14 +14,13 @@ from regression.config import config_data class LogoutTest(LoginTestCase): """ This class verifies the logout functionality; provided the user is already - logged-in. Dictionary parameters define the scenario appended by test - name. + logged-in. """ - priority = 3 + priority = 100 scenarios = [ - # This test case validate the logout page + # This test case validate the logout page. ('Logging Out', dict(respdata='Redirecting...')) ] @@ -29,7 +28,7 @@ class LogoutTest(LoginTestCase): """This function checks the logout functionality.""" response = self.tester.get('/logout') - self.assertIn(self.respdata, response.data) + self.assertIn(self.respdata, response.data.decode('utf8')) def tearDown(self): """ diff --git a/web/pgadmin/browser/tests/test_reset_password.py b/web/pgadmin/browser/tests/test_reset_password.py index a2ce1df..04c2439 100644 --- a/web/pgadmin/browser/tests/test_reset_password.py +++ b/web/pgadmin/browser/tests/test_reset_password.py @@ -8,10 +8,10 @@ # ########################################################################## import uuid - from pgadmin.utils.route import BaseTestGenerator from regression.config import config_data + class ResetPasswordTestCase(BaseTestGenerator): """ This class validates the reset password functionality by defining @@ -40,8 +40,8 @@ class ResetPasswordTestCase(BaseTestGenerator): """This function checks reset password functionality.""" response = self.tester.get('/reset') - self.assertIn('Recover pgAdmin 4 Password', response.data) + self.assertIn('Recover pgAdmin 4 Password', response.data.decode()) response = self.tester.post( '/reset', data=dict(email=self.email), follow_redirects=True) - self.assertIn(self.respdata, response.data) + self.assertIn(self.respdata, response.data.decode('utf-8')) diff --git a/web/pgadmin/utils/route.py b/web/pgadmin/utils/route.py index 1ff41de..3d41e0f 100644 --- a/web/pgadmin/utils/route.py +++ b/web/pgadmin/utils/route.py @@ -9,6 +9,8 @@ from abc import ABCMeta, abstractmethod import unittest +from importlib import import_module +from werkzeug.utils import find_modules class TestsGeneratorRegistry(ABCMeta): @@ -48,18 +50,18 @@ class TestsGeneratorRegistry(ABCMeta): cls.registry = dict() - from importlib import import_module - from werkzeug.utils import find_modules - for module_name in find_modules(pkg, False, True): - module = import_module(module_name) - + try: + module = import_module(module_name) + except ImportError: + pass import six @six.add_metaclass(TestsGeneratorRegistry) class BaseTestGenerator(unittest.TestCase): + # Defining abstract method which will override by individual testcase. @abstractmethod def runTest(self): diff --git a/web/regression/config.py b/web/regression/config.py index bdc107b..a07c072 100644 --- a/web/regression/config.py +++ b/web/regression/config.py @@ -13,4 +13,8 @@ import os root = os.path.dirname(os.path.realpath(__file__)) with open(root + '/test_config.json') as data_file: - config_data = json.load(data_file) \ No newline at end of file + config_data = json.load(data_file) + +pickle_path = os.path.join(root, 'parent_id.pkl') + +print(pickle_path) \ No newline at end of file diff --git a/web/regression/test_config.json b/web/regression/test_config.json new file mode 100644 index 0000000..fc3d326 --- /dev/null +++ b/web/regression/test_config.json @@ -0,0 +1,910 @@ +{ + "pgAdmin4_login_credentials": + { + "test_new_password" : "newpass", + "test_login_password" : "test123", + "test_login_username" : "user@example.com" + }, + + + "test_server_group" : 1, + + "test_server_credentials": + [{ + "test_name" : "PG9.5", + "test_db_username" : "postgres", + "test_host" : "localhost", + "test_db_password" : "edb", + "test_db_port" : 5433, + "test_maintenance_db" : "postgres", + "test_sslmode" :"prefer" + }, + { + "test_name" : "PPAS9.4", + "test_db_username" : "enterprisedb", + "test_host" : "localhost", + "test_db_password" : "edb", + "test_db_port" : 5444, + "test_maintenance_db" : "edb", + "test_sslmode" :"prefer" + }], + + "test_server_update_data": + { + "test_comment": "This is test update comment" + }, + + "test_add_database_data": { + "test_privileges_acl": [ + { + "grantee": "postgres", + "grantor": "postgres", + "privileges": [ + { + "privilege_type": "C", + "privilege": true, + "with_grant": true + }, + { + "privilege_type": "T", + "privilege": true, + "with_grant": false + } + ] + } + ], + "test_conn_limit": -1, + "test_owner": "postgres", + "test_fun_acl": [ + { + "grantee": "postgres", + "grantor": "postgres", + "privileges": [ + { + "privilege_type": "X", + "privilege": true, + "with_grant": false + } + ] + } + ], + "test_seq_acl": [ + { + "grantee": "postgres", + "grantor": "postgres", + "privileges": [ + { + "privilege_type": "r", + "privilege": true, + "with_grant": false + }, + { + "privilege_type": "w", + "privilege": true, + "with_grant": false + }, + { + "privilege_type": "U", + "privilege": true, + "with_grant": false + } + ] + } + ], + "test_tbl_acl": [ + { + "grantee": "postgres", + "grantor": "postgres", + "privileges": [ + { + "privilege_type": "a", + "privilege": true, + "with_grant": true + }, + { + "privilege_type": "r", + "privilege": true, + "with_grant": false + } + ] + } + ], + "test_type_acl": [ + { + "grantee": "postgres", + "grantor": "postgres", + "privileges": [ + { + "privilege_type": "U", + "privilege": true, + "with_grant": false + } + ] + } + ], + "test_encoding": "UTF8", + "test_name": "test_db_automation", + "test_privileges": [], + "test_securities": [], + "test_variables": [] + }, + + "test_db_update_data": + { + "test_comment": "This is db update comment" + }, + + "test_lr_credentials": + { + "test_can_login": "true", + "test_conn_limit": -1, + "test_create_role": "true", + "test_role_inherit": "true", + "test_role_membership": [], + "test_lr_name": "testlrg1", + "test_lr_password": "edb", + "test_lr_validity": "12/27/2016", + "test_sec_lable": [], + "test_variable":[ + {"name":"work_mem", + "database":"postgres", + "value":65 + } + ] + }, + + "test_lr_update_data": + { + "test_comment": "This is login role update comment" + }, + + "test_tablespc_credentials": + { + "test_tblspace_name": "test_tablespace", + "test_spc_seclable": [], + "test_spc_acl": [ + { + "grantee":"postgres", + "grantor":"postgres", + "privileges":[ + { + "privilege_type":"C", + "privilege":true, + "with_grant":false + } + ] + } + ], + "test_spc_location": "/opt/PostgreSQL/9.5/data", + "test_spc_opts": [], + "test_spc_user": "postgres" + }, + + "test_tbspc_update_data": + { + "test_comment": "This is tablespace update comment" + }, + + "test_casts_credentials": + { + "test_cast_context": "IMPLICIT", + "test_encoding": "UTF8", + "test_name": "money->bigint", + "test_source_type": "money", + "test_target_type": "bigint" + }, + + "test_cast_update_data": + { + "test_comment": "This is cast update comment" + }, + + "test_extension_credentials": + { + "test_name": "postgres_fdw", + "test_relocate": true, + "test_schema": "public", + "test_version": "1.0" + }, + + "test_extension_update_data": + { + "test_schema": "test_schema" + }, + + "test_language_update_data": + { + "test_comment": "This is language update comment" + }, + + "test_schema_credentials": + { + "test_func_acl": [], + "test_seq_acl": [], + "test_tbl_acl": [], + "test_type_acl": [], + "test_name": "test_schema", + "test_owner": "postgres", + "test_privilege": + [ + { + "grantee":"postgres", + "grantor":"postgres", + "privileges": + [ + { + "privilege_type":"C", + "privilege":true, + "with_grant":false + }, + { + "privilege_type":"U", + "privilege":true, + "with_grant":false + } + ] + } + ], + "test_sec_label": [] + }, + + "test_schema_update_data": + { + "test_tbl_acl": + { + "added": + [ + { + "grantee": "public", + "grantor": "postgres", + "privileges": + [ + { + "privilege_type": "D", + "privilege": true, + "with_grant": false + }, + { + "privilege_type": "x", + "privilege": true, + "with_grant": false + } + ] + } + ] + }, + "test_func_acl": + { + "added": + [ + { + "grantee":"postgres", + "grantor":"postgres", + "privileges": + [ + { + "privilege_type":"X", + "privilege":true, + "with_grant":true + } + ] + } + ] + }, + "test_seq_acl": + { + "added": + [ + { + "grantee":"postgres", + "grantor":"postgres", + "privileges": + [ + { + "privilege_type":"r", + "privilege":true, + "with_grant":false + }, + { + "privilege_type":"w", + "privilege":true, + "with_grant":false + }, + { + "privilege_type":"U", + "privilege":true, + "with_grant":false + } + ] + } + ] + } + }, + + "test_trigger_function_credentials": + { + "test_acl": + [ + { + "grantee":"postgres", + "grantor":"postgres", + "privileges": + [ + { + "privilege_type":"X", + "privilege":true, + "with_grant":true + } + ] + } + ], + "test_args": [], + "test_fun_owner": "postgres", + "test_language": "plpgsql", + "test_name": "test_abort_any_command", + "test_options": [], + "test_probe": "$libdir/", + "test_leak_proof": true, + "test_namespace": 2200, + "test_type": "event_trigger", + "test_sec_def": true, + "test_code": "BEGIN RAISE EXCEPTION 'command % is disabled', tg_tag; END;", + "test_volitile": "s", + "test_sec_label": [], + "test_Variable": + [ + { + "name":"enable_sort", + "value":true + } + ] + }, + + "test_trigger_func_update_data": + { + "test_comment": "This is trigger function update comment" + }, + + "test_event_trigger_credentials": + { + "test_enable": "O", + "test_event_func": "test_schema.test_abort_any_command", + "test_event_name": "DDL_COMMAND_END", + "test_event_owner": "postgres", + "test_name": "test_event_trg", + "test_provider": [] + }, + + "test_event_trigger_update_data": + { + "test_comment": "This is event trigger update comment" + }, + + "test_FDW_credentials": + { + "test_acl": + [ + { + "grantee":"postgres", + "grantor":"postgres", + "privileges": + [ + { + "privilege_type":"U", + "privilege":true, + "with_grant":true + } + ] + } + ], + + "test_handler": "postgres_fdw_handler", + "test_options": [], + "test_owner": "postgres", + "test_validator": "postgresql_fdw_validator", + "test_name": "test_fdw" + }, + + "test_FDW_update_data": + { + "test_comment": "This is FDW update comment" + }, + + "test_collation_credentials": + { + "test_copy_collation": "pg_catalog.\"POSIX\"", + "test_name": "test_collation", + "test_owner": "postgres", + "test_schema": "test_schema" + }, + + "test_collation_update_data": + { + "test_comment": "This is collation update comment" + }, + + + "test_domain_data": + { + "test_schema": "test_schema", + "test_basetype": "character", + "test_collation": "pg_catalog.\"en_AG\"", + "test_constraints": + [ + { + "conname":"num", + "convalidated":true + } + ], + "test_lenght": true, + "test_max_value": 2147483647, + "test_min_value": 1, + "test_name": "test_domain", + "test_owner": "postgres", + "test_security": [], + "test_defalt_type": "1", + "test_type_len": "10" + }, + + "test_domain_update_data": + { + "test_comment": "This is domain update comment" + }, + + "test_sequence_credentials": + { + "test_cache": "1", + "test_cycled": true, + "test_increment": "1", + "test_max_value": "100000", + "test_min_value": "1", + "test_name": "test_empno", + "test_acl": + [ + { + "grantee":"postgres", + "grantor":"postgres", + "privileges": + [ + { + "privilege_type":"r", + "privilege":true, + "with_grant":false + }, + { + "privilege_type":"w", + "privilege":true, + "with_grant":false + }, + { + "privilege_type":"U", + "privilege":true, + "with_grant":false + } + ] + } + ], + "test_schema_name": "test_schema", + "test_security": [], + "test_owner": "postgres", + "test_start_val": "100" + }, + + "test_sequnce_update_data": + { + "test_comment": "This is sequence update comment" + }, + + "test_table_credentials": + { + "test_constraint": [], + "test_col_inherit": "[]", + "test_columns": + [ + { + "name":"empno", + "cltype":"numeric", + "attacl":[], + "is_primary_key":false, + "attoptions":[], + "seclabels":[] + }, + { + "name":"empname", + "cltype":"character[]", + "attacl":[], + "is_primary_key":false, + "attoptions":[], + "seclabels":[] + }, + {"name":"DOJ", + "cltype":"date[]", + "attacl":[], + "is_primary_key":false, + "attoptions":[], + "seclabels":[] + } + ], + "test_has_constraint": [], + "test_fillfactor": "11", + "test_has_FK": [], + "test_has_toast_tbl": true, + "test_like_constraint": true, + "test_like_default_value": true, + "test_like_relation": "pg_catalog.pg_tables", + "test_name": "test_emp", + "test_PK": [], + "test_acl": + [ + { + "grantee":"postgres", + "grantor":"postgres", + "privileges": + [ + { + "privilege_type":"a", + "privilege":true, + "with_grant":true + }, + { + "privilege_type":"r", + "privilege":true, + "with_grant":false + }, + { + "privilege_type":"w", + "privilege":true, + "with_grant":false + } + ] + } + ], + "test_has_oid": true, + "test_owner": "postgres", + "test_schema": "test_schema", + "test_sec_acl": [], + "test_tbscp": "pg_default", + "test_unique_constraint": [], + "test_vacuum_tbl": + [ + { + "name":"autovacuum_analyze_scale_factor" + }, + { + "name":"autovacuum_analyze_threshold" + }, + { + "name":"autovacuum_freeze_max_age" + }, + { + "name":"autovacuum_vacuum_cost_delay" + }, + { + "name":"autovacuum_vacuum_cost_limit" + }, + { + "name":"autovacuum_vacuum_scale_factor" + }, + { + "name":"autovacuum_vacuum_threshold" + }, + { + "name":"autovacuum_freeze_min_age" + }, + { + "name":"autovacuum_freeze_table_age" + } + ], + + "test_vacuum_toast": + [ + { + "name":"autovacuum_freeze_max_age" + }, + { + "name":"autovacuum_vacuum_cost_delay" + }, + { + "name":"autovacuum_vacuum_cost_limit" + }, + { + "name":"autovacuum_vacuum_scale_factor" + }, + { + "name":"autovacuum_vacuum_threshold" + }, + { + "name":"autovacuum_freeze_min_age" + }, + { + "name":"autovacuum_freeze_table_age" + } + ] + + }, + + "test_table_update_data": + { + "test_comment": "This is table update comment" + }, + + "test_view_credentials": + { + "test_check_options": "local", + "test_acl": + [ + { + "grantee":"postgres", + "grantor":"postgres", + "privileges": + [ + { + "privilege_type":"a", + "privilege":true, + "with_grant":true + }, + { + "privilege_type":"r", + "privilege":true, + "with_grant":false + } + ] + } + ], + "test_definition": "select test_emp.empname from test_schema.test_emp;", + "test_name": "test_view", + "test_owner": "postgres", + "test_schema_name": "test_schema", + "test_sec_label": [] + }, + + "test_view_update_data": + { + "test_comment": "This is view update comment" + }, + + "test_mview_credentials": + { + "test_acl": + [ + { + "grantee":"postgres", + "grantor":"postgres", + "privileges": + [ + { + "privilege_type":"a", + "privilege":true, + "with_grant":false + } + ] + } + ], + "test_definition": "select test_emp.empname from test_schema.test_emp where test_emp.empno = 1;", + "test_fillfactor": "11", + "test_name": "test_mview", + "test_owner": "postgres", + "test_schema_name": "test_schema", + "test_sec_label": [], + "test_tbscp": "pg_default", + "test_toast_autovacuum": true, + "test_toast_autovacuum_enabled": false, + "test_vacuum_tbl": + [ + { + "name":"autovacuum_analyze_scale_factor" + }, + { + "name":"autovacuum_analyze_threshold" + }, + { + "name":"autovacuum_freeze_max_age" + }, + { + "name":"autovacuum_vacuum_cost_delay" + }, + { + "name":"autovacuum_vacuum_cost_limit" + }, + { + "name":"autovacuum_vacuum_scale_factor" + }, + { + "name":"autovacuum_vacuum_threshold" + }, + { + "name":"autovacuum_freeze_min_age" + }, + { + "name":"autovacuum_freeze_table_age" + } + ], + "test_vacuum_toast": + [ + { + "name":"autovacuum_freeze_max_age" + }, + { + "name":"autovacuum_vacuum_cost_delay" + }, + { + "name":"autovacuum_vacuum_cost_limit" + }, + { + "name":"autovacuum_vacuum_scale_factor" + }, + { + "name":"autovacuum_vacuum_threshold" + }, + { + "name":"autovacuum_freeze_min_age" + }, + { + "name":"autovacuum_freeze_table_age" + } + ], + + "test_with_data": true + }, + + "test_mview_update_data": + { + "test_comment": "This is materialized view update comment" + }, + + "test_foreign_server_credentials": + { + "test_fsr_acl": + [ + { + "grantee":"postgres", + "grantor":"postgres", + "privileges": + [ + { + "privilege_type":"U", + "privilege":true, + "with_grant":false + } + ] + } + ], + + "test_fsr_optns": + [ + { + "fsrvoption":"host", + "fsrvvalue":"localhost" + }, + { + "fsrvoption":"port", + "fsrvvalue":"5433" + }, + { + "fsrvoption":"dbname", + "fsrvvalue":"postgres" + } + ], + "test_fsr_owner": "postgres", + "test_name": "test_foreign_server" + }, + + "test_FRS_update_data": + { + "test_comment": "This is foreign server update comment" + }, + + "test_user_mapping_credentials": + { + "test_name": "postgres", + "test_option": [], + "test_options": + [ + { + "umoption":"user", + "umvalue":"postgres" + }, + { + "umoption":"password", + "umvalue":"edb" + } + ] + }, + + "test_user_mapping_update_data": + { + "test_options": + { + "changed": + [ + {"umoption":"password", + "umvalue":"edb1" + } + ] + } + }, + + "test_foreign_table_credentials": + { + "test_acl": + [ + { + "grantee":"postgres", + "grantor":"postgres", + "privileges": + [ + { + "privilege_type":"a", + "privilege":true, + "with_grant":false + }, + { + "privilege_type":"r", + "privilege":true, + "with_grant":false + }, + { + "privilege_type":"w", + "privilege":true, + "with_grant":false + }, + { + "privilege_type":"x", + "privilege":true, + "with_grant":false + } + ] + } + ], + "test_schema_name": "test_schema", + "test_column": + [ + { + "attname":"enme", + "datatype":"text", + "attnotnull":true, + "collname":"pg_catalog.\"default\"", + "is_tlength":false, + "is_precision":false + } + ], + "test_constraints": [], + "test_options": [], + "test_frs_name": "test_foreign_server", + "test_name": "test_ft", + "test_owner": "postgres", + "test_rel_acl": [], + "test_sec_lable": [], + "test_str_acl": [] + }, + + "test_FT_update_data": + { + "test_comment": "This is foreign table update comment" + } + + + + + + + + + + + + + + + + + + + + + + + + + +} diff --git a/web/regression/test_nodes.py b/web/regression/test_nodes.py new file mode 100644 index 0000000..9877a04 --- /dev/null +++ b/web/regression/test_nodes.py @@ -0,0 +1,40 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +from regression.config import config_data +import json +from regression.test_utils import get_ids + + +def test_getnodes(node=None): + # Connect to server and database. + + if not node: + return None + + all_id = get_ids() + + server_id = all_id["sid"][0] + db_id = all_id["did"][0] + srv_grp = config_data['test_server_group'] + + response = node.tester.post('browser/server/connect/{0}/{1}'.format + (srv_grp, server_id), + data=dict(password=config_data + ['test_server_credentials'][0] + ['test_db_password']), follow_redirects=True) + + con_response = node.tester.post('browser/database/connect/' + '{0}/{1}/{2}'.format + (srv_grp, server_id, db_id), + follow_redirects=True) + + db_con = json.loads(con_response.data.decode()) + + return db_con diff --git a/web/regression/test_utils.py b/web/regression/test_utils.py new file mode 100644 index 0000000..50b8310 --- /dev/null +++ b/web/regression/test_utils.py @@ -0,0 +1,20 @@ +# ################################################################# +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2016, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +# ################################################################## + +import pickle +from regression.config import pickle_path + + +def get_ids(url=pickle_path): + # This function will read parent nodes id's and return it. + + output = open(url, 'rb') + ids = pickle.load(output) + output.close() + return ids diff --git a/web/regression/testsuite.py b/web/regression/testsuite.py index 9ec7ffe..0bb2db2 100644 --- a/web/regression/testsuite.py +++ b/web/regression/testsuite.py @@ -9,10 +9,12 @@ """ This file collect all modules/files present in tests directory and add them to TestSuite. """ - +from __future__ import print_function import os import sys import unittest +import operator +import logging from testscenarios.scenarios import generate_scenarios # We need to include the root directory in sys.path to ensure that we can @@ -45,6 +47,23 @@ TestsGeneratorRegistry.load_generators('pgadmin') test_client = app.test_client() +class StreamToLogger(object): + """ + Fake file-like stream object that redirects writes to a logger instance. + """ + def __init__(self, logger, log_level=logging.INFO): + self.logger = logger + self.log_level = log_level + self.linebuf = '' + + def write(self, buf): + for line in buf.rstrip().splitlines(): + self.logger.log(self.log_level, line.rstrip()) + + def flush(self): + pass + + def suite(): """ Defining test suite which will execute all the testcases present in tests directory according to set priority.""" @@ -58,6 +77,8 @@ def suite(): modules.insert(gen.priority, gen) + modules.sort(key=operator.attrgetter('priority')) + for m in modules: obj = m() obj.setTestClient(test_client) @@ -66,7 +87,26 @@ def suite(): return pgadmin_suite - if __name__ == '__main__': + + print("Please check output in file: logger.log placed at " + ".../pgadmin4/web/regression") + + logging.basicConfig(level=logging.DEBUG, + format='%(asctime)s:%(levelname)s:%(name)s:%(message)s', + filename="logger.log", + filemode='w' + ) + + stdout_logger = logging.getLogger('STDOUT') + sl = StreamToLogger(stdout_logger, logging.INFO) + sys.stdout = sl + + stderr_logger = logging.getLogger('STDERR') + sl = StreamToLogger(stderr_logger, logging.ERROR) + sys.stderr = sl + suite = suite() - tests = unittest.TextTestRunner(descriptions=True, verbosity=2).run(suite) + tests = unittest.TextTestRunner(descriptions=True, verbosity=2, + stream=sys.stdout).run(suite) + os.remove("parent_id.pkl")