add tests on workspace deletion logic (#10530)

closes [#424](https://github.com/twentyhq/core-team-issues/issues/424)
This commit is contained in:
Etienne
2025-02-28 10:38:51 +01:00
committed by GitHub
parent 124e69447d
commit 8762c06ff2
3 changed files with 391 additions and 119 deletions

View File

@ -0,0 +1,163 @@
import { Test, TestingModule } from '@nestjs/testing';
import { getRepositoryToken } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service';
import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity';
import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity';
import { DataSourceEntity } from 'src/engine/metadata-modules/data-source/data-source.entity';
import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
import { ObjectMetadataService } from 'src/engine/metadata-modules/object-metadata/object-metadata.service';
import { PermissionsService } from 'src/engine/metadata-modules/permissions/permissions.service';
import { RelationMetadataEntity } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity';
import { RoleService } from 'src/engine/metadata-modules/role/role.service';
import { UserRoleService } from 'src/engine/metadata-modules/user-role/user-role.service';
import { WorkspaceMigrationEntity } from 'src/engine/metadata-modules/workspace-migration/workspace-migration.entity';
import { WorkspaceMigrationService } from 'src/engine/metadata-modules/workspace-migration/workspace-migration.service';
import { SeederService } from 'src/engine/seeder/seeder.service';
import { WorkspaceDataSourceService } from 'src/engine/workspace-datasource/workspace-datasource.service';
import { WorkspaceManagerService } from 'src/engine/workspace-manager/workspace-manager.service';
import { WorkspaceSyncMetadataService } from 'src/engine/workspace-manager/workspace-sync-metadata/workspace-sync-metadata.service';
describe('WorkspaceManagerService', () => {
let service: WorkspaceManagerService;
let objectMetadataService: ObjectMetadataService;
let workspaceMigrationRepository: Repository<WorkspaceMigrationEntity>;
let dataSourceRepository: Repository<DataSourceEntity>;
let workspaceRelationMetadataRepository: Repository<RelationMetadataEntity>;
let workspaceFieldMetadataRepository: Repository<FieldMetadataEntity>;
let workspaceDataSourceService: WorkspaceDataSourceService;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
providers: [
WorkspaceManagerService,
WorkspaceMigrationService,
DataSourceService,
{
provide: getRepositoryToken(Workspace, 'core'),
useValue: {},
},
{
provide: getRepositoryToken(UserWorkspace, 'core'),
useValue: {},
},
{
provide: getRepositoryToken(FieldMetadataEntity, 'metadata'),
useValue: {
delete: jest.fn(),
},
},
{
provide: getRepositoryToken(RelationMetadataEntity, 'metadata'),
useValue: {
delete: jest.fn(),
},
},
{
provide: getRepositoryToken(ObjectMetadataEntity, 'metadata'),
useValue: {
delete: jest.fn(),
},
},
{
provide: getRepositoryToken(WorkspaceMigrationEntity, 'metadata'),
useValue: {
delete: jest.fn(),
},
},
{
provide: getRepositoryToken(DataSourceEntity, 'metadata'),
useValue: {
delete: jest.fn(),
},
},
{
provide: PermissionsService,
useValue: {},
},
{
provide: FeatureFlagService,
useValue: {},
},
{
provide: RoleService,
useValue: {},
},
{
provide: UserRoleService,
useValue: {},
},
{
provide: WorkspaceDataSourceService,
useValue: {
deleteWorkspaceDBSchema: jest.fn(),
},
},
{
provide: WorkspaceSyncMetadataService,
useValue: {},
},
{
provide: SeederService,
useValue: {},
},
{
provide: ObjectMetadataService,
useValue: {
deleteObjectsMetadata: jest.fn(),
},
},
],
}).compile();
service = module.get<WorkspaceManagerService>(WorkspaceManagerService);
objectMetadataService = module.get<ObjectMetadataService>(
ObjectMetadataService,
);
workspaceMigrationRepository = module.get<
Repository<WorkspaceMigrationEntity>
>(getRepositoryToken(WorkspaceMigrationEntity, 'metadata'));
dataSourceRepository = module.get<Repository<DataSourceEntity>>(
getRepositoryToken(DataSourceEntity, 'metadata'),
);
workspaceRelationMetadataRepository = module.get<
Repository<RelationMetadataEntity>
>(getRepositoryToken(RelationMetadataEntity, 'metadata'));
workspaceFieldMetadataRepository = module.get<
Repository<FieldMetadataEntity>
>(getRepositoryToken(FieldMetadataEntity, 'metadata'));
workspaceDataSourceService = module.get<WorkspaceDataSourceService>(
WorkspaceDataSourceService,
);
});
it('should be defined', () => {
expect(service).toBeDefined();
});
describe('delete', () => {
it('should delete all the workspace metadata tables and workspace schema', async () => {
await service.delete('workspace-id');
expect(objectMetadataService.deleteObjectsMetadata).toHaveBeenCalled();
expect(workspaceRelationMetadataRepository.delete).toHaveBeenCalledWith({
workspaceId: 'workspace-id',
});
expect(workspaceFieldMetadataRepository.delete).toHaveBeenCalledWith({
workspaceId: 'workspace-id',
});
expect(workspaceMigrationRepository.delete).toHaveBeenCalledWith({
workspaceId: 'workspace-id',
});
expect(dataSourceRepository.delete).toHaveBeenCalledWith({
workspaceId: 'workspace-id',
});
expect(
workspaceDataSourceService.deleteWorkspaceDBSchema,
).toHaveBeenCalled();
});
});
});