yuyu
05/10/2022, 3:32 AMyuyu
05/10/2022, 3:32 AMyuyu
05/10/2022, 3:33 AMexport default function FeaturedAreas() {
const [loading, setLoading] = useState(true);
const [featuredAreas, setFeaturedAreas] = useState(null);
useEffect(() => {
getFeaturedAreas();
return () => setFeaturedAreas([]);
}, []);
async function getFeaturedAreas() {
try {
setLoading(true);
let { data, error, status } = await supabase
.from('towns')
.select('name, slug, image_tablet')
.eq('is_featured', true);
if (error && status !== 406) {
throw error;
}
if (data) {
setFeaturedAreas(data.slice(0, 4)); // get first 4 results only
}
} catch (error) {
alert(error.message);
} finally {
setLoading(false);
}
}
if (loading) return <p>Loading data...</p>;
if (featuredAreas?.length < 1) return <p>No areas found</p>;
return (
<>...</>
)
}
yuyu
05/10/2022, 3:38 AMimport FeaturedAreas from '@components/FeaturedAreas';
import { render, screen, waitFor } from '@testing-library/react';
describe('FeaturedAreas', () => {
beforeEach(() => {
render(<FeaturedAreas />);
});
it('renders loading state', () => {
expect(screen.getByText(/loading data.../i)).toBeInTheDocument();
});
it('renders featured areas', async () => {
await waitFor(() => {
expect(screen.getByText(/Bedok/i)).toBeInTheDocument();
});
});
});
yuyu
05/10/2022, 3:41 AMyuyu
05/10/2022, 3:42 AMXzeta
05/10/2022, 3:45 AMXzeta
05/10/2022, 3:46 AM