fix: une connexion qui échoue ne se résout plus comme une réussite
connectedUser() restaure les capacités reçues et draine les inbox. Aucun de ses chemins ne pouvait échouer : un broker injoignable rendait exactement la même promesse qu'un succès complet. L'application affichait alors des listes vides, et rien nulle part ne disait que la restauration n'avait pas eu lieu. L'énumération m'avait échappé sur deux points, l'agent les a établis. resolveAccount attrapait tout et rendait null : une lecture qui ÉCHOUAIT ressortait donc comme « ce compte n'existe pas ». L'échec était déguisé en absence — c'est la racine du partage cassé trouvé ce matin, dont on n'avait traité que le déclencheur. lookupAccount le remplace : le silence n'est plus possible que sur une absence VÉRIFIÉE. Et readLinks comme readInboxCapPairs avalaient leur propre erreur en rendant un tableau vide, un étage sous le catch de connect. Une panne n'y parvenait même pas. Elles relèvent désormais. La règle est simple : tout échec remonte, seul « il n'y avait rien à faire » se résout en silence. Ce qui reste silencieux — aucun détenteur, compte réellement absent, identité changée en route — l'est parce que c'est la vérité. Le piège consigné hier est fermé par là même : une exécution qui ne peut pas répondre rejette, et ceux qui la rejoignent en héritent. Sa feuille est supprimée, la question qu'elle laissait ouverte étant tranchée. Trois fixtures de test utilisaient un ng vide — une forme qu'aucune plateforme ne présente, dont le TypeError était mangé par le catch. Remplacées par un broker au portefeuille vide. Aucune assertion modifiée.
This commit is contained in:
@@ -71,9 +71,31 @@ afterEach(() => {
|
||||
for (const name of PAGE_GLOBALS) Reflect.deleteProperty(globalThis, name);
|
||||
});
|
||||
|
||||
/**
|
||||
* A broker over an EMPTY wallet: every read answers zero bindings, every write lands
|
||||
* nowhere, and `doc_create` mints a distinct NURI.
|
||||
*
|
||||
* These tests are about the gate, not about storage — but `ensureIdentity()` goes on to
|
||||
* connect the identity it settled, and connecting reaches the broker. It was handed `{}`
|
||||
* here, which no real platform ever presents: `sparql_query` was simply missing, and the
|
||||
* `TypeError` that produced was swallowed by the connection work. Now that a failed
|
||||
* connection is reported (`emulated-verifier/connect.ts`), a fake that cannot answer would
|
||||
* fail every test in this file for a reason none of them is about. An empty wallet — a page
|
||||
* where nobody has signed in yet — is a state the real system produces constantly, and it
|
||||
* changes nothing this file asserts: connecting finds no account and returns.
|
||||
*/
|
||||
function emptyWallet() {
|
||||
let created = 0;
|
||||
return {
|
||||
sparql_query: async (): Promise<unknown> => ({ results: { bindings: [] } }),
|
||||
sparql_update: async (): Promise<void> => undefined,
|
||||
doc_create: async (): Promise<string> => `did:ng:o:gate${++created}`,
|
||||
};
|
||||
}
|
||||
|
||||
function configured(injectedInit?: (...args: unknown[]) => unknown) {
|
||||
configure({
|
||||
ng: {} as never,
|
||||
ng: emptyWallet() as never,
|
||||
useShape: (() => {}) as never,
|
||||
sharedWallet: { fileUrl: "/w.ngw", password: "pw" },
|
||||
// Only where a test needs a hand-over to come back FROM: the delegation is what the
|
||||
|
||||
Reference in New Issue
Block a user