mirror of
https://github.com/supabase/supabase.git
synced 2026-10-15 22:29:11 +03:00
chore(pg-meta): migrate table-privileges tests (#33506)
* chore(pg-meta): port functions tests
* chore: add new test for CURRENT arg creation
* chore: revert query style change
* chore: restore PGFunction type inference
* wip: remove type cast int8 on arg_types
* Revert "wip: remove type cast int8 on arg_types"
This reverts commit 6878a93bfb.
* wip: make tests work with both clients
* chore: use pg and type parser
* chore: use only pg
* chore: migrate table-privileges tests
This commit is contained in:
1 parent
b30075d71c
commit
d0bd54636c
1 file changed
+389
@@ -0,0 +1,389 @@
|
||||
import { expect, test, beforeAll, afterAll } from 'vitest'
|
||||
import pgMeta from '../src/index'
|
||||
import { createTestDatabase, cleanupRoot } from './db/utils'
|
||||
|
||||
beforeAll(async () => {
|
||||
// Any global setup if needed
|
||||
})
|
||||
|
||||
afterAll(async () => {
|
||||
await cleanupRoot()
|
||||
})
|
||||
|
||||
const withTestDatabase = (
|
||||
name: string,
|
||||
fn: (db: Awaited<ReturnType<typeof createTestDatabase>>) => Promise<void>
|
||||
) => {
|
||||
test(name, async () => {
|
||||
const db = await createTestDatabase()
|
||||
try {
|
||||
await fn(db)
|
||||
} finally {
|
||||
await db.cleanup()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
withTestDatabase('list table privileges', async ({ executeQuery }) => {
|
||||
const { sql, zod } = await pgMeta.tablePrivileges.list()
|
||||
const res = zod.parse(await executeQuery(sql))
|
||||
|
||||
expect(
|
||||
res.find(({ schema, name }) => schema === 'public' && name === 'todos')
|
||||
).toMatchInlineSnapshot(
|
||||
{ relation_id: expect.any(Number) },
|
||||
`
|
||||
{
|
||||
"kind": "table",
|
||||
"name": "todos",
|
||||
"privileges": [
|
||||
{
|
||||
"grantee": "postgres",
|
||||
"grantor": "postgres",
|
||||
"is_grantable": false,
|
||||
"privilege_type": "INSERT",
|
||||
},
|
||||
{
|
||||
"grantee": "postgres",
|
||||
"grantor": "postgres",
|
||||
"is_grantable": false,
|
||||
"privilege_type": "SELECT",
|
||||
},
|
||||
{
|
||||
"grantee": "postgres",
|
||||
"grantor": "postgres",
|
||||
"is_grantable": false,
|
||||
"privilege_type": "UPDATE",
|
||||
},
|
||||
{
|
||||
"grantee": "postgres",
|
||||
"grantor": "postgres",
|
||||
"is_grantable": false,
|
||||
"privilege_type": "DELETE",
|
||||
},
|
||||
{
|
||||
"grantee": "postgres",
|
||||
"grantor": "postgres",
|
||||
"is_grantable": false,
|
||||
"privilege_type": "TRUNCATE",
|
||||
},
|
||||
{
|
||||
"grantee": "postgres",
|
||||
"grantor": "postgres",
|
||||
"is_grantable": false,
|
||||
"privilege_type": "REFERENCES",
|
||||
},
|
||||
{
|
||||
"grantee": "postgres",
|
||||
"grantor": "postgres",
|
||||
"is_grantable": false,
|
||||
"privilege_type": "TRIGGER",
|
||||
},
|
||||
],
|
||||
"relation_id": Any<Number>,
|
||||
"schema": "public",
|
||||
}
|
||||
`
|
||||
)
|
||||
})
|
||||
|
||||
withTestDatabase('revoke & grant table privileges', async ({ executeQuery }) => {
|
||||
// Get initial table privileges
|
||||
const { sql: listSql, zod: listZod } = await pgMeta.tablePrivileges.list()
|
||||
const listRes = listZod.parse(await executeQuery(listSql))
|
||||
const { relation_id } = listRes.find(
|
||||
({ schema, name }) => schema === 'public' && name === 'todos'
|
||||
)!
|
||||
|
||||
// Revoke all privileges
|
||||
const { sql: revokeSql } = pgMeta.tablePrivileges.revoke([
|
||||
{
|
||||
relationId: relation_id,
|
||||
grantee: 'postgres',
|
||||
privilegeType: 'ALL',
|
||||
},
|
||||
])
|
||||
await executeQuery(revokeSql)
|
||||
|
||||
// Verify privileges were revoked
|
||||
const { sql: retrieveSql, zod: retrieveZod } = await pgMeta.tablePrivileges.retrieve({
|
||||
id: relation_id,
|
||||
})
|
||||
let privs = retrieveZod.parse((await executeQuery(retrieveSql))[0])
|
||||
expect(privs).toMatchInlineSnapshot(
|
||||
{ relation_id: expect.any(Number) },
|
||||
`
|
||||
{
|
||||
"kind": "table",
|
||||
"name": "todos",
|
||||
"privileges": [],
|
||||
"relation_id": Any<Number>,
|
||||
"schema": "public",
|
||||
}
|
||||
`
|
||||
)
|
||||
|
||||
// Grant all privileges back
|
||||
const { sql: grantSql } = pgMeta.tablePrivileges.grant([
|
||||
{
|
||||
relationId: relation_id,
|
||||
grantee: 'postgres',
|
||||
privilegeType: 'ALL',
|
||||
},
|
||||
])
|
||||
await executeQuery(grantSql)
|
||||
|
||||
// Verify privileges were granted
|
||||
const { sql: verifyGrantSql } = await pgMeta.tablePrivileges.retrieve({ id: relation_id })
|
||||
privs = retrieveZod.parse((await executeQuery(verifyGrantSql))[0])
|
||||
expect(privs).toMatchInlineSnapshot(
|
||||
{ relation_id: expect.any(Number) },
|
||||
`
|
||||
{
|
||||
"kind": "table",
|
||||
"name": "todos",
|
||||
"privileges": [
|
||||
{
|
||||
"grantee": "postgres",
|
||||
"grantor": "postgres",
|
||||
"is_grantable": false,
|
||||
"privilege_type": "TRIGGER",
|
||||
},
|
||||
{
|
||||
"grantee": "postgres",
|
||||
"grantor": "postgres",
|
||||
"is_grantable": false,
|
||||
"privilege_type": "REFERENCES",
|
||||
},
|
||||
{
|
||||
"grantee": "postgres",
|
||||
"grantor": "postgres",
|
||||
"is_grantable": false,
|
||||
"privilege_type": "TRUNCATE",
|
||||
},
|
||||
{
|
||||
"grantee": "postgres",
|
||||
"grantor": "postgres",
|
||||
"is_grantable": false,
|
||||
"privilege_type": "DELETE",
|
||||
},
|
||||
{
|
||||
"grantee": "postgres",
|
||||
"grantor": "postgres",
|
||||
"is_grantable": false,
|
||||
"privilege_type": "UPDATE",
|
||||
},
|
||||
{
|
||||
"grantee": "postgres",
|
||||
"grantor": "postgres",
|
||||
"is_grantable": false,
|
||||
"privilege_type": "SELECT",
|
||||
},
|
||||
{
|
||||
"grantee": "postgres",
|
||||
"grantor": "postgres",
|
||||
"is_grantable": false,
|
||||
"privilege_type": "INSERT",
|
||||
},
|
||||
],
|
||||
"relation_id": Any<Number>,
|
||||
"schema": "public",
|
||||
}
|
||||
`
|
||||
)
|
||||
})
|
||||
|
||||
withTestDatabase(
|
||||
'revoke & grant table privileges w/ quoted table name',
|
||||
async ({ executeQuery }) => {
|
||||
// Create test role and schema
|
||||
await executeQuery(`create role r; create schema "s 1"; create table "s 1"."t 1"();`)
|
||||
|
||||
// Get table privileges
|
||||
const { sql: listSql, zod: listZod } = await pgMeta.tablePrivileges.list()
|
||||
const listRes = listZod.parse(await executeQuery(listSql))
|
||||
const { relation_id } = listRes.find(({ schema, name }) => schema === 's 1' && name === 't 1')!
|
||||
|
||||
// Grant all privileges
|
||||
const { sql: grantSql } = pgMeta.tablePrivileges.grant([
|
||||
{
|
||||
relationId: relation_id,
|
||||
grantee: 'r',
|
||||
privilegeType: 'ALL',
|
||||
},
|
||||
])
|
||||
await executeQuery(grantSql)
|
||||
|
||||
// Verify privileges were granted
|
||||
const { sql: retrieveSql, zod: retrieveZod } = await pgMeta.tablePrivileges.retrieve({
|
||||
id: relation_id,
|
||||
})
|
||||
let privs = retrieveZod.parse((await executeQuery(retrieveSql))[0])
|
||||
expect(privs).toMatchInlineSnapshot(
|
||||
{ relation_id: expect.any(Number) },
|
||||
`
|
||||
{
|
||||
"kind": "table",
|
||||
"name": "t 1",
|
||||
"privileges": [
|
||||
{
|
||||
"grantee": "postgres",
|
||||
"grantor": "postgres",
|
||||
"is_grantable": false,
|
||||
"privilege_type": "TRIGGER",
|
||||
},
|
||||
{
|
||||
"grantee": "postgres",
|
||||
"grantor": "postgres",
|
||||
"is_grantable": false,
|
||||
"privilege_type": "REFERENCES",
|
||||
},
|
||||
{
|
||||
"grantee": "postgres",
|
||||
"grantor": "postgres",
|
||||
"is_grantable": false,
|
||||
"privilege_type": "TRUNCATE",
|
||||
},
|
||||
{
|
||||
"grantee": "postgres",
|
||||
"grantor": "postgres",
|
||||
"is_grantable": false,
|
||||
"privilege_type": "DELETE",
|
||||
},
|
||||
{
|
||||
"grantee": "postgres",
|
||||
"grantor": "postgres",
|
||||
"is_grantable": false,
|
||||
"privilege_type": "UPDATE",
|
||||
},
|
||||
{
|
||||
"grantee": "postgres",
|
||||
"grantor": "postgres",
|
||||
"is_grantable": false,
|
||||
"privilege_type": "SELECT",
|
||||
},
|
||||
{
|
||||
"grantee": "postgres",
|
||||
"grantor": "postgres",
|
||||
"is_grantable": false,
|
||||
"privilege_type": "INSERT",
|
||||
},
|
||||
{
|
||||
"grantee": "r",
|
||||
"grantor": "postgres",
|
||||
"is_grantable": false,
|
||||
"privilege_type": "TRIGGER",
|
||||
},
|
||||
{
|
||||
"grantee": "r",
|
||||
"grantor": "postgres",
|
||||
"is_grantable": false,
|
||||
"privilege_type": "REFERENCES",
|
||||
},
|
||||
{
|
||||
"grantee": "r",
|
||||
"grantor": "postgres",
|
||||
"is_grantable": false,
|
||||
"privilege_type": "TRUNCATE",
|
||||
},
|
||||
{
|
||||
"grantee": "r",
|
||||
"grantor": "postgres",
|
||||
"is_grantable": false,
|
||||
"privilege_type": "DELETE",
|
||||
},
|
||||
{
|
||||
"grantee": "r",
|
||||
"grantor": "postgres",
|
||||
"is_grantable": false,
|
||||
"privilege_type": "UPDATE",
|
||||
},
|
||||
{
|
||||
"grantee": "r",
|
||||
"grantor": "postgres",
|
||||
"is_grantable": false,
|
||||
"privilege_type": "SELECT",
|
||||
},
|
||||
{
|
||||
"grantee": "r",
|
||||
"grantor": "postgres",
|
||||
"is_grantable": false,
|
||||
"privilege_type": "INSERT",
|
||||
},
|
||||
],
|
||||
"relation_id": Any<Number>,
|
||||
"schema": "s 1",
|
||||
}
|
||||
`
|
||||
)
|
||||
|
||||
// Revoke all privileges
|
||||
const { sql: revokeSql } = pgMeta.tablePrivileges.revoke([
|
||||
{
|
||||
relationId: relation_id,
|
||||
grantee: 'r',
|
||||
privilegeType: 'ALL',
|
||||
},
|
||||
])
|
||||
await executeQuery(revokeSql)
|
||||
|
||||
// Verify privileges were revoked
|
||||
const { sql: verifyRevokeSql } = await pgMeta.tablePrivileges.retrieve({ id: relation_id })
|
||||
privs = retrieveZod.parse((await executeQuery(verifyRevokeSql))[0])
|
||||
expect(privs).toMatchInlineSnapshot(
|
||||
{ relation_id: expect.any(Number) },
|
||||
`
|
||||
{
|
||||
"kind": "table",
|
||||
"name": "t 1",
|
||||
"privileges": [
|
||||
{
|
||||
"grantee": "postgres",
|
||||
"grantor": "postgres",
|
||||
"is_grantable": false,
|
||||
"privilege_type": "TRIGGER",
|
||||
},
|
||||
{
|
||||
"grantee": "postgres",
|
||||
"grantor": "postgres",
|
||||
"is_grantable": false,
|
||||
"privilege_type": "REFERENCES",
|
||||
},
|
||||
{
|
||||
"grantee": "postgres",
|
||||
"grantor": "postgres",
|
||||
"is_grantable": false,
|
||||
"privilege_type": "TRUNCATE",
|
||||
},
|
||||
{
|
||||
"grantee": "postgres",
|
||||
"grantor": "postgres",
|
||||
"is_grantable": false,
|
||||
"privilege_type": "DELETE",
|
||||
},
|
||||
{
|
||||
"grantee": "postgres",
|
||||
"grantor": "postgres",
|
||||
"is_grantable": false,
|
||||
"privilege_type": "UPDATE",
|
||||
},
|
||||
{
|
||||
"grantee": "postgres",
|
||||
"grantor": "postgres",
|
||||
"is_grantable": false,
|
||||
"privilege_type": "SELECT",
|
||||
},
|
||||
{
|
||||
"grantee": "postgres",
|
||||
"grantor": "postgres",
|
||||
"is_grantable": false,
|
||||
"privilege_type": "INSERT",
|
||||
},
|
||||
],
|
||||
"relation_id": Any<Number>,
|
||||
"schema": "s 1",
|
||||
}
|
||||
`
|
||||
)
|
||||
}
|
||||
)
|
||||
Reference in new issue
Block a user