mirror of
https://github.com/Growstuff/growstuff.git
synced 2026-10-29 10:18:29 -04:00
70 lines
2.2 KiB
React
70 lines
2.2 KiB
React
import {render, screen} from '@testing-library/react';
|
|
import userEvent from '@testing-library/user-event';
|
|
import {describe, expect, it} from 'vitest';
|
|
|
|
import HarvestChart from './HarvestChart';
|
|
|
|
const measures = [
|
|
{key: 'count', label: 'Count', note: 'How many', unit: 'items'},
|
|
{key: 'weight', label: 'Weight', note: 'How heavy', unit: 'kg'},
|
|
];
|
|
const months = [
|
|
{month: 1, label: 'Jan', count: {this_year: 10, last_year: 5}, weight: {this_year: 1, last_year: 2}},
|
|
{month: 2, label: 'Feb', count: {this_year: 0, last_year: 2.55}, weight: {this_year: 0, last_year: 0}},
|
|
];
|
|
|
|
function setup() {
|
|
return render(<HarvestChart months={months} current_month={2} measures={measures} />);
|
|
}
|
|
|
|
describe('HarvestChart', () => {
|
|
it('shows the first measure first', () => {
|
|
setup();
|
|
expect(screen.getByText('How many')).toBeInTheDocument();
|
|
});
|
|
|
|
it('labels each month', () => {
|
|
setup();
|
|
expect(screen.getByText('Jan')).toBeInTheDocument();
|
|
});
|
|
|
|
it('marks the current month', () => {
|
|
setup();
|
|
expect(screen.getByText('Feb')).toHaveClass('now');
|
|
});
|
|
|
|
it('scales the tallest bar to full height', () => {
|
|
const {container} = setup();
|
|
expect(container.querySelector('.this-year')).toHaveStyle({height: '100%'});
|
|
});
|
|
|
|
it('scales other bars against the tallest', () => {
|
|
const {container} = setup();
|
|
expect(container.querySelector('.last-year')).toHaveStyle({height: '50%'});
|
|
});
|
|
|
|
it('titles bars with the total and unit', () => {
|
|
const {container} = setup();
|
|
expect(container.querySelector('.this-year')).toHaveAttribute('title', '10 items');
|
|
});
|
|
|
|
it('rounds totals in titles to one decimal', () => {
|
|
const {container} = setup();
|
|
expect(container.querySelectorAll('.last-year')[1]).toHaveAttribute('title', '2.6 items');
|
|
});
|
|
|
|
describe('when another measure is chosen', () => {
|
|
it('shows its note', async () => {
|
|
setup();
|
|
await userEvent.click(screen.getByText('Weight'));
|
|
expect(screen.getByText('How heavy')).toBeInTheDocument();
|
|
});
|
|
|
|
it('uses its unit', async () => {
|
|
const {container} = setup();
|
|
await userEvent.click(screen.getByText('Weight'));
|
|
expect(container.querySelector('.this-year')).toHaveAttribute('title', '1 kg');
|
|
});
|
|
});
|
|
});
|