feat(snjs): add revisions api v2 (#2154)

* feat(snjs): add revisions api v2

* fix(snjs): reference listing and getting revisions in specs

* fix(snjs): revisions specs

* fix(web): usage of revision metadata

* fix(snjs): add specs for decryption revision

* fix(snjs): issue with building mocked specs

* fix(snjs): adjust revision creation delay
This commit is contained in:
Karol Sójko
2023-01-18 09:20:06 +01:00
committed by GitHub
parent 7d7815917b
commit 880a537774
52 changed files with 882 additions and 226 deletions

View File

@@ -0,0 +1,32 @@
import { RevisionClientInterface } from '@standardnotes/services'
import { ListRevisions } from './ListRevisions'
describe('ListRevisions', () => {
let revisionManager: RevisionClientInterface
const createUseCase = () => new ListRevisions(revisionManager)
beforeEach(() => {
revisionManager = {} as jest.Mocked<RevisionClientInterface>
revisionManager.listRevisions = jest.fn().mockReturnValue([])
})
it('should list revisions', async () => {
const useCase = createUseCase()
const result = await useCase.execute({ itemUuid: '00000000-0000-0000-0000-000000000000' })
expect(result.isFailed()).toBe(false)
expect(result.getValue()).toEqual([])
})
it('should fail if item uuid is invalid', async () => {
const useCase = createUseCase()
const result = await useCase.execute({ itemUuid: 'invalid' })
expect(result.isFailed()).toBe(true)
expect(result.getError()).toEqual('Could not list item revisions: Given value is not a valid uuid: invalid')
})
})

View File

@@ -0,0 +1,22 @@
import { RevisionClientInterface } from '@standardnotes/services'
import { Result, UseCaseInterface, Uuid } from '@standardnotes/domain-core'
import { RevisionMetadata } from '../../Revision/RevisionMetadata'
import { ListRevisionsDTO } from './ListRevisionsDTO'
export class ListRevisions implements UseCaseInterface<Array<RevisionMetadata>> {
constructor(private revisionManager: RevisionClientInterface) {}
async execute(dto: ListRevisionsDTO): Promise<Result<RevisionMetadata[]>> {
const itemUuidOrError = Uuid.create(dto.itemUuid)
if (itemUuidOrError.isFailed()) {
return Result.fail(`Could not list item revisions: ${itemUuidOrError.getError()}`)
}
const itemUuid = itemUuidOrError.getValue()
const revisions = await this.revisionManager.listRevisions(itemUuid)
return Result.ok(revisions)
}
}

View File

@@ -0,0 +1,3 @@
export interface ListRevisionsDTO {
itemUuid: string
}