mirror of
https://github.com/supabase/supabase.git
synced 2026-10-12 21:05:06 +03:00
* Fix some missing and duplicate dependencies. * Fix the types for jest in ai-commands package. * Replace all npm commands with pnpm. Add pnpm files and workspace links. * Fix rimraf to work with pnpm. * Refactor the github actions to work with pnpm. * Delete package-lock.json. * Fix the tailwind configs to not include node_modules. * Fix random files. * Add preinstall scripts to all packages. * Fix the Dockerfile to work with pnpm. * Update the DEVELOPERS documentation.
64 lines
2.7 KiB
TypeScript
64 lines
2.7 KiB
TypeScript
import { describe, expect, test } from 'vitest'
|
|
import { isReadOnlySelect } from './AIAssistant.utils'
|
|
|
|
describe('AIAssistant.utils.ts:isReadOnlySelect', () => {
|
|
test('Should return true for SQL that only contains SELECT operation', () => {
|
|
const sql = 'select * from countries where id > 100 order by id asc;'
|
|
const result = isReadOnlySelect(sql)
|
|
expect(result).toBe(true)
|
|
})
|
|
test('Should return false for SQL that contains INSERT operation', () => {
|
|
const sql = `insert into countries (id, name) values (1, 'hello');`
|
|
const result = isReadOnlySelect(sql)
|
|
expect(result).toBe(false)
|
|
})
|
|
test('Should return false for SQL that contains UPDATE operation', () => {
|
|
const sql = `update countries set name = 'hello' where id = 2;`
|
|
const result = isReadOnlySelect(sql)
|
|
expect(result).toBe(false)
|
|
})
|
|
test('Should return false for SQL that contains DELETE operation', () => {
|
|
const sql = `delete from countries where id = 2;`
|
|
const result = isReadOnlySelect(sql)
|
|
expect(result).toBe(false)
|
|
})
|
|
test('Should return false for SQL that contains ALTER operation', () => {
|
|
const sql = `alter table countries drop column id if exists;`
|
|
const result = isReadOnlySelect(sql)
|
|
expect(result).toBe(false)
|
|
})
|
|
test('Should return false for SQL that contains DROP operation', () => {
|
|
const sql = `drop table if exists countries;`
|
|
const result = isReadOnlySelect(sql)
|
|
expect(result).toBe(false)
|
|
})
|
|
test('Should return false for SQL that contains CREATE operation', () => {
|
|
const sql = `create schema test_schema;`
|
|
const result = isReadOnlySelect(sql)
|
|
expect(result).toBe(false)
|
|
})
|
|
test('Should return false for SQL that contains REPLACE operation', () => {
|
|
const sql = `create or replace view test_view as select * from countries where id > 500;`
|
|
const result = isReadOnlySelect(sql)
|
|
expect(result).toBe(false)
|
|
})
|
|
test('Should return false for SQL that calls a function not whitelisted', () => {
|
|
const sql = `select create_new_user();`
|
|
const result = isReadOnlySelect(sql)
|
|
expect(result).toBe(false)
|
|
})
|
|
test('Should return true for SQL that calls a function that is whitelisted', () => {
|
|
const sql = `select count(select * from countries);`
|
|
const result = isReadOnlySelect(sql)
|
|
expect(result).toBe(true)
|
|
})
|
|
test('Should return false for SQL that contains a write operation with a read operation', () => {
|
|
const sql1 = `select count(select * from countries); create schema joshen;`
|
|
const result1 = isReadOnlySelect(sql1)
|
|
expect(result1).toBe(false)
|
|
const sql2 = `create schema joshen; select count(select * from countries);`
|
|
const result2 = isReadOnlySelect(sql2)
|
|
expect(result2).toBe(false)
|
|
})
|
|
})
|