wallet-core: sort transactions ASC by default to not break tests

This commit is contained in:
Florian Dold 2023-10-16 10:25:58 +02:00
parent 6a4e0ffd85
commit 529993da2f
No known key found for this signature in database
GPG Key ID: D2E4F00F29D02A4B
4 changed files with 24 additions and 10 deletions

View File

@ -1006,8 +1006,8 @@ export class WithdrawOperationStatusResponse {
/**
* Response from the merchant.
*/
export class TipPickupGetResponse {
tip_amount: string;
export class RewardPickupGetResponse {
reward_amount: string;
exchange_url: string;
@ -1566,9 +1566,9 @@ export const codecForWithdrawOperationStatusResponse =
.property("wire_types", codecForList(codecForString()))
.build("WithdrawOperationStatusResponse");
export const codecForTipPickupGetResponse = (): Codec<TipPickupGetResponse> =>
buildCodecForObject<TipPickupGetResponse>()
.property("tip_amount", codecForString())
export const codecForRewardPickupGetResponse = (): Codec<RewardPickupGetResponse> =>
buildCodecForObject<RewardPickupGetResponse>()
.property("reward_amount", codecForString())
.property("exchange_url", codecForString())
.property("next_url", codecOptional(codecForString()))
.property("expiration", codecForTimestamp)

View File

@ -62,6 +62,13 @@ export interface TransactionsRequest {
*/
search?: string;
/**
* Sort order of the transaction items.
* By default, items are sorted ascending by their
* main timestamp.
*/
sort?: "ascending" | "descending",
/**
* If true, include all refreshes in the transactions list.
*/

View File

@ -23,7 +23,7 @@ import {
Amounts,
BlindedDenominationSignature,
codecForMerchantTipResponseV2,
codecForTipPickupGetResponse,
codecForRewardPickupGetResponse,
CoinStatus,
DenomKeyType,
encodeCrock,
@ -168,11 +168,11 @@ export async function prepareTip(
const merchantResp = await ws.http.fetch(tipStatusUrl.href);
const tipPickupStatus = await readSuccessResponseJsonOrThrow(
merchantResp,
codecForTipPickupGetResponse(),
codecForRewardPickupGetResponse(),
);
logger.trace(`status ${j2s(tipPickupStatus)}`);
const amount = Amounts.parseOrThrow(tipPickupStatus.tip_amount);
const amount = Amounts.parseOrThrow(tipPickupStatus.reward_amount);
logger.trace("new tip, creating tip record");
await updateExchangeFromUrl(ws, tipPickupStatus.exchange_url);

View File

@ -1290,9 +1290,16 @@ export async function getTransactions(
const txPending = transactions.filter((x) => isPending(x));
const txNotPending = transactions.filter((x) => !isPending(x));
let sortSign: number;
if (transactionsRequest?.sort == "descending") {
sortSign = -1;
} else {
sortSign = 1;
}
const txCmp = (h1: Transaction, h2: Transaction) => {
// Order transactions by timestamp. Newest transactions come first.
const tsCmp = -AbsoluteTime.cmp(
const tsCmp = AbsoluteTime.cmp(
AbsoluteTime.fromPreciseTimestamp(h1.timestamp),
AbsoluteTime.fromPreciseTimestamp(h2.timestamp),
);
@ -1300,7 +1307,7 @@ export async function getTransactions(
if (tsCmp === 0) {
return Math.sign(txOrder[h1.type] - txOrder[h2.type]);
}
return tsCmp;
return sortSign * tsCmp;
};
txPending.sort(txCmp);