chore(core): Ensure updatedAt is always set for tags in source control feature (#16949)

This commit is contained in:
Andreas Fitzek
2025-07-03 12:21:00 +02:00
committed by GitHub
parent 91fe5109b5
commit b013b6dabe
3 changed files with 120 additions and 6 deletions

View File

@@ -139,6 +139,119 @@ describe('SourceControlService', () => {
});
describe('getStatus', () => {
it('ensure updatedAt field for last deleted tag', async () => {
// ARRANGE
const user = mock<User>();
user.role = 'global:admin';
sourceControlImportService.getRemoteVersionIdsFromFiles.mockResolvedValue([]);
sourceControlImportService.getLocalVersionIdsFromDb.mockResolvedValue([]);
sourceControlImportService.getRemoteCredentialsFromFiles.mockResolvedValue([]);
sourceControlImportService.getLocalCredentialsFromDb.mockResolvedValue([]);
sourceControlImportService.getRemoteVariablesFromFile.mockResolvedValue([]);
sourceControlImportService.getLocalVariablesFromDb.mockResolvedValue([]);
tagRepository.find.mockResolvedValue([]);
// Define a tag that does only exist remotely.
// Pushing this means it was deleted.
sourceControlImportService.getRemoteTagsAndMappingsFromFile.mockResolvedValue({
tags: [
{
id: 'tag-id',
name: 'some name',
} as TagEntity,
],
mappings: [],
});
sourceControlImportService.getLocalTagsAndMappingsFromDb.mockResolvedValue({
tags: [],
mappings: [],
});
folderRepository.find.mockResolvedValue([]);
sourceControlImportService.getRemoteFoldersAndMappingsFromFile.mockResolvedValue({
folders: [],
});
sourceControlImportService.getLocalFoldersAndMappingsFromDb.mockResolvedValue({
folders: [],
});
// ACT
const pushResult = await sourceControlService.getStatus(user, {
direction: 'push',
verbose: false,
preferLocalVersion: false,
});
// ASSERT
if (!Array.isArray(pushResult)) {
fail('Expected pushResult to be an array.');
}
expect(pushResult).toHaveLength(1);
expect(pushResult.find((i) => i.type === 'tags')?.updatedAt).toBeDefined();
});
it('ensure updatedAt field for last deleted folder', async () => {
// ARRANGE
const user = mock<User>();
user.role = 'global:admin';
sourceControlImportService.getRemoteVersionIdsFromFiles.mockResolvedValue([]);
sourceControlImportService.getLocalVersionIdsFromDb.mockResolvedValue([]);
sourceControlImportService.getRemoteCredentialsFromFiles.mockResolvedValue([]);
sourceControlImportService.getLocalCredentialsFromDb.mockResolvedValue([]);
sourceControlImportService.getRemoteVariablesFromFile.mockResolvedValue([]);
sourceControlImportService.getLocalVariablesFromDb.mockResolvedValue([]);
tagRepository.find.mockResolvedValue([]);
sourceControlImportService.getRemoteTagsAndMappingsFromFile.mockResolvedValue({
tags: [],
mappings: [],
});
sourceControlImportService.getLocalTagsAndMappingsFromDb.mockResolvedValue({
tags: [],
mappings: [],
});
// Define a folder that does only exist remotely.
// Pushing this means it was deleted.
folderRepository.find.mockResolvedValue([]);
sourceControlImportService.getRemoteFoldersAndMappingsFromFile.mockResolvedValue({
folders: [
{
id: 'test-folder',
name: 'test folder name',
homeProjectId: 'some-id',
parentFolderId: null,
createdAt: '',
updatedAt: '',
},
],
});
sourceControlImportService.getLocalFoldersAndMappingsFromDb.mockResolvedValue({
folders: [],
});
// ACT
const pushResult = await sourceControlService.getStatus(user, {
direction: 'push',
verbose: false,
preferLocalVersion: false,
});
// ASSERT
if (!Array.isArray(pushResult)) {
fail('Expected pushResult to be an array.');
}
expect(pushResult).toHaveLength(1);
expect(pushResult.find((i) => i.type === 'folders')?.updatedAt).toBeDefined();
});
it('conflict depends on the value of `direction`', async () => {
// ARRANGE
const user = mock<User>();