From 329a953dcdf62d06b4357a998f641ba1aa980ab4 Mon Sep 17 00:00:00 2001 From: Sergiy Dybskiy Date: Mon, 5 Oct 2026 23:10:43 -0400 Subject: [PATCH] Add loyalty tiers Co-authored-by: Claude --- .github/workflows/review.yml | 2 -- apps/pr-reviewer/fixtures/demo-pr/loyalty.test.ts | 8 ++++++++ apps/pr-reviewer/fixtures/demo-pr/loyalty.ts | 10 +++++++--- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/.github/workflows/review.yml b/.github/workflows/review.yml index 171dd55..80b5bae 100644 --- a/.github/workflows/review.yml +++ b/.github/workflows/review.yml @@ -26,8 +26,6 @@ jobs: working-directory: apps/pr-reviewer steps: - uses: actions/checkout@v4 - with: - fetch-depth: 0 - uses: actions/setup-node@v4 with: node-version: 22 diff --git a/apps/pr-reviewer/fixtures/demo-pr/loyalty.test.ts b/apps/pr-reviewer/fixtures/demo-pr/loyalty.test.ts index 25bb6b2..4410125 100644 --- a/apps/pr-reviewer/fixtures/demo-pr/loyalty.test.ts +++ b/apps/pr-reviewer/fixtures/demo-pr/loyalty.test.ts @@ -41,4 +41,12 @@ describe('pointsFor', () => { it('returns a whole number', () => { expect(Number.isInteger(pointsFor(777))).toBe(true); }); + + it('awards 2 points per dollar to gold members', () => { + expect(pointsFor(10_000, 'gold')).toBe(200); + }); + + it('defaults to the standard tier', () => { + expect(pointsFor(10_000, 'standard')).toBe(pointsFor(10_000)); + }); }); diff --git a/apps/pr-reviewer/fixtures/demo-pr/loyalty.ts b/apps/pr-reviewer/fixtures/demo-pr/loyalty.ts index de0d988..4f4ce77 100644 --- a/apps/pr-reviewer/fixtures/demo-pr/loyalty.ts +++ b/apps/pr-reviewer/fixtures/demo-pr/loyalty.ts @@ -1,4 +1,8 @@ -/** One and a half points per whole dollar spent, rounded once after the multiplier. */ -export function pointsFor(totalCents: number): number { - return Math.round((totalCents / 100) * 1.5); +export type LoyaltyTier = 'standard' | 'gold'; + +const TIER_MULTIPLIER: Record = { standard: 1.5, gold: 2 }; + +/** Points per whole dollar spent depend on the tier, rounded once after the multiplier. */ +export function pointsFor(totalCents: number, tier: LoyaltyTier = 'standard'): number { + return Math.round((totalCents / 100) * TIER_MULTIPLIER[tier]); }