Skip to content

Commit

Permalink
Merge branch 'test/fail-fast' into test/missing-sqlserver
Browse files Browse the repository at this point in the history
  • Loading branch information
danstarns committed Jun 15, 2022
2 parents 763dcbb + 080e5fd commit 0913e44
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 24 deletions.
28 changes: 24 additions & 4 deletions packages/client/tests/functional/_utils/setupTestSuiteEnv.ts
Expand Up @@ -77,15 +77,25 @@ export async function setupTestSuiteSchema(suiteMeta: TestSuiteMeta, suiteConfig
* @param suiteMeta
* @param suiteConfig
*/
export async function setupTestSuiteDatabase(suiteMeta: TestSuiteMeta, suiteConfig: TestSuiteConfig) {
export async function setupTestSuiteDatabase(
suiteMeta: TestSuiteMeta,
suiteConfig: TestSuiteConfig,
errors: Error[] = [],
) {
const schemaPath = getTestSuiteSchemaPath(suiteMeta, suiteConfig)

try {
const consoleInfoMock = jest.spyOn(console, 'info').mockImplementation()
await DbPush.new().parse(['--schema', schemaPath, '--force-reset', '--skip-generate'])
consoleInfoMock.mockRestore()
} catch (e) {
await setupTestSuiteDatabase(suiteMeta, suiteConfig) // retry logic
errors.push(e as Error)

if (errors.length > 2) {
throw new Error(errors.map((e) => `${e.message}\n${e.stack}`).join(`\n`))
} else {
await setupTestSuiteDatabase(suiteMeta, suiteConfig, errors) // retry logic
}
}
}

Expand All @@ -94,15 +104,25 @@ export async function setupTestSuiteDatabase(suiteMeta: TestSuiteMeta, suiteConf
* @param suiteMeta
* @param suiteConfig
*/
export async function dropTestSuiteDatabase(suiteMeta: TestSuiteMeta, suiteConfig: TestSuiteConfig) {
export async function dropTestSuiteDatabase(
suiteMeta: TestSuiteMeta,
suiteConfig: TestSuiteConfig,
errors: Error[] = [],
) {
const schemaPath = getTestSuiteSchemaPath(suiteMeta, suiteConfig)

try {
const consoleInfoMock = jest.spyOn(console, 'info').mockImplementation()
await DbDrop.new().parse(['--schema', schemaPath, '--force', '--preview-feature'])
consoleInfoMock.mockRestore()
} catch (e) {
await dropTestSuiteDatabase(suiteMeta, suiteConfig) // retry logic
errors.push(e as Error)

if (errors.length > 2) {
throw new Error(errors.map((e) => `${e.message}\n${e.stack}`).join(`\n`))
} else {
await dropTestSuiteDatabase(suiteMeta, suiteConfig, errors) // retry logic
}
}
}

Expand Down
42 changes: 22 additions & 20 deletions packages/client/tests/functional/_utils/setupTestSuiteMatrix.ts
Expand Up @@ -56,27 +56,29 @@ function setupTestSuiteMatrix(

describeFn(name, () => {
// we inject modified env vars, and make the client available as globals
beforeAll(() => (process.env = { ...setupTestSuiteDbURI(suiteConfig), ...originalEnv }))
beforeAll(
async () =>
(globalThis['loaded'] = await setupTestSuiteClient({
suiteMeta,
suiteConfig,
skipDb: options?.skipDb,
})),
)
beforeAll(async () => (globalThis['prisma'] = new (await global['loaded'])['PrismaClient']()))
beforeAll(async () => (globalThis['PrismaClient'] = (await global['loaded'])['PrismaClient']))
beforeAll(async () => (globalThis['Prisma'] = (await global['loaded'])['Prisma']))
beforeAll(async () => {
process.env = { ...setupTestSuiteDbURI(suiteConfig), ...originalEnv }

// we disconnect and drop the database, clean up the env, and global vars
afterAll(async () => !options?.skipDb && (await globalThis['prisma']?.$disconnect()))
afterAll(async () => !options?.skipDb && (await dropTestSuiteDatabase(suiteMeta, suiteConfig)))
afterAll(() => (process.env = originalEnv))
afterAll(() => delete globalThis['loaded'])
afterAll(() => delete globalThis['prisma'])
afterAll(() => delete globalThis['Prisma'])
afterAll(() => delete globalThis['PrismaClient'])
globalThis['loaded'] = await setupTestSuiteClient({
suiteMeta,
suiteConfig,
skipDb: options?.skipDb,
})

globalThis['prisma'] = new (await global['loaded'])['PrismaClient']()
globalThis['PrismaClient'] = (await global['loaded'])['PrismaClient']
globalThis['Prisma'] = (await global['loaded'])['Prisma']
})

afterAll(async () => {
!options?.skipDb && (await globalThis['prisma']?.$disconnect())
!options?.skipDb && (await dropTestSuiteDatabase(suiteMeta, suiteConfig))
process.env = originalEnv
delete globalThis['loaded']
delete globalThis['prisma']
delete globalThis['Prisma']
delete globalThis['PrismaClient']
})

tests(suiteConfig, suiteMeta)
})
Expand Down

0 comments on commit 0913e44

Please sign in to comment.