public inbox for [email protected]
help / color / mirror / Atom feedFrom: Priyanka Shendge <[email protected]>
To: Dave Page <[email protected]>
Cc: pgadmin-hackers <[email protected]>
Cc: Kanchan Mohitey <[email protected]>
Subject: Re: pgAdmin IV API test cases patch
Date: Thu, 9 Jun 2016 18:07:08 +0530
Message-ID: <CAKmZXFRj8yY91TTxwQQ01eOQE8Rc7FPWuxGcjxaVY+QcWpgWDg@mail.gmail.com> (raw)
In-Reply-To: <CAKmZXFTX9D_qOXGrvPa9sfFjc1A6VPebcpBn7vyzPEOH4pWfEg@mail.gmail.com>
References: <CAKmZXFQ2Hj1-OZpSGFEBB-vOypQ_=1b4Yr_VytZ-E1=CBw9Yhw@mail.gmail.com>
<CA+OCxow8Q83e7Tm+BC2bxq=oqwd-m4JS3y2KpzgFemc=wX=f=A@mail.gmail.com>
<CAKmZXFTX9D_qOXGrvPa9sfFjc1A6VPebcpBn7vyzPEOH4pWfEg@mail.gmail.com>
List-Unsubscribe: <mailto:[email protected]?body=unsub%20pgadmin-hackers>
Hi Dave,
PFA updated patch. I have made changes suggested by you.
Kindly, review and let me know for more changes.
On 6 June 2016 at 14:09, Priyanka Shendge <[email protected]
> wrote:
>
>
> On 6 June 2016 at 14:03, Dave Page <[email protected]> wrote:
>
>> Hi
>>
>> On Sun, Jun 5, 2016 at 6:56 PM, Priyanka Shendge
>> <[email protected]> wrote:
>> > Hi,
>> >
>> > PFA patch for API test cases for tree nodes/modules. This patch does not
>> > include
>> > api tests for following modules:
>> >
>> > 1. Type
>> > 2. Table child nodes
>> > 3. FTS modules
>> >
>> > Kindly, review the same and let me know for any modification.
>>
>> I took a very quick look at the patch and immediately saw a serious
>> problem I'm afraid - you cannot hard-code paths like this:
>>
>> + if
>> os.path.isfile('/home/edb/Downloads/pgadmin4/web/regression/'
>> + 'parent_id.pkl'):
>> + exst_server_id = open('/home/edb/Downloads/pgadmin4/web'
>> + '/regression/''parent_id.pkl',
>> 'rb')
>>
>> You need to dynamically generate such paths so this will work on any
>> machine. Look at line 19 of web/pgAdmin4.py to see how to get the
>> patch to the current file as an example.
>>
> Sure, i'll check and update accordingly.
>
>>
>> Also; despite this not being part of the end-user interface, please
>> try to follow the standards for messages, e.g. instead of:
>>
>> No event trigger(s) to update!!!
>>
>> use
>>
>> No event trigger(s) to update.
>>
> Noted. I will update for all applicable files.
>
>>
>> There is likely more to change of course, but please fix these issues
>> first.
>>
> Sure.
>
> Thank you.
>
>>
>> Thanks!
>>
>> --
>> Dave Page
>> Blog: http://pgsnake.blogspot.com
>> Twitter: @pgsnake
>>
>> EnterpriseDB UK: http://www.enterprisedb.com
>> The Enterprise PostgreSQL Company
>>
>
>
>
> --
> Best,
> Priyanka
>
> EnterpriseDB Corporation
> The Enterprise PostgreSQL Company
>
--
Best,
Priyanka
EnterpriseDB Corporation
The Enterprise PostgreSQL Company
--
Sent via pgadmin-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-hackers
Attachments:
[application/octet-stream] pgadmin_api_test2.patch (240.1K, 3-pgadmin_api_test2.patch)
download | inline diff:
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" : "[email protected]"
+ },
+
+
+ "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")
view thread (27+ messages) latest in thread
reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: [email protected]
Cc: [email protected], [email protected], [email protected]
Subject: Re: pgAdmin IV API test cases patch
In-Reply-To: <CAKmZXFRj8yY91TTxwQQ01eOQE8Rc7FPWuxGcjxaVY+QcWpgWDg@mail.gmail.com>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox