Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions next-react-query-tailwind/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,12 +75,12 @@ yarn

### Generated Files

The `src/lib/graphql.ts` file gets generated by `graphql-code-generator` when you run `yarn generate`. This file includes types, queries, and mutations, and `react-query` specific hooks for interacting with the GitHub GraphQL API.
The `src/lib/graphql.ts` file gets generated by `graphql-code-generator` when you run `yarn codegen`. This file includes types, queries, and mutations, and `react-query` specific hooks for interacting with the GitHub GraphQL API.

_This gets run automatically before runing `yarn dev` and `yarn build`._
_This gets run automatically before running `yarn dev` and `yarn build`._

```bash
yarn generate
yarn codegen
```

## Configuration
Expand Down
3 changes: 2 additions & 1 deletion next-react-query-tailwind/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
"graphql-request": "6.1.0",
"next": "13.4.11",
"next-auth": "4.22.3",
"next-router-mock": "0.9.7",
"prism-react-renderer": "2.0.6",
"react": "18.2.0",
"react-content-loader": "6.2.1",
Expand Down Expand Up @@ -84,4 +85,4 @@
"msw": {
"workerDirectory": "public"
}
}
}
203 changes: 101 additions & 102 deletions next-react-query-tailwind/src/components/RepoIssues/RepoIssues.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import { setupMswServer } from '@lib/mswServer';
import RepoIssues from './RepoIssues.data';
import { RepoProvider } from '@context/RepoContext';

jest.mock('next/router', () => require('next-router-mock'));

setupMswServer();

const mockRepoContext = {
Expand All @@ -28,107 +30,104 @@ const mockRepoContext = {

describe('RepoIssues', () => {
test('successfully queries and renders issue list', async () => {
expect(true).toBe(true);
renderWithClient(
<RepoProvider value={mockRepoContext}>
<RepoIssues />
</RepoProvider>
);
expect(screen.getAllByTestId('skeleton').length).toBeGreaterThan(0);
const issues = await screen.findAllByTestId('issue');
expect(issues[0]).toHaveTextContent(
'Bug: onMouse leave triggered on hidden components if hovered over before hidden'
);
});
test('can navigate to and view closed issues', async () => {
renderWithClient(
<RepoProvider value={mockRepoContext}>
<RepoIssues />
</RepoProvider>
);
expect(screen.getAllByTestId('skeleton').length).toBeGreaterThan(0);
let openIssues = await screen.findAllByTestId('issue');
expect(openIssues.at(0)).toHaveTextContent(
'Bug: onMouse leave triggered on hidden components if hovered over before hidden'
);
fireEvent.click(screen.getByTestId('closedIssuesButton'));
let closedIssues = screen.getAllByTestId('issue');
expect(closedIssues.at(0)).toHaveTextContent('React 18');
});

test('issues filtered to no results show empty component', async () => {
renderWithClient(
<RepoProvider value={mockRepoContext}>
<RepoIssues />
</RepoProvider>
);
expect(screen.getAllByTestId('skeleton').length).toBeGreaterThan(0);
let openIssues = await screen.findAllByTestId('issue');
expect(openIssues.at(0)).toHaveTextContent(
'Bug: onMouse leave triggered on hidden components if hovered over before hidden'
);
fireEvent.click(screen.getByText('Milestones'));
fireEvent.click(screen.getByText('18.0.0'));
expect(await screen.findByTestId('issues-empty')).toBeVisible();
});
test('can navigate to next page of issues and back', async () => {
renderWithClient(
<RepoProvider value={mockRepoContext}>
<RepoIssues />
</RepoProvider>
);
expect(screen.getAllByTestId('skeleton').length).toBeGreaterThan(0);
let openIssues = await screen.findAllByTestId('issue');
expect(openIssues.at(0)).toHaveTextContent(
'Bug: onMouse leave triggered on hidden components if hovered over before hidden'
);
fireEvent.click(screen.getByText('Next'));
let nextPageIssues = await screen.findAllByTestId('issue');
expect(nextPageIssues.at(0)).toHaveTextContent(
'[DevTools Bug]: Components without own dimensions not highlighted at all'
);
await fireEvent.click(screen.getByText('Previous'));
let firstPageIssues = await screen.findAllByTestId('issue');
expect(firstPageIssues.at(0)).toHaveTextContent(
'Bug: onMouse leave triggered on hidden components if hovered over before hidden'
);
});
test('can filter issues by label', async () => {
renderWithClient(
<RepoProvider value={mockRepoContext}>
<RepoIssues />
</RepoProvider>
);
expect(screen.getAllByTestId('skeleton').length).toBeGreaterThan(0);
let openIssues = await screen.findAllByTestId('issue');
expect(openIssues.at(0)).toHaveTextContent(
'Bug: onMouse leave triggered on hidden components if hovered over before hidden'
);
fireEvent.click(screen.getByText('Label'));
fireEvent.click(screen.getByText('React 18', { ignore: '.label' }));
let filteredIssues = await screen.findAllByTestId('issue');
filteredIssues.forEach((issue) => {
expect(issue).toHaveTextContent('React 18');
});
});
test('can sort issues list', async () => {
renderWithClient(
<RepoProvider value={mockRepoContext}>
<RepoIssues />
</RepoProvider>
);
expect(screen.getAllByTestId('skeleton').length).toBeGreaterThan(0);
let openIssues = await screen.findAllByTestId('issue');
expect(openIssues.at(0)).toHaveTextContent(
'Bug: onMouse leave triggered on hidden components if hovered over before hidden'
);
fireEvent.click(screen.getByText('Sort'));
fireEvent.click(screen.getByText('Oldest'));
let filteredIssues = await screen.findAllByTestId('issue');
expect(filteredIssues.at(0)).toHaveTextContent(
'Declarative API for installing global DOM event handlers'
);
});
// TODO - fix tests
// test('successfully queries and renders issue list', async () => {
// renderWithClient(
// <RepoProvider value={mockRepoContext}>
// <RepoIssues />
// </RepoProvider>
// );
// expect(screen.getAllByTestId('skeleton').length).toBeGreaterThan(0);
// const issues = await screen.findAllByTestId('issue');
// expect(issues[0]).toHaveTextContent(
// 'Bug: onMouse leave triggered on hidden components if hovered over before hidden'
// );
// });
// test('can navigate to and view closed issues', async () => {
// renderWithClient(
// <RepoProvider value={mockRepoContext}>
// <RepoIssues />
// </RepoProvider>
// );
// expect(screen.getAllByTestId('skeleton').length).toBeGreaterThan(0);
// let openIssues = await screen.findAllByTestId('issue');
// expect(openIssues.at(0)).toHaveTextContent(
// 'Bug: onMouse leave triggered on hidden components if hovered over before hidden'
// );
// fireEvent.click(screen.getByTestId('closedIssuesButton'));
// let closedIssues = screen.getAllByTestId('issue');
// expect(closedIssues.at(0)).toHaveTextContent('React 18');
// });
// test('issues filtered to no results show empty component', async () => {
// renderWithClient(
// <RepoProvider value={mockRepoContext}>
// <RepoIssues />
// </RepoProvider>
// );
// expect(screen.getAllByTestId('skeleton').length).toBeGreaterThan(0);
// let openIssues = await screen.findAllByTestId('issue');
// expect(openIssues.at(0)).toHaveTextContent(
// 'Bug: onMouse leave triggered on hidden components if hovered over before hidden'
// );
// fireEvent.click(screen.getByText('Milestones'));
// fireEvent.click(screen.getByText('18.0.0'));
// expect(await screen.findByTestId('issues-empty')).toBeVisible();
// });
// test('can navigate to next page of issues and back', async () => {
// renderWithClient(
// <RepoProvider value={mockRepoContext}>
// <RepoIssues />
// </RepoProvider>
// );
// expect(screen.getAllByTestId('skeleton').length).toBeGreaterThan(0);
// let openIssues = await screen.findAllByTestId('issue');
// expect(openIssues.at(0)).toHaveTextContent(
// 'Bug: onMouse leave triggered on hidden components if hovered over before hidden'
// );
// fireEvent.click(screen.getByText('Next'));
// let nextPageIssues = await screen.findAllByTestId('issue');
// expect(nextPageIssues.at(0)).toHaveTextContent(
// '[DevTools Bug]: Components without own dimensions not highlighted at all'
// );
// fireEvent.click(screen.getByText('Previous'));
// let firstPageIssues = await screen.findAllByTestId('issue');
// expect(firstPageIssues.at(0)).toHaveTextContent(
// 'Bug: onMouse leave triggered on hidden components if hovered over before hidden'
// );
// });
// test('can filter issues by label', async () => {
// renderWithClient(
// <RepoProvider value={mockRepoContext}>
// <RepoIssues />
// </RepoProvider>
// );
// expect(screen.getAllByTestId('skeleton').length).toBeGreaterThan(0);
// let openIssues = await screen.findAllByTestId('issue');
// expect(openIssues.at(0)).toHaveTextContent(
// 'Bug: onMouse leave triggered on hidden components if hovered over before hidden'
// );
// fireEvent.click(screen.getByText('Label'));
// fireEvent.click(screen.getByText('React 18', { ignore: '.label' }));
// let filteredIssues = await screen.findAllByTestId('issue');
// filteredIssues.forEach((issue) => {
// expect(issue).toHaveTextContent('React 18');
// });
// });
// test('can sort issues list', async () => {
// renderWithClient(
// <RepoProvider value={mockRepoContext}>
// <RepoIssues />
// </RepoProvider>
// );
// expect(screen.getAllByTestId('skeleton').length).toBeGreaterThan(0);
// let openIssues = await screen.findAllByTestId('issue');
// expect(openIssues.at(0)).toHaveTextContent(
// 'Bug: onMouse leave triggered on hidden components if hovered over before hidden'
// );
// fireEvent.click(screen.getByText('Sort'));
// fireEvent.click(screen.getByText('Oldest'));
// let filteredIssues = await screen.findAllByTestId('issue');
// expect(filteredIssues.at(0)).toHaveTextContent(
// 'Declarative API for installing global DOM event handlers'
// );
// });
});
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ function RepoIssuesView({ issues }: RepoIssuesViewProps) {
<span className="inline">
{issue.labels.map(({ color, name }) => (
<span
key={color}
key={color + name}
style={{
backgroundColor: `#${color}`,
}}
Expand Down
Loading