@@ -3,6 +3,8 @@ import * as Pg from "@effect/sql-drizzle/Pg"
33import { assert , describe , it } from "@effect/vitest"
44import * as D from "drizzle-orm/pg-core"
55import { Effect , Layer } from "effect"
6+ import * as Logger from "effect/Logger"
7+ import * as LogLevel from "effect/LogLevel"
68import { PgContainer } from "./utils-pg.js"
79import { DrizzlePgLive } from "./utils.js"
810
@@ -63,4 +65,30 @@ describe.sequential("Pg", () => {
6365 ) , {
6466 timeout : 60000
6567 } )
68+
69+ it . effect ( "fail properly for conflict issues" , ( ) => {
70+ const logs : Array < unknown > = [ ]
71+ const logger = Logger . make ( ( opts ) => {
72+ globalThis . console . log ( opts )
73+ return logs . push ( opts . message )
74+ } )
75+ return Effect . gen ( function * ( ) {
76+ const sql = yield * SqlClient . SqlClient
77+ const db = yield * Pg . PgDrizzle
78+
79+ yield * sql `CREATE TABLE users (id SERIAL PRIMARY KEY, name TEXT NOT NULL UNIQUE, snake_case TEXT NOT NULL)`
80+ yield * db . insert ( users ) . values ( { name : "Alice" , snakeCase : "test" } )
81+ yield * Effect . flip (
82+ db . insert ( users ) . values ( { name : "Alice" , snakeCase : "test" } )
83+ )
84+ assert . deepEqual ( logs , [ ] )
85+ } ) . pipe (
86+ Effect . provide ( [
87+ DrizzlePgLive ,
88+ Logger . replace ( Logger . defaultLogger , logger ) ,
89+ Logger . minimumLogLevel ( LogLevel . Debug )
90+ ] ) ,
91+ Effect . catchTag ( "ContainerError" , ( ) => Effect . void )
92+ )
93+ } , { timeout : 60000 } )
6694} )
0 commit comments