Skip to content

Commit

Permalink
extract loadPreview into helper
Browse files Browse the repository at this point in the history
  • Loading branch information
fschade committed Jun 30, 2021
1 parent 65226aa commit ba087b6
Show file tree
Hide file tree
Showing 5 changed files with 146 additions and 21 deletions.
47 changes: 47 additions & 0 deletions packages/web-app-files/src/helpers/resource/asset.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import { privatePreviewBlob } from './privatePreviewBlob'
import { publicPreviewUrl } from './publicPreviewUrl'

export const loadPreview = async (
{
resource,
isPublic,
dimensions,
server,
userId,
token
}: {
resource: any
isPublic: boolean
dimensions: [number, number]
server?: string
userId?: string
token?: string
},
cached = false
): Promise<string> => {
let preview = ''
if (resource.type === 'folder' || !resource.extension) {
return preview
}

if (!isPublic && (!server || !userId || !token)) {
return preview
}

if (isPublic) {
preview = await publicPreviewUrl({ resource, dimensions })
} else {
preview = await privatePreviewBlob(
{
server,
userId,
token,
resource,
dimensions
},
cached
)
}

return preview
}
1 change: 1 addition & 0 deletions packages/web-app-files/src/helpers/resource/index.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
export * from './asset'
export * from './privatePreviewBlob'
export * from './publicPreviewUrl'
34 changes: 14 additions & 20 deletions packages/web-app-files/src/store/actions.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { getParentPaths } from '../helpers/path'
import { shareTypes } from '../helpers/shareTypes'
import { buildResource, buildShare, buildCollaboratorShare } from '../helpers/resources'
import { $gettext, $gettextInterpolate } from '../gettext'
import { privatePreviewBlob, publicPreviewUrl } from '../helpers/resource'
import { loadPreview } from '../helpers/resource'
import { avatarUrl } from '../helpers/user'
import { has } from 'lodash-es'

Expand Down Expand Up @@ -532,29 +532,23 @@ export default {

async loadPreview({ commit, rootGetters }, { resource, isPublic, dimensions }) {
if (
resource.type === 'folder' ||
!resource.extension ||
(rootGetters.previewFileExtensions.length &&
!rootGetters.previewFileExtensions.includes(resource.extension))
rootGetters.previewFileExtensions.length &&
!rootGetters.previewFileExtensions.includes(resource.extension)
) {
return
}

let preview
if (isPublic) {
preview = await publicPreviewUrl({ resource, dimensions })
} else {
preview = await privatePreviewBlob(
{
server: rootGetters.configuration.server,
userId: rootGetters.user.id,
token: rootGetters.getToken,
resource,
dimensions
},
true
)
}
const preview = await loadPreview(
{
resource,
isPublic,
dimensions,
server: rootGetters.configuration.server,
userId: rootGetters.user.id,
token: rootGetters.getToken
},
true
)

if (preview) {
commit('UPDATE_RESOURCE_FIELD', { id: resource.id, field: 'preview', value: preview })
Expand Down
83 changes: 83 additions & 0 deletions packages/web-app-files/tests/unit/helpers/resource/asset.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
import { loadPreview } from '../../../../src/helpers/resource'

jest.mock('../../../../src/helpers/resource/publicPreviewUrl', () => ({
publicPreviewUrl: jest.fn().mockReturnValue('publicPreviewUrl')
}))

jest.mock('../../../../src/helpers/resource/privatePreviewBlob', () => ({
privatePreviewBlob: jest.fn().mockReturnValue('privatePreviewBlob')
}))

describe('loadPreview', () => {
it('returns empty string if resource is a folder', async () => {
const preview = await loadPreview({
resource: { type: 'folder' },
isPublic: true,
dimensions: [0, 0]
})

expect(preview).toBe('')
})

it('returns empty string if resource has no extension', async () => {
const preview = await loadPreview({
resource: {},
isPublic: true,
dimensions: [0, 0]
})

expect(preview).toBe('')
})

it('returns empty string if is private but no server, userId or token is given', async () => {
await expect(
loadPreview({
resource: { extension: 'jpg' },
isPublic: false,
dimensions: [0, 0]
})
).resolves.toBe('')

await expect(
loadPreview({
resource: { extension: 'jpg' },
isPublic: false,
dimensions: [0, 0],
server: 'server'
})
).resolves.toBe('')

await expect(
loadPreview({
resource: { extension: 'jpg' },
isPublic: false,
dimensions: [0, 0],
server: 'server',
userId: 'userId'
})
).resolves.toBe('')
})

it('returns a publicPreviewUrl', async () => {
await expect(
loadPreview({
resource: { extension: 'jpg' },
isPublic: true,
dimensions: [0, 0]
})
).resolves.toBe('publicPreviewUrl')
})

it('returns a privatePreviewBlob', async () => {
await expect(
loadPreview({
resource: { extension: 'jpg' },
isPublic: false,
dimensions: [0, 0],
server: 'server',
userId: 'userId',
token: 'token'
})
).resolves.toBe('privatePreviewBlob')
})
})
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ describe('privatePreviewBlob', () => {
await expect(window.URL.createObjectURL).toHaveBeenCalledWith('data')

privatePreviewBlobPromise = privatePreviewBlob(
merge({ resource: { etag: 'other' }, dimensions: [10, 10] }, defaultOptions),
merge({ resource: { etag: 'other' }, dimensions: [10, 10] }, defaultOptions) as any,
true
)
mockAxios.mockResponse({ data: 'data' })
Expand Down

0 comments on commit ba087b6

Please sign in to comment.