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: [], }); }); });