diff --git a/tests/ViewBest.test.tsx b/tests/ViewBest.test.tsx new file mode 100644 index 0000000..efc34b0 --- /dev/null +++ b/tests/ViewBest.test.tsx @@ -0,0 +1,141 @@ +import React from 'react' +import 'react-native' +import {fireEvent, render, waitFor} from 'react-native-testing-library' +import BestPage from '../BestPage' +import {MockProviders} from '../mock-providers' +import Settings from '../settings' + +jest.mock('../db.ts', () => ({ + setRepo: { + createQueryBuilder: () => ({ + select: jest.fn().mockReturnThis(), + addSelect: jest.fn().mockReturnThis(), + where: jest.fn().mockReturnThis(), + andWhere: jest.fn().mockReturnThis(), + groupBy: jest.fn().mockReturnThis(), + addGroupBy: jest.fn().mockReturnThis(), + distinct: jest.fn().mockReturnThis(), + getRawMany: jest.fn(() => + Promise.resolve([ + { + name: 'Bench press', + value: 16, + created: '2023-01-05T03:58:02.565Z', + weight: 18, + }, + { + name: 'Bench press', + value: 48, + created: '2022-01-05T03:58:02.565Z', + weight: 48, + }, + { + name: 'Bench press', + value: 30, + created: '2021-01-05T03:58:02.565Z', + weight: 28, + }, + ]), + ), + getMany: jest.fn(() => + Promise.resolve([ + { + name: 'Bench press', + weight: 60, + reps: 8, + image: 'https://picsum.photos/id/10/1000/600', + }, + { + name: 'Bicep curls', + weight: 20, + reps: 10, + image: 'https://picsum.photos/id/0/1000/600', + }, + { + name: 'Rows', + weight: 100, + reps: 10, + image: 'https://picsum.photos/id/1/1000/600', + }, + ]), + ), + }), + }, + settingsRepo: { + findOne: () => Promise.resolve({images: true} as Settings), + }, +})) + +test('renders correctly', async () => { + const {getAllByText, getByText} = render( + + + , + ) + const benches = await waitFor(() => getAllByText('Bench press')) + expect(benches).toBeDefined() + fireEvent.press(benches[0]) + const bench = await waitFor(() => getByText('Metric')) + expect(bench).toBeDefined() + expect(getByText('Period')).toBeDefined() +}) + +test('volume', async () => { + const {getAllByText, getByText} = render( + + + , + ) + const benches = await waitFor(() => getAllByText('Bench press')) + expect(benches).toBeDefined() + fireEvent.press(benches[0]) + const bestWeight = await waitFor(() => getByText('Best weight')) + fireEvent.press(bestWeight) + const volume = await waitFor(() => getByText('Volume')) + fireEvent.press(volume) + expect(await waitFor(() => getByText('Volume'))).toBeDefined() +}) + +test('one rep max', async () => { + const {getAllByText, getByText} = render( + + + , + ) + const benches = await waitFor(() => getAllByText(/Bench press/i)) + expect(benches).toBeDefined() + fireEvent.press(benches[0]) + const bestWeight = await waitFor(() => getByText(/Best weight/i)) + fireEvent.press(bestWeight) + const volume = await waitFor(() => getByText(/One rep max/i)) + fireEvent.press(volume) + expect(await waitFor(() => getByText(/One rep max/i))).toBeDefined() +}) + +test('this week', async () => { + const {getAllByText, getByText} = render( + + + , + ) + const benches = await waitFor(() => getAllByText(/Bench press/i)) + expect(benches).toBeDefined() + fireEvent.press(benches[0]) + fireEvent.press(await waitFor(() => getByText(/This month/i))) + fireEvent.press(await waitFor(() => getByText(/This week/i))) + expect(await waitFor(() => getByText(/This week/i))).toBeDefined() +}) + +test('this year', async () => { + const {getAllByText, getByText} = render( + + + , + ) + const benches = await waitFor(() => getAllByText(/Bench press/i)) + expect(benches).toBeDefined() + fireEvent.press(benches[0]) + fireEvent.press(await waitFor(() => getByText(/This month/i))) + fireEvent.press(await waitFor(() => getByText(/This year/i))) + expect(await waitFor(() => getByText(/This year/i))).toBeDefined() +})