import { render, screen } from '@testing-library/react'; import React from 'react'; import { SETTINGS } from '@spinnaker/core'; import type { IKubernetesLoadBalancerDetailsSectionProps } from './IKubernetesLoadBalancerDetailsSectionProps'; import { LoadBalancerStatusSection } from './LoadBalancerStatusSection'; describe('', () => { let kubernetesSettings: any; beforeEach(() => { kubernetesSettings = SETTINGS.providers.kubernetes; }); afterEach(() => { SETTINGS.providers.kubernetes = kubernetesSettings; }); it('renders the default internal DNS name of the load balancer', () => { setTemplate(undefined); render(); expect(fqdnLinks()).toHaveLength(1); expect(fqdnLinks()[0]).toHaveAttribute('href', 'http://backend.dev.svc.cluster.local'); expect(screen.getAllByRole('textbox').map((node) => (node as HTMLTextAreaElement).value)).toContain( 'backend.dev.svc.cluster.local', ); }); it('renders the internal DNS name from the configured template', () => { setTemplate('{{displayName}}-{{namespace}}.{{account | replace:"-cluster":""}}.example.com'); render(); expect(fqdnLinks()).toHaveLength(1); expect(fqdnLinks()[0]).toHaveAttribute('href', 'http://backend-dev.gke1.example.com'); }); it('omits the FQDN when the manifest metadata is missing a name or namespace', () => { const { container } = render(); expect(fqdnLinks()).toHaveLength(0); expect(container).not.toHaveTextContent('svc.cluster.local'); }); it('omits the FQDN when the manifest has no metadata at all', () => { render(); expect(fqdnLinks()).toHaveLength(0); }); function setTemplate(internalDNSNameTemplate?: string) { SETTINGS.providers.kubernetes = { ...kubernetesSettings, defaults: { ...kubernetesSettings?.defaults, internalDNSNameTemplate }, }; } }); const fqdnLinks = () => screen.queryAllByRole('link').filter((link) => String(link.getAttribute('href')).startsWith('http://')); const manifestMetadata = () => ({ name: 'backend', namespace: 'dev' }); const loadBalancer = (metadata: any) => (({ account: 'gke1', displayName: 'service backend', kind: 'service', namespace: 'dev', serverGroups: [], instanceCounts: {}, manifest: { account: 'gke1', manifest: { metadata, spec: {}, status: { loadBalancer: {} }, }, }, } as any) as IKubernetesLoadBalancerDetailsSectionProps['loadBalancer']);