Skip to content

Commit

Permalink
ignore sql container errors in tests
Browse files Browse the repository at this point in the history
  • Loading branch information
tim-smart committed Jun 20, 2024
1 parent 7d4e4cd commit e7c9e89
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 9 deletions.
10 changes: 8 additions & 2 deletions packages/sql-drizzle/test/Mysql.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,10 @@ describe.sequential("Mysql", () => {
yield* db.insert(users).values({ name: "Alice", snakeCase: "alice" })
const results = yield* db.select().from(users)
assert.deepStrictEqual(results, [{ id: 1, name: "Alice", snakeCase: "alice" }])
}).pipe(Effect.provide(MysqlContainer.DrizzleLive)), { timeout: 60000 })
}).pipe(
Effect.provide(MysqlContainer.DrizzleLive),
Effect.catchTag("ContainerError", () => Effect.void)
), { timeout: 60000 })

it.effect("remote callback", () =>
Effect.gen(function*(_) {
Expand All @@ -31,5 +34,8 @@ describe.sequential("Mysql", () => {
yield* Effect.promise(() => db.insert(users).values({ name: "Alice", snakeCase: "snake" }))
const results = yield* Effect.promise(() => db.select().from(users))
assert.deepStrictEqual(results, [{ id: 1, name: "Alice", snakeCase: "snake" }])
}).pipe(Effect.provide(MysqlContainer.DrizzleLive)), { timeout: 60000 })
}).pipe(
Effect.provide(MysqlContainer.DrizzleLive),
Effect.catchTag("ContainerError", () => Effect.void)
), { timeout: 60000 })
})
14 changes: 12 additions & 2 deletions packages/sql-drizzle/test/Pg.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,12 @@ describe.sequential("Pg", () => {
yield* db.insert(users).values({ name: "Alice", snakeCase: "alice" })
const results = yield* db.select().from(users)
assert.deepStrictEqual(results, [{ id: 1, name: "Alice", snakeCase: "alice" }])
}).pipe(Effect.provide(PgContainer.DrizzleLive)), { timeout: 60000 })
}).pipe(
Effect.provide(PgContainer.DrizzleLive),
Effect.catchTag("ContainerError", () => Effect.void)
), {
timeout: 60000
})

it.effect("remote callback", () =>
Effect.gen(function*(_) {
Expand All @@ -31,5 +36,10 @@ describe.sequential("Pg", () => {
yield* Effect.promise(() => db.insert(users).values({ name: "Alice", snakeCase: "snake" }))
const results = yield* Effect.promise(() => db.select().from(users))
assert.deepStrictEqual(results, [{ id: 1, name: "Alice", snakeCase: "snake" }])
}).pipe(Effect.provide(PgContainer.DrizzleLive)), { timeout: 60000 })
}).pipe(
Effect.provide(PgContainer.DrizzleLive),
Effect.catchTag("ContainerError", () => Effect.void)
), {
timeout: 60000
})
})
20 changes: 15 additions & 5 deletions packages/sql-drizzle/test/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,11 @@ import * as Pg from "@effect/sql-pg"
import type { StartedMySqlContainer } from "@testcontainers/mysql"
import { MySqlContainer } from "@testcontainers/mysql"
import { PostgreSqlContainer, type StartedPostgreSqlContainer } from "@testcontainers/postgresql"
import { Config, Context, Effect, Layer, Secret } from "effect"
import { Config, Context, Data, Effect, Layer, Redacted } from "effect"

export class ContainerError extends Data.TaggedError("ContainerError")<{
cause: unknown
}> {}

export class PgContainer extends Context.Tag("test/PgContainer")<
PgContainer,
Expand All @@ -14,7 +18,10 @@ export class PgContainer extends Context.Tag("test/PgContainer")<
static Live = Layer.scoped(
this,
Effect.acquireRelease(
Effect.promise(() => new PostgreSqlContainer("postgres:alpine").start()),
Effect.tryPromise({
try: () => new PostgreSqlContainer("postgres:alpine").start(),
catch: (cause) => new ContainerError({ cause })
}),
(container) => Effect.promise(() => container.stop())
)
)
Expand All @@ -23,7 +30,7 @@ export class PgContainer extends Context.Tag("test/PgContainer")<
Effect.gen(function*(_) {
const container = yield* _(PgContainer)
return Pg.client.layer({
url: Config.succeed(Secret.fromString(container.getConnectionUri()))
url: Config.succeed(Redacted.make(container.getConnectionUri()))
})
})
).pipe(Layer.provide(this.Live))
Expand All @@ -38,7 +45,10 @@ export class MysqlContainer extends Context.Tag("test/MysqlContainer")<
static Live = Layer.scoped(
this,
Effect.acquireRelease(
Effect.promise(() => new MySqlContainer("mysql:lts").start()),
Effect.tryPromise({
try: () => new MySqlContainer("mysql:lts").start(),
catch: (cause) => new ContainerError({ cause })
}),
(container) => Effect.promise(() => container.stop())
)
)
Expand All @@ -47,7 +57,7 @@ export class MysqlContainer extends Context.Tag("test/MysqlContainer")<
Effect.gen(function*(_) {
const container = yield* _(MysqlContainer)
return Mysql.client.layer({
url: Config.succeed(Secret.fromString(container.getConnectionUri()))
url: Config.succeed(Redacted.make(container.getConnectionUri()))
})
})
).pipe(Layer.provide(this.Live))
Expand Down

0 comments on commit e7c9e89

Please sign in to comment.