Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import {
MIN_CLAIMABLE_BONUS_USD,
isClaimableBonusAboveThreshold,
} from './MerklRewards.utils';

describe('MerklRewards.utils', () => {
describe('MIN_CLAIMABLE_BONUS_USD', () => {
it('is 0.01', () => {
expect(MIN_CLAIMABLE_BONUS_USD).toBe(0.01);
});
});

describe('isClaimableBonusAboveThreshold', () => {
it('returns false for null', () => {
expect(isClaimableBonusAboveThreshold(null)).toBe(false);
});

it('returns false for empty string', () => {
expect(isClaimableBonusAboveThreshold('')).toBe(false);
});

it('returns false for "< 0.01" (useMerklRewards small-amount format)', () => {
expect(isClaimableBonusAboveThreshold('< 0.01')).toBe(false);
});

it('returns false for values below 0.01', () => {
expect(isClaimableBonusAboveThreshold('0')).toBe(false);
expect(isClaimableBonusAboveThreshold('0.005')).toBe(false);
expect(isClaimableBonusAboveThreshold('0.009')).toBe(false);
});

it('returns true for exactly 0.01 (boundary)', () => {
expect(isClaimableBonusAboveThreshold('0.01')).toBe(true);
});

it('returns true for values above 0.01', () => {
expect(isClaimableBonusAboveThreshold('0.02')).toBe(true);
expect(isClaimableBonusAboveThreshold('1.50')).toBe(true);
expect(isClaimableBonusAboveThreshold('10')).toBe(true);
});

it('returns false for non-numeric string', () => {
expect(isClaimableBonusAboveThreshold('abc')).toBe(false);
});

it('returns false for string starting with "<"', () => {
expect(isClaimableBonusAboveThreshold('< 1.00')).toBe(false);
});
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
/** Minimum claimable bonus (USD) to show the "Claim bonus" CTA; below this we show "3% bonus" instead. */
export const MIN_CLAIMABLE_BONUS_USD = 0.01;

/**
* Returns true when the claimable reward string represents an amount >= MIN_CLAIMABLE_BONUS_USD.
* useMerklRewards returns "< 0.01" for very small amounts; we do not show "Claim bonus" for those.
*/
export const isClaimableBonusAboveThreshold = (
reward: string | null,
): boolean => {
if (!reward || typeof reward !== 'string') return false;
if (reward.startsWith('<')) return false;
const value = parseFloat(reward);
if (Number.isNaN(value)) return false;
return value >= MIN_CLAIMABLE_BONUS_USD;
};
Loading
Loading