import React from 'react'
import { Route } from 'react-router-dom'
import { JobsShow } from 'pages/Jobs/Show'
import { jsonApiOcrJobSpec } from 'factories/jsonApiOcrJobSpec'
import { jsonApiOcrJobRuns } from 'factories/jsonApiOcrJobRuns'
import jsonApiJobSpecFactory from 'factories/jsonApiJobSpec'
import jsonApiJobSpecRunsFactory from 'factories/jsonApiJobSpecRuns'
import { mountWithProviders } from 'test-helpers/mountWithTheme'
import { syncFetch } from 'test-helpers/syncFetch'
import globPath from 'test-helpers/globPath'
const JOB_SPEC_ID = 'c60b9927eeae43168ddbe92584937b1b'
const OCR_JOB_SPEC_ID = '1'
describe('pages/Jobs/RecentRuns', () => {
it('displays a view more link if there are more runs than the display count', async () => {
const runs = [
{ id: 'runA', jobId: JOB_SPEC_ID },
{ id: 'runB', jobId: JOB_SPEC_ID },
{ id: 'runC', jobId: JOB_SPEC_ID },
{ id: 'runD', jobId: JOB_SPEC_ID },
{ id: 'runE', jobId: JOB_SPEC_ID },
]
const jobSpecResponse = jsonApiJobSpecFactory({
id: JOB_SPEC_ID,
})
const jobRunsResponse = jsonApiJobSpecRunsFactory(runs, 10)
global.fetch.getOnce(globPath(`/proxy/v2/specs/${JOB_SPEC_ID}`), jobSpecResponse)
global.fetch.getOnce(globPath('/proxy/v2/runs'), jobRunsResponse)
const wrapper = mountWithProviders(
,
{
initialEntries: [`/jobs/${JOB_SPEC_ID}`],
},
)
await syncFetch(wrapper)
expect(wrapper.text()).toContain('View more')
})
it('renders OCR job tasks visualisation', async () => {
const runs = [
{ id: 'runA', jobId: OCR_JOB_SPEC_ID },
{ id: 'runB', jobId: OCR_JOB_SPEC_ID },
{ id: 'runC', jobId: OCR_JOB_SPEC_ID },
{ id: 'runD', jobId: OCR_JOB_SPEC_ID },
{ id: 'runE', jobId: OCR_JOB_SPEC_ID },
]
const taskNames = ['testFetch', 'testParse', 'testMultiply']
global.fetch.getOnce(
globPath(`/proxy/v2/jobs/${OCR_JOB_SPEC_ID}/runs`),
jsonApiOcrJobRuns(runs, 10),
)
global.fetch.getOnce(
globPath(`/proxy/v2/jobs/${OCR_JOB_SPEC_ID}`),
jsonApiOcrJobSpec({
id: OCR_JOB_SPEC_ID,
dotDagSource: ` ${taskNames[0]} [type=http method=POST url="http://localhost:8001" requestData="{\\"hi\\": \\"hello\\"}"];\n ${taskNames[1]} [type=jsonparse path="data,result"];\n ${taskNames[2]} [type=multiply times=100];\n ${taskNames[0]} -\u003e ${taskNames[1]} -\u003e ${taskNames[2]};\n`,
}),
)
const wrapper = mountWithProviders(
,
{
initialEntries: [`/jobs/${OCR_JOB_SPEC_ID}`],
},
)
await syncFetch(wrapper)
expect(wrapper.text()).toContain('View more')
expect(wrapper.text()).toContain(taskNames[0])
expect(wrapper.text()).toContain(taskNames[1])
expect(wrapper.text()).toContain(taskNames[2])
})
it('works with no tasks (bootstrap node)', async () => {
global.fetch.getOnce(
globPath(`/proxy/v2/jobs/${OCR_JOB_SPEC_ID}/runs`),
jsonApiOcrJobRuns(),
)
global.fetch.getOnce(
globPath(`/proxy/v2/jobs/${OCR_JOB_SPEC_ID}`),
jsonApiOcrJobSpec({
id: OCR_JOB_SPEC_ID,
dotDagSource: '',
}),
)
const wrapper = mountWithProviders(
,
{
initialEntries: [`/jobs/${OCR_JOB_SPEC_ID}`],
},
)
await syncFetch(wrapper)
expect(wrapper.text()).toContain('Recent job runs')
expect(wrapper.text()).not.toContain('Task list')
})
})