Skip to content

Commit fd40dc0

Browse files
authored
chore: revert formatUtils of ordinal rank test (#29493)
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until this PR meets the canonical Definition of Ready For Review in `docs/readme/ready-for-review.md`. In short: the template must be materially complete (not just section titles present), all status checks must be currently passing, and the only expected follow-up commits must be reviewer-driven. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: ## **Related issues** Fixes: ## **Manual testing steps** ```gherkin Feature: my feature name Scenario: user [verb for user action] Given [describe expected initial app state] When user [verb for user action] Then [describe expected outcome] ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** <!-- Every checklist item must be consciously assessed before marking this PR as "Ready for review". A checked box means you deliberately considered that responsibility, not that you literally performed every action listed. Unchecked boxes are ambiguous: they are not an implicit "N/A" and they are not a silent "skip". See `docs/readme/ready-for-review.md` for the full checklist semantics. --> - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I've included tests if applicable - [ ] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. #### Performance checks (if applicable) - [ ] I've tested on Android - Ideally on a mid-range device; emulator is acceptable - [ ] I've tested with a power user scenario - Use these [power-user SRPs](https://consensyssoftware.atlassian.net/wiki/spaces/TL1/pages/edit-v2/401401446401?draftShareId=9d77e1e1-4bdc-4be1-9ebb-ccd916988d93) to import wallets with many accounts and tokens - [ ] I've instrumented key operations with Sentry traces for production performance metrics - See [`trace()`](/app/util/trace.ts) for usage and [`addToken`](/app/components/Views/AddAsset/components/AddCustomToken/AddCustomToken.tsx#L274) for an example For performance guidelines and tooling, see the [Performance Guide](https://consensyssoftware.atlassian.net/wiki/spaces/TL1/pages/400085549067/Performance+Guide+for+Engineers). ## **Pre-merge reviewer checklist** <!-- Reviewer checklist items follow the same semantics as the author checklist: an unchecked box is ambiguous, a checked box means the reviewer consciously assessed that responsibility. See `docs/readme/ready-for-review.md`. --> - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Low Risk** > Test-only change that doesn’t affect runtime behavior; low risk aside from potential expectations mismatch with intended formatting. > > **Overview** > Adds a new `formatOrdinalRank` test suite in `formatUtils.test.ts` to validate English ordinal suffix formatting, including teen exceptions (11–13), larger ranks, and handling of negative/decimal inputs (absolute value + flooring). > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit e165efb. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup> <!-- /CURSOR_SUMMARY -->
1 parent 082d3d1 commit fd40dc0

1 file changed

Lines changed: 55 additions & 0 deletions

File tree

app/components/UI/Rewards/utils/formatUtils.test.ts

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import {
2727
formatSignedUsd,
2828
formatCompactUsd,
2929
sanitizeOndoTokenName,
30+
formatOrdinalRank,
3031
} from './formatUtils';
3132
import { IconName } from '@metamask/design-system-react-native';
3233
import { getTimeDifferenceFromNow } from '../../../../util/date';
@@ -1368,6 +1369,60 @@ describe('formatUtils', () => {
13681369
});
13691370
});
13701371

1372+
describe('formatOrdinalRank', () => {
1373+
it('formats 1 as 1st', () => {
1374+
expect(formatOrdinalRank(1)).toBe('1st');
1375+
});
1376+
1377+
it('formats 2 as 2nd', () => {
1378+
expect(formatOrdinalRank(2)).toBe('2nd');
1379+
});
1380+
1381+
it('formats 3 as 3rd', () => {
1382+
expect(formatOrdinalRank(3)).toBe('3rd');
1383+
});
1384+
1385+
it('formats 4 as 4th', () => {
1386+
expect(formatOrdinalRank(4)).toBe('4th');
1387+
});
1388+
1389+
it('formats 11 as 11th', () => {
1390+
expect(formatOrdinalRank(11)).toBe('11th');
1391+
});
1392+
1393+
it('formats 12 as 12th', () => {
1394+
expect(formatOrdinalRank(12)).toBe('12th');
1395+
});
1396+
1397+
it('formats 13 as 13th', () => {
1398+
expect(formatOrdinalRank(13)).toBe('13th');
1399+
});
1400+
1401+
it('formats 21 as 21st', () => {
1402+
expect(formatOrdinalRank(21)).toBe('21st');
1403+
});
1404+
1405+
it('formats 22 as 22nd', () => {
1406+
expect(formatOrdinalRank(22)).toBe('22nd');
1407+
});
1408+
1409+
it('formats 23 as 23rd', () => {
1410+
expect(formatOrdinalRank(23)).toBe('23rd');
1411+
});
1412+
1413+
it('formats 111 as 111th', () => {
1414+
expect(formatOrdinalRank(111)).toBe('111th');
1415+
});
1416+
1417+
it('uses absolute value for negative ranks', () => {
1418+
expect(formatOrdinalRank(-5)).toBe('5th');
1419+
});
1420+
1421+
it('floors non-integer ranks', () => {
1422+
expect(formatOrdinalRank(3.7)).toBe('3rd');
1423+
});
1424+
});
1425+
13711426
describe('isPercentChangeNonNegative', () => {
13721427
it('returns true for positive number', () => {
13731428
expect(isPercentChangeNonNegative(0.15)).toBe(true);

0 commit comments

Comments
 (0)