diff --git a/.github/workflows/deploy_alpha.yml b/.github/workflows/deploy_alpha.yml index b3eda993..227722bd 100644 --- a/.github/workflows/deploy_alpha.yml +++ b/.github/workflows/deploy_alpha.yml @@ -9,10 +9,10 @@ jobs: test-unit: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: - node-version: 19 + node-version: 22 - name: Install npm dependencies run: npm ci @@ -23,10 +23,10 @@ jobs: test-integration: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: - node-version: 19 + node-version: 22 - name: Install npm dependencies run: npm ci @@ -35,12 +35,13 @@ jobs: run: npm run test:integration test-functional: + needs: [test-integration] runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: - node-version: 19 + node-version: 22 - name: Install npm dependencies run: npm ci @@ -54,10 +55,10 @@ jobs: permissions: packages: write steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: - node-version: 19 + node-version: 22 registry-url: https://npm.pkg.github.com/ - name: Install npm dependencies diff --git a/.github/workflows/deploy_pr.yml b/.github/workflows/deploy_pr.yml index 8635e0f3..692f9d58 100644 --- a/.github/workflows/deploy_pr.yml +++ b/.github/workflows/deploy_pr.yml @@ -6,10 +6,10 @@ jobs: test-unit: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: - node-version: 19 + node-version: 22 - name: Install npm dependencies run: npm ci @@ -20,10 +20,10 @@ jobs: test-integration: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: - node-version: 19 + node-version: 22 - name: Install npm dependencies run: npm ci @@ -32,12 +32,13 @@ jobs: run: npm run test:integration test-functional: + needs: [test-integration] runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: - node-version: 19 + node-version: 22 - name: Install npm dependencies run: npm ci @@ -52,10 +53,10 @@ jobs: packages: write contents: read steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: - node-version: 19 + node-version: 22 registry-url: https://npm.pkg.github.com/ - name: Install npm dependencies diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 3eeeeb66..9c0e8093 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -6,10 +6,10 @@ jobs: lint: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: - node-version: 19 + node-version: 22 - name: Install npm dependencies run: npm ci diff --git a/CHANGELOG.md b/CHANGELOG.md index 77044408..d524dd76 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,9 @@ This changelog follows the principles of [Keep a Changelog](https://keepachangel - New Use Case: [Create a Template](./docs/useCases.md#create-a-template) under Templates. - New Use Case: [Get a Template](./docs/useCases.md#get-a-template) under Templates. - New Use Case: [Delete a Template](./docs/useCases.md#delete-a-template) under Templates. +- New Use Case: [Update Template Metadata](./docs/useCases.md#update-template-metadata) under Templates. +- New Use Case: [Update Template License Terms](./docs/useCases.md#update-template-license-terms) under Templates. +- New Use Case: [Update Template Terms Of Access](./docs/useCases.md#update-template-terms-of-access) under Templates. - Templates: Added `setTemplateAsDefault` use case and repository method to support Dataverse endpoint `POST /dataverses/{id}/template/default/{templateId}`. - Templates: Added `unsetTemplateAsDefault` use case and repository method to support Dataverse endpoint `DELETE /dataverses/{id}/template/default`. - New Use Case: [Update Terms of Access](./docs/useCases.md#update-terms-of-access). diff --git a/docs/useCases.md b/docs/useCases.md index 4fb7a6f1..e7b55865 100644 --- a/docs/useCases.md +++ b/docs/useCases.md @@ -32,6 +32,9 @@ The different use cases currently available in the package are classified below, - [Templates write use cases](#templates-write-use-cases) - [Create a Template](#create-a-template) - [Delete a Template](#delete-a-template) + - [Update Template Metadata](#update-template-metadata) + - [Update Template License Terms](#update-template-license-terms) + - [Update Template Terms Of Access](#update-template-terms-of-access) - [Set Template As Default](#set-template-as-default) - [Unset Template As Default](#unset-template-as-default) - [Datasets](#Datasets) @@ -724,6 +727,84 @@ await unsetTemplateAsDefault.execute(collectionIdOrAlias) _See [use case](../src/templates/domain/useCases/UnsetTemplateAsDefault.ts)_ definition. +#### Update Template Metadata + +Updates template metadata fields and instructions for a template id. + +##### Example call: + +```typescript +import { updateTemplateMetadata } from '@iqss/dataverse-client-javascript' +import { UpdateTemplateMetadataDTO } from '@iqss/dataverse-client-javascript' + +const templateId = 12345 +const replace = true + +const payload: UpdateTemplateMetadataDTO = { + name: 'Dataverse template updated', + fields: [ + { + typeName: 'author', + typeClass: 'compound', + multiple: true, + value: [ + { + authorName: { typeName: 'authorName', value: 'Belicheck, Bill' }, + authorAffiliation: { typeName: 'authorIdentifierScheme', value: 'ORCID' } + } + ] + } + ], + instructions: [{ instructionField: 'author', instructionText: 'Updated instructions' }] +} + +await updateTemplateMetadata.execute(templateId, payload, replace) +``` + +_See [use case](../src/templates/domain/useCases/UpdateTemplateMetadata.ts) definition_. + +#### Update Template License Terms + +Updates either the license name or custom terms of use for a template id. + +##### Example call: + +```typescript +import { updateTemplateLicenseTerms } from '@iqss/dataverse-client-javascript' +import { UpdateTemplateLicenseTermsDTO } from '@iqss/dataverse-client-javascript' + +const templateId = 12345 + +const payload: UpdateTemplateLicenseTermsDTO = { + customTerms: { + termsOfUse: 'Updated template terms of use' + } +} + +await updateTemplateLicenseTerms.execute(templateId, payload) +``` + +_See [use case](../src/templates/domain/useCases/UpdateTemplateLicenseTerms.ts) definitition_. + +#### Update Template Terms Of Access + +Updates terms of access for a template id. + +##### Example call: + +```typescript +import { updateTemplateTermsOfAccess } from '@iqss/dataverse-client-javascript' + +const templateId = 12345 + +await updateTemplateTermsOfAccess.execute(templateId, { + fileAccessRequest: true, + termsOfAccessForRestrictedFiles: 'Restricted access only' +}) +``` + +_See [use case](../src/templates/domain/useCases/UpdateTemplateTermsOfAccess.ts) definition_. + ## Datasets ### Datasets Read Use Cases diff --git a/package.json b/package.json index 541fc681..68b07c53 100644 --- a/package.json +++ b/package.json @@ -10,11 +10,16 @@ "scripts": { "build": "tsc", "test": "jest -c jest.config.ts", + "test:no-teardown": "TESTCONTAINERS_RYUK_DISABLED=true jest -c jest.config.ts", "test:unit": "jest -c jest.config.unit.ts", - "test:integration": "jest -c jest.config.integration.ts", - "test:functional": "jest -c jest.config.functional.ts", + "test:integration": "jest --runInBand -c jest.config.integration.ts", + "test:integration:no-teardown": "TESTCONTAINERS_RYUK_DISABLED=true jest --runInBand -c jest.config.integration.ts", + "test:functional": "jest --runInBand -c jest.config.functional.ts", + "test:functional:no-teardown": "TESTCONTAINERS_RYUK_DISABLED=true jest --runInBand -c jest.config.functional.ts", "test:coverage": "jest --coverage -c jest.config.ts", + "test:coverage:no-teardown": "TESTCONTAINERS_RYUK_DISABLED=true jest --coverage -c jest.config.ts", "test:coverage:check": "jest --coverage --ci --config jest.config.ts", + "test:coverage:check:no-teardown": "TESTCONTAINERS_RYUK_DISABLED=true jest --coverage --ci --config jest.config.ts", "lint": "npm run lint:eslint && npm run lint:prettier", "lint:fix": "eslint --fix --ext .ts ./src --ignore-path .gitignore .", "lint:eslint": "eslint --ignore-path .gitignore .", diff --git a/src/templates/domain/dtos/UpdateTemplateLicenseTermsDTO.ts b/src/templates/domain/dtos/UpdateTemplateLicenseTermsDTO.ts new file mode 100644 index 00000000..b476a07d --- /dev/null +++ b/src/templates/domain/dtos/UpdateTemplateLicenseTermsDTO.ts @@ -0,0 +1,6 @@ +import { CustomTerms } from '../../../datasets/domain/models/Dataset' + +export interface UpdateTemplateLicenseTermsDTO { + name?: string + customTerms?: CustomTerms +} diff --git a/src/templates/domain/dtos/UpdateTemplateMetadataDTO.ts b/src/templates/domain/dtos/UpdateTemplateMetadataDTO.ts new file mode 100644 index 00000000..3504fcea --- /dev/null +++ b/src/templates/domain/dtos/UpdateTemplateMetadataDTO.ts @@ -0,0 +1,7 @@ +import { TemplateFieldDTO, TemplateInstructionDTO } from './CreateTemplateDTO' + +export interface UpdateTemplateMetadataDTO { + name?: string + fields?: TemplateFieldDTO[] + instructions?: TemplateInstructionDTO[] +} diff --git a/src/templates/domain/repositories/ITemplatesRepository.ts b/src/templates/domain/repositories/ITemplatesRepository.ts index 7b043f0c..2adb7f57 100644 --- a/src/templates/domain/repositories/ITemplatesRepository.ts +++ b/src/templates/domain/repositories/ITemplatesRepository.ts @@ -1,8 +1,21 @@ import { CreateTemplateDTO } from '../dtos/CreateTemplateDTO' +import { UpdateTemplateLicenseTermsDTO } from '../dtos/UpdateTemplateLicenseTermsDTO' +import { UpdateTemplateMetadataDTO } from '../dtos/UpdateTemplateMetadataDTO' import { Template } from '../models/Template' +import { TermsOfAccess } from '../../../datasets/domain/models/Dataset' export interface ITemplatesRepository { createTemplate(collectionIdOrAlias: number | string, template: CreateTemplateDTO): Promise + updateTemplateMetadata( + templateId: number, + payload: UpdateTemplateMetadataDTO, + replace?: boolean + ): Promise + updateTemplateLicenseTerms( + templateId: number, + payload: UpdateTemplateLicenseTermsDTO + ): Promise + updateTemplateTermsOfAccess(templateId: number, termsOfAccess: TermsOfAccess): Promise getTemplate(templateId: number): Promise