Re: Resql test cases for views and fix for bug: 4650
Akshay Joshi <[email protected]>
| Newsgroups | gmane.comp.db.postgresql.pgadmin.devel |
|---|---|
| Message-ID | <CANxoLDch-vX4MydVUrq3aC8Y4=vTrw0M_-YOgjpdDP0heVLQow@mail.gmail.com> |
Hi Usman I have modified the code, please work on the following test cases: - No test case for privileges at all. - We should add alter test cases for check_option, security_barrier and privileges. Attached is the modified patch, please continue your work on it. On Tue, Aug 27, 2019 at 12:12 PM Usman Muzaffar < [email protected]> wrote: > Just a correction, bug reference in above mail should be *4486* instead > of *4650*. > > On Mon, Aug 26, 2019 at 7:50 PM Usman Muzaffar < > [email protected]> wrote: > >> Hi Hackers, >> >> Please find here attached patch for sql re engineering test cases for >> views node. As part of this patch I have also incorported followings >> >> - Fix for bug # 4650 >> - Also modified views/template/create.sql due to which, apparently >> same output and input was not matching for test cases. >> >> Following are verified before sending the patch >> >> - yarn run pep8 >> - verified test cases on all pg/ppas server e.g. pg 9.4 to 11 and >> ppas 9.4 to 11. >> >> >> -- >> >> >> Thanks, >> >> Usman Muzaffar >> QA Team >> EnterpriseDB Corporation >> > > > -- > > > Thanks, > > Usman Muzaffar > QA Team > EnterpriseDB Corporation > -- *Thanks & Regards* *Akshay Joshi* *Sr. Software Architect* *EnterpriseDB Software India Private Limited* *Mobile: +91 976-788-8246*
Modified_4576.patch
(application/octet-stream, 21.6 KB)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/9.1_plus/sql/view_id.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/9.1_plus/sql/view_id.sql
index 64181cd6..4916e090 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/9.1_plus/sql/view_id.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/9.1_plus/sql/view_id.sql
@@ -2,5 +2,5 @@
{% if data %}
SELECT c.oid, c.relname FROM pg_class c
LEFT OUTER JOIN pg_namespace nsp on nsp.oid = c.relnamespace
-WHERE c.relname = '{{ data.name }}' and nsp.nspname = '{{ data.schema }}';
+WHERE c.relname = {{ data.name |qtLiteral }} and nsp.nspname = '{{ data.schema }}';
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/9.2_plus/sql/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/9.2_plus/sql/create.sql
index 8d5f729f..3e04ea1d 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/9.2_plus/sql/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/9.2_plus/sql/create.sql
@@ -6,9 +6,9 @@
{% endif %}
{% if data.name and data.schema and data.definition %}
-CREATE OR REPLACE VIEW {{ conn|qtIdent(data.schema, data.name) }}{% if (data.security_barrier) %}{{'\r'}}
+CREATE OR REPLACE VIEW {{ conn|qtIdent(data.schema, data.name) }}{% if (data.security_barrier) %}
WITH (
-{% if data.security_barrier %} security_barrier={{ data.security_barrier|lower }}{% endif %}{{'\r'}}
+{% if data.security_barrier %} security_barrier={{ data.security_barrier|lower }}{% endif %}
){% endif %} AS
{{ data.definition.rstrip(';') }};
{% if data.owner %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/9.2_plus/sql/view_id.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/9.2_plus/sql/view_id.sql
index 64181cd6..4916e090 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/9.2_plus/sql/view_id.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/9.2_plus/sql/view_id.sql
@@ -2,5 +2,5 @@
{% if data %}
SELECT c.oid, c.relname FROM pg_class c
LEFT OUTER JOIN pg_namespace nsp on nsp.oid = c.relnamespace
-WHERE c.relname = '{{ data.name }}' and nsp.nspname = '{{ data.schema }}';
+WHERE c.relname = {{ data.name |qtLiteral }} and nsp.nspname = '{{ data.schema }}';
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/9.3_plus/sql/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/9.3_plus/sql/create.sql
index d1eec086..e5068b25 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/9.3_plus/sql/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/9.3_plus/sql/create.sql
@@ -6,9 +6,9 @@
{% endif %}
{% if data.name and data.schema and data.definition %}
-CREATE OR REPLACE VIEW {{ conn|qtIdent(data.schema, data.name) }}{% if (data.security_barrier) %}{{'\r'}}
+CREATE OR REPLACE VIEW {{ conn|qtIdent(data.schema, data.name) }}{% if (data.security_barrier) %}
WITH (
-{% if data.security_barrier %} security_barrier={{ data.security_barrier|lower }}{% endif %}{{'\r'}}
+{% if data.security_barrier %} security_barrier={{ data.security_barrier|lower }}{% endif %}
){% endif %} AS
{{ data.definition.rstrip(';') }};
{% if data.owner %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/9.3_plus/sql/view_id.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/9.3_plus/sql/view_id.sql
index 64181cd6..4916e090 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/9.3_plus/sql/view_id.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/9.3_plus/sql/view_id.sql
@@ -2,5 +2,5 @@
{% if data %}
SELECT c.oid, c.relname FROM pg_class c
LEFT OUTER JOIN pg_namespace nsp on nsp.oid = c.relnamespace
-WHERE c.relname = '{{ data.name }}' and nsp.nspname = '{{ data.schema }}';
+WHERE c.relname = {{ data.name |qtLiteral }} and nsp.nspname = '{{ data.schema }}';
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/9.4_plus/sql/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/9.4_plus/sql/create.sql
index b43b5198..3d8ae374 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/9.4_plus/sql/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/9.4_plus/sql/create.sql
@@ -6,8 +6,14 @@
{% endif %}
{% if data.name and data.schema and data.definition %}
-CREATE OR REPLACE VIEW {{ conn|qtIdent(data.schema, data.name) }}{% if ((data.check_option and data.check_option.lower() != 'no') or data.security_barrier) %}{{ '\n' }}WITH (
-{% if data.check_option and data.check_option.lower() != 'no' %} check_option={{ data.check_option }}{% endif %}{{ ',\r' if data.check_option and data.check_option.lower() != 'no' and data.security_barrier }}{% if data.security_barrier %} security_barrier={{ data.security_barrier|lower }}{% endif %}{{'\r'}}
+CREATE OR REPLACE VIEW {{ conn|qtIdent(data.schema, data.name) }}
+{% if ((data.check_option and data.check_option.lower() != 'no') or data.security_barrier) %}
+WITH ({% if data.check_option and data.check_option.lower() != 'no' %}
+
+ check_option={{ data.check_option }}{% endif %}{{ ',' if data.check_option and data.check_option.lower() != 'no' and data.security_barrier }}
+{% if data.security_barrier %}
+ security_barrier={{ data.security_barrier|lower }}
+{% endif %}
){% endif %} AS
{{ data.definition.rstrip(';') }};
{% if data.owner and data.m_view is undefined %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/9.4_plus/sql/view_id.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/9.4_plus/sql/view_id.sql
index 64181cd6..4916e090 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/9.4_plus/sql/view_id.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/9.4_plus/sql/view_id.sql
@@ -2,5 +2,5 @@
{% if data %}
SELECT c.oid, c.relname FROM pg_class c
LEFT OUTER JOIN pg_namespace nsp on nsp.oid = c.relnamespace
-WHERE c.relname = '{{ data.name }}' and nsp.nspname = '{{ data.schema }}';
+WHERE c.relname = {{ data.name |qtLiteral }} and nsp.nspname = '{{ data.schema }}';
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/9.1_plus/sql/view_id.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/9.1_plus/sql/view_id.sql
index 64181cd6..44504748 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/9.1_plus/sql/view_id.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/9.1_plus/sql/view_id.sql
@@ -2,5 +2,5 @@
{% if data %}
SELECT c.oid, c.relname FROM pg_class c
LEFT OUTER JOIN pg_namespace nsp on nsp.oid = c.relnamespace
-WHERE c.relname = '{{ data.name }}' and nsp.nspname = '{{ data.schema }}';
+WHERE c.relname = {{ data.name|qtLiteral }} and nsp.nspname = '{{ data.schema }}';
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/9.2_plus/sql/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/9.2_plus/sql/create.sql
index d1eec086..e5068b25 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/9.2_plus/sql/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/9.2_plus/sql/create.sql
@@ -6,9 +6,9 @@
{% endif %}
{% if data.name and data.schema and data.definition %}
-CREATE OR REPLACE VIEW {{ conn|qtIdent(data.schema, data.name) }}{% if (data.security_barrier) %}{{'\r'}}
+CREATE OR REPLACE VIEW {{ conn|qtIdent(data.schema, data.name) }}{% if (data.security_barrier) %}
WITH (
-{% if data.security_barrier %} security_barrier={{ data.security_barrier|lower }}{% endif %}{{'\r'}}
+{% if data.security_barrier %} security_barrier={{ data.security_barrier|lower }}{% endif %}
){% endif %} AS
{{ data.definition.rstrip(';') }};
{% if data.owner %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/9.2_plus/sql/view_id.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/9.2_plus/sql/view_id.sql
index 64181cd6..44504748 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/9.2_plus/sql/view_id.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/9.2_plus/sql/view_id.sql
@@ -2,5 +2,5 @@
{% if data %}
SELECT c.oid, c.relname FROM pg_class c
LEFT OUTER JOIN pg_namespace nsp on nsp.oid = c.relnamespace
-WHERE c.relname = '{{ data.name }}' and nsp.nspname = '{{ data.schema }}';
+WHERE c.relname = {{ data.name|qtLiteral }} and nsp.nspname = '{{ data.schema }}';
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/9.3_plus/sql/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/9.3_plus/sql/create.sql
index d1eec086..e5068b25 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/9.3_plus/sql/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/9.3_plus/sql/create.sql
@@ -6,9 +6,9 @@
{% endif %}
{% if data.name and data.schema and data.definition %}
-CREATE OR REPLACE VIEW {{ conn|qtIdent(data.schema, data.name) }}{% if (data.security_barrier) %}{{'\r'}}
+CREATE OR REPLACE VIEW {{ conn|qtIdent(data.schema, data.name) }}{% if (data.security_barrier) %}
WITH (
-{% if data.security_barrier %} security_barrier={{ data.security_barrier|lower }}{% endif %}{{'\r'}}
+{% if data.security_barrier %} security_barrier={{ data.security_barrier|lower }}{% endif %}
){% endif %} AS
{{ data.definition.rstrip(';') }};
{% if data.owner %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/9.3_plus/sql/view_id.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/9.3_plus/sql/view_id.sql
index 64181cd6..44504748 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/9.3_plus/sql/view_id.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/9.3_plus/sql/view_id.sql
@@ -2,5 +2,5 @@
{% if data %}
SELECT c.oid, c.relname FROM pg_class c
LEFT OUTER JOIN pg_namespace nsp on nsp.oid = c.relnamespace
-WHERE c.relname = '{{ data.name }}' and nsp.nspname = '{{ data.schema }}';
+WHERE c.relname = {{ data.name|qtLiteral }} and nsp.nspname = '{{ data.schema }}';
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/9.4_plus/sql/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/9.4_plus/sql/create.sql
index b43b5198..3d8ae374 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/9.4_plus/sql/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/9.4_plus/sql/create.sql
@@ -6,8 +6,14 @@
{% endif %}
{% if data.name and data.schema and data.definition %}
-CREATE OR REPLACE VIEW {{ conn|qtIdent(data.schema, data.name) }}{% if ((data.check_option and data.check_option.lower() != 'no') or data.security_barrier) %}{{ '\n' }}WITH (
-{% if data.check_option and data.check_option.lower() != 'no' %} check_option={{ data.check_option }}{% endif %}{{ ',\r' if data.check_option and data.check_option.lower() != 'no' and data.security_barrier }}{% if data.security_barrier %} security_barrier={{ data.security_barrier|lower }}{% endif %}{{'\r'}}
+CREATE OR REPLACE VIEW {{ conn|qtIdent(data.schema, data.name) }}
+{% if ((data.check_option and data.check_option.lower() != 'no') or data.security_barrier) %}
+WITH ({% if data.check_option and data.check_option.lower() != 'no' %}
+
+ check_option={{ data.check_option }}{% endif %}{{ ',' if data.check_option and data.check_option.lower() != 'no' and data.security_barrier }}
+{% if data.security_barrier %}
+ security_barrier={{ data.security_barrier|lower }}
+{% endif %}
){% endif %} AS
{{ data.definition.rstrip(';') }};
{% if data.owner and data.m_view is undefined %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/9.4_plus/sql/view_id.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/9.4_plus/sql/view_id.sql
index 64181cd6..a6d9b0b2 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/9.4_plus/sql/view_id.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/9.4_plus/sql/view_id.sql
@@ -2,5 +2,5 @@
{% if data %}
SELECT c.oid, c.relname FROM pg_class c
LEFT OUTER JOIN pg_namespace nsp on nsp.oid = c.relnamespace
-WHERE c.relname = '{{ data.name }}' and nsp.nspname = '{{ data.schema }}';
+WHERE c.relname = {{ data.name|qtLiteral }} and nsp.nspname = '{{ data.schema}}';
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/pg/9.4_plus/alter_view.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/pg/9.4_plus/alter_view.sql
new file mode 100644
index 00000000..9c3993ce
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/pg/9.4_plus/alter_view.sql
@@ -0,0 +1,16 @@
+-- View: public."testview_$%{}[]()&*^!@""'`\/#"
+
+-- DROP VIEW public."testview_$%{}[]()&*^!@""'`\/#";
+
+CREATE OR REPLACE VIEW public."testview_$%{}[]()&*^!@""'`\/#"
+WITH (
+ check_option=local,
+ security_barrier=true
+) AS
+ SELECT test_view_table.col1
+ FROM test_view_table;
+
+ALTER TABLE public."testview_$%{}[]()&*^!@""'`\/#"
+ OWNER TO postgres;
+COMMENT ON VIEW public."testview_$%{}[]()&*^!@""'`\/#"
+ IS 'Testcomment-updated';
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/pg/9.4_plus/create_view.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/pg/9.4_plus/create_view.sql
new file mode 100644
index 00000000..3fcf8681
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/pg/9.4_plus/create_view.sql
@@ -0,0 +1,16 @@
+-- View: public."testview_$%{}[]()&*^!@""'`\/#"
+
+-- DROP VIEW public."testview_$%{}[]()&*^!@""'`\/#";
+
+CREATE OR REPLACE VIEW public."testview_$%{}[]()&*^!@""'`\/#"
+WITH (
+ check_option=local,
+ security_barrier=true
+) AS
+ SELECT test_view_table.col1
+ FROM test_view_table;
+
+ALTER TABLE public."testview_$%{}[]()&*^!@""'`\/#"
+ OWNER TO postgres;
+COMMENT ON VIEW public."testview_$%{}[]()&*^!@""'`\/#"
+ IS 'Testcomment';
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/pg/9.4_plus/tests.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/pg/9.4_plus/tests.json
new file mode 100644
index 00000000..1767f5b4
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/pg/9.4_plus/tests.json
@@ -0,0 +1,74 @@
+{
+ "scenarios": [
+ {
+ "type": "create",
+ "name": "Create Table for Views",
+ "endpoint": "NODE-table.obj",
+ "sql_endpoint": "NODE-table.sql_id",
+ "data": {
+ "name": "test_view_table",
+ "check_constraint": [],
+ "coll_inherits": "[]",
+ "columns": [
+ {
+ "name": "col1",
+ "cltype": "integer"
+ }
+ ],
+ "schema": "public"
+ }
+ },
+ {
+ "type": "create",
+ "name": "Create View",
+ "endpoint": "NODE-view.obj",
+ "sql_endpoint": "NODE-view.sql_id",
+ "data": {
+ "definition": "select col1 from test_view_table;",
+ "name": "testview_$%{}[]()&*^!@\"'`\\/#",
+ "owner": "postgres",
+ "schema": "public",
+ "check_option": "local",
+ "security_barrier": true,
+ "comment":"Testcomment"
+ },
+ "expected_sql_file": "create_view.sql"
+ },
+ {
+ "type": "alter",
+ "name": "Alter View",
+ "endpoint": "NODE-view.obj_id",
+ "sql_endpoint": "NODE-view.sql_id",
+ "data": {
+ "definition": "select col1 from test_view_table;",
+ "name": "testview_$%{}[]()&*^!@\"'`\\/#",
+ "owner": "postgres",
+ "schema": "public",
+ "check_option": "local",
+ "security_barrier": true,
+ "comment":"Testcomment-updated"
+ },
+ "expected_sql_file": "alter_view.sql"
+ },
+ {
+ "type": "delete",
+ "name": "Drop View",
+ "endpoint": "NODE-view.obj_id",
+ "data": {
+ "name": "testview_$%{}[]()&*^!@\"'`\\/#",
+ "owner": "postgres",
+ "schema": "public"
+ }
+ },
+ {
+ "type": "delete",
+ "name": "Drop Table for view",
+ "endpoint": "NODE-table.obj_id",
+ "data": {
+ "name": "test_view_table",
+ "owner": "postgres",
+ "schema": "public"
+ }
+ }
+ ]
+}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/ppas/9.4_plus/alter_view.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/ppas/9.4_plus/alter_view.sql
new file mode 100644
index 00000000..5c66f3af
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/ppas/9.4_plus/alter_view.sql
@@ -0,0 +1,16 @@
+-- View: public."testview1_$%{}[]()&*^!@""'`\/#"
+
+-- DROP VIEW public."testview1_$%{}[]()&*^!@""'`\/#";
+
+CREATE OR REPLACE VIEW public."testview1_$%{}[]()&*^!@""'`\/#"
+WITH (
+ check_option=local,
+ security_barrier=true
+) AS
+ SELECT test_view_table.col1
+ FROM test_view_table;
+
+ALTER TABLE public."testview1_$%{}[]()&*^!@""'`\/#"
+ OWNER TO enterprisedb;
+COMMENT ON VIEW public."testview1_$%{}[]()&*^!@""'`\/#"
+ IS 'Testcomment-updated';
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/ppas/9.4_plus/create_view.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/ppas/9.4_plus/create_view.sql
new file mode 100644
index 00000000..eac5692f
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/ppas/9.4_plus/create_view.sql
@@ -0,0 +1,16 @@
+-- View: public."testview_$%{}[]()&*^!@""'`\/#"
+
+-- DROP VIEW public."testview_$%{}[]()&*^!@""'`\/#";
+
+CREATE OR REPLACE VIEW public."testview_$%{}[]()&*^!@""'`\/#"
+WITH (
+ check_option=local,
+ security_barrier=true
+) AS
+ SELECT test_view_table.col1
+ FROM test_view_table;
+
+ALTER TABLE public."testview_$%{}[]()&*^!@""'`\/#"
+ OWNER TO enterprisedb;
+COMMENT ON VIEW public."testview_$%{}[]()&*^!@""'`\/#"
+ IS 'Testcomment';
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/ppas/9.4_plus/tests.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/ppas/9.4_plus/tests.json
new file mode 100644
index 00000000..042238ea
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/ppas/9.4_plus/tests.json
@@ -0,0 +1,71 @@
+{
+ "scenarios": [{
+ "type": "create",
+ "name": "Create Table for Views",
+ "endpoint": "NODE-table.obj",
+ "sql_endpoint": "NODE-table.sql_id",
+ "data":{
+ "name":"test_view_table",
+ "check_constraint": [],
+ "coll_inherits": "[]",
+ "columns": [
+ {
+ "name": "col1",
+ "cltype": "integer"
+ }
+ ],
+ "schema": "public"
+ }
+ },
+ {
+ "type": "create",
+ "name": "Create View",
+ "endpoint": "NODE-view.obj",
+ "sql_endpoint": "NODE-view.sql_id",
+ "data": {
+ "definition": "select col1 from test_view_table;",
+ "name": "testview_$%{}[]()&*^!@\"'`\\/#",
+ "owner": "enterprisedb",
+ "schema": "public",
+ "check_option": "local",
+ "security_barrier": true,
+ "comment":"Testcomment"
+ },
+ "expected_sql_file": "create_view.sql"
+ },
+ {
+ "type": "alter",
+ "name": "Alter View",
+ "endpoint": "NODE-view.obj_id",
+ "sql_endpoint": "NODE-view.sql_id",
+ "data": {
+ "definition": "select col1 from test_view_table;",
+ "name": "testview1_$%{}[]()&*^!@\"'`\\/#",
+ "owner": "enterprisedb",
+ "schema": "public",
+ "security_barrier":true,
+ "comment":"Testcomment-updated"
+ },
+ "expected_sql_file": "alter_view.sql"
+ },
+ {
+ "type": "delete",
+ "name": "Drop View",
+ "endpoint": "NODE-view.obj_id",
+ "data": {
+ "name": "testview1_$%{}[]()&*^!@\"'`\\/#",
+ "owner": "enterprisedb",
+ "schema": "public"
+ }
+ },
+ {
+ "type": "delete",
+ "name": "Drop Table for Views",
+ "endpoint": "NODE-table.obj_id",
+ "data": {
+ "name": "test_view_table",
+ "owner": "enterprisedb",
+ "schema": "public"
+ }
+ }]
+}