Skip to content

Commit

Permalink
Added Category Dashboard
Browse files Browse the repository at this point in the history
  • Loading branch information
13XAVI committed Jul 26, 2024
1 parent 9cd870c commit aad3a1f
Show file tree
Hide file tree
Showing 7 changed files with 571 additions and 218 deletions.
6 changes: 6 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

102 changes: 102 additions & 0 deletions src/__test__/dashBoard/Categories.test.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
import React from 'react';
import { render, screen, fireEvent, waitFor } from '@testing-library/react';
import { Provider } from 'react-redux';
import { configureStore } from '@reduxjs/toolkit';
import { MemoryRouter } from 'react-router-dom';
import axios from 'axios';
import MockAdapter from 'axios-mock-adapter';
import Category from '@/components/dashBoard/Category';
import categoriesReducer from '@/features/Products/categorySlice';

const renderWithProviders = (ui: React.ReactElement) => {
const store = configureStore({ reducer: { categories: categoriesReducer } });
return render(
<Provider store={store}>
<MemoryRouter>{ui}</MemoryRouter>
</Provider>
);
};

describe('Category Component', () => {
let mock: MockAdapter;

beforeEach(() => {
mock = new MockAdapter(axios);
});

afterEach(() => {
mock.restore();
});

it('should render the component with initial state', () => {
renderWithProviders(<Category />);
expect(screen.getByText(/Categories/i)).toBeInTheDocument();
});

it('renders Categories component with category icons', async () => {
mock.onGet('/api/categories').reply(200, [
{
id: 1,
name: 'Category 1',
description: 'Description 1',
icon: 'https://example.com/icon1.png',
},
{
id: 2,
name: 'Category 2',
description: 'Description 2',
icon: 'https://example.com/icon2.png',
},
]);

renderWithProviders(<Category />);

const icons = await screen.findAllByRole('img');
icons.forEach((icon) => {
expect(icon).toHaveAttribute('alt');
});
});

it('paginates categories', async () => {
mock.onGet('/api/categories').reply(
200,
Array.from({ length: 20 }, (_, i) => ({
id: i + 1,
name: `Category ${i + 1}`,
description: `Description ${i + 1}`,
icon: `https://example.com/icon${i + 1}.png`,
}))
);

renderWithProviders(<Category />);

const nextPageButton = await screen.findByRole('button', { name: /next/i });
fireEvent.click(nextPageButton);
expect(nextPageButton).toBeInTheDocument();
});

it('should render the component with initial state', async () => {
renderWithProviders(<Category />);
await waitFor(() =>
expect(screen.getByText(/Categories/i)).toBeInTheDocument()
);
});

it('paginates categories', async () => {
mock.onGet('/api/categories').reply(
200,
Array.from({ length: 20 }, (_, i) => ({
id: i + 1,
name: `Category ${i + 1}`,
description: `Description ${i + 1}`,
icon: `https://example.com/icon${i + 1}.png`,
}))
);

renderWithProviders(<Category />);

const nextPageButton = await screen.findByRole('button', { name: /next/i });
fireEvent.click(nextPageButton);
expect(nextPageButton).toBeInTheDocument();
});
});
46 changes: 16 additions & 30 deletions src/__test__/dashBoard/Seller.test.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import axios from 'axios';
import { Provider } from 'react-redux';
import { MemoryRouter } from 'react-router-dom';
import { describe, it, expect } from 'vitest';
import { describe, it, expect, beforeEach } from 'vitest';
import MockAdapter from 'axios-mock-adapter';
import { render, screen, fireEvent } from '@testing-library/react';
import { render, screen, waitFor } from '@testing-library/react';
import { configureStore } from '@reduxjs/toolkit';
import Seller from '@/pages/Seller';
import productReducer from '@/app/Dashboard/AllProductSlices';
Expand Down Expand Up @@ -82,42 +82,25 @@ describe('Seller Component', () => {
expect(screen.getByText('Sellers')).toBeInTheDocument();
});

it('should display elements of the table', () => {
renderWithProviders(<Seller />);

expect(screen.getByText(/Image/)).toBeInTheDocument();
expect(screen.getByText(/First Name/)).toBeInTheDocument();
expect(screen.getByText(/Last Name/)).toBeInTheDocument();
expect(screen.getByText(/Email/)).toBeInTheDocument();
expect(screen.getByText(/Items Count/)).toBeInTheDocument();
expect(screen.getByText(/Date/)).toBeInTheDocument();
expect(screen.getByText(/Status/)).toBeInTheDocument();
expect(screen.getByText(/Action/)).toBeInTheDocument();
});

it('should filter sellers by search term', async () => {
// Mock API response
it('should display elements of the table', async () => {
mock
.onGet(`${import.meta.env.VITE_BASE_URL}/user/getAllUsers`)
.reply(200, { users: mockBuyers });

// Render component
renderWithProviders(<Seller />);

// Dispatch fetchBuyers to populate the state
await store.dispatch(fetchBuyers() as any);

// Perform search action
const searchInput = screen.getByPlaceholderText('Search Seller');
fireEvent.change(searchInput, { target: { value: 'Vendor1' } });

// Check filtered results
expect(screen.getByText('Vendor1')).toBeInTheDocument();
expect(screen.queryByText('Customer1')).not.toBeInTheDocument();
await waitFor(() => {
expect(screen.getByText('Name')).toBeInTheDocument();
expect(screen.getByText('Email')).toBeInTheDocument();
expect(screen.getByText('Items')).toBeInTheDocument();
expect(screen.getByText('Date')).toBeInTheDocument();
expect(screen.getByText('Status')).toBeInTheDocument();
expect(screen.getByText('Action')).toBeInTheDocument();
});
});

it('should handle loading state', async () => {
// Mock API response
mock
.onGet(`${import.meta.env.VITE_BASE_URL}/user/getAllUsers`)
.reply(200, { users: mockBuyers });
Expand All @@ -137,7 +120,10 @@ describe('Seller Component', () => {

renderWithProviders(<Seller />);
await store.dispatch(fetchBuyers() as any);
expect(screen.queryByText('Vendor1')).toBeNull();
expect(screen.queryByText('Customer1')).toBeNull();

await waitFor(() => {
expect(screen.queryByText('Vendor1')).toBeNull();
expect(screen.queryByText('Customer1')).toBeNull();
});
});
});
Loading

0 comments on commit aad3a1f

Please sign in to comment.