import React from 'react'
import { renderWithProviders, screen } from '@/__tests__/utils/test-helpers'
import Items from './items'
jest.mock('lucide-react', () => ({
Zap: () => ,
Shield: () => ,
Globe: () => ,
Smartphone: () => ,
}))
describe('Items Component', () => {
it('should render items section with heading', () => {
renderWithProviders()
expect(screen.getByText('Why Choose Portfolio Host?')).toBeInTheDocument()
})
it('should display section description', () => {
renderWithProviders()
expect(screen.getByText(/everything you need to share your work/i)).toBeInTheDocument()
})
it('should display all default items', () => {
renderWithProviders()
expect(screen.getByText('Lightning Fast')).toBeInTheDocument()
expect(screen.getByText('Secure & Reliable')).toBeInTheDocument()
expect(screen.getByText('Custom Domains')).toBeInTheDocument()
expect(screen.getByText('Mobile Optimized')).toBeInTheDocument()
})
it('should display item descriptions', () => {
renderWithProviders()
expect(screen.getByText(/deploy your portfolio instantly/i)).toBeInTheDocument()
expect(screen.getByText(/enterprise-grade security/i)).toBeInTheDocument()
})
it('should accept custom items', () => {
const customItems = [
{
id: 'custom',
title: 'Custom Feature',
description: 'This is a custom feature',
icon: 'zap' as const,
},
]
renderWithProviders()
expect(screen.getByText('Custom Feature')).toBeInTheDocument()
expect(screen.getByText('This is a custom feature')).toBeInTheDocument()
})
it('should have responsive grid layout', () => {
const { container } = renderWithProviders()
const grid = container.querySelector('.grid')
expect(grid).toHaveClass('grid-cols-1', 'md:grid-cols-2', 'lg:grid-cols-4')
})
it('should display icons for each item', () => {
renderWithProviders()
const icons = screen.getAllByTestId(/-(icon|zap-icon|shield-icon|globe-icon|smartphone-icon)/)
expect(icons.length).toBeGreaterThan(0)
})
it('should have hover effect on items', () => {
const { container } = renderWithProviders()
const items = container.querySelectorAll('[class*="hover:shadow"]')
expect(items.length).toBeGreaterThan(0)
})
})