import { Test, TestingModule } from '@nestjs/testing'; import { getRepositoryToken } from '@nestjs/typeorm'; import { SongController } from './song.controller'; import { SongService } from './song.service'; import { Song } from './song.entity'; import { Album } from '../album/album.entity'; import { CreateSongDto } from './dto/create-song.dto'; import { UpdateSongDto } from './dto/update-song.dto'; import { DeleteResult, Repository } from 'typeorm'; const mockSong = new Song(); const mockAlbum = new Album(); const mockCreateSongDto = new CreateSongDto(); const mockUpdateSongDto = new UpdateSongDto(); const mockDeleteResult = new DeleteResult(); describe('SongController', () => { let controller: SongController; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ controllers: [SongController], providers: [ SongService, { provide: getRepositoryToken(Song), useValue: { find: jest.fn().mockResolvedValue([mockSong]), findOne: jest.fn().mockResolvedValue(mockSong), findOneBy: jest.fn().mockResolvedValue({ id: 3, title: 'some song', duration: 300, trackNumber: 2, album: mockAlbum }), create: jest.fn().mockResolvedValue(mockSong), save: jest.fn().mockResolvedValue({ id: 3, title: 'some song', duration: 300, trackNumber: 2, album: mockAlbum }), update: jest.fn().mockResolvedValue(mockSong), delete: jest.fn().mockResolvedValue(mockDeleteResult), }, }, { provide: getRepositoryToken(Album), useValue: { find: jest.fn().mockResolvedValue([mockAlbum]), findOne: jest.fn().mockResolvedValue(mockAlbum), findOneBy: jest.fn().mockResolvedValue({ id: 1, title: 'some album', artist: 'some artist', genre: 'some genre' }), create: jest.fn().mockResolvedValue(mockAlbum), save: jest.fn().mockResolvedValue({ id: 1, title: 'some album', artist: 'some artist', genre: 'some genre' }), update: jest.fn().mockResolvedValue(mockAlbum), delete: jest.fn().mockResolvedValue(mockDeleteResult), }, }, ] }).compile(); controller = module.get(SongController); }); it('should be defined', () => { expect(controller).toBeDefined(); }); });