From 5e63048ab6a741ae947f7fe42efcb5206a3f3963 Mon Sep 17 00:00:00 2001 From: Christian Cleberg Date: Mon, 13 Apr 2026 14:20:27 -0500 Subject: fix: mercurial parity and graphql handling - implements consistent UX between repo types - ensures centralized services and routes are used between repo types - graphql error handling is centralized - error messages are consistent Implements: https://todo.sr.ht/~ccleberg/hutch/58 Implements: https://todo.sr.ht/~ccleberg/hutch/59 --- HutchTests/SRHTClientTests.swift | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'HutchTests') diff --git a/HutchTests/SRHTClientTests.swift b/HutchTests/SRHTClientTests.swift index 2ce2529..12d6d0f 100644 --- a/HutchTests/SRHTClientTests.swift +++ b/HutchTests/SRHTClientTests.swift @@ -24,4 +24,33 @@ struct SRHTClientTests { Issue.record("Expected SRHTError.invalidAuthenticatedURL, got \(error).") } } + + @Test + func graphQLErrorUserFacingMessagePreservesValidationDetails() { + let error = SRHTError.graphQLErrors([ + GraphQLError(message: "A tracker named bugs already exists", locations: nil) + ]) + + #expect(error.userFacingMessage == "A tracker named bugs already exists") + } + + @Test + func graphQLErrorUserFacingMessageClassifiesNotFoundResponses() { + let error = SRHTError.graphQLErrors([ + GraphQLError(message: "reference not found", locations: nil) + ]) + + #expect(error.userFacingMessage == "That content is no longer available.") + #expect(error.matchesGraphQLErrorClassification(.missingReference)) + } + + @Test + func graphQLErrorUserFacingMessageClassifiesServiceProvisioningFailures() { + let error = SRHTError.graphQLErrors([ + GraphQLError(message: "No such repository or user found", locations: nil) + ]) + + #expect(error.userFacingMessage == "That account needs to activate this SourceHut service before this action can succeed.") + #expect(error.matchesGraphQLErrorClassification(.serviceNotProvisioned)) + } } -- cgit v1.2.3