Mirror packaged proof across release-facing pages
This commit is contained in:
parent
3776688597
commit
1dbb9562cb
3 changed files with 152 additions and 8 deletions
|
|
@ -1036,7 +1036,44 @@ describe('public marketing pages', () => {
|
|||
role: null,
|
||||
accessStatus: null,
|
||||
},
|
||||
platforms: [],
|
||||
platforms: [
|
||||
{
|
||||
platform_key: 'windows',
|
||||
platform: 'Windows',
|
||||
subtitle: 'Primary shipping lane',
|
||||
details: 'Current packaged validation is strongest on the Windows Unreal lane.',
|
||||
configured: true,
|
||||
channel: 'candidate',
|
||||
version: '1.0.0',
|
||||
build_id: 'win64-1000',
|
||||
published_at: '2026-06-22T00:00:00.000Z',
|
||||
file_name: 'HyperTwist-Windows.zip',
|
||||
file_size_bytes: 1048576,
|
||||
checksum_sha256: 'abc123',
|
||||
download_url: null,
|
||||
download_available: false,
|
||||
validation_summary: {
|
||||
lane: 'Windows Unreal packaged validation',
|
||||
result: 'passed',
|
||||
generated_at: '2026-06-22T01:43:08.7625247Z',
|
||||
configuration: 'Development',
|
||||
skip_build: true,
|
||||
smoke_map_count: 2,
|
||||
smoke_maps: [
|
||||
{
|
||||
map_url: '/Game/HyperTwistTraining/Maps/L_HyperTwist_Magic120CellTraining',
|
||||
label: 'Magic120Cell dedicated-family training map',
|
||||
result: 'passed',
|
||||
},
|
||||
{
|
||||
map_url: '/Game/HyperTwistTraining/Maps/L_HyperTwist_MagicCube5DTraining',
|
||||
label: 'MagicCube5D dedicated-family training map',
|
||||
result: 'passed',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
})
|
||||
|
||||
|
|
@ -1049,6 +1086,8 @@ describe('public marketing pages', () => {
|
|||
expect(screen.getByText('Release rollout checklist')).toBeTruthy()
|
||||
expect(screen.getByText('Read the actual lane that changed')).toBeTruthy()
|
||||
expect(screen.getByText(/Pair the release note with the current packaged-validation summary/i)).toBeTruthy()
|
||||
expect(screen.getByText('Current packaged desktop proof')).toBeTruthy()
|
||||
expect(screen.getByText('Packaged validation passed')).toBeTruthy()
|
||||
expect(await screen.findByRole('link', { name: /open release feed/i })).toBeTruthy()
|
||||
expect(document.title).toBe('HyperTwist release notes | HyperTwist')
|
||||
expect(document.head.querySelector('meta[property=\"og:url\"]')?.getAttribute('content')).toBe('https://hypertwist.app/changelog')
|
||||
|
|
@ -1107,13 +1146,52 @@ describe('public marketing pages', () => {
|
|||
role: null,
|
||||
accessStatus: null,
|
||||
},
|
||||
platforms: [],
|
||||
platforms: [
|
||||
{
|
||||
platform_key: 'windows',
|
||||
platform: 'Windows',
|
||||
subtitle: 'Primary shipping lane',
|
||||
details: 'Current packaged validation is strongest on the Windows Unreal lane.',
|
||||
configured: true,
|
||||
channel: 'candidate',
|
||||
version: '1.0.0',
|
||||
build_id: 'win64-1000',
|
||||
published_at: '2026-06-22T00:00:00.000Z',
|
||||
file_name: 'HyperTwist-Windows.zip',
|
||||
file_size_bytes: 1048576,
|
||||
checksum_sha256: 'abc123',
|
||||
download_url: null,
|
||||
download_available: false,
|
||||
validation_summary: {
|
||||
lane: 'Windows Unreal packaged validation',
|
||||
result: 'passed',
|
||||
generated_at: '2026-06-22T01:43:08.7625247Z',
|
||||
configuration: 'Development',
|
||||
skip_build: true,
|
||||
smoke_map_count: 2,
|
||||
smoke_maps: [
|
||||
{
|
||||
map_url: '/Game/HyperTwistTraining/Maps/L_HyperTwist_Magic120CellTraining',
|
||||
label: 'Magic120Cell dedicated-family training map',
|
||||
result: 'passed',
|
||||
},
|
||||
{
|
||||
map_url: '/Game/HyperTwistTraining/Maps/L_HyperTwist_MagicCube5DTraining',
|
||||
label: 'MagicCube5D dedicated-family training map',
|
||||
result: 'passed',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
})
|
||||
|
||||
renderWithProviders(<OpenSourceNoticesPage />, ['/open-source-notices'])
|
||||
expect(screen.getByText('Distribution doctrine')).toBeTruthy()
|
||||
expect(screen.getByText('Public pages are distribution surfaces')).toBeTruthy()
|
||||
const noticesView = renderWithProviders(<OpenSourceNoticesPage />, ['/open-source-notices'])
|
||||
expect(within(noticesView.container).getByText('Distribution doctrine')).toBeTruthy()
|
||||
expect(within(noticesView.container).getByText('Public pages are distribution surfaces')).toBeTruthy()
|
||||
expect(within(noticesView.container).getByText('Current packaged desktop proof')).toBeTruthy()
|
||||
expect(within(noticesView.container).getByText('Packaged validation passed')).toBeTruthy()
|
||||
|
||||
renderWithProviders(<PrivacyPage />, ['/privacy'])
|
||||
expect(screen.getByText('Practical privacy boundary')).toBeTruthy()
|
||||
|
|
@ -1123,8 +1201,10 @@ describe('public marketing pages', () => {
|
|||
expect(screen.getByText('Terms in practice')).toBeTruthy()
|
||||
expect(screen.getByText('Access model')).toBeTruthy()
|
||||
|
||||
renderWithProviders(<ShippingPaymentPage />, ['/shipping-payment'])
|
||||
expect(screen.getByText('Digital delivery workflow')).toBeTruthy()
|
||||
expect(screen.getByText('Protected entitlement handoff')).toBeTruthy()
|
||||
const shippingPaymentView = renderWithProviders(<ShippingPaymentPage />, ['/shipping-payment'])
|
||||
expect(within(shippingPaymentView.container).getByText('Digital delivery workflow')).toBeTruthy()
|
||||
expect(within(shippingPaymentView.container).getByText('Protected entitlement handoff')).toBeTruthy()
|
||||
expect(within(shippingPaymentView.container).getByText('Current packaged desktop proof')).toBeTruthy()
|
||||
expect(within(shippingPaymentView.container).getByText('Packaged validation passed')).toBeTruthy()
|
||||
})
|
||||
})
|
||||
|
|
|
|||
|
|
@ -338,6 +338,10 @@ export function OpenSourceNoticesPage() {
|
|||
() => resolveReleaseManifestView(releaseManifestQuery.data?.manifest, buildPublicReleaseManifestFallback()),
|
||||
[releaseManifestQuery.data?.manifest],
|
||||
)
|
||||
const windowsValidationPlatform = useMemo(
|
||||
() => releaseManifest.platforms.find((platform) => platform.platform_key === 'windows' && platform.validation_summary) ?? null,
|
||||
[releaseManifest],
|
||||
)
|
||||
|
||||
return (
|
||||
<>
|
||||
|
|
@ -399,6 +403,20 @@ export function OpenSourceNoticesPage() {
|
|||
<PublicLaunchStatus title="Notices and corresponding-source readiness" />
|
||||
</Section>
|
||||
|
||||
{windowsValidationPlatform ? (
|
||||
<Section title="Current packaged desktop proof">
|
||||
<ReleaseValidationSummary platform={windowsValidationPlatform} />
|
||||
<div className="button-row top-gap">
|
||||
<Link className="button button--ghost" to="/download">
|
||||
Open download center
|
||||
</Link>
|
||||
<Link className="button button--ghost" to="/changelog">
|
||||
Review release notes
|
||||
</Link>
|
||||
</div>
|
||||
</Section>
|
||||
) : null}
|
||||
|
||||
<Section
|
||||
title="Distribution doctrine"
|
||||
description="These public legal surfaces should explain why the website is part of the release story without pretending it has replaced the native simulator."
|
||||
|
|
@ -515,6 +533,20 @@ export function TermsPage() {
|
|||
}
|
||||
|
||||
export function ShippingPaymentPage() {
|
||||
const releaseManifestQuery = useQuery({
|
||||
queryKey: ['release-manifest', 'public'],
|
||||
queryFn: getReleaseManifest,
|
||||
retry: false,
|
||||
})
|
||||
const releaseManifest = useMemo(
|
||||
() => resolveReleaseManifestView(releaseManifestQuery.data?.manifest, buildPublicReleaseManifestFallback()),
|
||||
[releaseManifestQuery.data?.manifest],
|
||||
)
|
||||
const windowsValidationPlatform = useMemo(
|
||||
() => releaseManifest.platforms.find((platform) => platform.platform_key === 'windows' && platform.validation_summary) ?? null,
|
||||
[releaseManifest],
|
||||
)
|
||||
|
||||
return (
|
||||
<>
|
||||
<SiteMetadata
|
||||
|
|
@ -556,6 +588,20 @@ export function ShippingPaymentPage() {
|
|||
))}
|
||||
</div>
|
||||
</Section>
|
||||
|
||||
{windowsValidationPlatform ? (
|
||||
<Section title="Current packaged desktop proof">
|
||||
<ReleaseValidationSummary platform={windowsValidationPlatform} />
|
||||
<div className="button-row top-gap">
|
||||
<Link className="button button--ghost" to="/download">
|
||||
Open download center
|
||||
</Link>
|
||||
<Link className="button button--ghost" to="/open-source-notices">
|
||||
Review notices
|
||||
</Link>
|
||||
</div>
|
||||
</Section>
|
||||
) : null}
|
||||
</MarketingShell>
|
||||
</>
|
||||
)
|
||||
|
|
|
|||
|
|
@ -876,6 +876,10 @@ export function ChangelogPage() {
|
|||
() => resolveReleaseManifestView(releaseManifestQuery.data?.manifest, buildPublicReleaseManifestFallback()),
|
||||
[releaseManifestQuery.data?.manifest],
|
||||
)
|
||||
const windowsValidationPlatform = useMemo(
|
||||
() => releaseManifest.platforms.find((platform) => platform.platform_key === 'windows' && platform.validation_summary) ?? null,
|
||||
[releaseManifest],
|
||||
)
|
||||
|
||||
return (
|
||||
<>
|
||||
|
|
@ -938,6 +942,20 @@ export function ChangelogPage() {
|
|||
</div>
|
||||
</Section>
|
||||
|
||||
{windowsValidationPlatform ? (
|
||||
<Section title="Current packaged desktop proof">
|
||||
<ReleaseValidationSummary platform={windowsValidationPlatform} />
|
||||
<div className="button-row top-gap">
|
||||
<Link className="button button--ghost" to="/download">
|
||||
Open download center
|
||||
</Link>
|
||||
<Link className="button button--ghost" to="/docs">
|
||||
Open public manual
|
||||
</Link>
|
||||
</div>
|
||||
</Section>
|
||||
) : null}
|
||||
|
||||
{releaseManifest.release_notes_url ? (
|
||||
<Section title="External release notes">
|
||||
<a className="button button--ghost" href={releaseManifest.release_notes_url} target="_blank" rel="noreferrer">
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue