perf: streamline repository and deployment awareness
ForgeFlow quality gate / quality (push) Canceled after 0s
ForgeFlow quality gate / quality (push) Canceled after 0s
This commit is contained in:
@@ -163,7 +163,7 @@ test('refresh uses last-known Gitea repositories after a transient remote failur
|
||||
|
||||
const fresh = await instance.refresh();
|
||||
remoteAvailable = false;
|
||||
const degraded = await instance.refresh();
|
||||
const degraded = await instance.refresh({ force: true });
|
||||
|
||||
assert.equal(fresh[0].remoteStale, false);
|
||||
assert.equal(degraded[0].fullName, remote.full_name);
|
||||
@@ -184,6 +184,26 @@ test('initial Gitea failure remains visible when no safe cache exists', async ()
|
||||
await assert.rejects(() => instance.refresh(), /Gitea unavailable/);
|
||||
});
|
||||
|
||||
test('refresh coalesces concurrent work and briefly reuses remote and discovery results', async () => {
|
||||
let remoteCalls = 0;
|
||||
let discoveryCalls = 0;
|
||||
const store = {
|
||||
data: { gitea: { baseUrl: 'https://gitea.example' }, workspaceRoots: [], repositoryMappings: {}, preferences: { preferredCloneProtocol: 'ssh' }, favorites: [] },
|
||||
getToken: () => 'token', getDeploymentProfiles: () => [], getDeploymentState: () => null
|
||||
};
|
||||
const instance = new RepositoryService(store, {}, { listRepositories: async () => { remoteCalls += 1; await new Promise((resolve) => setTimeout(resolve, 10)); return [remote]; } });
|
||||
instance.discoverAll = async () => { discoveryCalls += 1; return []; };
|
||||
|
||||
const [first, second] = await Promise.all([instance.refresh(), instance.refresh()]);
|
||||
assert.deepEqual(first, second);
|
||||
await instance.refresh();
|
||||
assert.equal(remoteCalls, 1);
|
||||
assert.equal(discoveryCalls, 1);
|
||||
await instance.refresh({ force: true });
|
||||
assert.equal(remoteCalls, 2);
|
||||
assert.equal(discoveryCalls, 2);
|
||||
});
|
||||
|
||||
test('decoration reports conflicts, behind branches, errors and remote-only repositories', () => {
|
||||
const instance = service();
|
||||
const conflicted = instance.decorate(remote, { localPath: 'repo', status: { ...status(), counts: { changed: 1, conflicts: 2 }, branch: { ...status().branch, behind: 3 } } }, []);
|
||||
|
||||
Reference in New Issue
Block a user