import * as sinon from 'sinon';
import { app } from 'ferp';
import * as actions from './actions.js';
describe('RequestTodo', () => {
it('does not modify the state', () => {
const initialState = { todos: [], externals: { fetch: window.fetch } };
const [state] = actions.RequestTodo(1)(initialState);
expect(state).toBe(initialState);
it('successfully fetches a todo', (done) => {
const expectedTodo = { id: 1, text: 'foo', completed: false };
const fakeFetch = sinon.fake((arg) => {
json: Promise.resolve(expectedTodo)
const initialState = { todos: [], externals: { fetch: fakeFetch } };
const expectedTodosInOrder = [
[expectedTodo], // on success
init: actions.RequestTodo(expectedTodo.id)(initialState),
observe: ([state, effect]) => {
.toDeepEqual(expectedTodosInOrder.unshift());
if (expectedTodosInOrder.length === 0) {