Skip to content

Commit c088899

Browse files
committed
Add a test to verify adapter usage with createSlice
1 parent 2ccdbd4 commit c088899

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

src/entities/entity_state.test.ts

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import { createEntityAdapter, EntityAdapter } from './index'
2+
import { PayloadAction, createAction } from '../createAction'
3+
import { createSlice } from '../createSlice'
24
import { BookModel } from './fixtures/book'
35

46
describe('Entity State', () => {
@@ -30,4 +32,45 @@ describe('Entity State', () => {
3032
entities: {}
3133
})
3234
})
35+
36+
it('should allow methods to be passed as reducers', () => {
37+
const upsertBook = createAction<BookModel>('otherBooks/upsert')
38+
39+
const booksSlice = createSlice({
40+
name: 'books',
41+
initialState: adapter.getInitialState(),
42+
reducers: {
43+
addOne: adapter.addOne,
44+
removeOne(state, action: PayloadAction<string>) {
45+
return adapter.removeOne(state, action)
46+
}
47+
},
48+
extraReducers: builder => {
49+
builder.addCase(upsertBook, (state, action) => {
50+
return adapter.upsertOne(state, action)
51+
})
52+
}
53+
})
54+
55+
const { addOne, removeOne } = booksSlice.actions
56+
const { reducer } = booksSlice
57+
58+
const selectors = adapter.getSelectors()
59+
60+
const book1: BookModel = { id: 'a', title: 'First' }
61+
const book1a: BookModel = { id: 'a', title: 'Second' }
62+
63+
const afterAddOne = reducer(undefined, addOne(book1))
64+
expect(afterAddOne.entities[book1.id]).toBe(book1)
65+
66+
const afterRemoveOne = reducer(afterAddOne, removeOne(book1.id))
67+
expect(afterRemoveOne.entities[book1.id]).toBeUndefined()
68+
expect(selectors.selectTotal(afterRemoveOne)).toBe(0)
69+
70+
const afterUpsertFirst = reducer(afterRemoveOne, upsertBook(book1))
71+
const afterUpsertSecond = reducer(afterUpsertFirst, upsertBook(book1a))
72+
73+
expect(afterUpsertSecond.entities[book1.id]).toEqual(book1a)
74+
expect(selectors.selectTotal(afterUpsertSecond)).toBe(1)
75+
})
3376
})

0 commit comments

Comments
 (0)