Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[SCR-164] feat: New strategy for ensureKonnectorFolder #1443

Merged
merged 3 commits into from
Feb 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions docs/api/cozy-client/modules/models.folder.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@

*Defined in*

[packages/cozy-client/src/models/folder.js:9](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/folder.js#L9)
[packages/cozy-client/src/models/folder.js:11](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/folder.js#L11)

## Functions

Expand All @@ -51,7 +51,7 @@ Folder document

*Defined in*

[packages/cozy-client/src/models/folder.js:69](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/folder.js#L69)
[packages/cozy-client/src/models/folder.js:71](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/folder.js#L71)

***

Expand All @@ -77,7 +77,7 @@ Folder document

*Defined in*

[packages/cozy-client/src/models/folder.js:29](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/folder.js#L29)
[packages/cozy-client/src/models/folder.js:31](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/folder.js#L31)

***

Expand All @@ -102,4 +102,4 @@ Folder referenced by the given document

*Defined in*

[packages/cozy-client/src/models/folder.js:90](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/folder.js#L90)
[packages/cozy-client/src/models/folder.js:92](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/folder.js#L92)
35 changes: 30 additions & 5 deletions docs/api/cozy-client/modules/models.konnectorFolder.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ The result path

*Defined in*

[packages/cozy-client/src/models/konnectorFolder.js:115](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/konnectorFolder.js#L115)
[packages/cozy-client/src/models/konnectorFolder.js:154](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/konnectorFolder.js#L154)

***

Expand All @@ -69,7 +69,7 @@ Permission object

*Defined in*

[packages/cozy-client/src/models/konnectorFolder.js:227](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/konnectorFolder.js#L227)
[packages/cozy-client/src/models/konnectorFolder.js:266](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/konnectorFolder.js#L266)

***

Expand All @@ -94,7 +94,7 @@ Directory attributes

*Defined in*

[packages/cozy-client/src/models/konnectorFolder.js:63](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/konnectorFolder.js#L63)
[packages/cozy-client/src/models/konnectorFolder.js:102](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/konnectorFolder.js#L102)

***

Expand All @@ -120,7 +120,32 @@ Ensures the destination folder of a konnector exists and is initiated with prope

*Defined in*

[packages/cozy-client/src/models/konnectorFolder.js:25](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/konnectorFolder.js#L25)
[packages/cozy-client/src/models/konnectorFolder.js:27](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/konnectorFolder.js#L27)

***

### findKonnectorAccountFolderByReference

▸ **findKonnectorAccountFolderByReference**(`options`): `Promise`<`IOCozyFolder`>

try to find a konnector account folder using file references

*Parameters*

| Name | Type | Description |
| :------ | :------ | :------ |
| `options` | `Object` | options object |
| `options.client` | [`CozyClient`](../classes/CozyClient.md) | CozyClient instance |
| `options.slug` | `string` | konnector slug |
| `options.sourceAccountIdentifier` | `string` | source account identifier |

*Returns*

`Promise`<`IOCozyFolder`>

*Defined in*

[packages/cozy-client/src/models/konnectorFolder.js:374](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/konnectorFolder.js#L374)

***

Expand All @@ -147,4 +172,4 @@ Created io.cozy.files document

*Defined in*

[packages/cozy-client/src/models/konnectorFolder.js:78](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/konnectorFolder.js#L78)
[packages/cozy-client/src/models/konnectorFolder.js:117](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/konnectorFolder.js#L117)
15 changes: 7 additions & 8 deletions packages/cozy-client/src/models/folder.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ import sortBy from 'lodash/sortBy'
import CozyClient from '../CozyClient'
import { DOCTYPE_FILES } from '../const'

import { Q } from '../queries/dsl'

const APP_DOCTYPE = 'io.cozy.apps'
const administrative = 'administrative'
const photos = 'photos'
Expand Down Expand Up @@ -88,16 +90,13 @@ export const createFolderWithReference = async (client, path, document) => {
* @returns {Promise<import("../types").IOCozyFolder>} Folder referenced by the given document
*/
export const getReferencedFolder = async (client, document) => {
const { included } = await client
.collection(DOCTYPE_FILES)
.findReferencedBy(document)
const foldersOutsideTrash = included.filter(
folder => !/^\/\.cozy_trash/.test(folder.path)
const { included: folders } = await client.query(
Q(DOCTYPE_FILES)
.partialIndex({ type: 'directory', trashed: false })
.referencedBy(document)
)

// there can be multiple folders with the same reference in some edge cases
// when this happens we return the most recent one
return foldersOutsideTrash.length > 0
? sortBy(foldersOutsideTrash, 'created_at').pop()
: null
return folders.length > 0 ? sortBy(folders, 'created_at').pop() : null
}
26 changes: 4 additions & 22 deletions packages/cozy-client/src/models/folder.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { MAGIC_FOLDERS, ensureMagicFolder, getReferencedFolder } from './folder'
describe('Folder model', () => {
const mockClient = {
collection: () => mockClient,
query: jest.fn(),
findReferencedBy: jest.fn(),
ensureDirectoryExists: jest.fn(),
addReferencesTo: jest.fn(),
Expand Down Expand Up @@ -38,7 +39,7 @@ describe('Folder model', () => {
}
]

mockClient.findReferencedBy.mockResolvedValue({
mockClient.query.mockResolvedValueOnce({
included: existingMagicFolders
})

Expand Down Expand Up @@ -66,10 +67,9 @@ describe('Folder model', () => {
})

it('should create magic folder', async () => {
mockClient.findReferencedBy.mockResolvedValue({
mockClient.query.mockResolvedValueOnce({
included: []
})

mockClient.ensureDirectoryExists.mockResolvedValue('dir-id')
mockClient.get.mockResolvedValue({ data: {} })

Expand All @@ -90,24 +90,6 @@ describe('Folder model', () => {
})

describe('getReferencedFolder', () => {
it('should filter trashed folders', async () => {
const referencedFolder = {
path: '/Reference/Folder'
}

const trashFolder = {
path: '/.cozy_trash/Old/Reference/Folder'
}

mockClient.findReferencedBy.mockResolvedValue({
included: [referencedFolder, trashFolder]
})

const result = await getReferencedFolder(mockClient, 'ref')

expect(result).toBe(referencedFolder)
})

it('should return the most recently created folder', async () => {
const oldFolder = {
path: '/Old/folder',
Expand All @@ -118,7 +100,7 @@ describe('Folder model', () => {
created_at: '2020-03-02T14:57:07.661588+01:00'
}

mockClient.findReferencedBy.mockResolvedValue({
mockClient.query.mockResolvedValueOnce({
included: [oldFolder, recentFolder]
})

Expand Down
Loading
Loading