@honeybadger-io/nextjs
Version:
Next.js integration for Honeybadger
173 lines (146 loc) • 6.05 kB
text/typescript
import mock from 'mock-fs'
import fs from 'fs'
import path from 'path'
import { copyConfigFiles } from './copy-config-files';
describe('copy-config-files', () => {
afterEach(() => {
mock.restore()
})
it('should copy config files to a project with pages router', async () => {
mock({
'templates': mock.load(path.resolve(__dirname, '..', 'templates')),
'pages': {
'index.js': 'dummy content'
}
})
await copyConfigFiles()
expect(fs.existsSync('honeybadger.browser.config.js')).toBe(true)
expect(fs.existsSync('honeybadger.edge.config.js')).toBe(true)
expect(fs.existsSync('honeybadger.server.config.js')).toBe(true)
expect(fs.existsSync('pages/_error.js')).toBe(true)
expect(fs.existsSync('app/error.js')).toBe(false)
})
it('should copy config files to a project with app router', async () => {
mock({
'templates': mock.load(path.resolve(__dirname, '..', 'templates')),
'app': {
'index.js': 'dummy content'
}
})
await copyConfigFiles()
expect(fs.existsSync('honeybadger.browser.config.js')).toBe(true)
expect(fs.existsSync('honeybadger.edge.config.js')).toBe(true)
expect(fs.existsSync('honeybadger.server.config.js')).toBe(true)
expect(fs.existsSync('app/error.js')).toBe(true)
expect(fs.existsSync('app/global-error.js')).toBe(true)
expect(fs.existsSync('pages/_error.js')).toBe(false)
})
it('should copy config files to a project with pages router under src folder', async () => {
mock({
'templates': mock.load(path.resolve(__dirname, '..', 'templates')),
'src': {
'pages': {
'index.js': 'dummy content'
}
}
})
await copyConfigFiles()
expect(fs.existsSync('honeybadger.browser.config.js')).toBe(true)
expect(fs.existsSync('honeybadger.edge.config.js')).toBe(true)
expect(fs.existsSync('honeybadger.server.config.js')).toBe(true)
expect(fs.existsSync('src/pages/_error.js')).toBe(true)
expect(fs.existsSync('pages/_error.js')).toBe(false)
})
it('should copy config files to a project with app router under src folder', async () => {
mock({
'templates': mock.load(path.resolve(__dirname, '..', 'templates')),
'src': {
'app': {
'index.js': 'dummy content'
}
}
})
await copyConfigFiles()
expect(fs.existsSync('honeybadger.browser.config.js')).toBe(true)
expect(fs.existsSync('honeybadger.edge.config.js')).toBe(true)
expect(fs.existsSync('honeybadger.server.config.js')).toBe(true)
expect(fs.existsSync('src/app/error.js')).toBe(true)
expect(fs.existsSync('src/app/global-error.js')).toBe(true)
expect(fs.existsSync('app/error.js')).toBe(false)
expect(fs.existsSync('app/global-error.js')).toBe(false)
})
it('should copy config files to a typescript project with pages router', async () => {
mock({
'templates': mock.load(path.resolve(__dirname, '..', 'templates')),
'pages': {
'index.ts': 'dummy content'
},
'tsconfig.json': 'dummy content'
})
await copyConfigFiles()
expect(fs.existsSync('honeybadger.browser.config.js')).toBe(true)
expect(fs.existsSync('honeybadger.edge.config.js')).toBe(true)
expect(fs.existsSync('honeybadger.server.config.js')).toBe(true)
expect(fs.existsSync('pages/_error.tsx')).toBe(true)
expect(fs.existsSync('pages/_error.js')).toBe(false)
expect(fs.existsSync('app/error.tsx')).toBe(false)
})
it('should copy config files to a typescript project with app router', async () => {
mock({
'templates': mock.load(path.resolve(__dirname, '..', 'templates')),
'app': {
'index.ts': 'dummy content'
},
'tsconfig.json': 'dummy content'
})
await copyConfigFiles()
expect(fs.existsSync('honeybadger.browser.config.js')).toBe(true)
expect(fs.existsSync('honeybadger.edge.config.js')).toBe(true)
expect(fs.existsSync('honeybadger.server.config.js')).toBe(true)
expect(fs.existsSync('app/error.tsx')).toBe(true)
expect(fs.existsSync('app/global-error.tsx')).toBe(true)
expect(fs.existsSync('app/error.js')).toBe(false)
expect(fs.existsSync('app/global-error.js')).toBe(false)
expect(fs.existsSync('pages/error.tsx')).toBe(false)
})
it('should copy config files to a typescript project with pages router under src folder', async () => {
mock({
'templates': mock.load(path.resolve(__dirname, '..', 'templates')),
'src': {
'pages': {
'index.ts': 'dummy content'
},
},
'tsconfig.json': 'dummy content'
})
await copyConfigFiles()
expect(fs.existsSync('honeybadger.browser.config.js')).toBe(true)
expect(fs.existsSync('honeybadger.edge.config.js')).toBe(true)
expect(fs.existsSync('honeybadger.server.config.js')).toBe(true)
expect(fs.existsSync('src/pages/_error.tsx')).toBe(true)
expect(fs.existsSync('src/pages/_error.js')).toBe(false)
expect(fs.existsSync('pages/_error.tsx')).toBe(false)
expect(fs.existsSync('pages/_error.js')).toBe(false)
})
it('should copy config files to a typescript project with app router under src folder', async () => {
mock({
'templates': mock.load(path.resolve(__dirname, '..', 'templates')),
'src': {
'app': {
'index.ts': 'dummy content'
},
},
'tsconfig.json': 'dummy content'
})
await copyConfigFiles()
expect(fs.existsSync('honeybadger.browser.config.js')).toBe(true)
expect(fs.existsSync('honeybadger.edge.config.js')).toBe(true)
expect(fs.existsSync('honeybadger.server.config.js')).toBe(true)
expect(fs.existsSync('src/app/error.tsx')).toBe(true)
expect(fs.existsSync('src/app/global-error.tsx')).toBe(true)
expect(fs.existsSync('src/app/error.js')).toBe(false)
expect(fs.existsSync('src/app/global-error.js')).toBe(false)
expect(fs.existsSync('app/error.tsx')).toBe(false)
expect(fs.existsSync('app/error.js')).toBe(false)
})
})