Skip to content

Commit

Permalink
fix: adapt seeder to new schema
Browse files Browse the repository at this point in the history
  • Loading branch information
jorgebodega committed Dec 21, 2021
1 parent 870a23d commit a1d4e27
Show file tree
Hide file tree
Showing 9 changed files with 66 additions and 19 deletions.
7 changes: 4 additions & 3 deletions src/commands/seed.command.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { gray } from 'chalk'
import { configureConnection, fetchConnection } from '../connection'
import { Seeder } from '../seeder'
import { useSeeders } from '../useSeeders'
import { runSeeder } from '../runSeeder'
import { Connection } from 'typeorm'

interface SeedCommandArguments extends Arguments {
root?: string
Expand Down Expand Up @@ -68,9 +68,10 @@ export class SeedCommand implements CommandModule {
}

// Get database connection and pass it to the seeder
let connection!: Connection
spinner.start('Connecting to the database')
try {
await fetchConnection()
connection = await fetchConnection()
spinner.succeed('Database connected')
} catch (error) {
panic(spinner, error as Error, 'Database connection failed! Check your TypeORM config.')
Expand All @@ -80,7 +81,7 @@ export class SeedCommand implements CommandModule {
for (const seeder of seeders) {
spinner.start(`Executing ${seeder.constructor.name} Seeder`)
try {
await runSeeder(seeder)
seeder.run(connection)
spinner.succeed(`Seeder ${seeder.constructor.name} executed`)
} catch (error) {
panic(spinner, error as Error, `Could not run the seed ${seeder.constructor.name}!`)
Expand Down
2 changes: 1 addition & 1 deletion src/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
export * from './connection'
export * from './runSeeder'
export * from './factory'
export * from './seeder'
export * from './types'
export * from './useSeeders'
7 changes: 0 additions & 7 deletions src/runSeeder.ts

This file was deleted.

12 changes: 6 additions & 6 deletions src/useSeeders.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { configureConnection, getConnectionOptions } from './connection'
import { configureConnection, fetchConnection, getConnectionOptions } from './connection'
import { SeederImportationError } from './errors/SeederImportationError'
import { runSeeder } from './runSeeder'
import { Seeder } from './seeder'
import type { ConnectionConfiguration } from './types'
import { calculateFilePaths } from './utils/fileHandling'
Expand Down Expand Up @@ -35,13 +34,14 @@ export async function useSeeders(

let seedersImported: Seeder[]
try {
seedersImported = await Promise.all(
seederFiles.map((seederFile) => import(seederFile).then((module) => module.default)),
).then((elems) => elems.map((elem) => new elem()).filter((elem) => elem instanceof Seeder) as Seeder[])
seedersImported = await Promise.all(seederFiles.map((seederFile) => import(seederFile)))
.then((elementsImported) => elementsImported.flatMap((e) => Object.values(e)))
.then((elems) => elems.map((elem) => new elem()).filter((elem) => elem instanceof Seeder) as Seeder[])

if (shouldExecuteSeeders) {
const connection = await fetchConnection()
for (const seeder of seedersImported) {
await runSeeder(seeder)
seeder.run(connection)
}
}
} catch (error: any) {
Expand Down
3 changes: 1 addition & 2 deletions test/factory.test.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { Connection } from 'typeorm'
import { configureConnection, fetchConnection } from '../src/connection'
import { Factory } from '../src/factory'
import { configureConnection, Factory, fetchConnection } from '../src'
import { Pet } from './entities/Pet.entity'
import { User } from './entities/User.entity'
import { PetFactory } from './factories/Pet.factory'
Expand Down
8 changes: 8 additions & 0 deletions test/seeders/User.seeder.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { Seeder } from '../../src'
import { UserFactory } from '../factories/User.factory'

export class UserSeeder extends Seeder {
async run() {
await new UserFactory().createMany(10)
}
}
12 changes: 12 additions & 0 deletions test/useSeeders/useSeedersWithError.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { useSeeders } from '../../src'
import { SeederImportationError } from '../../src/errors/SeederImportationError'

describe(useSeeders, () => {
test.only(`Should throw ${SeederImportationError.name}`, async () => {
jest.mock('../seeders/User.seeder.ts', () => {
throw new Error('Error')
})

expect(useSeeders()).rejects.toThrowError(SeederImportationError)
})
})
11 changes: 11 additions & 0 deletions test/useSeeders/useSeedersWithMultipleSeeders.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { useSeeders } from '../../src/useSeeders'

describe(useSeeders, () => {
test('Should import all seeders', async () => {
const seeders = await useSeeders()

expect(seeders).toHaveLength(1)
expect(seeders[0].constructor.name).toBe('UserSeeder')
})
})

23 changes: 23 additions & 0 deletions test/useSeeders/useSeedersWithSingleSeeder.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { useSeeders } from '../../src/useSeeders'
import { Seeder } from '../../src/seeder'

describe(useSeeders, () => {
const mockFn = jest.fn()

test('Should import one seeder and execute it', async () => {
jest.mock('../seeders/User.seeder.ts', () => {
return {
__esModule: true,
default: class Test extends Seeder {
async run() {
mockFn()
}
},
}
})
const seeders = await useSeeders(true, ['test/**/User.seeder.ts'])

expect(seeders).toHaveLength(1)
expect(mockFn).toHaveBeenCalledTimes(1)
})
})

0 comments on commit a1d4e27

Please sign in to comment.