Skip to content

Commit

Permalink
08-reducer-testing complete
Browse files Browse the repository at this point in the history
  • Loading branch information
brandonroberts committed Apr 26, 2019
1 parent b55f842 commit 19caf8a
Show file tree
Hide file tree
Showing 2 changed files with 104 additions and 3 deletions.
49 changes: 49 additions & 0 deletions src/app/shared/state/__snapshots__/books.reducer.spec.ts.snap
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`Books Reducer should add a newly created book to the state 1`] = `
Object {
"activeBookId": "1",
"entities": Object {
"1": Object {
"earnings": 200000000,
"id": "1",
"name": "Forrest Gump",
},
},
"ids": Array [
"1",
],
}
`;

exports[`Books Reducer should load all books when the API loads them all successfully 1`] = `
Object {
"activeBookId": null,
"entities": Object {
"1": Object {
"earnings": 1000000,
"id": "1",
"name": "Castaway",
},
},
"ids": Array [
"1",
],
}
`;

exports[`Books Reducer should remove books from the state when they are deleted 1`] = `
Object {
"activeBookId": "1",
"entities": Object {
"1": Object {
"earnings": 1000,
"id": "1",
"name": "Apollo 13",
},
},
"ids": Array [
"1",
],
}
`;
58 changes: 55 additions & 3 deletions src/app/shared/state/books.reducer.spec.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,61 @@
// import { BooksApiActions, BooksPageActions } from "src/app/books/actions";
// import { Book } from "../models/book.model";
// import { reducer, initialState } from "./book.reducer";
import { BooksApiActions, BooksPageActions } from "src/app/books/actions";
import { Book } from "../models/book.model";
import { reducer, initialState, activeBookId, adapter, selectAll } from "./books.reducer";

describe("Books Reducer", () => {
it("should return the initial state when initialized", () => {
const state = reducer(undefined, { type: "@@init" } as any);

expect(state).toBe(initialState);
});

it("should load all books when the API loads them all successfully", () => {
const books: Book[] = [{ id: "1", name: "Castaway", earnings: 1000000 }];
const action = BooksApiActions.booksLoaded({ books });

const state = reducer(initialState, action);

expect(state).toMatchSnapshot();
});

it("should add a newly created book to the state", () => {
const book: Book = { id: "1", name: "Forrest Gump", earnings: 200000000 };
const action = BooksApiActions.bookCreated({ book });

const state = reducer(initialState, action);

expect(state).toMatchSnapshot();
});

it("should remove books from the state when they are deleted", () => {
const book: Book = { id: "1", name: "Apollo 13", earnings: 1000 };
const firstAction = BooksApiActions.bookCreated({ book });
const secondAction = BooksPageActions.deleteBook({ book });

const state = [firstAction, secondAction].reduce(reducer, initialState);

expect(state).toMatchSnapshot();
});

describe("Selectors", () => {
const initialState = { activeBookId: "1", ids: [], entities: {} };

describe("activeBookId", () => {
it("should return the active book id", () => {
const result = activeBookId(initialState);

expect(result).toBe("1");
});
});

describe("selectAll", () => {
it("should return all the loaded books", () => {
const books: Book[] = [{ id: "1", name: "Castaway", earnings: 1000000 }];
const state = adapter.addAll(books, initialState);
const result = selectAll(state);

expect(result.length).toBe(1);
});
});
});
});

0 comments on commit 19caf8a

Please sign in to comment.