mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-07 20:31:06 -05:00
3297506021
* Revert "Revert "Tw reference manager access"" This reverts commit 55f3512f254e136d8a239bb5d9ca39f0d04720fd. * added conditional to check whether file linked data exists * created new translation key for refresh error * Fix for misleading reference manager access error to ensure users are aware only original importer of reference file can refresh it. If original importer, then user is prompted to relink provider account. Previous PR and conversation #13618. GitOrigin-RevId: 85232c1559c6d2068effec50e31b8fa30bf53c89
200 lines
5.8 KiB
JavaScript
200 lines
5.8 KiB
JavaScript
import {
|
|
screen,
|
|
fireEvent,
|
|
waitForElementToBeRemoved,
|
|
} from '@testing-library/react'
|
|
import { expect } from 'chai'
|
|
import fetchMock from 'fetch-mock'
|
|
import sinon from 'sinon'
|
|
|
|
import { renderWithEditorContext } from '../../../helpers/render-with-context'
|
|
import FileViewHeader from '../../../../../frontend/js/features/file-view/components/file-view-header.js'
|
|
|
|
describe('<FileViewHeader/>', function () {
|
|
const urlFile = {
|
|
name: 'example.tex',
|
|
linkedFileData: {
|
|
url: 'https://overleaf.com',
|
|
provider: 'url',
|
|
},
|
|
created: new Date(2021, 1, 17, 3, 24).toISOString(),
|
|
}
|
|
|
|
const projectFile = {
|
|
name: 'example.tex',
|
|
linkedFileData: {
|
|
v1_source_doc_id: 'v1-source-id',
|
|
source_project_id: 'source-project-id',
|
|
source_entity_path: '/source-entity-path.ext',
|
|
provider: 'project_file',
|
|
importer_id: '123abd',
|
|
},
|
|
created: new Date(2021, 1, 17, 3, 24).toISOString(),
|
|
}
|
|
|
|
const notOrignalImporterFile = {
|
|
name: 'references.bib',
|
|
linkedFileData: {
|
|
v1_source_doc_id: 'v1-source-id',
|
|
source_project_id: 'source-project-id',
|
|
source_entity_path: '/source-entity-path.ext',
|
|
provider: 'project_file',
|
|
importer_id: '123abc',
|
|
},
|
|
created: new Date(2021, 1, 17, 3, 24).toISOString(),
|
|
}
|
|
|
|
const projectOutputFile = {
|
|
name: 'example.pdf',
|
|
linkedFileData: {
|
|
v1_source_doc_id: 'v1-source-id',
|
|
source_output_file_path: '/source-entity-path.ext',
|
|
provider: 'project_output_file',
|
|
},
|
|
created: new Date(2021, 1, 17, 3, 24).toISOString(),
|
|
}
|
|
|
|
const thirdPartyReferenceFile = {
|
|
name: 'example.tex',
|
|
linkedFileData: {
|
|
provider: 'zotero',
|
|
importer_id: '123abd',
|
|
},
|
|
created: new Date(2021, 1, 17, 3, 24).toISOString(),
|
|
}
|
|
|
|
beforeEach(function () {
|
|
fetchMock.reset()
|
|
})
|
|
|
|
describe('header text', function () {
|
|
it('Renders the correct text for a file with the url provider', function () {
|
|
renderWithEditorContext(
|
|
<FileViewHeader file={urlFile} storeReferencesKeys={() => {}} />
|
|
)
|
|
screen.getByText('Imported from', { exact: false })
|
|
screen.getByText('at 3:24 am Wed, 17th Feb 21', {
|
|
exact: false,
|
|
})
|
|
})
|
|
|
|
it('Renders the correct text for a file with the project_file provider', function () {
|
|
renderWithEditorContext(
|
|
<FileViewHeader file={projectFile} storeReferencesKeys={() => {}} />
|
|
)
|
|
screen.getByText('Imported from', { exact: false })
|
|
screen.getByText('Another project', { exact: false })
|
|
screen.getByText('/source-entity-path.ext, at 3:24 am Wed, 17th Feb 21', {
|
|
exact: false,
|
|
})
|
|
})
|
|
|
|
it('Renders the correct text for a file with the project_output_file provider', function () {
|
|
renderWithEditorContext(
|
|
<FileViewHeader
|
|
file={projectOutputFile}
|
|
storeReferencesKeys={() => {}}
|
|
/>
|
|
)
|
|
screen.getByText('Imported from the output of', { exact: false })
|
|
screen.getByText('Another project', { exact: false })
|
|
screen.getByText('/source-entity-path.ext, at 3:24 am Wed, 17th Feb 21', {
|
|
exact: false,
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('The refresh button', async function () {
|
|
it('Changes text when the file is refreshing', async function () {
|
|
fetchMock.post(
|
|
'express:/project/:project_id/linked_file/:file_id/refresh',
|
|
{
|
|
new_file_id: '5ff7418157b4e144321df5c4',
|
|
}
|
|
)
|
|
|
|
renderWithEditorContext(
|
|
<FileViewHeader file={projectFile} storeReferencesKeys={() => {}} />
|
|
)
|
|
|
|
const refreshButton = screen.getByRole('button', { name: 'Refresh' })
|
|
fireEvent.click(refreshButton)
|
|
|
|
await waitForElementToBeRemoved(() =>
|
|
screen.getByText('Refreshing', { exact: false })
|
|
)
|
|
|
|
await screen.findByText('Refresh')
|
|
})
|
|
|
|
it('Reindexes references after refreshing a file from a third-party provider', async function () {
|
|
fetchMock.post(
|
|
'express:/project/:project_id/linked_file/:file_id/refresh',
|
|
{
|
|
new_file_id: '5ff7418157b4e144321df5c4',
|
|
}
|
|
)
|
|
|
|
const reindexResponse = {
|
|
projectId: '123abc',
|
|
keys: ['reference1', 'reference2', 'reference3', 'reference4'],
|
|
}
|
|
fetchMock.post(
|
|
'express:/project/:project_id/references/indexAll',
|
|
reindexResponse
|
|
)
|
|
|
|
const storeReferencesKeys = sinon.stub()
|
|
|
|
renderWithEditorContext(
|
|
<FileViewHeader
|
|
file={thirdPartyReferenceFile}
|
|
storeReferencesKeys={storeReferencesKeys}
|
|
/>
|
|
)
|
|
|
|
const refreshButton = screen.getByRole('button', { name: 'Refresh' })
|
|
fireEvent.click(refreshButton)
|
|
|
|
await waitForElementToBeRemoved(() =>
|
|
screen.getByText('Refreshing', { exact: false })
|
|
)
|
|
|
|
expect(fetchMock.done()).to.be.true
|
|
expect(storeReferencesKeys).to.have.been.calledWith(reindexResponse.keys)
|
|
})
|
|
|
|
it('Displays message when user is not original importer', function () {
|
|
renderWithEditorContext(
|
|
<FileViewHeader
|
|
file={notOrignalImporterFile}
|
|
storeReferencesKeys={() => {}}
|
|
/>
|
|
)
|
|
|
|
const refreshButton = screen.getByRole('button', { name: 'Refresh' })
|
|
if (refreshButton.disabled) {
|
|
const textBefore = screen.getByText(
|
|
'Only the person who originally imported this',
|
|
{ exact: false }
|
|
)
|
|
expect(textBefore).to.exist
|
|
|
|
const textAfter = screen.getByText('file can refresh it', {
|
|
exact: false,
|
|
})
|
|
expect(textAfter).to.exist
|
|
}
|
|
})
|
|
})
|
|
|
|
describe('The download button', function () {
|
|
it('exists', function () {
|
|
renderWithEditorContext(
|
|
<FileViewHeader file={urlFile} storeReferencesKeys={() => {}} />
|
|
)
|
|
|
|
screen.getByText('Download', { exact: false })
|
|
})
|
|
})
|
|
})
|