Remove some duplicated code
This commit is contained in:
@@ -4,28 +4,62 @@ import { DataProviderContext } from 'react-admin'
|
|||||||
import { cleanup, fireEvent, render, waitFor } from '@testing-library/react'
|
import { cleanup, fireEvent, render, waitFor } from '@testing-library/react'
|
||||||
import { AddToPlaylistDialog } from './AddToPlaylistDialog'
|
import { AddToPlaylistDialog } from './AddToPlaylistDialog'
|
||||||
|
|
||||||
|
const mockData = [
|
||||||
|
{ id: 'sample-id1', name: 'sample playlist 1', ownerId: 'admin' },
|
||||||
|
{ id: 'sample-id2', name: 'sample playlist 2', ownerId: 'admin' },
|
||||||
|
]
|
||||||
|
const mockIndexedData = {
|
||||||
|
'sample-id1': {
|
||||||
|
id: 'sample-id1',
|
||||||
|
name: 'sample playlist 1',
|
||||||
|
ownerId: 'admin',
|
||||||
|
},
|
||||||
|
'sample-id2': {
|
||||||
|
id: 'sample-id2',
|
||||||
|
name: 'sample playlist 2',
|
||||||
|
ownerId: 'admin',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
const selectedIds = ['song-1', 'song-2']
|
||||||
|
|
||||||
|
const createTestUtils = (mockDataProvider) =>
|
||||||
|
render(
|
||||||
|
<DataProviderContext.Provider value={mockDataProvider}>
|
||||||
|
<TestContext
|
||||||
|
initialState={{
|
||||||
|
addToPlaylistDialog: {
|
||||||
|
open: true,
|
||||||
|
duplicateSong: false,
|
||||||
|
selectedIds: selectedIds,
|
||||||
|
},
|
||||||
|
admin: {
|
||||||
|
ui: { optimistic: false },
|
||||||
|
resources: {
|
||||||
|
playlist: {
|
||||||
|
data: mockIndexedData,
|
||||||
|
list: {
|
||||||
|
cachedRequests: {
|
||||||
|
'{"pagination":{"page":1,"perPage":-1},"sort":{"field":"name","order":"ASC"},"filter":{}}':
|
||||||
|
{
|
||||||
|
ids: ['sample-id1', 'sample-id2'],
|
||||||
|
total: 2,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<AddToPlaylistDialog />
|
||||||
|
</TestContext>
|
||||||
|
</DataProviderContext.Provider>
|
||||||
|
)
|
||||||
|
|
||||||
describe('AddToPlaylistDialog', () => {
|
describe('AddToPlaylistDialog', () => {
|
||||||
beforeAll(() => localStorage.setItem('userId', 'admin'))
|
beforeAll(() => localStorage.setItem('userId', 'admin'))
|
||||||
afterEach(cleanup)
|
afterEach(cleanup)
|
||||||
|
|
||||||
const mockData = [
|
|
||||||
{ id: 'sample-id1', name: 'sample playlist 1', ownerId: 'admin' },
|
|
||||||
{ id: 'sample-id2', name: 'sample playlist 2', ownerId: 'admin' },
|
|
||||||
]
|
|
||||||
const mockIndexedData = {
|
|
||||||
'sample-id1': {
|
|
||||||
id: 'sample-id1',
|
|
||||||
name: 'sample playlist 1',
|
|
||||||
ownerId: 'admin',
|
|
||||||
},
|
|
||||||
'sample-id2': {
|
|
||||||
id: 'sample-id2',
|
|
||||||
name: 'sample playlist 2',
|
|
||||||
ownerId: 'admin',
|
|
||||||
},
|
|
||||||
}
|
|
||||||
const selectedIds = ['song-1', 'song-2']
|
|
||||||
|
|
||||||
it('adds distinct songs to already existing playlists', async () => {
|
it('adds distinct songs to already existing playlists', async () => {
|
||||||
const mockDataProvider = {
|
const mockDataProvider = {
|
||||||
getList: jest
|
getList: jest
|
||||||
@@ -37,38 +71,7 @@ describe('AddToPlaylistDialog', () => {
|
|||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
|
|
||||||
const testutils = render(
|
const testUtils = createTestUtils(mockDataProvider)
|
||||||
<DataProviderContext.Provider value={mockDataProvider}>
|
|
||||||
<TestContext
|
|
||||||
initialState={{
|
|
||||||
addToPlaylistDialog: {
|
|
||||||
open: true,
|
|
||||||
duplicateSong: false,
|
|
||||||
selectedIds: selectedIds,
|
|
||||||
},
|
|
||||||
admin: {
|
|
||||||
ui: { optimistic: false },
|
|
||||||
resources: {
|
|
||||||
playlist: {
|
|
||||||
data: mockIndexedData,
|
|
||||||
list: {
|
|
||||||
cachedRequests: {
|
|
||||||
'{"pagination":{"page":1,"perPage":-1},"sort":{"field":"name","order":"ASC"},"filter":{}}':
|
|
||||||
{
|
|
||||||
ids: ['sample-id1', 'sample-id2'],
|
|
||||||
total: 2,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<AddToPlaylistDialog />
|
|
||||||
</TestContext>
|
|
||||||
</DataProviderContext.Provider>
|
|
||||||
)
|
|
||||||
|
|
||||||
fireEvent.change(document.activeElement, { target: { value: 'sample' } })
|
fireEvent.change(document.activeElement, { target: { value: 'sample' } })
|
||||||
fireEvent.keyDown(document.activeElement, { key: 'ArrowDown' })
|
fireEvent.keyDown(document.activeElement, { key: 'ArrowDown' })
|
||||||
@@ -76,9 +79,9 @@ describe('AddToPlaylistDialog', () => {
|
|||||||
fireEvent.keyDown(document.activeElement, { key: 'ArrowDown' })
|
fireEvent.keyDown(document.activeElement, { key: 'ArrowDown' })
|
||||||
fireEvent.keyDown(document.activeElement, { key: 'Enter' })
|
fireEvent.keyDown(document.activeElement, { key: 'Enter' })
|
||||||
await waitFor(() => {
|
await waitFor(() => {
|
||||||
expect(testutils.getByTestId('playlist-add')).not.toBeDisabled()
|
expect(testUtils.getByTestId('playlist-add')).not.toBeDisabled()
|
||||||
})
|
})
|
||||||
fireEvent.click(testutils.getByTestId('playlist-add'))
|
fireEvent.click(testUtils.getByTestId('playlist-add'))
|
||||||
await waitFor(() => {
|
await waitFor(() => {
|
||||||
expect(mockDataProvider.create).toHaveBeenNthCalledWith(
|
expect(mockDataProvider.create).toHaveBeenNthCalledWith(
|
||||||
1,
|
1,
|
||||||
@@ -111,38 +114,8 @@ describe('AddToPlaylistDialog', () => {
|
|||||||
data: { id: 'created-id1', name: 'created-name' },
|
data: { id: 'created-id1', name: 'created-name' },
|
||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
const testutils = render(
|
|
||||||
<DataProviderContext.Provider value={mockDataProvider}>
|
const testUtils = createTestUtils(mockDataProvider)
|
||||||
<TestContext
|
|
||||||
initialState={{
|
|
||||||
addToPlaylistDialog: {
|
|
||||||
open: true,
|
|
||||||
duplicateSong: false,
|
|
||||||
selectedIds: selectedIds,
|
|
||||||
},
|
|
||||||
admin: {
|
|
||||||
ui: { optimistic: false },
|
|
||||||
resources: {
|
|
||||||
playlist: {
|
|
||||||
data: mockIndexedData,
|
|
||||||
list: {
|
|
||||||
cachedRequests: {
|
|
||||||
'{"pagination":{"page":1,"perPage":-1},"sort":{"field":"name","order":"ASC"},"filter":{}}':
|
|
||||||
{
|
|
||||||
ids: ['sample-id1', 'sample-id2'],
|
|
||||||
total: 2,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<AddToPlaylistDialog />
|
|
||||||
</TestContext>
|
|
||||||
</DataProviderContext.Provider>
|
|
||||||
)
|
|
||||||
|
|
||||||
fireEvent.change(document.activeElement, { target: { value: 'sample' } })
|
fireEvent.change(document.activeElement, { target: { value: 'sample' } })
|
||||||
fireEvent.keyDown(document.activeElement, { key: 'ArrowDown' })
|
fireEvent.keyDown(document.activeElement, { key: 'ArrowDown' })
|
||||||
@@ -150,9 +123,9 @@ describe('AddToPlaylistDialog', () => {
|
|||||||
fireEvent.keyDown(document.activeElement, { key: 'ArrowDown' })
|
fireEvent.keyDown(document.activeElement, { key: 'ArrowDown' })
|
||||||
fireEvent.keyDown(document.activeElement, { key: 'Enter' })
|
fireEvent.keyDown(document.activeElement, { key: 'Enter' })
|
||||||
await waitFor(() => {
|
await waitFor(() => {
|
||||||
expect(testutils.getByTestId('playlist-add')).not.toBeDisabled()
|
expect(testUtils.getByTestId('playlist-add')).not.toBeDisabled()
|
||||||
})
|
})
|
||||||
fireEvent.click(testutils.getByTestId('playlist-add'))
|
fireEvent.click(testUtils.getByTestId('playlist-add'))
|
||||||
await waitFor(() => {
|
await waitFor(() => {
|
||||||
expect(mockDataProvider.create).toHaveBeenNthCalledWith(1, 'playlist', {
|
expect(mockDataProvider.create).toHaveBeenNthCalledWith(1, 'playlist', {
|
||||||
data: { name: 'sample' },
|
data: { name: 'sample' },
|
||||||
@@ -178,38 +151,8 @@ describe('AddToPlaylistDialog', () => {
|
|||||||
data: { id: 'created-id1', name: 'created-name' },
|
data: { id: 'created-id1', name: 'created-name' },
|
||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
const testutils = render(
|
|
||||||
<DataProviderContext.Provider value={mockDataProvider}>
|
const testUtils = createTestUtils(mockDataProvider)
|
||||||
<TestContext
|
|
||||||
initialState={{
|
|
||||||
addToPlaylistDialog: {
|
|
||||||
open: true,
|
|
||||||
duplicateSong: false,
|
|
||||||
selectedIds: selectedIds,
|
|
||||||
},
|
|
||||||
admin: {
|
|
||||||
ui: { optimistic: false },
|
|
||||||
resources: {
|
|
||||||
playlist: {
|
|
||||||
data: mockIndexedData,
|
|
||||||
list: {
|
|
||||||
cachedRequests: {
|
|
||||||
'{"pagination":{"page":1,"perPage":-1},"sort":{"field":"name","order":"ASC"},"filter":{}}':
|
|
||||||
{
|
|
||||||
ids: ['sample-id1', 'sample-id2'],
|
|
||||||
total: 2,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<AddToPlaylistDialog />
|
|
||||||
</TestContext>
|
|
||||||
</DataProviderContext.Provider>
|
|
||||||
)
|
|
||||||
|
|
||||||
fireEvent.change(document.activeElement, { target: { value: 'sample' } })
|
fireEvent.change(document.activeElement, { target: { value: 'sample' } })
|
||||||
fireEvent.keyDown(document.activeElement, { key: 'ArrowDown' })
|
fireEvent.keyDown(document.activeElement, { key: 'ArrowDown' })
|
||||||
@@ -221,9 +164,9 @@ describe('AddToPlaylistDialog', () => {
|
|||||||
})
|
})
|
||||||
fireEvent.keyDown(document.activeElement, { key: 'Enter' })
|
fireEvent.keyDown(document.activeElement, { key: 'Enter' })
|
||||||
await waitFor(() => {
|
await waitFor(() => {
|
||||||
expect(testutils.getByTestId('playlist-add')).not.toBeDisabled()
|
expect(testUtils.getByTestId('playlist-add')).not.toBeDisabled()
|
||||||
})
|
})
|
||||||
fireEvent.click(testutils.getByTestId('playlist-add'))
|
fireEvent.click(testUtils.getByTestId('playlist-add'))
|
||||||
await waitFor(() => {
|
await waitFor(() => {
|
||||||
expect(mockDataProvider.create).toHaveBeenCalledTimes(4)
|
expect(mockDataProvider.create).toHaveBeenCalledTimes(4)
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user