Promote: staging -> develop - #940
Merged
Merged
Conversation
…935) EN: The buy screen shows the Rappen-exact charge under the amount field without overwriting what the user typed. Labelling a draft for handbook flows and later marking it ready no longer starts a second Maestro run. DE: Die Kaufseite zeigt den rappengenauen Betrag unter dem Feld, ohne die Eingabe zu überschreiben. Ein gelabelter Draft startet beim Ready keinen zweiten Maestro-Lauf. <details> <summary>Details</summary> Buy: - `payableText` already holds the conversion result. A read-only line under the amount field renders it when it is non-empty and differs from the typed amount (e.g. field `300`, line `299.46 CHF`). - Comparison is numeric, so `300` and `300.00` stay hidden. Punctuation lives in the widget template, not the ARB value. - Tests pin visibility of `299.46` and hide when payable is empty, string-equal, or numerically equal. - Visual regression: `buy_charged_amount` golden (field `300`, exact charge `299.46 CHF` under it). Baseline generated on the self-hosted runner. CI: - Observed on #934: `tier3:full` started Maestro; `ready_for_review` started a second macos-latest run on the same SHA because the labeled concurrency group is unique. - `ready_for_review` is removed from Tier 3 `pull_request` types. `labeled` starts a run only when the event label is `tier3:full`; `unlabeled` does not start a run. `pull-request.yaml` is unchanged (draft-skip means ready is the first real Analyze/Visual run). </details> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
EN: These tests pin that a EUR buy sends currency EUR and shows the EUR settlement IBAN from the quote, not a leftover CHF IBAN. Production buy code is unchanged: it already forwards the selected currency and renders the IBAN the API returns. The confirm button is not locked; an EUR quote can still be tapped to confirm. DE: Diese Tests stellen sicher, dass ein EUR-Kauf die Währung EUR sendet und die EUR-IBAN aus der Quote zeigt, nicht eine übrig gebliebene CHF-IBAN. Der Produktionscode bleibt unverändert: er leitet die gewählte Währung bereits weiter und zeigt die IBAN der API. Der Bestätigen-Button wird nicht gesperrt; eine EUR-Quote lässt sich weiterhin bestätigen. <details> <summary>Details</summary> Pins the EUR vs CHF buy-quote IBAN contract in existing test files: - Request body for `PUT /v1/realunit/buy` with `Currency.eur` is `currency: EUR` and maps the EUR IBAN from the mock response. - Default/CHF path maps the CHF settlement IBAN. - `RealUnitBuyPaymentInfoDto.fromJson` parses EUR IBAN + EUR currency. - `BuyPaymentInfoCubit` success for EUR keeps the EUR IBAN. - After converter settlement in EUR, `BuyView` refetches the quote with `Currency.eur`. - On an EUR `BuyPaymentInfoSuccess`, `BuyConfirmButton` receives the EUR IBAN (not the CHF leftover). - Tapping confirm on an EUR quote still calls `confirmPayment`. - Payment details (after confirm) render the formatted EUR IBAN and amount-in EUR. IBANs used as distinct fixtures: - CHF: `CH2208307000560946309` → `CH22 0830 7000 5609 4630 9` - EUR: `CH9708307000560946317` → `CH97 0830 7000 5609 4631 7` No production `lib/` changes. </details>
…olden (#939) EN: A 502 with a plain-text body no longer crashes JSON parsing into a FormatException on the buy quote screen. The quote retry button remains; if the API sent no JSON message, only Retry is shown. A visual baseline pins that retry-only state. DE: Ein 502 mit Klartext-Body erscheint auf dem Kauf-Quote-Screen nicht mehr als FormatException. Der Wiederholen-Button bleibt; ohne JSON-Message zeigt die UI nur Wiederholen. Eine visuelle Baseline pinnt diesen Zustand. <details> <summary>Details</summary> Gateway 502 responses with a non-JSON body (e.g. `error code: 502`) were passed through `jsonDecode`, which threw `FormatException`. That string was stored on `BuyPaymentInfoFailure.message` and rendered as the info title. `ApiException.fromBody` now decodes JSON objects via `fromJson` and otherwise yields an empty user-facing message with the HTTP status. The buy payment-info service uses it on error paths. HTTP 502 is mapped like 503 (`priceSourceUnavailable`). The catch-all no longer copies `Object.toString()` into the UI. A golden (`buy_price_source_unavailable_empty`) pins the empty-message retry-only buy screen. The PNG is generated on the self-hosted runner via `golden-regenerate.yaml`, not locally. </details> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Contributor
|
Wir warten noch auf den EUR PR |
EN: Buying a large CHF amount no longer dies on Retry. The app now shows the quote cap when the order is above inventory, and it reads 105.000 / 90'000 as one hundred five thousand / ninety thousand instead of rejecting the input. DE: Ein grosser CHF-Betrag stirbt nicht mehr am Retry. Die App zeigt die Quote-Obergrenze, wenn der Auftrag über dem Bestand liegt, und liest 105.000 / 90'000 als einhundertfünftausend / neunzigtausend statt die Eingabe zu verwerfen. <details> <summary>Details</summary> Two buy-CTA failures: 1. Quote `AmountTooHigh` / `LimitExceeded` with `maxVolume` used to map to unknown + Retry, which re-quoted the same over-limit amount. 2. CHF/EUR have at most two decimal places, so `105.000` / `90,000` / `90'000` are thousands groups. The parser treated them as invalid (or, on the raw quote API, `105.000` is 105 francs). The field now accepts the apostrophe and the parser keeps the thousands. Screenshots of min/max and other quote outcomes now show the typed amount in the fields, as on the live screen. The max-amount hint still appears only after an over-inventory quote. </details> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
#941) EN: The app no longer infers a default currency from the phone locale. Until the user picks one, the display currency is EUR, then the account currency from GET /v2/user (set from residence on the API: CH/LI → CHF, otherwise EUR). A late apply is dropped if the wallet closed or was replaced. DE: Die App rät die Default-Währung nicht mehr aus der Telefon-Locale. Ohne gespeicherte Wahl gilt EUR, danach die Account-Währung von GET /v2/user (API setzt sie aus dem Wohnsitz: CH/LI → CHF, sonst EUR). Eine späte Apply wird verworfen, wenn die Wallet geschlossen oder ersetzt wurde. <details> <summary>Details</summary> Local prefs still win. `ApplyAccountCurrencyEvent` is ignored when a currency is already stored and is not written to prefs. Wallet open fetches GET /v2/user and applies that currency. Wallet close restores the unset default (EUR). Replacing the open wallet instance clears then re-applies. KYC applies the field after `getUser` only while that same wallet instance is still open. Buy reads the settings currency from context. The quote is cleared when the converter currency changes, and Confirm stays hidden while the success quote currency lags the picker. Dashboard drops in-flight price/chart/history for the previous currency. Sell is unchanged. </details>
TaprootFreak
approved these changes
Aug 25, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Automatic Staging PR
This PR was automatically created after changes were pushed to staging.
Commits: 1 new commit(s)
Checklist