import React from 'react';
import { render } from '@testing-library/react';
import { Song, Track, Instrument } from '..';
import {
mockChannelConstructor,
// mockChannelVolume,
// mockChannelPan,
mockPolySynthDispose,
mockSequenceConstructor,
mockSequenceAdd,
mockSequenceRemove,
mockSequenceRemoveAll,
} from '../__mocks__/tone';
beforeEach(() => {
jest.resetAllMocks();
});
describe('Track', () => {
it('should render Track with steps, pan and volume props', () => {
const { rerender } = render(
,
);
expect(mockChannelConstructor).toBeCalledWith(-6, 2);
rerender(
,
);
// TODO: Fix both of these, still getting called with original values
// expect(mockChannelVolume).toBeCalledWith(0);
// expect(mockChannelPan).toBeCalledWith(0);
expect(mockSequenceConstructor).toBeCalledWith([
{ index: 0, notes: [{ name: 'C3' }] },
{ index: 1, notes: [] },
{ index: 2, notes: [{ name: 'C3' }, { name: 'G3' }] },
{ index: 3, notes: [{ name: 'E3' }] },
]);
});
it('should remove Track from song', () => {
const { rerender } = render(
,
);
expect(mockChannelConstructor).toBeCalledWith(0, 0);
expect(mockPolySynthDispose).toBeCalledTimes(0);
// @ts-ignore
rerender();
expect(mockPolySynthDispose).toBeCalledTimes(1);
});
it('should add and remove steps from sequencer', () => {
const { rerender } = render(
,
);
rerender(
,
);
expect(mockSequenceAdd).toHaveBeenLastCalledWith(1, {
index: 1,
notes: [{ name: 'D3' }],
});
rerender(
,
);
expect(mockSequenceAdd).toHaveBeenLastCalledWith(2, {
index: 2,
notes: [{ name: 'C3' }],
});
rerender(
,
);
expect(mockSequenceRemove).toHaveBeenLastCalledWith(1);
rerender(
,
);
expect(mockSequenceRemoveAll).toHaveBeenLastCalledWith();
expect(mockSequenceAdd).toHaveBeenCalledWith(0, {
index: 0,
notes: [{ name: 'C3' }],
});
expect(mockSequenceAdd).toHaveBeenCalledWith(1, {
index: 1,
notes: [],
});
});
});