import { screen } from '@testing-library/react'
import type React from 'react'
import { describe, expect, it, vi } from 'vitest'
import { ProjectCard } from './ProjectCard'
import { ProjectTableRow } from './ProjectTableRow'
import type { OrgProject } from '@/data/projects/org-projects-infinite-query'
import { MANAGED_BY } from '@/lib/constants/infrastructure'
import { render } from '@/tests/helpers'
vi.mock('next/router', () => ({
useRouter: () => ({
push: vi.fn(),
}),
}))
vi.mock('react-inlinesvg', () => ({
default: () =>
,
}))
vi.mock('./ProjectCardStatus', () => ({
ProjectCardStatus: () => ,
}))
vi.mock('@/components/ui/CardButton', () => ({
default: ({ title, footer }: { title: React.ReactNode; footer: React.ReactNode }) => (
),
}))
vi.mock('@/components/ui/ComputeBadgeWrapper', () => ({
ComputeBadgeWrapper: () => ,
}))
vi.mock('@/components/ui/PartnerIcon', () => ({
default: ({ organization }: { organization: { managed_by: string } }) =>
organization.managed_by === MANAGED_BY.BRIVEN ? null : (
),
}))
vi.mock('@/data/prefetchers/project.$ref', () => ({
ProjectIndexPageLink: () => null,
}))
vi.mock('@/hooks/custom-content/useCustomContent', () => ({
useCustomContent: () => ({ infraAwsNimbusLabel: 'AWS Nimbus' }),
}))
vi.mock('@/hooks/misc/useIsFeatureEnabled', () => ({
useIsFeatureEnabled: () => ({ projectHomepageShowInstanceSize: false }),
}))
vi.mock('@/lib/navigation', () => ({
createNavigationHandler: () => vi.fn(),
}))
function createOrgProject(overrides: Partial = {}): OrgProject {
return {
ref: 'proj_1',
name: 'Hammer',
status: 'ACTIVE_HEALTHY',
cloud_provider: 'AWS',
region: 'us-east-1',
inserted_at: '2026-04-09T06:36:14.718416',
is_branch: false,
integration_source: null,
databases: [],
...overrides,
} as OrgProject
}
describe('project integration badges', () => {
it('renders a Stripe badge on project cards from project integration_source', () => {
render()
expect(screen.getByTestId('partner-icon')).toHaveAttribute(
'data-managed-by',
MANAGED_BY.STRIPE_PROJECTS
)
})
it('does not render a Stripe badge on project cards without project integration_source', () => {
render()
expect(screen.queryByTestId('partner-icon')).toBeNull()
})
it('renders a Stripe badge on project table rows without requiring Vercel or GitHub integrations', () => {
render(
)
expect(screen.getByTestId('partner-icon')).toHaveAttribute(
'data-managed-by',
MANAGED_BY.STRIPE_PROJECTS
)
})
it('does not render a Stripe badge on project table rows without project integration_source', () => {
render(
)
expect(screen.queryByTestId('partner-icon')).toBeNull()
})
})