-
Notifications
You must be signed in to change notification settings - Fork 13
/
books.spec.ts
141 lines (120 loc) · 3.42 KB
/
books.spec.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
import { mutator } from 'satcheljs';
import * as store from '../../../store/store';
import { BookStore } from '../../../store/BookStore';
import { addBookToCart, _removeBookFromCart, finishBuying } from '../../../actions/cart';
import '../../../mutators/cart/books';
describe('cart.books mutators', () => {
it('should add book with the quantity of 1 to cart if the cart does not have the book already', () => {
// Arrange
const state: any = {
books: {
'1': {
name: 'hi',
},
},
cart: {
books: [],
},
};
jest.spyOn(store, 'default').mockReturnValue(state);
// Act
addBookToCart('1');
// Assert
expect(state.cart.books.length).toBe(1);
expect(state.cart.books[0].bookId).toBe('1');
});
it('should increase the quantity if the cart has the book already', () => {
// Arrange
const state: any = {
books: {
'1': {
name: 'hi',
},
},
cart: {
books: [
{
bookId: '1',
quantity: 1,
},
],
},
};
jest.spyOn(store, 'default').mockReturnValue(state);
// Act
addBookToCart('1');
// Assert
expect(state.cart.books.length).toBe(1);
expect(state.cart.books[0].bookId).toBe('1');
expect(state.cart.books[0].quantity).toBe(2);
});
it('should remove the entire entry from cart', () => {
// Arrange
const state: any = {
books: {
'1': {
name: 'hi',
},
},
cart: {
books: [
{
bookId: '1',
quantity: 10,
},
],
},
};
jest.spyOn(store, 'default').mockReturnValue(state);
// Act
_removeBookFromCart('1');
// Assert
expect(state.cart.books.length).toBe(0);
});
it('should ignore any request to remove entries that cannot be found in cart', () => {
// Arrange
const state: any = {
books: {
'1': {
name: 'hi',
},
},
cart: {
books: [
{
bookId: '1',
quantity: 10,
},
],
},
};
jest.spyOn(store, 'default').mockReturnValue(state);
// Act
_removeBookFromCart('5');
// Assert
expect(state.cart.books.length).toBe(1);
});
it('should empty the cart when finished buying', () => {
// Arrange
const state: any = {
books: {
'1': {
name: 'hi',
},
},
cart: {
books: [
{
bookId: '1',
quantity: 10,
},
],
},
};
jest.spyOn(store, 'default').mockReturnValue(state);
// Act
finishBuying();
// Assert
expect(state.cart.books.length).toBe(0);
});
});