Merge pull request #471 from Hexastack/fix/settings-strictNullChecks
Some checks are pending
Build and Push Docker API Image / build-and-push (push) Waiting to run
Build and Push Docker Base Image / build-and-push (push) Waiting to run
Build and Push Docker NLU Image / build-and-push (push) Waiting to run
Build and Push Docker UI Image / build-and-push (push) Waiting to run

fix: settings strict null checks
This commit is contained in:
Med Marrouchi 2024-12-30 14:11:06 +01:00 committed by GitHub
commit cea41c20bc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 29 additions and 16 deletions

View File

@ -23,6 +23,8 @@ import { NlpValueSeeder } from './nlp/seeds/nlp-value.seed';
import { nlpValueModels } from './nlp/seeds/nlp-value.seed-model';
import { SettingSeeder } from './setting/seeds/setting.seed';
import { DEFAULT_SETTINGS } from './setting/seeds/setting.seed-model';
import { PermissionCreateDto } from './user/dto/permission.dto';
import { Role } from './user/schemas/role.schema';
import { ModelSeeder } from './user/seeds/model.seed';
import { modelModels } from './user/seeds/model.seed-model';
import { PermissionSeeder } from './user/seeds/permission.seed';
@ -71,12 +73,12 @@ export async function seedDatabase(app: INestApplicationContext) {
const models = await modelSeeder.findAll();
const roles = await roleSeeder.findAll();
const adminRole = roles.find(({ name }) => name === 'admin');
const managerRole = roles.find(({ name }) => name === 'manager');
const adminRole = roles.find(({ name }) => name === 'admin') as Role;
const managerRole = roles.find(({ name }) => name === 'manager') as Role;
const managerModels = models.filter(
(model) => !['Role', 'User', 'Permission'].includes(model.name),
);
const roleModelsCombinations: [string, string][] = [
const roleModelsCombinations = [
...models.map((model) => [model.id, adminRole.id]),
...managerModels.map((model) => [model.id, managerRole.id]),
] as [string, string][];
@ -85,7 +87,7 @@ export async function seedDatabase(app: INestApplicationContext) {
(acc, [modelId, roleId]) => {
return acc.concat(permissionModels(modelId, roleId));
},
[],
[] as PermissionCreateDto[],
);
// Seed permissions

View File

@ -23,7 +23,7 @@ import {
} from '@/utils/test/test';
import { SettingRepository } from '../repositories/setting.repository';
import { SettingModel } from '../schemas/setting.schema';
import { Setting, SettingModel } from '../schemas/setting.schema';
import { SettingSeeder } from '../seeds/setting.seed';
import { SettingService } from '../services/setting.service';
@ -100,8 +100,9 @@ describe('SettingController', () => {
const payload = {
value: 'updated setting value',
};
const id = (await settingService.findOne({ value: 'admin@example.com' }))
.id;
const { id } = (await settingService.findOne({
value: 'admin@example.com',
})) as Setting;
const result = await settingController.updateOne(id, payload);
expect(settingService.updateOne).toHaveBeenCalledWith(id, payload);

View File

@ -49,10 +49,20 @@ export class SettingRepository extends BaseRepository<Setting> {
): Promise<void> {
if (!Array.isArray(updates)) {
const payload = updates.$set;
if (typeof payload.value !== 'undefined') {
const { type } =
'type' in payload ? payload : await this.findOne(criteria);
this.validateSettingValue(type, payload.value);
if (payload && 'value' in payload) {
const hasType = 'type' in payload;
if (hasType) {
// Case when we need to update both the type and value
this.validateSettingValue(payload.type, payload.value);
} else {
// Case when we only update the setting value
const setting = await this.findOne(criteria);
if (setting && 'type' in setting) {
this.validateSettingValue(setting.type, payload.value);
} else {
throw new Error('Unable to find the setting to be updated');
}
}
}
}
}

View File

@ -35,8 +35,8 @@ describe('SettingService', () => {
const commonAttributes = {
type: SettingType.text,
id: '',
createdAt: undefined,
updatedAt: undefined,
createdAt: new Date(),
updatedAt: new Date(),
};
beforeAll(async () => {

View File

@ -267,7 +267,7 @@ export abstract class BaseRepository<
) {
if (!criteria) {
// @TODO : Issue a warning ?
return Promise.resolve(null);
return null;
}
const query = this.findOneQuery(criteria, projection);
@ -412,7 +412,7 @@ export abstract class BaseRepository<
*/
protected findPageQuery(
filters: TFilterQuery<T>,
{ skip, limit, sort }: PageQueryDto<T>,
{ skip = 0, limit = 0, sort }: PageQueryDto<T>,
): Query<T[], T, object, T, 'find', object> {
return this.findQuery(filters)
.skip(skip)

View File

@ -18,5 +18,5 @@ export type QuerySortDto<T> = [
export type PageQueryDto<T> = {
skip: number | undefined;
limit: number | undefined;
sort: QuerySortDto<T>;
sort?: QuerySortDto<T>;
};