Barazo AppView backend
barazo.forum
1import { describe, it, expect } from 'vitest'
2import { getTableName, getTableColumns } from 'drizzle-orm'
3import { plugins, pluginSettings, pluginPermissions } from '../../../../src/db/schema/plugins.js'
4
5describe('plugins schema', () => {
6 const columns = getTableColumns(plugins)
7
8 it('has the correct table name', () => {
9 expect(getTableName(plugins)).toBe('plugins')
10 })
11
12 it('has all required columns', () => {
13 const columnNames = Object.keys(columns)
14
15 const expected = [
16 'id',
17 'name',
18 'displayName',
19 'version',
20 'description',
21 'source',
22 'category',
23 'enabled',
24 'manifestJson',
25 'installedAt',
26 'updatedAt',
27 ]
28
29 for (const col of expected) {
30 expect(columnNames).toContain(col)
31 }
32 })
33
34 it('has non-nullable columns', () => {
35 expect(columns.id.notNull).toBe(true)
36 expect(columns.name.notNull).toBe(true)
37 expect(columns.displayName.notNull).toBe(true)
38 expect(columns.version.notNull).toBe(true)
39 expect(columns.description.notNull).toBe(true)
40 expect(columns.source.notNull).toBe(true)
41 expect(columns.category.notNull).toBe(true)
42 expect(columns.enabled.notNull).toBe(true)
43 expect(columns.manifestJson.notNull).toBe(true)
44 expect(columns.installedAt.notNull).toBe(true)
45 expect(columns.updatedAt.notNull).toBe(true)
46 })
47
48 it('has default values for enabled and timestamps', () => {
49 expect(columns.enabled.hasDefault).toBe(true)
50 expect(columns.installedAt.hasDefault).toBe(true)
51 expect(columns.updatedAt.hasDefault).toBe(true)
52 })
53})
54
55describe('pluginSettings schema', () => {
56 const columns = getTableColumns(pluginSettings)
57
58 it('has the correct table name', () => {
59 expect(getTableName(pluginSettings)).toBe('plugin_settings')
60 })
61
62 it('has all required columns', () => {
63 const columnNames = Object.keys(columns)
64
65 const expected = ['id', 'pluginId', 'key', 'value']
66
67 for (const col of expected) {
68 expect(columnNames).toContain(col)
69 }
70 })
71
72 it('has non-nullable columns', () => {
73 expect(columns.id.notNull).toBe(true)
74 expect(columns.pluginId.notNull).toBe(true)
75 expect(columns.key.notNull).toBe(true)
76 expect(columns.value.notNull).toBe(true)
77 })
78})
79
80describe('pluginPermissions schema', () => {
81 const columns = getTableColumns(pluginPermissions)
82
83 it('has the correct table name', () => {
84 expect(getTableName(pluginPermissions)).toBe('plugin_permissions')
85 })
86
87 it('has all required columns', () => {
88 const columnNames = Object.keys(columns)
89
90 const expected = ['id', 'pluginId', 'permission', 'grantedAt']
91
92 for (const col of expected) {
93 expect(columnNames).toContain(col)
94 }
95 })
96
97 it('has non-nullable columns', () => {
98 expect(columns.id.notNull).toBe(true)
99 expect(columns.pluginId.notNull).toBe(true)
100 expect(columns.permission.notNull).toBe(true)
101 expect(columns.grantedAt.notNull).toBe(true)
102 })
103
104 it('has default value for grantedAt', () => {
105 expect(columns.grantedAt.hasDefault).toBe(true)
106 })
107})