From e1a32e88ec3d5cae5391ca818a0c9ca204029a66 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 2 Jun 2026 02:39:36 +0000 Subject: [PATCH 1/3] Initial plan From c744700532dbc22717e2d38ec15606792df6f001 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 2 Jun 2026 03:06:19 +0000 Subject: [PATCH 2/3] feat: randomize home page free and open source quote Co-authored-by: IEvangelist <7679720+IEvangelist@users.noreply.github.com> --- .../components/FreeAndOpenSourceAside.astro | 11 ++++++++++- .../unit/custom-components.vitest.test.ts | 19 ++++++++++++++++--- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/frontend/src/components/FreeAndOpenSourceAside.astro b/src/frontend/src/components/FreeAndOpenSourceAside.astro index 0d661cbfd..de100d130 100644 --- a/src/frontend/src/components/FreeAndOpenSourceAside.astro +++ b/src/frontend/src/components/FreeAndOpenSourceAside.astro @@ -2,12 +2,21 @@ /** * This aside component displays a localized "Free & Open Source" message. */ +const aspireQuotes = [ + 'Aspire is the cloud-native app model for .NET.', + 'Aspire is orchestration for your distributed app stack.', + 'Aspire is local-first developer tooling for cloud-native apps.', + 'Aspire is built for observable, production-ready app development.', + 'Aspire is open source from app model to deployment artifacts.', +]; + +const randomQuote = aspireQuotes[Math.floor(Math.random() * aspireQuotes.length)]; ---

{Astro.locals.t('landing.freeAndOSS')}

- {Astro.locals.t('landing.aspirePromise')} + {randomQuote}

diff --git a/src/frontend/tests/unit/custom-components.vitest.test.ts b/src/frontend/tests/unit/custom-components.vitest.test.ts index ca4e10f2c..13a778641 100644 --- a/src/frontend/tests/unit/custom-components.vitest.test.ts +++ b/src/frontend/tests/unit/custom-components.vitest.test.ts @@ -1,4 +1,4 @@ -import { describe, expect, it } from 'vitest'; +import { describe, expect, it, vi } from 'vitest'; import heroImage from '@assets/aspire-hero.png'; import AccessibleCodeButtons from '@components/AccessibleCodeButtons.astro'; @@ -404,9 +404,9 @@ const basicRenderCases: BasicRenderCase[] = [ includes: ['data-lang-name="TypeScript"', 'data-lang-name="C#"', 'And more...'], }, { - name: 'FreeAndOpenSourceAside renders translated copy', + name: 'FreeAndOpenSourceAside renders localized title', Component: FreeAndOpenSourceAside, - includes: ['landing.freeAndOSS', 'landing.aspirePromise'], + includes: ['landing.freeAndOSS'], }, { name: 'OsAwareTabs renders shell tabs and sync key script', @@ -642,6 +642,19 @@ describe('custom Astro component render coverage', () => { }); } + it('renders different Aspire quotes for different random values', async () => { + const randomSpy = vi.spyOn(Math, 'random'); + randomSpy.mockReturnValueOnce(0).mockReturnValueOnce(0.99); + + const firstRender = normalizeHtml(await renderComponent(FreeAndOpenSourceAside)); + const secondRender = normalizeHtml(await renderComponent(FreeAndOpenSourceAside)); + + expect(firstRender).toContain('Aspire is the cloud-native app model for .NET.'); + expect(secondRender).toContain('Aspire is open source from app model to deployment artifacts.'); + + randomSpy.mockRestore(); + }); + it('filters GitHubRepoStats by repository name when multiple stats are provided', async () => { const html = normalizeHtml( await renderComponent(GitHubRepoStats, { From bfe05dd406b1faedd0ef63f899989b7e1f756ec1 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 2 Jun 2026 03:12:38 +0000 Subject: [PATCH 3/3] fix: rotate homepage free and open source quote per visit Co-authored-by: IEvangelist <7679720+IEvangelist@users.noreply.github.com> --- .../components/FreeAndOpenSourceAside.astro | 16 +++++++++++----- .../unit/custom-components.vitest.test.ts | 18 +++++++----------- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/frontend/src/components/FreeAndOpenSourceAside.astro b/src/frontend/src/components/FreeAndOpenSourceAside.astro index de100d130..290d3fc51 100644 --- a/src/frontend/src/components/FreeAndOpenSourceAside.astro +++ b/src/frontend/src/components/FreeAndOpenSourceAside.astro @@ -9,17 +9,23 @@ const aspireQuotes = [ 'Aspire is built for observable, production-ready app development.', 'Aspire is open source from app model to deployment artifacts.', ]; - -const randomQuote = aspireQuotes[Math.floor(Math.random() * aspireQuotes.length)]; ---

{Astro.locals.t('landing.freeAndOSS')}

-

- {randomQuote} -

+

{aspireQuotes[0]}

+ +