diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/domain_constraints/tests/domain_constraints_test_data.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/domain_constraints/tests/domain_constraints_test_data.json index 841585ba4..43313dc11 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/domain_constraints/tests/domain_constraints_test_data.json +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/domain_constraints/tests/domain_constraints_test_data.json @@ -439,10 +439,7 @@ "comment": "Comments to test update" }, "mocking_required": true, - "mock_data": { - "function_name": "pgadmin.browser.server_groups.servers.databases.schemas.domains.domain_constraints.DomainConstraintView.get_sql", - "return_value": "('', 'Mocked get_sql function', '')" - }, + "mock_data": {}, "expected_data": { "status_code": 200 } diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/schema_test_data.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/schema_test_data.json new file mode 100644 index 000000000..87b0d3afd --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/schema_test_data.json @@ -0,0 +1,296 @@ +{ + "schema_create": [ + { + "name": "Create schema: With valid data", + "url": "/browser/schema/obj/", + "is_positive_test": true, + "test_data": {}, + "mocking_required": false, + "mock_data": {}, + "expected_data": { + "status_code": 200 + } + }, + { + "name": "Error Creating schema: missing parameter", + "url": "/browser/schema/obj/", + "is_positive_test": false, + "missing_param": true, + "test_data": {}, + "mocking_required": false, + "mock_data": {}, + "expected_data": { + "status_code": 410 + } + }, + { + "name": "Error Creating schema: invalid data", + "url": "/browser/schema/obj/", + "is_positive_test": false, + "error_db_id": true, + "test_data": {}, + "mocking_required": false, + "mock_data": {}, + "expected_data": { + "status_code": 410 + } + } + ], + "schema_delete": [ + { + "name": "Delete schema", + "url": "/browser/schema/obj/", + "is_positive_test": true, + "mocking_required": false, + "mock_data": {}, + "expected_data": { + "status_code": 200 + } + }, + { + "name": "Error while deleting a schema - Internal server error", + "url": "/browser/schema/obj/", + "error_deleting_schema": true, + "is_positive_test": false, + "mocking_required": true, + "mock_data": { + "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar", + "return_value": "(False, 'Mocked Internal Server Error while deleting a schema')" + }, + "expected_data": { + "status_code": 500 + } + }, + { + "name": "Delete schema using wrong schema id", + "url": "/browser/schema/obj/", + "wrong_schema_id": true, + "is_positive_test": false, + "mocking_required": false, + "mock_data": { + }, + "expected_data": { + "status_code": 410 + } + } + ], + "schema_multiple_delete" :[ + { + "name": "Delete multiple schema", + "url": "/browser/schema/obj/", + "is_positive_test": true, + "mocking_required": false, + "mock_data": {}, + "expected_data": { + "status_code": 200 + } + } + ], + "schema_dependent_dependency": [ + { + "name": "Get schema dependents", + "url": "/browser/schema/dependent/", + "is_positive_test": true, + "mocking_required": false, + "mock_data": {}, + "expected_data": { + "status_code": 200 + } + }, + { + "name": "Get schema dependencies", + "url": "/browser/schema/dependency/", + "is_positive_test": true, + "mocking_required": false, + "mock_data": {}, + "expected_data": { + "status_code": 200 + } + } + ], + "schema_get_nodes": [ + { + "name": "Get schema nodes", + "url": "/browser/schema/nodes/", + "is_positive_test": true, + "mocking_required": false, + "mock_data": {}, + "expected_data": { + "status_code": 200 + } + }, + { + "name": "Error while fetching schema nodes", + "url": "/browser/schema/nodes/", + "error_fetching_schema": true, + "is_positive_test": false, + "invalid": false, + "mocking_required": true, + "mock_data": { + "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray", + "return_value": "(False, 'Mocked Internal Server Error while fetching schema nodes')" + }, + "expected_data": { + "status_code": 500 + } + }, + { + "name": "Error - Fetching schema using wrong schema id", + "url": "/browser/schema/nodes/", + "wrong_schema_id": true, + "is_positive_test": false, + "invalid": false, + "mocking_required": false, + "mock_data": { + }, + "expected_data": { + "status_code": 410 + } + } + ], + "schema_update": [ + { + "name": "Update schema", + "url": "/browser/schema/obj/", + "is_positive_test": true, + "mocking_required": false, + "test_data": {}, + "mock_data": {}, + "expected_data": { + "status_code": 200 + } + }, + { + "name": "Error while updating a schema - Internal server error", + "url": "/browser/schema/obj/", + "error_in_db": true, + "test_data": {}, + "is_positive_test": false, + "mocking_required": true, + "mock_data": { + "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar", + "return_value": "[(False, 'Mocked Internal Server Error while updating a schema')]" + }, + "expected_data": { + "status_code": 500 + } + } + ], + "schema_get_sql": [ + { + "name": "Get Schema SQL", + "url": "/browser/schema/sql/", + "is_positive_test": true, + "mocking_required": false, + "mock_data": {}, + "expected_data": { + "status_code": 200 + } + }, + { + "name": "Error - Get schema SQL - Internal server error", + "url": "/browser/schema/sql/", + "is_positive_test": false, + "internal_server_error": true, + "mocking_required": true, + "mock_data": { + "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict", + "return_value": "(False, 'Mocked Internal Server Error while fetching a schema')" + }, + "expected_data": { + "status_code": 500 + } + }, + { + "name": "Error - Get schema SQL using wrong schema id", + "url": "/browser/schema/sql/", + "wrong_schema_id": true, + "is_positive_test": false, + "mocking_required": false, + "mock_data": { + }, + "expected_data": { + "status_code": 410 + } + } + ], + "schema_get": [ + { + "name": "Get Schema Properties", + "url": "/browser/schema/obj/", + "is_positive_test": true, + "mocking_required": false, + "mock_data": {}, + "expected_data": { + "status_code": 200 + } + }, + { + "name": "Error while fetching Schema Properties", + "url": "/browser/schema/obj/", + "error_fetching_schema": true, + "is_positive_test": false, + "mocking_required": true, + "mock_data": { + "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict", + "return_value": "(False, 'Mocked Internal Server Error while fetching schema properties')" + }, + "expected_data": { + "status_code": 500 + } + }, + { + "name": "Get schema list", + "url": "/browser/schema/obj/", + "is_positive_test": true, + "schema_list": true, + "mocking_required": false, + "mock_data": {}, + "expected_data": { + "status_code": 200 + } + }, + { + "name": "Error while fetching Schema list", + "url": "/browser/schema/obj/", + "error_fetching_schema": true, + "is_positive_test": false, + "schema_list": true, + "mocking_required": true, + "mock_data": { + "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict", + "return_value": "(False, 'Mocked Internal Server Error while fetching schema list')" + }, + "expected_data": { + "status_code": 500 + } + } + ], + "schema_get_children": [ + { + "name": "Get Schema Children", + "url": "/browser/schema/children/", + "is_positive_test": true, + "mocking_required": false, + "mock_data": {}, + "expected_data": { + "status_code": 200 + } + }, + { + "name": "Error while fetching Schema children", + "url": "/browser/schema/children/", + "error_in_db": true, + "is_positive_test": false, + "schema_list": true, + "mocking_required": true, + "mock_data": { + "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict", + "return_value": "(False, 'Mocked Internal Server Error while fetching schema children')" + }, + "expected_data": { + "status_code": 500 + } + } + ] +} 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 index afa4cb712..bf55c3797 100644 --- 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 @@ -15,29 +15,45 @@ from pgadmin.browser.server_groups.servers.databases.tests import utils as \ from pgadmin.utils.route import BaseTestGenerator from regression import parent_node_dict from regression.python_test_utils import test_utils as utils +from . import utils as schema_utils +from unittest.mock import patch class SchemaAddTestCase(BaseTestGenerator): """ This class will add new schema under database node. """ - scenarios = [ - # Fetching default URL for schema node. - ('Check Schema Node URL', dict(url='/browser/schema/obj/')) - ] + scenarios = utils.generate_scenarios('schema_create', + schema_utils.test_cases) - def runTest(self): - """ This function will add schema under database node. """ + def setUp(self): database_info = parent_node_dict["database"][-1] - server_id = database_info["server_id"] + self.server_id = database_info["server_id"] + self.db_id = database_info["db_id"] + + def create_schema(self, db_id): + """ + This function create a schema and returns it + :return: created schema response + """ + is_nice = True + state = "nice" if is_nice else "not nice" - db_id = database_info["db_id"] + db_id = db_id or self.db_id + return self.tester.post(self.url + str(utils.SERVER_GROUP) + '/' + + str(self.server_id) + '/' + + str(db_id) + '/', + data=json.dumps(self.data), + content_type='html/json') + + def runTest(self): + """ This function will add schema under database node. """ db_con = database_utils.connect_database(self, utils.SERVER_GROUP, - server_id, - db_id) + self.server_id, + self.db_id) if not db_con["info"] == "Database connected.": raise Exception("Could not connect to database to add the schema.") db_user = self.server["username"] - data = { + self.data = { "deffuncacl": [], "defseqacl": [], "deftblacl": [], @@ -65,8 +81,22 @@ class SchemaAddTestCase(BaseTestGenerator): ], "seclabels": [] } - response = self.tester.post(self.url + str(utils.SERVER_GROUP) + '/' + - str(server_id) + '/' + str(db_id) + - '/', data=json.dumps(data), - content_type='html/json') - self.assertEquals(response.status_code, 200) + + if self.is_positive_test: + response = self.create_schema("") + else: + if hasattr(self, "error_db_id"): + wrong_db_id = 99999 + response = self.create_schema(wrong_db_id) + + if hasattr(self, "missing_param"): + del self.data['name'] + response = self.create_schema("") + + actual_response_code = response.status_code + expected_response_code = self.expected_data['status_code'] + self.assertEquals(actual_response_code, expected_response_code) + + def tearDown(self): + # Disconnect the database + database_utils.disconnect_database(self, self.server_id, self.db_id) 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 index 53f33c2d4..d257a367c 100644 --- 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 @@ -15,15 +15,14 @@ from pgadmin.utils.route import BaseTestGenerator from regression import parent_node_dict from regression.python_test_utils import test_utils as utils from . import utils as schema_utils +from unittest.mock import patch class SchemaDeleteTestCase(BaseTestGenerator): """ This class will add new schema under database node. """ - scenarios = [ - # Fetching default URL for extension node. - ('Check Schema Node URL', dict(url='/browser/schema/obj/')) - ] + scenarios = utils.generate_scenarios('schema_delete', + schema_utils.test_cases) def setUp(self): self.database_info = parent_node_dict["database"][-1] @@ -38,17 +37,27 @@ class SchemaDeleteTestCase(BaseTestGenerator): self.schema_details = schema_utils.create_schema(connection, self.schema_name) + def delete_schema(self): + """ + This function returns the schema delete response + :return: schema delete response + """ + return self.tester.delete(self.url + str(utils.SERVER_GROUP) + + '/' + str(self.server_id) + '/' + + str(self.db_id) + '/' + str(self.schema_id), + follow_redirects=True) + def runTest(self): """ This function will delete schema under database node. """ - server_id = self.database_info["server_id"] - db_id = self.database_info["db_id"] + self.server_id = self.database_info["server_id"] + self.db_id = self.database_info["db_id"] db_con = database_utils.connect_database(self, utils.SERVER_GROUP, - server_id, db_id) + self.server_id, self.db_id) if not db_con['data']["connected"]: raise Exception("Could not connect to database to delete the" " schema.") - schema_id = self.schema_details[0] + self.schema_id = self.schema_details[0] schema_name = self.schema_details[1] schema_response = schema_utils.verify_schemas(self.server, self.db_name, @@ -56,11 +65,22 @@ class SchemaDeleteTestCase(BaseTestGenerator): if not schema_response: raise Exception("Could not find the schema to delete.") - response = self.tester.delete(self.url + str(utils.SERVER_GROUP) + - '/' + str(server_id) + '/' + - str(db_id) + '/' + str(schema_id), - follow_redirects=True) - self.assertEquals(response.status_code, 200) + if self.is_positive_test: + response = self.delete_schema() + else: + if hasattr(self, "error_deleting_schema"): + with patch(self.mock_data["function_name"], + return_value=eval(self.mock_data["return_value"])): + response = self.delete_schema() + + if hasattr(self, "wrong_schema_id"): + self.schema_id = 99999 + response = self.delete_schema() + + actual_response_code = response.status_code + expected_response_code = self.expected_data['status_code'] + self.assertEquals(actual_response_code, expected_response_code) def tearDown(self): - pass + # Disconnect the database + database_utils.disconnect_database(self, self.server_id, self.db_id) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_delete_multiple.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_delete_multiple.py index 13ff6bb39..e8fc84dd3 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_delete_multiple.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_delete_multiple.py @@ -21,10 +21,8 @@ from . import utils as schema_utils class SchemaDeleteMultipleTestCase(BaseTestGenerator): """ This class will add new schema under database node. """ - scenarios = [ - # Fetching default URL for extension node. - ('Check Schema Node URL', dict(url='/browser/schema/obj/')) - ] + scenarios = utils.generate_scenarios('schema_multiple_delete', + schema_utils.test_cases) def setUp(self): self.database_info = parent_node_dict["database"][-1] @@ -51,10 +49,10 @@ class SchemaDeleteMultipleTestCase(BaseTestGenerator): def runTest(self): """ This function will delete schema under database node. """ - server_id = self.database_info["server_id"] - db_id = self.database_info["db_id"] + self.server_id = self.database_info["server_id"] + self.db_id = self.database_info["db_id"] db_con = database_utils.connect_database(self, utils.SERVER_GROUP, - server_id, db_id) + self.server_id, self.db_id) if not db_con['data']["connected"]: raise Exception("Could not connect to database to delete the" " schema.") @@ -75,12 +73,16 @@ class SchemaDeleteMultipleTestCase(BaseTestGenerator): data = {'ids': [self.schema_details[0], self.schema_details_1[0]]} response = self.tester.delete(self.url + str(utils.SERVER_GROUP) + - '/' + str(server_id) + '/' + - str(db_id) + '/', + '/' + str(self.server_id) + '/' + + str(self.db_id) + '/', follow_redirects=True, data=json.dumps(data), content_type='html/json') - self.assertEquals(response.status_code, 200) + + actual_response_code = response.status_code + expected_response_code = self.expected_data['status_code'] + self.assertEquals(actual_response_code, expected_response_code) def tearDown(self): - pass + # Disconnect the database + database_utils.disconnect_database(self, self.server_id, self.db_id) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_dependents.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_dependents.py new file mode 100644 index 000000000..dd7bc8fa9 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_dependents.py @@ -0,0 +1,77 @@ +########################################################################## +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2020, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +########################################################################## + +import uuid + +from pgadmin.browser.server_groups.servers.databases.tests import utils as \ + database_utils +from pgadmin.utils.route import BaseTestGenerator +from regression import parent_node_dict +from regression.python_test_utils import test_utils as utils +from . import utils as schema_utils + + +class SchemaDependentAndDependencyTestCase(BaseTestGenerator): + """ This class will check dependents and dependencies of + schema under database node. """ + + scenarios = utils.generate_scenarios('schema_dependent_dependency', + schema_utils.test_cases) + + def setUp(self): + self.database_info = parent_node_dict["database"][-1] + self.db_name = self.database_info["db_name"] + # Change the db name, so that schema will create in newly created db + self.schema_name = "schema_get_%s" % str(uuid.uuid4())[1:8] + connection = utils.get_db_connection(self.db_name, + self.server['username'], + self.server['db_password'], + self.server['host'], + self.server['port']) + self.schema_details = schema_utils.create_schema(connection, + self.schema_name) + + def dependents_schema(self): + """ + This function returns the schema dependents response + :return: schema delete response + """ + return self.tester.get(self.url + str(utils.SERVER_GROUP) + + '/' + str(self.server_id) + '/' + + str(self.db_id) + '/' + str(self.schema_id), + follow_redirects=True) + + def runTest(self): + """ This function will check dependents and dependencies + of schema under database node. """ + self.server_id = self.database_info["server_id"] + self.db_id = self.database_info["db_id"] + db_con = database_utils.connect_database(self, utils.SERVER_GROUP, + self.server_id, self.db_id) + if not db_con['data']["connected"]: + raise Exception("Could not connect to database.") + + self.schema_id = self.schema_details[0] + schema_name = self.schema_details[1] + schema_response = schema_utils.verify_schemas(self.server, + self.db_name, + schema_name) + if not schema_response: + raise Exception("Could not find the schema.") + + if self.is_positive_test: + response = self.dependents_schema() + + actual_response_code = response.status_code + expected_response_code = self.expected_data['status_code'] + self.assertEquals(actual_response_code, expected_response_code) + + def tearDown(self): + # Disconnect the database + database_utils.disconnect_database(self, self.server_id, self.db_id) 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 index eea3a0c68..04a1c6a2d 100644 --- 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 @@ -13,39 +13,76 @@ from pgadmin.utils import server_utils as server_utils from pgadmin.utils.route import BaseTestGenerator from regression import parent_node_dict from regression.python_test_utils import test_utils as utils +from unittest.mock import patch +from . import utils as schema_utils class SchemaGetTestCase(BaseTestGenerator): """ This class will add new schema under database node. """ - scenarios = [ - # Fetching default URL for extension node. - ('Check Schema Node URL', dict(url='/browser/schema/obj/')) - ] + scenarios = utils.generate_scenarios('schema_get', + schema_utils.test_cases) + + def get_schema(self): + """ + This function returns the schema get response + :return: schema get response + """ + return self.tester.get( + self.url + str(utils.SERVER_GROUP) + '/' + + str(self.server_id) + '/' + str(self.db_id) + + '/' + str(self.schema_id), + content_type='html/json') + + def get_schema_list(self): + """ + This functions returns the schema list + :return: schema list + """ + return self.tester.get( + self.url + str(utils.SERVER_GROUP) + '/' + + str(self.server_id) + '/' + str(self.db_id) + + '/', + content_type='html/json') + def runTest(self): """ This function will delete schema under database node. """ schema = parent_node_dict["schema"][-1] - db_id = schema["db_id"] - server_id = schema["server_id"] + self.db_id = schema["db_id"] + self.server_id = schema["server_id"] - server_response = server_utils.connect_server(self, server_id) + server_response = server_utils.connect_server(self, self.server_id) if not server_response["data"]["connected"]: raise Exception("Could not connect to server to connect the" " database.") db_con = database_utils.connect_database(self, utils.SERVER_GROUP, - server_id, - db_id) + self.server_id, + self.db_id) if not db_con["info"] == "Database connected.": raise Exception("Could not connect to database to get the schema.") - schema_id = schema["schema_id"] - schema_response = self.tester.get( - self.url + str(utils.SERVER_GROUP) + '/' + - str(server_id) + '/' + str(db_id) + - '/' + str(schema_id), - content_type='html/json') - self.assertEquals(schema_response.status_code, 200) - # Disconnect the database - database_utils.disconnect_database(self, server_id, db_id) + self.schema_id = schema["schema_id"] + if self.is_positive_test: + if hasattr(self, "schema_list"): + response = self.get_schema_list() + else: + response = self.get_schema() + + else: + if hasattr(self, "error_fetching_schema"): + with patch(self.mock_data["function_name"], + return_value=eval(self.mock_data["return_value"])): + if hasattr(self, "schema_list"): + response = self.get_schema_list() + else: + response = self.get_schema() + + actual_response_code = response.status_code + expected_response_code = self.expected_data['status_code'] + self.assertEquals(actual_response_code, expected_response_code) + + def tearDown(self): + # Disconnect the database + database_utils.disconnect_database(self, self.server_id, self.db_id) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_get_children.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_get_children.py new file mode 100644 index 000000000..51d67ae60 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_get_children.py @@ -0,0 +1,84 @@ +########################################################################## +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2020, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +########################################################################## + +import uuid + +from pgadmin.browser.server_groups.servers.databases.tests import utils as \ + database_utils +from pgadmin.utils.route import BaseTestGenerator +from regression import parent_node_dict +from regression.python_test_utils import test_utils as utils +from . import utils as schema_utils +from unittest.mock import patch + + +class SchemaChildrenTestCase(BaseTestGenerator): + """ This class will add new schema under database node. """ + + scenarios = utils.generate_scenarios('schema_get_children', + schema_utils.test_cases) + + def setUp(self): + self.database_info = parent_node_dict["database"][-1] + self.db_name = self.database_info["db_name"] + # Change the db name, so that schema will create in newly created db + self.schema_name = "schema_get_%s" % str(uuid.uuid4())[1:8] + connection = utils.get_db_connection(self.db_name, + self.server['username'], + self.server['db_password'], + self.server['host'], + self.server['port']) + self.schema_details = schema_utils.create_schema(connection, + self.schema_name) + + def get_children(self): + """ + This function returns the schema children response + :return: schema children response + """ + + return self.tester.get(self.url + str(utils.SERVER_GROUP) + + '/' + str(self.server_id) + '/' + + str(self.db_id) + '/' + str(self.schema_id), + follow_redirects=True) + + def runTest(self): + """ This function will check children + of schema under database node. """ + self.server_id = self.database_info["server_id"] + self.db_id = self.database_info["db_id"] + db_con = database_utils.connect_database(self, utils.SERVER_GROUP, + self.server_id, self.db_id) + if not db_con['data']["connected"]: + raise Exception("Could not connect to database.") + + self.schema_id = self.schema_details[0] + schema_name = self.schema_details[1] + schema_response = schema_utils.verify_schemas(self.server, + self.db_name, + schema_name) + if not schema_response: + raise Exception("Could not find the schema.") + + if self.is_positive_test: + response = self.get_children() + else: + if hasattr(self, "error_in_db"): + return_value_object = eval(self.mock_data["return_value"]) + with patch(self.mock_data["function_name"], + side_effect=[return_value_object]): + response = self.get_children() + + actual_response_code = response.status_code + expected_response_code = self.expected_data['status_code'] + self.assertEquals(actual_response_code, expected_response_code) + + def tearDown(self): + # Disconnect the database + database_utils.disconnect_database(self, self.server_id, self.db_id) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_node.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_node.py new file mode 100644 index 000000000..10d3fccf1 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_node.py @@ -0,0 +1,86 @@ +########################################################################## +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2020, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +########################################################################## + +import uuid + +from pgadmin.browser.server_groups.servers.databases.tests import utils as \ + database_utils +from pgadmin.utils.route import BaseTestGenerator +from regression import parent_node_dict +from regression.python_test_utils import test_utils as utils +from . import utils as schema_utils +from unittest.mock import patch + + +class SchemaNodeAndNodesTestCase(BaseTestGenerator): + """ This class will add new schema under database node. """ + + scenarios = utils.generate_scenarios('schema_get_nodes', + schema_utils.test_cases) + + def setUp(self): + self.database_info = parent_node_dict["database"][-1] + self.db_name = self.database_info["db_name"] + # Change the db name, so that schema will create in newly created db + self.schema_name = "schema_get_%s" % str(uuid.uuid4())[1:8] + connection = utils.get_db_connection(self.db_name, + self.server['username'], + self.server['db_password'], + self.server['host'], + self.server['port']) + self.schema_details = schema_utils.create_schema(connection, + self.schema_name) + + def get_node_schema(self): + """ + This function returns the schema node response + :return: schema node response + """ + return self.tester.get(self.url + str(utils.SERVER_GROUP) + + '/' + str(self.server_id) + '/' + + str(self.db_id) + '/' + str(self.schema_id), + follow_redirects=True) + + def runTest(self): + """ This function will check node and nodes + of schema under database node. """ + self.server_id = self.database_info["server_id"] + self.db_id = self.database_info["db_id"] + db_con = database_utils.connect_database(self, utils.SERVER_GROUP, + self.server_id, self.db_id) + if not db_con['data']["connected"]: + raise Exception("Could not connect to database.") + + self.schema_id = self.schema_details[0] + schema_name = self.schema_details[1] + schema_response = schema_utils.verify_schemas(self.server, + self.db_name, + schema_name) + if not schema_response: + raise Exception("Could not find the schema.") + + if self.is_positive_test: + response = self.get_node_schema() + else: + if hasattr(self, "error_fetching_schema"): + with patch(self.mock_data["function_name"], + return_value=eval(self.mock_data["return_value"])): + response = self.get_node_schema() + + if hasattr(self, "wrong_schema_id"): + self.schema_id = 99999 + response = self.get_node_schema() + + actual_response_code = response.status_code + expected_response_code = self.expected_data['status_code'] + self.assertEquals(actual_response_code, expected_response_code) + + def tearDown(self): + # Disconnect the database + database_utils.disconnect_database(self, self.server_id, self.db_id) 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 index 405d2a20a..ed2385cc7 100644 --- 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 @@ -16,15 +16,15 @@ from pgadmin.utils.route import BaseTestGenerator from regression import parent_node_dict from regression.python_test_utils import test_utils as utils from . import utils as schema_utils +from unittest.mock import patch class SchemaPutTestCase(BaseTestGenerator): """ This class will update the schema under database node. """ skip_on_database = ['gpdb'] - scenarios = [ - # Fetching default URL for extension node. - ('Check Schema Node URL', dict(url='/browser/schema/obj/')) - ] + + scenarios = utils.generate_scenarios('schema_update', + schema_utils.test_cases) def setUp(self): super(SchemaPutTestCase, self).setUp() @@ -41,17 +41,27 @@ class SchemaPutTestCase(BaseTestGenerator): self.schema_details = schema_utils.create_schema(connection, self.schema_name) + def update_schema(self): + """ + This functions update schema + :return: schema update request details + """ + return self.tester.put( + self.url + str(utils.SERVER_GROUP) + '/' + str(self.server_id) + + '/' + str(self.db_id) + '/' + str(self.schema_id), + data=json.dumps(self.data), follow_redirects=True) + def runTest(self): - """ This function will delete schema under database node. """ + """ This function will check update schema under database node. """ - server_id = self.database_info["server_id"] - db_id = self.database_info["db_id"] + self.server_id = self.database_info["server_id"] + self.db_id = self.database_info["db_id"] db_con = database_utils.connect_database(self, utils.SERVER_GROUP, - server_id, db_id) + self.server_id, self.db_id) if not db_con['data']["connected"]: raise Exception("Could not connect to database to delete the" " schema.") - schema_id = self.schema_details[0] + self.schema_id = self.schema_details[0] schema_name = self.schema_details[1] schema_response = schema_utils.verify_schemas(self.server, self.db_name, @@ -60,7 +70,7 @@ class SchemaPutTestCase(BaseTestGenerator): raise Exception("Could not find the schema to update.") db_user = self.server["username"] - data = { + self.data = { "deffuncacl": { "added": [ @@ -127,16 +137,22 @@ class SchemaPutTestCase(BaseTestGenerator): } ] }, - "id": schema_id + "id": self.schema_id } - put_response = self.tester.put( - self.url + str(utils.SERVER_GROUP) + '/' + str(server_id) + - '/' + str(db_id) + '/' + str(schema_id), - data=json.dumps(data), follow_redirects=True) - self.assertEquals(put_response.status_code, 200) - # Disconnect the database - database_utils.disconnect_database(self, server_id, db_id) + if self.is_positive_test: + response = self.update_schema() + + else: + if hasattr(self, "error_in_db"): + with patch(self.mock_data["function_name"], + side_effect=eval(self.mock_data["return_value"])): + response = self.update_schema() + + actual_response_code = response.status_code + expected_response_code = self.expected_data['status_code'] + self.assertEquals(actual_response_code, expected_response_code) def tearDown(self): - pass + # Disconnect the database + database_utils.disconnect_database(self, self.server_id, self.db_id) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_sql.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_sql.py new file mode 100644 index 000000000..e956158ce --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_sql.py @@ -0,0 +1,88 @@ +########################################################################## +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2020, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +########################################################################## + +import uuid + +from pgadmin.browser.server_groups.servers.databases.tests import utils as \ + database_utils +from pgadmin.utils.route import BaseTestGenerator +from regression import parent_node_dict +from regression.python_test_utils import test_utils as utils +from . import utils as schema_utils +from unittest.mock import patch + + +class SchemaSQLTestCase(BaseTestGenerator): + """ This class will add new schema under database node. """ + + scenarios = utils.generate_scenarios('schema_get_sql', + schema_utils.test_cases) + + def setUp(self): + self.database_info = parent_node_dict["database"][-1] + self.db_name = self.database_info["db_name"] + # Change the db name, so that schema will create in newly created db + self.schema_name = "schema_get_%s" % str(uuid.uuid4())[1:8] + connection = utils.get_db_connection(self.db_name, + self.server['username'], + self.server['db_password'], + self.server['host'], + self.server['port']) + self.schema_details = schema_utils.create_schema(connection, + self.schema_name) + + def get_sql_node_schema(self): + """ + This function returns the schema sql response + :return: schema sql response + """ + return self.tester.get(self.url + str(utils.SERVER_GROUP) + + '/' + str(self.server_id) + '/' + + str(self.db_id) + '/' + str(self.schema_id), + follow_redirects=True) + + def runTest(self): + """ This function will check sql + of schema under database node. """ + self.server_id = self.database_info["server_id"] + self.db_id = self.database_info["db_id"] + db_con = database_utils.connect_database(self, utils.SERVER_GROUP, + self.server_id, self.db_id) + if not db_con['data']["connected"]: + raise Exception("Could not connect to database.") + + self.schema_id = self.schema_details[0] + schema_name = self.schema_details[1] + schema_response = schema_utils.verify_schemas(self.server, + self.db_name, + schema_name) + if not schema_response: + raise Exception("Could not find the schema.") + + if self.is_positive_test: + response = self.get_sql_node_schema() + + else: + if hasattr(self, "internal_server_error"): + return_value_object = eval(self.mock_data["return_value"]) + with patch(self.mock_data["function_name"], + side_effect=[return_value_object]): + response = self.get_sql_node_schema() + + if hasattr(self, "wrong_schema_id"): + self.schema_id = 99999 + response = self.get_sql_node_schema() + + actual_response_code = response.status_code + expected_response_code = self.expected_data['status_code'] + self.assertEquals(actual_response_code, expected_response_code) + + def tearDown(self): + # Disconnect the database + database_utils.disconnect_database(self, self.server_id, self.db_id) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/utils.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/utils.py index dac6df73e..caf3fecc8 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/utils.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/utils.py @@ -11,9 +11,15 @@ import sys import traceback import uuid +import os +import json from regression.python_test_utils import test_utils as utils +CURRENT_PATH = os.path.dirname(os.path.realpath(__file__)) +with open(CURRENT_PATH + "/schema_test_data.json") as data_file: + test_cases = json.load(data_file) + def get_schema_config_data(db_user): """This function is used to get advance config test data for schema"""