diff --git a/apps/server/src/modules/board/service/column-board.service.spec.ts b/apps/server/src/modules/board/service/column-board.service.spec.ts index 5b0da8b87fe..b71e4363cff 100644 --- a/apps/server/src/modules/board/service/column-board.service.spec.ts +++ b/apps/server/src/modules/board/service/column-board.service.spec.ts @@ -4,7 +4,7 @@ import { EntityId } from '@shared/domain/types'; import { StorageLocation } from '@src/modules/files-storage/interface'; import { ObjectId } from '@mikro-orm/mongodb'; import { CopyElementType, CopyStatus, CopyStatusEnum } from '../../copy-helper'; -import { BoardExternalReference, BoardExternalReferenceType, ColumnBoard } from '../domain'; +import { BoardExternalReference, BoardExternalReferenceType, ColumnBoard, ColumnBoardProps } from '../domain'; import { BoardNodeRepo } from '../repo'; import { columnBoardFactory } from '../testing'; import { BoardNodeService } from './board-node.service'; @@ -131,4 +131,24 @@ describe('ColumnBoardService', () => { expect(result).toEqual(columnBoard); }); + + describe('createColumnBoard', () => { + describe('when creating new ColumnBoard', () => { + const setup = () => { + const columnBoard = columnBoardFactory.build() as unknown as ColumnBoardProps; + + repo.save.mockResolvedValue(); + + return { columnBoard }; + }; + + it('should call BoardNodeRepo', async () => { + const { columnBoard } = setup(); + + await service.createColumnBoard(columnBoard); + + expect(repo.save).toHaveBeenCalledTimes(1); + }); + }); + }); }); diff --git a/apps/server/src/modules/common-cartridge/service/common-cartridge-import.service.spec.ts b/apps/server/src/modules/common-cartridge/service/common-cartridge-import.service.spec.ts index fb771065ccb..144199a70c1 100644 --- a/apps/server/src/modules/common-cartridge/service/common-cartridge-import.service.spec.ts +++ b/apps/server/src/modules/common-cartridge/service/common-cartridge-import.service.spec.ts @@ -2,6 +2,7 @@ import { faker } from '@faker-js/faker'; import { createMock, DeepMocked } from '@golevelup/ts-jest'; import { CoursesClientAdapter } from '@infra/courses-client'; import { Test, TestingModule } from '@nestjs/testing'; +import { BoardsClientAdapter } from '@infra/boards-client'; import type { CommonCartridgeFileParser } from '../import/common-cartridge-file-parser'; import { CommonCartridgeImportService } from './common-cartridge-import.service'; @@ -9,6 +10,18 @@ jest.mock('../import/common-cartridge-file-parser', () => { const fileParserMock = createMock(); fileParserMock.getTitle.mockReturnValue(faker.lorem.words()); + fileParserMock.getOrganizations.mockReturnValue([ + { + pathDepth: 0, + title: faker.lorem.words(), + path: faker.system.filePath(), + identifier: faker.string.uuid(), + isInlined: true, + isResource: false, + resourcePath: faker.system.filePath(), + resourceType: faker.lorem.word(), + }, + ]); return { CommonCartridgeFileParser: jest.fn(() => fileParserMock), @@ -19,6 +32,7 @@ describe(CommonCartridgeImportService.name, () => { let module: TestingModule; let sut: CommonCartridgeImportService; let coursesClientAdapterMock: DeepMocked; + let boardsClientAdapterMock: DeepMocked; beforeEach(async () => { module = await Test.createTestingModule({ @@ -28,11 +42,16 @@ describe(CommonCartridgeImportService.name, () => { provide: CoursesClientAdapter, useValue: createMock(), }, + { + provide: BoardsClientAdapter, + useValue: createMock(), + }, ], }).compile(); sut = module.get(CommonCartridgeImportService); coursesClientAdapterMock = module.get(CoursesClientAdapter); + boardsClientAdapterMock = module.get(BoardsClientAdapter); }); afterEach(async () => { @@ -49,11 +68,27 @@ describe(CommonCartridgeImportService.name, () => { describe('importFile', () => { describe('when importing a file', () => { + const setup = () => { + const file = Buffer.from(''); + + return { file }; + }; + it('should create a course', async () => { - await sut.importFile(Buffer.from('')); + const { file } = setup(); + + await sut.importFile(file); expect(coursesClientAdapterMock.createCourse).toHaveBeenCalledWith({ title: expect.any(String) }); }); + + it('should create boards', async () => { + const { file } = setup(); + + await sut.importFile(file); + + expect(boardsClientAdapterMock.createBoard).toHaveBeenCalledTimes(1); + }); }); }); }); diff --git a/apps/server/src/modules/learnroom/mapper/course.mapper.spec.ts b/apps/server/src/modules/learnroom/mapper/course.mapper.spec.ts new file mode 100644 index 00000000000..b0706083941 --- /dev/null +++ b/apps/server/src/modules/learnroom/mapper/course.mapper.spec.ts @@ -0,0 +1,26 @@ +import { courseFactory } from '@src/testing/factory/course.factory'; +import { setupEntities } from '@src/testing/setup-entities'; +import { CourseMapper } from './course.mapper'; +import { CreateCourseResponse } from '../controller/dto'; + +describe(CourseMapper.name, () => { + beforeAll(async () => { + await setupEntities(); + }); + + describe('mapToCreateCourseResponse', () => { + const setup = () => { + const course = courseFactory.build(); + + return { course }; + }; + + it('should return CreateCourseResponse', () => { + const { course } = setup(); + + const result = CourseMapper.mapToCreateCourseResponse(course); + + expect(result).toEqual(new CreateCourseResponse({ courseId: course.id })); + }); + }); +}); diff --git a/apps/server/src/modules/learnroom/mapper/course.mapper.ts b/apps/server/src/modules/learnroom/mapper/course.mapper.ts index 389194c8a95..4f9992e9984 100644 --- a/apps/server/src/modules/learnroom/mapper/course.mapper.ts +++ b/apps/server/src/modules/learnroom/mapper/course.mapper.ts @@ -31,6 +31,8 @@ export class CourseMapper { } public static mapToCreateCourseResponse(course: Course): CreateCourseResponse { - return new CreateCourseResponse({ courseId: course.id }); + const response = new CreateCourseResponse({ courseId: course.id }); + + return response; } } diff --git a/apps/server/src/modules/learnroom/service/course.service.spec.ts b/apps/server/src/modules/learnroom/service/course.service.spec.ts index 62cfd379024..d305119d51a 100644 --- a/apps/server/src/modules/learnroom/service/course.service.spec.ts +++ b/apps/server/src/modules/learnroom/service/course.service.spec.ts @@ -235,4 +235,24 @@ describe('CourseService', () => { }); }); }); + + describe('create', () => { + describe('when creating new Course', () => { + const setup = () => { + const course = courseFactory.buildWithId(); + + legacyCourseRepo.createCourse.mockResolvedValueOnce(course); + + return { course }; + }; + + it('should call createCourse from course repository', async () => { + const { course } = setup(); + + await expect(courseService.create(course)).resolves.not.toThrow(); + + expect(legacyCourseRepo.createCourse).toBeCalledWith(course); + }); + }); + }); }); diff --git a/apps/server/src/modules/learnroom/service/course.service.ts b/apps/server/src/modules/learnroom/service/course.service.ts index 94c9990196c..db91f3b061b 100644 --- a/apps/server/src/modules/learnroom/service/course.service.ts +++ b/apps/server/src/modules/learnroom/service/course.service.ts @@ -37,7 +37,9 @@ export class CourseService implements DeletionService, IEventHandler { - return this.repo.findById(courseId); + const course = this.repo.findById(courseId); + + return course; } public async findAllCoursesByUserId(userId: EntityId): Promise> {