Skip to content

Commit a9a1d59

Browse files
Merge remote-tracking branch 'gitHub/main' into task/main/DURACOM-456
2 parents 7289376 + feeb6ad commit a9a1d59

452 files changed

Lines changed: 94710 additions & 9271 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.eslintrc.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@
7070
"error",
7171
{
7272
"allow": [
73-
"log",
7473
"warn",
7574
"dir",
7675
"timeLog",

.github/workflows/build.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ jobs:
123123

124124
# Login to our Docker registry, so that we can access private Docker images using "docker compose" below.
125125
- name: Login to ${{ env.DOCKER_REGISTRY }}
126-
uses: docker/login-action@v3
126+
uses: docker/login-action@v4
127127
with:
128128
registry: ${{ env.DOCKER_REGISTRY }}
129129
username: ${{ github.repository_owner }}
@@ -141,7 +141,7 @@ jobs:
141141
# https://github.com/cypress-io/github-action
142142
# (NOTE: to run these e2e tests locally, just use 'ng e2e')
143143
- name: Run e2e tests (integration tests)
144-
uses: cypress-io/github-action@v6
144+
uses: cypress-io/github-action@v7.1.9
145145
with:
146146
# Run tests in Chrome, headless mode (default)
147147
browser: chrome

.github/workflows/docker.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,11 @@ jobs:
106106
sleep 10
107107
docker container ls
108108
# Create a test admin account. Load test data from a simple set of AIPs as defined in cli.ingest.yml
109+
# NOTE: Before creating test data, we wait for the backend to become responsive by requesting it every 10 sec.
110+
# Timeout after 5 minutes. This is done to ensure the backend is fully initialized before we create test data.
109111
- name: Load test data into Backend
110112
run: |
113+
timeout 5m wget --retry-connrefused -t 0 --waitretry=10 http://127.0.0.1:8080/server/api
111114
docker compose -f docker/cli.yml run --rm dspace-cli create-administrator -e test@test.edu -f admin -l user -p admin -c en
112115
docker compose -f docker/cli.yml -f docker/cli.ingest.yml run --rm dspace-cli
113116
# Verify backend started successfully.

.github/workflows/port_merged_pull_request.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ jobs:
2727
# Port PR to other branch (ONLY if labeled with "port to")
2828
# See https://github.com/korthout/backport-action
2929
- name: Create backport pull requests
30-
uses: korthout/backport-action@v2
30+
uses: korthout/backport-action@v4
3131
with:
3232
# Trigger based on a "port to [branch]" label on PR
3333
# (This label must specify the branch name to port to)

config/config.example.yml

Lines changed: 70 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,9 @@ cache:
9393
# NOTE: When updates are made to compiled *.js files, it will automatically bypass this browser cache, because
9494
# all compiled *.js files include a unique hash in their name which updates when content is modified.
9595
control: max-age=604800 # revalidate browser
96+
# These static files should not be cached (paths relative to dist/browser, including the leading slash)
97+
noCacheFiles:
98+
- '/index.html'
9699
autoSync:
97100
defaultTime: 0
98101
maxBufferSize: 100
@@ -164,6 +167,9 @@ form:
164167
validatorMap:
165168
required: required
166169
regex: pattern
170+
# If true it enables the button "Duplicate" inside inline form groups.
171+
# The button will give the possibility to duplicate the whole form section copying the metadata values as well.
172+
showInlineGroupDuplicateButton: false
167173

168174
# Notification settings
169175
notifications:
@@ -202,6 +208,10 @@ submission:
202208
# default configuration
203209
- name: default
204210
style: ''
211+
# Icons that should remain visible even when no authority value is present for the metadata field.
212+
# This is useful for fields where you want to display an icon regardless of whether the value has an authority link.
213+
# Example: ['fas fa-user'] will show the user icon for author fields even without authority data.
214+
iconsVisibleWithNoAuthority: ['fas fa-user']
205215
authority:
206216
confidence:
207217
# NOTE: example of configuration
@@ -380,6 +390,8 @@ communityList:
380390
pageSize: 20
381391

382392
homePage:
393+
# Whether to show the top footer section or not
394+
showTopFooter: false
383395
recentSubmissions:
384396
# The number of item showing in recent submission components
385397
pageSize: 5
@@ -396,6 +408,20 @@ homePage:
396408
item:
397409
edit:
398410
undoTimeout: 10000 # 10 seconds
411+
# Defines the security levels available for metadata fields.
412+
# Each level maps to a numeric value stored on the metadata field in the backend and controls visibility of that field based on the user's role.
413+
# Levels are displayed as toggle buttons in the metadata edit UI.
414+
security:
415+
levels:
416+
- value: 0 # Public — visible to everyone
417+
icon: fa fa-globe
418+
color: green
419+
- value: 1 # Registered users — visible to authenticated users only
420+
icon: fa fa-key
421+
color: orange
422+
- value: 2 # Administrators only — restricted to admin users
423+
icon: fa fa-lock
424+
color: red
399425
# Show the item access status label in items lists
400426
showAccessStatuses: false
401427
bitstream:
@@ -410,7 +436,6 @@ item:
410436
# Metdadata list to be displayed for entities without a specific configuration
411437
fallbackMetdataList:
412438
- dc.description.abstract
413-
- dc.description.note
414439
# Configuration for each entity type
415440
entityDataConfig:
416441
- entityType: Person
@@ -430,6 +455,8 @@ item:
430455
iconPosition: IdentifierSubtypesIconPositionEnum.LEFT
431456
link: https://ror.org
432457

458+
# Enable authority based relations in item page
459+
showAuthorityRelations: false
433460
# Community Page Config
434461
community:
435462
# Default tab to be shown when browsing a Community. Valid values are: comcols, search, or browse_<field>
@@ -492,6 +519,7 @@ themes:
492519
# - name: BASE_THEME_NAME
493520
#
494521
- name: dspace
522+
prefetch: true
495523
headTags:
496524
- tagName: link
497525
attributes:
@@ -706,6 +734,28 @@ layout:
706734
default:
707735
icon: fas fa-project-diagram
708736
style: text-success
737+
# If true the download link in item page will be rendered as an advanced attachment, the view can be then configured with the layout.advancedAttachmentRendering config
738+
showDownloadLinkAsAttachment: false
739+
# Configuration for advanced attachment rendering in item pages. This controls how files are displayed when showDownloadLinkAsAttachment is enabled.
740+
# Defines which metadata/attributes to display for bitstream attachments.
741+
advancedAttachmentRendering:
742+
# Metadata and attributes to display for each attachment
743+
metadata:
744+
- name: dc.title
745+
type: metadata
746+
truncatable: false
747+
- name: dc.type
748+
type: metadata
749+
truncatable: false
750+
- name: dc.description
751+
type: metadata
752+
truncatable: true
753+
- name: size
754+
type: attribute
755+
- name: format
756+
type: attribute
757+
- name: checksum
758+
type: attribute
709759

710760
# Configuration for customization of search results
711761
searchResults:
@@ -736,3 +786,22 @@ searchResults:
736786
followAuthorityMetadataValuesLimit: 5
737787

738788

789+
# Configuration of social links using AddToAny plugin
790+
addToAnyPlugin:
791+
# This is enabled flag
792+
socialNetworksEnabled: false
793+
# If you want to self-host check https://www.addtoany.com/buttons/customize/host_cache
794+
scriptUrl: "https://static.addtoany.com/menu/page.js"
795+
# Check available integrations, visit https://www.addtoany.com/buttons/for/website
796+
# 1. Click "Choose Services", select integrations, then click Done
797+
# 2. Get Button Code
798+
# 3. You will get a HTML e.g. <a class="a2a_button_facebook"></a> where "facebook" is part you want to include in list
799+
buttons:
800+
- facebook
801+
- twitter
802+
- linkedin
803+
- email
804+
- copy_link
805+
showPlusButton: true
806+
showCounters: true
807+
title: DSpace demo

cypress.config.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@ export default defineConfig({
3737
DSPACE_TEST_SUBMIT_USER_UUID: '914955b1-cf2e-4884-8af7-a166aa24cf73',
3838
DSPACE_TEST_SUBMIT_USER_PASSWORD: 'dspace',
3939
// Administrator users group
40-
DSPACE_ADMINISTRATOR_GROUP: 'e59f5659-bff9-451e-b28f-439e7bd467e4'
40+
DSPACE_ADMINISTRATOR_GROUP: 'e59f5659-bff9-451e-b28f-439e7bd467e4',
41+
//Collection to send and test workflow item
42+
DSPACE_TEST_SUBMIT_WORKFLOW_COLLECTION_NAME: '1-step Workflow collection',
4143
},
4244
e2e: {
4345
// Setup our plugins for e2e tests

cypress/e2e/item-edit.cy.ts

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,27 @@ describe('Edit Item > Edit Metadata tab', () => {
2323
// <ds-edit-item-page> tag must be loaded
2424
cy.get('ds-edit-item-page').should('be.visible');
2525

26+
// wait for all the tabs to be rendered on this page
27+
cy.get('ds-edit-item-page ul[role="tablist"]').each(($row: HTMLUListElement) => {
28+
cy.wrap($row).find('a[role="tab"]').should('be.visible');
29+
});
30+
2631
// wait for all the ds-dso-edit-metadata-value components to be rendered
2732
cy.get('ds-dso-edit-metadata-value div[role="row"]').each(($row: HTMLDivElement) => {
2833
cy.wrap($row).find('div[role="cell"]').should('be.visible');
2934
});
3035

3136
// Analyze <ds-edit-item-page> for accessibility issues
32-
testA11y('ds-edit-item-page');
37+
testA11y('ds-edit-item-page',
38+
{
39+
rules: {
40+
// Disable flakey "aria-required-children" test. While this test passes when run locally,
41+
// in GitHub CI it will return random failures roughly 1/3 of the time saying that the
42+
// "tablist" doesn't contain required "tab" elements, even though they do exist.
43+
'aria-required-children': { enabled: false },
44+
},
45+
} as Options,
46+
);
3347
});
3448
});
3549

@@ -46,6 +60,11 @@ describe('Edit Item > Status tab', () => {
4660
// <ds-item-status> tag must be loaded
4761
cy.get('ds-item-status').should('be.visible');
4862

63+
// wait for all the tabs to be rendered on this page
64+
cy.get('ds-edit-item-page ul[role="tablist"]').each(($row: HTMLUListElement) => {
65+
cy.wrap($row).find('a[role="tab"]').should('be.visible');
66+
});
67+
4968
// Analyze for accessibility issues
5069
testA11y('ds-item-status');
5170
});
@@ -64,6 +83,10 @@ describe('Edit Item > Bitstreams tab', () => {
6483
// <ds-item-bitstreams> tag must be loaded
6584
cy.get('ds-item-bitstreams').should('be.visible');
6685

86+
// wait for all the tabs to be rendered on this page
87+
cy.get('ds-edit-item-page ul[role="tablist"]').each(($row: HTMLUListElement) => {
88+
cy.wrap($row).find('a[role="tab"]').should('be.visible');
89+
});
6790
// Table of item bitstreams must also be loaded
6891
cy.get('div.item-bitstreams').should('be.visible');
6992

@@ -93,6 +116,11 @@ describe('Edit Item > Curate tab', () => {
93116
// <ds-item-curate> tag must be loaded
94117
cy.get('ds-item-curate').should('be.visible');
95118

119+
// wait for all the tabs to be rendered on this page
120+
cy.get('ds-edit-item-page ul[role="tablist"]').each(($row: HTMLUListElement) => {
121+
cy.wrap($row).find('a[role="tab"]').should('be.visible');
122+
});
123+
96124
// Analyze for accessibility issues
97125
testA11y('ds-item-curate');
98126
});
@@ -111,6 +139,11 @@ describe('Edit Item > Relationships tab', () => {
111139
// <ds-item-relationships> tag must be loaded
112140
cy.get('ds-item-relationships').should('be.visible');
113141

142+
// wait for all the tabs to be rendered on this page
143+
cy.get('ds-edit-item-page ul[role="tablist"]').each(($row: HTMLUListElement) => {
144+
cy.wrap($row).find('a[role="tab"]').should('be.visible');
145+
});
146+
114147
// Analyze for accessibility issues
115148
testA11y('ds-item-relationships');
116149
});
@@ -129,6 +162,11 @@ describe('Edit Item > Version History tab', () => {
129162
// <ds-item-version-history> tag must be loaded
130163
cy.get('ds-item-version-history').should('be.visible');
131164

165+
// wait for all the tabs to be rendered on this page
166+
cy.get('ds-edit-item-page ul[role="tablist"]').each(($row: HTMLUListElement) => {
167+
cy.wrap($row).find('a[role="tab"]').should('be.visible');
168+
});
169+
132170
// Analyze for accessibility issues
133171
testA11y('ds-item-version-history');
134172
});
@@ -147,6 +185,11 @@ describe('Edit Item > Access Control tab', () => {
147185
// <ds-item-access-control> tag must be loaded
148186
cy.get('ds-item-access-control').should('be.visible');
149187

188+
// wait for all the tabs to be rendered on this page
189+
cy.get('ds-edit-item-page ul[role="tablist"]').each(($row: HTMLUListElement) => {
190+
cy.wrap($row).find('a[role="tab"]').should('be.visible');
191+
});
192+
150193
// Analyze for accessibility issues
151194
testA11y('ds-item-access-control');
152195
});
@@ -165,6 +208,11 @@ describe('Edit Item > Collection Mapper tab', () => {
165208
// <ds-item-collection-mapper> tag must be loaded
166209
cy.get('ds-item-collection-mapper').should('be.visible');
167210

211+
// wait for all the tabs to be rendered on this page
212+
cy.get('ds-edit-item-page ul[role="tablist"]').each(($row: HTMLUListElement) => {
213+
cy.wrap($row).find('a[role="tab"]').should('be.visible');
214+
});
215+
168216
// Analyze entire page for accessibility issues
169217
testA11y('ds-item-collection-mapper');
170218

0 commit comments

Comments
 (0)