diff --git a/shared/database/src/schema.ts b/shared/database/src/schema.ts index 7a9bfc5..5fd485d 100644 --- a/shared/database/src/schema.ts +++ b/shared/database/src/schema.ts @@ -550,7 +550,7 @@ export const anonymous_devices = pgTable( 'anonymous_devices', { id: serial('id').primaryKey(), - deviceId: varchar('device_id', { length: 255 }).notNull().unique(), + deviceId: varchar('device_id', { length: 255 }).notNull(), createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(), lastSeenAt: timestamp('last_seen_at', { withTimezone: true }).notNull().defaultNow(), blocked: boolean('blocked').notNull().default(false), diff --git a/tests/unit/database/schema.anonymous-devices.test.ts b/tests/unit/database/schema.anonymous-devices.test.ts new file mode 100644 index 0000000..ca630d9 --- /dev/null +++ b/tests/unit/database/schema.anonymous-devices.test.ts @@ -0,0 +1,22 @@ +import { getTableConfig } from 'drizzle-orm/pg-core'; +import { anonymous_devices } from '../../../shared/database/src/schema'; + +describe('anonymous_devices schema', () => { + it('should have exactly one uniqueness constraint on device_id', () => { + const config = getTableConfig(anonymous_devices); + const col = anonymous_devices.deviceId; + + let uniqueCount = 0; + + // .unique() on the column sets isUnique at the column level + if (col.isUnique) uniqueCount++; + + // uniqueIndex() in the table's third argument appears in config.indexes + const uniqueIndexesOnDeviceId = config.indexes.filter( + (idx) => idx.config.unique && idx.config.columns.some((c) => 'name' in c && c.name === 'device_id') + ); + uniqueCount += uniqueIndexesOnDeviceId.length; + + expect(uniqueCount).toBe(1); + }); +});