import { TcpServiceRender } from './TcpService' import { ResourceDetailDataType } from 'hooks/use-resource-detail' import { renderWithProviders } from 'utils/test' describe('', () => { it('should render the error message', () => { const { getByTestId } = renderWithProviders( , ) expect(getByTestId('error-text')).toBeInTheDocument() }) it('should render the skeleton', () => { const { getByTestId } = renderWithProviders( , ) expect(getByTestId('skeleton')).toBeInTheDocument() }) it('should render the not found page', () => { const { getByTestId } = renderWithProviders( , ) expect(getByTestId('Not found page')).toBeInTheDocument() }) it('should render the service', async () => { const mockData = { loadBalancer: { servers: [ { address: 'http://10.0.1.12:80', }, ], terminationDelay: 10, healthCheck: { interval: '30s', timeout: '10s', port: 8080, unhealthyInterval: '1m', send: 'PING', expect: 'PONG', }, }, serverStatus: { 'http://10.0.1.12:80': 'UP', }, status: 'enabled', usedBy: ['router-test1@docker'], name: 'service-test1', provider: 'docker', type: 'loadbalancer', routers: [ { entryPoints: ['web-redirect'], middlewares: ['redirect@file'], service: 'api2_v2-example-beta1', rule: 'Host(`server`)', tls: {}, status: 'enabled', using: ['web-redirect'], name: 'router-test1@docker', provider: 'docker', }, ], } const { container, getByTestId } = renderWithProviders( // eslint-disable-next-line @typescript-eslint/no-explicit-any , ) const headings = Array.from(container.getElementsByTagName('h1')) const titleTags = headings.filter((h1) => h1.innerHTML === 'service-test1') expect(titleTags.length).toBe(1) const serviceDetails = getByTestId('tcp-service-details') expect(serviceDetails.innerHTML).toContain('Type') expect(serviceDetails.innerHTML).toContain('loadbalancer') expect(serviceDetails.innerHTML).toContain('Provider') expect(serviceDetails.querySelector('svg[data-testid="docker"]')).toBeTruthy() expect(serviceDetails.innerHTML).toContain('Status') expect(serviceDetails.innerHTML).toContain('Success') expect(serviceDetails.innerHTML).toContain('Termination Delay') expect(serviceDetails.innerHTML).toContain('10 ms') const healthCheck = getByTestId('tcp-health-check') expect(healthCheck.innerHTML).toContain('Interval') expect(healthCheck.innerHTML).toContain('30s') expect(healthCheck.innerHTML).toContain('Timeout') expect(healthCheck.innerHTML).toContain('10s') expect(healthCheck.innerHTML).toContain('Port') expect(healthCheck.innerHTML).toContain('8080') expect(healthCheck.innerHTML).toContain('Unhealthy Interval') expect(healthCheck.innerHTML).toContain('1m') expect(healthCheck.innerHTML).toContain('Send') expect(healthCheck.innerHTML).toContain('PING') expect(healthCheck.innerHTML).toContain('Expect') expect(healthCheck.innerHTML).toContain('PONG') const serversList = getByTestId('tcp-servers-list') expect(serversList.childNodes.length).toBe(1) expect(serversList.innerHTML).toContain('http://10.0.1.12:80') const routersTable = getByTestId('routers-table') const tableBody = routersTable.querySelectorAll('div[role="rowgroup"]')[1] expect(tableBody?.querySelectorAll('a[role="row"]')).toHaveLength(1) expect(tableBody?.innerHTML).toContain('router-test1@docker') }) it('should render the service servers from the serverStatus property', async () => { const mockData = { loadBalancer: { terminationDelay: 10, }, status: 'enabled', usedBy: ['router-test1@docker', 'router-test2@docker'], serverStatus: { 'http://10.0.1.12:81': 'UP', }, name: 'service-test2', provider: 'docker', type: 'loadbalancer', routers: [ { entryPoints: ['web-redirect'], middlewares: ['redirect@file'], service: 'api2_v2-example-beta1', rule: 'Host(`server`)', tls: {}, status: 'enabled', using: ['web-redirect'], name: 'router-test1@docker', provider: 'docker', }, { entryPoints: ['web-secured'], service: 'api2_v2-example-beta1', rule: 'Host(`server`)', tls: {}, status: 'enabled', using: ['web-secured'], name: 'router-test2@docker', provider: 'docker', }, ], } const { getByTestId } = renderWithProviders( // eslint-disable-next-line @typescript-eslint/no-explicit-any , ) const serversList = getByTestId('tcp-servers-list') expect(serversList.childNodes.length).toBe(1) expect(serversList.innerHTML).toContain('http://10.0.1.12:81') const routersTable = getByTestId('routers-table') const tableBody = routersTable.querySelectorAll('div[role="rowgroup"]')[1] expect(tableBody?.querySelectorAll('a[role="row"]')).toHaveLength(2) expect(tableBody?.innerHTML).toContain('router-test1@docker') expect(tableBody?.innerHTML).toContain('router-test2@docker') }) it('should not render used by routers table if the usedBy property is empty', async () => { const mockData = { status: 'enabled', usedBy: [], name: 'service-test3', provider: 'docker', type: 'loadbalancer', routers: [], } const { getByTestId } = renderWithProviders( // eslint-disable-next-line @typescript-eslint/no-explicit-any , ) expect(() => { getByTestId('routers-table') }).toThrow('Unable to find an element by: [data-testid="routers-table"]') }) it('should render weighted services', async () => { const mockData = { weighted: { services: [ { name: 'service1@docker', weight: 80, }, { name: 'service2@kubernetes', weight: 20, }, ], }, status: 'enabled', usedBy: ['router-test1@docker'], name: 'weighted-service-test', provider: 'docker', type: 'weighted', routers: [ { entryPoints: ['tcp'], service: 'weighted-service-test', rule: 'HostSNI(`*`)', status: 'enabled', using: ['tcp'], name: 'router-test1@docker', provider: 'docker', }, ], } const { container, getByTestId } = renderWithProviders( // eslint-disable-next-line @typescript-eslint/no-explicit-any , ) const headings = Array.from(container.getElementsByTagName('h1')) const titleTags = headings.filter((h1) => h1.innerHTML === 'weighted-service-test') expect(titleTags.length).toBe(1) const serviceDetails = getByTestId('tcp-service-details') expect(serviceDetails.innerHTML).toContain('Type') expect(serviceDetails.innerHTML).toContain('weighted') expect(serviceDetails.innerHTML).toContain('Provider') expect(serviceDetails.querySelector('svg[data-testid="docker"]')).toBeTruthy() expect(serviceDetails.innerHTML).toContain('Status') expect(serviceDetails.innerHTML).toContain('Success') const weightedServices = getByTestId('tcp-weighted-services') expect(weightedServices.childNodes.length).toBe(2) expect(weightedServices.innerHTML).toContain('service1@docker') expect(weightedServices.innerHTML).toContain('80') expect(weightedServices.innerHTML).toContain('service2@kubernetes') expect(weightedServices.innerHTML).toContain('20') expect(weightedServices.querySelector('svg[data-testid="docker"]')).toBeTruthy() }) })