pgsql-test 2.11.0 → 2.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/admin.js +33 -0
  2. package/esm/admin.js +33 -0
  3. package/package.json +2 -2
package/admin.js CHANGED
@@ -105,17 +105,50 @@ class DbAdmin {
105
105
  const sql = `GRANT CONNECT ON DATABASE "${db}" TO ${role};`;
106
106
  await this.streamSql(sql, db);
107
107
  }
108
+ // TODO: make adminRole a configurable option
109
+ // ONLY granting admin role for testing purposes, normally the db connection for apps won't have admin role
110
+ // DO NOT USE THIS FOR PRODUCTION
108
111
  async createUserRole(user, password, dbName) {
109
112
  const anonRole = (0, roles_1.getRoleName)('anonymous', this.roleConfig);
110
113
  const authRole = (0, roles_1.getRoleName)('authenticated', this.roleConfig);
114
+ const adminRole = (0, roles_1.getRoleName)('administrator', this.roleConfig);
111
115
  const sql = `
112
116
  DO $$
113
117
  BEGIN
118
+ -- Create role if it doesn't exist
114
119
  IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = '${user}') THEN
115
120
  CREATE ROLE ${user} LOGIN PASSWORD '${password}';
121
+ END IF;
122
+
123
+ -- Grant anonymous role if not already granted
124
+ IF NOT EXISTS (
125
+ SELECT 1 FROM pg_auth_members am
126
+ JOIN pg_roles r1 ON am.roleid = r1.oid
127
+ JOIN pg_roles r2 ON am.member = r2.oid
128
+ WHERE r1.rolname = '${anonRole}' AND r2.rolname = '${user}'
129
+ ) THEN
116
130
  GRANT ${anonRole} TO ${user};
131
+ END IF;
132
+
133
+ -- Grant authenticated role if not already granted
134
+ IF NOT EXISTS (
135
+ SELECT 1 FROM pg_auth_members am
136
+ JOIN pg_roles r1 ON am.roleid = r1.oid
137
+ JOIN pg_roles r2 ON am.member = r2.oid
138
+ WHERE r1.rolname = '${authRole}' AND r2.rolname = '${user}'
139
+ ) THEN
117
140
  GRANT ${authRole} TO ${user};
118
141
  END IF;
142
+
143
+ -- Grant administrator role if not already granted
144
+ IF NOT EXISTS (
145
+ SELECT 1 FROM pg_auth_members am
146
+ JOIN pg_roles r1 ON am.roleid = r1.oid
147
+ JOIN pg_roles r2 ON am.member = r2.oid
148
+ WHERE r1.rolname = '${adminRole}' AND r2.rolname = '${user}'
149
+ ) THEN
150
+ GRANT ${adminRole} TO ${user};
151
+ END IF;
119
152
  END $$;
120
153
  `.trim();
121
154
  await this.streamSql(sql, dbName);
package/esm/admin.js CHANGED
@@ -102,17 +102,50 @@ export class DbAdmin {
102
102
  const sql = `GRANT CONNECT ON DATABASE "${db}" TO ${role};`;
103
103
  await this.streamSql(sql, db);
104
104
  }
105
+ // TODO: make adminRole a configurable option
106
+ // ONLY granting admin role for testing purposes, normally the db connection for apps won't have admin role
107
+ // DO NOT USE THIS FOR PRODUCTION
105
108
  async createUserRole(user, password, dbName) {
106
109
  const anonRole = getRoleName('anonymous', this.roleConfig);
107
110
  const authRole = getRoleName('authenticated', this.roleConfig);
111
+ const adminRole = getRoleName('administrator', this.roleConfig);
108
112
  const sql = `
109
113
  DO $$
110
114
  BEGIN
115
+ -- Create role if it doesn't exist
111
116
  IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = '${user}') THEN
112
117
  CREATE ROLE ${user} LOGIN PASSWORD '${password}';
118
+ END IF;
119
+
120
+ -- Grant anonymous role if not already granted
121
+ IF NOT EXISTS (
122
+ SELECT 1 FROM pg_auth_members am
123
+ JOIN pg_roles r1 ON am.roleid = r1.oid
124
+ JOIN pg_roles r2 ON am.member = r2.oid
125
+ WHERE r1.rolname = '${anonRole}' AND r2.rolname = '${user}'
126
+ ) THEN
113
127
  GRANT ${anonRole} TO ${user};
128
+ END IF;
129
+
130
+ -- Grant authenticated role if not already granted
131
+ IF NOT EXISTS (
132
+ SELECT 1 FROM pg_auth_members am
133
+ JOIN pg_roles r1 ON am.roleid = r1.oid
134
+ JOIN pg_roles r2 ON am.member = r2.oid
135
+ WHERE r1.rolname = '${authRole}' AND r2.rolname = '${user}'
136
+ ) THEN
114
137
  GRANT ${authRole} TO ${user};
115
138
  END IF;
139
+
140
+ -- Grant administrator role if not already granted
141
+ IF NOT EXISTS (
142
+ SELECT 1 FROM pg_auth_members am
143
+ JOIN pg_roles r1 ON am.roleid = r1.oid
144
+ JOIN pg_roles r2 ON am.member = r2.oid
145
+ WHERE r1.rolname = '${adminRole}' AND r2.rolname = '${user}'
146
+ ) THEN
147
+ GRANT ${adminRole} TO ${user};
148
+ END IF;
116
149
  END $$;
117
150
  `.trim();
118
151
  await this.streamSql(sql, dbName);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pgsql-test",
3
- "version": "2.11.0",
3
+ "version": "2.11.1",
4
4
  "author": "Dan Lynch <pyramation@gmail.com>",
5
5
  "description": "pgsql-test offers isolated, role-aware, and rollback-friendly PostgreSQL environments for integration tests — giving developers realistic test coverage without external state pollution",
6
6
  "main": "index.js",
@@ -69,5 +69,5 @@
69
69
  "pg-copy-streams": "^6.0.6",
70
70
  "pg-env": "^1.1.0"
71
71
  },
72
- "gitHead": "6b7bfcdaef0133012fd4b0cbe2aea185d77de3ed"
72
+ "gitHead": "720642536863e65eda54f91d69eccebca4ac07d1"
73
73
  }