From ef4f34fbab84e8a60ef7c6d89503318c6257c9ac Mon Sep 17 00:00:00 2001 From: abdou6666 Date: Mon, 30 Dec 2024 19:12:19 +0100 Subject: [PATCH] fix: i18n types --- .../i18n/controllers/language.controller.spec.ts | 16 +++++++++++----- api/src/i18n/i18n.module.ts | 6 ++++++ api/src/i18n/services/i18n.service.ts | 7 ++++++- api/src/utils/test/fixtures/language.ts | 4 ++-- 4 files changed, 25 insertions(+), 8 deletions(-) diff --git a/api/src/i18n/controllers/language.controller.spec.ts b/api/src/i18n/controllers/language.controller.spec.ts index dcaa9a7f..d260a502 100644 --- a/api/src/i18n/controllers/language.controller.spec.ts +++ b/api/src/i18n/controllers/language.controller.spec.ts @@ -69,7 +69,7 @@ describe('LanguageController', () => { }).compile(); languageService = module.get(LanguageService); languageController = module.get(LanguageController); - language = await languageService.findOne({ code: 'en' }); + language = (await languageService.findOne({ code: 'en' })) as Language; }); afterEach(jest.clearAllMocks); @@ -92,7 +92,7 @@ describe('LanguageController', () => { expect(languageService.findOne).toHaveBeenCalledWith(language.id); expect(result).toEqualPayload( - languageFixtures.find(({ code }) => code === language.code), + languageFixtures.find(({ code }) => code === language.code) as Language, ); }); }); @@ -142,7 +142,9 @@ describe('LanguageController', () => { it('should mark a language as default', async () => { jest.spyOn(languageService, 'updateOne'); const translationUpdateDto = { isDefault: true }; - const frLang = await languageService.findOne({ code: 'fr' }); + const frLang = (await languageService.findOne({ + code: 'fr', + })) as Language; const result = await languageController.updateOne( frLang.id, translationUpdateDto, @@ -157,7 +159,9 @@ describe('LanguageController', () => { ...translationUpdateDto, }); - const enLang = await languageService.findOne({ code: 'en' }); + const enLang = (await languageService.findOne({ + code: 'en', + })) as Language; expect(enLang.isDefault).toBe(false); }); @@ -171,7 +175,9 @@ describe('LanguageController', () => { describe('deleteOne', () => { it('should throw when attempting to delete the default language', async () => { - const defaultLang = await languageService.findOne({ isDefault: true }); + const defaultLang = (await languageService.findOne({ + isDefault: true, + })) as Language; await expect( languageController.deleteOne(defaultLang.id), diff --git a/api/src/i18n/i18n.module.ts b/api/src/i18n/i18n.module.ts index 8ad4238f..e8b15e1e 100644 --- a/api/src/i18n/i18n.module.ts +++ b/api/src/i18n/i18n.module.ts @@ -11,6 +11,7 @@ import { forwardRef, Global, Inject, + InternalServerErrorException, Module, } from '@nestjs/common'; import { HttpAdapterHost } from '@nestjs/core'; @@ -54,6 +55,11 @@ export class I18nModule extends NativeI18nModule { static forRoot(options: I18nOptions): DynamicModule { const { imports, providers, controllers, exports } = super.forRoot(options); + if (!providers || !exports) { + throw new InternalServerErrorException( + 'I18n: Unable to find providers and/or exports forRoot()', + ); + } return { module: I18nModule, imports: (imports || []).concat([ diff --git a/api/src/i18n/services/i18n.service.ts b/api/src/i18n/services/i18n.service.ts index 9e5b93aa..39fd0fd0 100644 --- a/api/src/i18n/services/i18n.service.ts +++ b/api/src/i18n/services/i18n.service.ts @@ -6,7 +6,7 @@ * 2. All derivative works must include clear attribution to the original creator and software, Hexastack and Hexabot, in a prominent location (e.g., in the software's "About" section, documentation, and README file). */ -import { Injectable } from '@nestjs/common'; +import { Injectable, InternalServerErrorException } from '@nestjs/common'; import { I18nService as NativeI18nService, Path, @@ -34,6 +34,11 @@ export class I18nService< ...options, }; let { lang } = options; + + if (!lang) { + throw new InternalServerErrorException('I18nService: lang is undefined'); + } + lang = this.resolveLanguage(lang); // Translate block message, button text, ... diff --git a/api/src/utils/test/fixtures/language.ts b/api/src/utils/test/fixtures/language.ts index 8b2f2e44..57d64958 100644 --- a/api/src/utils/test/fixtures/language.ts +++ b/api/src/utils/test/fixtures/language.ts @@ -8,10 +8,10 @@ import mongoose from 'mongoose'; -import { LanguageUpdateDto } from '@/i18n/dto/language.dto'; +import { LanguageCreateDto } from '@/i18n/dto/language.dto'; import { LanguageModel } from '@/i18n/schemas/language.schema'; -export const languageFixtures: LanguageUpdateDto[] = [ +export const languageFixtures: LanguageCreateDto[] = [ { title: 'English', code: 'en',