scratch-paint/test/unit/stroke-width-reducer.test.js

60 lines
2.7 KiB
JavaScript

/* eslint-env jest */
import strokeWidthReducer from '../../src/reducers/stroke-width';
import {MAX_STROKE_WIDTH, changeStrokeWidth} from '../../src/reducers/stroke-width';
import {setSelectedItems} from '../../src/reducers/selected-items';
import {mockPaperRootItem} from '../__mocks__/paperMocks';
test('initialState', () => {
let defaultState;
expect(strokeWidthReducer(defaultState /* state */, {type: 'anything'} /* action */)).toBeDefined();
expect(strokeWidthReducer(defaultState /* state */, {type: 'anything'} /* action */)).toBeGreaterThanOrEqual(0);
});
test('changestrokeWidth', () => {
let defaultState;
const newstrokeWidth = 234;
expect(strokeWidthReducer(defaultState /* state */, changeStrokeWidth(newstrokeWidth) /* action */))
.toEqual(newstrokeWidth);
expect(strokeWidthReducer(1 /* state */, changeStrokeWidth(newstrokeWidth) /* action */))
.toEqual(newstrokeWidth);
expect(strokeWidthReducer(1 /* state */, changeStrokeWidth(-1) /* action */))
.toEqual(0);
expect(strokeWidthReducer(1 /* state */, changeStrokeWidth(453452352) /* action */))
.toEqual(MAX_STROKE_WIDTH);
});
test('changeStrokeWidthViaSelectedItems', () => {
let defaultState;
const strokeWidth1 = 6;
let strokeWidth2; // no outline
let selectedItems = [mockPaperRootItem({strokeColor: '#000', strokeWidth: strokeWidth1})];
expect(strokeWidthReducer(defaultState /* state */, setSelectedItems(selectedItems) /* action */))
.toEqual(strokeWidth1);
selectedItems = [mockPaperRootItem({strokeColor: '#000', strokeWidth: strokeWidth2})];
expect(strokeWidthReducer(defaultState /* state */, setSelectedItems(selectedItems) /* action */))
.toEqual(0); // Convert no outline to stroke width 0
selectedItems = [mockPaperRootItem({strokeColor: '#000', strokeWidth: strokeWidth1}),
mockPaperRootItem({strokeColor: '#000', strokeWidth: strokeWidth2})];
expect(strokeWidthReducer(defaultState /* state */, setSelectedItems(selectedItems) /* action */))
.toEqual(null); // null indicates mixed for stroke width
});
test('showNoStrokeWidthIfNoStrokeColor', () => {
let defaultState;
const selectedItems = [mockPaperRootItem({strokeColor: null, strokeWidth: 10})];
expect(strokeWidthReducer(defaultState /* state */, setSelectedItems(selectedItems) /* action */))
.toEqual(0);
});
test('invalidChangestrokeWidth', () => {
const origState = {strokeWidth: 1};
expect(strokeWidthReducer(origState /* state */, changeStrokeWidth('invalid argument') /* action */))
.toBe(origState);
expect(strokeWidthReducer(origState /* state */, changeStrokeWidth() /* action */))
.toBe(origState);
});