/* eslint-env jest */
import clipboardReducer, {
    clearPasteOffset, incrementPasteOffset, setClipboardItems
} from '../../src/reducers/clipboard';

test('initialState', () => {
    let defaultState;

    expect(clipboardReducer(defaultState /* state */, {type: 'anything'} /* action */).items).toBeDefined();
    expect(clipboardReducer(defaultState /* state */, {type: 'anything'} /* action */).pasteOffset).toBeDefined();
});

test('setClipboardItems', () => {
    let defaultState;

    const newSelected1 = ['selected1', 'selected2'];
    const newSelected2 = ['selected1', 'selected3'];
    expect(clipboardReducer(defaultState /* state */, setClipboardItems(newSelected1) /* action */).items)
        .toEqual(newSelected1);
    expect(clipboardReducer(defaultState /* state */, setClipboardItems(newSelected1) /* action */).pasteOffset)
        .toEqual(1);
    expect(clipboardReducer(newSelected1, setClipboardItems(newSelected2) /* action */).items)
        .toEqual(newSelected2);
    expect(clipboardReducer(defaultState /* state */, setClipboardItems(newSelected1) /* action */).pasteOffset)
        .toEqual(1);
});

test('incrementPasteOffset', () => {
    const origState = {
        items: ['selected1', 'selected2'],
        pasteOffset: 1
    };

    expect(clipboardReducer(origState /* state */, incrementPasteOffset() /* action */).pasteOffset)
        .toEqual(2);
    expect(clipboardReducer(origState, incrementPasteOffset() /* action */).items)
        .toEqual(origState.items);
});

test('clearPasteOffset', () => {
    const origState = {
        items: ['selected1', 'selected2'],
        pasteOffset: 1
    };

    expect(clipboardReducer(origState /* state */, clearPasteOffset() /* action */).pasteOffset)
        .toEqual(0);
    expect(clipboardReducer(origState, clearPasteOffset() /* action */).items)
        .toEqual(origState.items);
});

test('invalidSetClipboardItems', () => {
    const origState = {
        items: ['selected1', 'selected2'],
        pasteOffset: 1
    };
    const nothingSelected = [];

    expect(clipboardReducer(origState /* state */, setClipboardItems() /* action */))
        .toBe(origState);
    expect(clipboardReducer(origState /* state */, setClipboardItems('notAnArray') /* action */))
        .toBe(origState);
    expect(clipboardReducer(origState /* state */, setClipboardItems(nothingSelected) /* action */))
        .toBe(origState);
});