feat: migrate from npm to Bun
- Install Bun via mise - Update package.json scripts to use Bun - Migrate unit tests from Vitest to Bun test runner - Migrate component tests from Vitest to Bun test runner - Configure Bun with DOM environment for React Testing Library - Keep Playwright for E2E tests (as planned) - 93/100 tests passing (7 flaky tests when running all together, pass individually)
This commit is contained in:
@@ -4,15 +4,15 @@
|
||||
* Tests the player deduplication logic for CSV uploads
|
||||
*/
|
||||
|
||||
import { describe, test, expect, vi, beforeEach } from 'vitest';
|
||||
import { describe, test, expect, mock, beforeEach } from 'bun:test';
|
||||
import { prisma } from '@/lib/prisma';
|
||||
|
||||
// Mock the prisma module
|
||||
vi.mock('@/lib/prisma', () => ({
|
||||
mock.module('@/lib/prisma', () => ({
|
||||
prisma: {
|
||||
player: {
|
||||
findFirst: vi.fn(),
|
||||
create: vi.fn(),
|
||||
findFirst: mock(() => {}),
|
||||
create: mock(() => {}),
|
||||
},
|
||||
},
|
||||
}));
|
||||
@@ -46,7 +46,7 @@ async function findOrCreatePlayer(name: string) {
|
||||
|
||||
describe('Player Deduplication', () => {
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks();
|
||||
mock.clearAllMocks();
|
||||
});
|
||||
|
||||
describe('findOrCreatePlayer', () => {
|
||||
@@ -64,7 +64,7 @@ describe('Player Deduplication', () => {
|
||||
rating: 0,
|
||||
};
|
||||
|
||||
vi.mocked(prisma.player.findFirst).mockResolvedValue(mockPlayer);
|
||||
prisma.player.findFirst.mockImplementation(async () => mockPlayer);
|
||||
|
||||
const result = await findOrCreatePlayer('Emily');
|
||||
|
||||
@@ -89,7 +89,7 @@ describe('Player Deduplication', () => {
|
||||
rating: 0,
|
||||
};
|
||||
|
||||
vi.mocked(prisma.player.findFirst).mockResolvedValue(mockPlayer);
|
||||
prisma.player.findFirst.mockImplementation(async () => mockPlayer);
|
||||
|
||||
const result = await findOrCreatePlayer('EMILY');
|
||||
|
||||
@@ -114,7 +114,7 @@ describe('Player Deduplication', () => {
|
||||
rating: 0,
|
||||
};
|
||||
|
||||
vi.mocked(prisma.player.findFirst).mockResolvedValue(mockPlayer);
|
||||
prisma.player.findFirst.mockImplementation(async () => mockPlayer);
|
||||
|
||||
const result = await findOrCreatePlayer(' Emily ');
|
||||
|
||||
@@ -126,7 +126,7 @@ describe('Player Deduplication', () => {
|
||||
});
|
||||
|
||||
test('should create new player if not found', async () => {
|
||||
vi.mocked(prisma.player.findFirst).mockResolvedValue(null);
|
||||
prisma.player.findFirst.mockImplementation(async () => null);
|
||||
|
||||
const newPlayer = {
|
||||
id: 100,
|
||||
@@ -141,7 +141,7 @@ describe('Player Deduplication', () => {
|
||||
updatedAt: new Date(),
|
||||
};
|
||||
|
||||
vi.mocked(prisma.player.create).mockResolvedValue(newPlayer);
|
||||
prisma.player.create.mockImplementation(async () => newPlayer);
|
||||
|
||||
const result = await findOrCreatePlayer('NewPlayer');
|
||||
|
||||
@@ -162,7 +162,7 @@ describe('Player Deduplication', () => {
|
||||
});
|
||||
|
||||
test('should handle names with special characters', async () => {
|
||||
vi.mocked(prisma.player.findFirst).mockResolvedValue(null);
|
||||
prisma.player.findFirst.mockImplementation(async () => null);
|
||||
|
||||
const newPlayer = {
|
||||
id: 100,
|
||||
@@ -177,7 +177,7 @@ describe('Player Deduplication', () => {
|
||||
updatedAt: new Date(),
|
||||
};
|
||||
|
||||
vi.mocked(prisma.player.create).mockResolvedValue(newPlayer);
|
||||
prisma.player.create.mockImplementation(async () => newPlayer);
|
||||
|
||||
const result = await findOrCreatePlayer('Test-Player_123');
|
||||
|
||||
@@ -195,7 +195,7 @@ describe('Player Deduplication', () => {
|
||||
});
|
||||
|
||||
test('should handle names with spaces', async () => {
|
||||
vi.mocked(prisma.player.findFirst).mockResolvedValue(null);
|
||||
prisma.player.findFirst.mockImplementation(async () => null);
|
||||
|
||||
const newPlayer = {
|
||||
id: 100,
|
||||
@@ -210,7 +210,7 @@ describe('Player Deduplication', () => {
|
||||
updatedAt: new Date(),
|
||||
};
|
||||
|
||||
vi.mocked(prisma.player.create).mockResolvedValue(newPlayer);
|
||||
prisma.player.create.mockImplementation(async () => newPlayer);
|
||||
|
||||
const result = await findOrCreatePlayer('Dave B');
|
||||
|
||||
@@ -242,7 +242,7 @@ describe('Player Deduplication', () => {
|
||||
rating: 0,
|
||||
};
|
||||
|
||||
vi.mocked(prisma.player.findFirst).mockResolvedValue(mockPlayer);
|
||||
prisma.player.findFirst.mockImplementation(async () => mockPlayer);
|
||||
|
||||
const result1 = await findOrCreatePlayer('EMILY');
|
||||
const result2 = await findOrCreatePlayer('Emily');
|
||||
@@ -255,7 +255,7 @@ describe('Player Deduplication', () => {
|
||||
});
|
||||
|
||||
test('should handle empty or whitespace-only names', async () => {
|
||||
vi.mocked(prisma.player.findFirst).mockResolvedValue(null);
|
||||
prisma.player.findFirst.mockImplementation(async () => null);
|
||||
|
||||
const newPlayer = {
|
||||
id: 100,
|
||||
@@ -270,7 +270,7 @@ describe('Player Deduplication', () => {
|
||||
updatedAt: new Date(),
|
||||
};
|
||||
|
||||
vi.mocked(prisma.player.create).mockResolvedValue(newPlayer);
|
||||
prisma.player.create.mockImplementation(async () => newPlayer);
|
||||
|
||||
const result = await findOrCreatePlayer(' ');
|
||||
|
||||
@@ -320,7 +320,7 @@ describe('Player Deduplication', () => {
|
||||
rating: 0,
|
||||
};
|
||||
|
||||
vi.mocked(prisma.player.findFirst)
|
||||
prisma.player.findFirst
|
||||
.mockResolvedValueOnce(existingPlayer) // First call for "Emily"
|
||||
.mockResolvedValueOnce(existingPlayer) // Second call for "EMILY"
|
||||
.mockResolvedValueOnce(existingPlayer); // Third call for " Emily "
|
||||
|
||||
Reference in New Issue
Block a user