Skip to content
Closed
Show file tree
Hide file tree
Changes from 17 commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
7752369
move plagiarism
amdomanska Oct 28, 2025
4c36872
move keywords and subject to editorial
amdomanska Oct 28, 2025
fb8b1dc
move keywords and subject
amdomanska Oct 28, 2025
4a35af8
move subject tree from a modal to the main form body
amdomanska Oct 28, 2025
e60b38b
Update seamless.py
amdomanska Nov 4, 2025
94502d1
Merge branch 'develop' into feature/4102_editorial_form-rearrangement
Steven-Eardley Nov 13, 2025
6bc9d96
script to delete empty indexes, because for some reason this branch's…
Steven-Eardley Nov 13, 2025
d5bb22c
add functional tests, add missing fields in templates
amdomanska Nov 26, 2025
a061ee6
fix urls in functional tests
amdomanska Nov 26, 2025
620da05
fix url in functional tests
amdomanska Nov 26, 2025
688b084
add keep latest arg to index deletion script
Steven-Eardley Nov 26, 2025
2da1a8e
missing quotation mark
amdomanska Dec 11, 2025
ccaf2ae
add deadline validation - validate if not empty if not disabled, vali…
amdomanska Dec 16, 2025
65ecbd1
validate deadline for any value
amdomanska Dec 16, 2025
2080dce
add assignee validation
amdomanska Dec 16, 2025
9c8a84b
remove info message
amdomanska Dec 16, 2025
2bf5d8a
add functional tests
amdomanska Dec 16, 2025
12d9307
Merge branch 'develop' into feature/4202_flags
richard-jones Jan 22, 2026
88a1a15
Merge branch 'develop' into feature/4202_flags
richard-jones Feb 5, 2026
0cc138c
Merge branch 'develop' into feature/4202_flags
richard-jones Feb 11, 2026
bf58eda
partial updates for flag deadline/assignee validation. Mostly workin…
richard-jones Feb 13, 2026
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
2 changes: 1 addition & 1 deletion cms/sass/components/_accordion.scss
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
.accordion:focus-within {
border: $grapefruit solid;
outline: $grapefruit solid;
}
3 changes: 0 additions & 3 deletions cms/sass/components/_filters.scss
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,6 @@
}

.filter__choices {
max-height: $spacing-07;
height: auto;
overflow-y: auto;
padding-top: $spacing-01;
@include unstyled-list;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
suite: Editorial Form Field Placement Changes
testset: Editorial Form Field Placement Changes

tests:
- title: Admin – Updated Form Layout and Field Behaviour
setup:
- Go to /testdrive/form_rearrangement
context:
role: admin
steps:
- step: Log in as DukeDingleberry, the admin

- step: Access the journal form at /admin/journal_id
results:
- The plagiarism questions appear in the Best Practice section
- The keywords field is positioned at the end of the Editorial section
- The subject classification field is positioned at the end of the Editorial section
- There is no subject classification modal
- The subject classification question is now displayed directly in the main form body
- step: Remove the currently selected subject
results:
- The change is correctly reflected under the subject browser
- step: Use the search input to find any subject
results:
- The subject browser behaves correctly when searched
- step: Select a subject
results:
- The change is correctly reflected under the subject browser
- step: Save the form
results:
- The new subject is saved correctly
- step: Click "Unlock & Close"

- step: Access the application form at /application/application_id
results:
- Same checks as above
- step: Click "Unlock & Close"

- step: Access the update request form at /application/update_request_id
results:
- Same checks as above
- step: Click "Unlock & Close"
- step: Log out of the admin account


- title: Editor – Updated Form Layout and Field Behaviour
setup:
- Go to /testdrive/form_rearrangement
context:
role: editor
steps:
- step: Log in as CountessCrumblewhisk, the editor

- step: Access the application form at /editor/application/application_id
results:
- The plagiarism questions appear in the Best Practice section
- The keywords field is positioned at the end of the Editorial section
- The subject classification field is positioned at the end of the Editorial section
- There is no subject classification modal
- The subject classification question is now displayed directly in the main form body
- step: Remove the currently selected subject
results:
- The change is correctly reflected under the subject browser
- step: Use the search input to find any subject
results:
- The subject browser behaves correctly when searched
- step: Select a subject
results:
- The change is correctly reflected under the subject browser
- step: Save the form
results:
- The new subject is saved correctly
- step: Click "Unlock & Close"
- step: Log out of the editor account


- title: Publisher – Fields Remain in Existing Sections
setup:
- Go to /testdrive/form_rearrangement
context:
role: publisher
steps:
- step: Log in as LordSniffleton, the publisher

- step: Access the update request form at /publisher/update_request/journal_id
results:
- The keywords question remains in the About section (not moved to the Editorial section)
- The plagiarism questions appear in the Best Practice section
- step: Click "Unlock & Close"

- step: Access the new application form at /apply
results:
- Same checks as above
- step: Log out of the publisher account

42 changes: 41 additions & 1 deletion doajtest/testbook/flagged_journals/flagged_journals.yml
Original file line number Diff line number Diff line change
Expand Up @@ -137,4 +137,44 @@ tests:
- step: Navigate to /editor/your_applications
results:
- There is no information about any flags
- Only Flagged Records and Flagged to you" facets are **not** displayed
- Only Flagged Records and Flagged to you" facets are **not** displayed

- title: Flag Validation
setup:
- Open any journal form without a flag
context:
role: admin
steps:
- step: Click "Add flag"
- step: Enter a note only (leave assignee and deadline empty)
- step: Click "Save"
results:
- An error message is displayed under the assignee input
- An error message is displayed under the deadline input
- step: Enter a deadline
- step: Click "Save"
results:
- The error under the deadline input is cleared
- The error under the assignee input is still displayed
- step: Enter an assignee
- step: Click "Save"
results:
- The flag is saved successfully
- The flag is displayed correctly with note, assignee, and deadline
- step: Edit the flag and remove the deadline value
- step: Click "Resolve flag"
results:
- The flag is marked as resolved
- step: Click "Add flag"
- step: Enter a note only (leave assignee and deadline empty)
- step: Click "Save"
results:
- An error message is displayed under the assignee input of the new flag
- An error message is displayed under the deadline input of the new flag
- No validation errors are shown on the resolved flag fields
- step: Enter a deadline and an assignee for the new flag
- step: Click "Save"
results:
- The resolved flag is converted to a note
- The new flag is saved successfully
- The new flag is displayed with note, assignee, and deadline
106 changes: 106 additions & 0 deletions doajtest/testdrive/form_rearrangement.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
from portality import constants
from doajtest.testdrive.factory import TestDrive
from doajtest.fixtures.v2.journals import JournalFixtureFactory
from doajtest.fixtures.v2.applications import ApplicationFixtureFactory
from portality import models


class FormRearrangement(TestDrive):
def setup(self) -> dict:
publisher_un = "LordSniffleton"
publisher_pw = self.create_random_str()
publisher_acc = models.Account.make_account(
publisher_un + "@example.com",
publisher_un,
"Publisher " + publisher_un,
[constants.ROLE_PUBLISHER]
)
publisher_acc.set_password(publisher_pw)
publisher_acc.save()

admin_un = "DukeDingleberry"
admin_pw = self.create_random_str()
admin_acc = models.Account.make_account(
admin_un + "@example.com",
admin_un,
"Admin " + admin_un,
[constants.ROLE_ADMIN]
)
admin_acc.set_password(admin_pw)
admin_acc.save()

editor_un = "CountessCrumblewhisk"
editor_pw = self.create_random_str()
editor_acc = models.Account.make_account(
editor_un + "@example.com",
editor_un,
"Editor " + editor_un,
[constants.ROLE_EDITOR]
)
editor_acc.set_password(editor_pw)
editor_acc.save()

# Journal setup
source = JournalFixtureFactory.make_journal_source(in_doaj=True)
j = models.Journal(**source)
j.remove_current_application()
j.set_id(j.makeid())
j.set_owner(publisher_acc.id)
j.bibjson().eissn = "1987-0007"
j.bibjson().pissn = "3141-5926"
j.bibjson().title = "Annals of Aquatic Diplomacy"
j.bibjson().journal_url = "https://please-dont-splash.org"
del j.bibjson().discontinued_date
j.save(blocking=True)

# New application setup
source = ApplicationFixtureFactory.make_application_source()
a = models.Application(**source)
a.remove_current_journal()
a.remove_related_journal()
a.application_type = constants.APPLICATION_TYPE_NEW_APPLICATION
a.set_id(a.makeid())
a.set_editor(editor_acc.id)
a.set_owner(publisher_acc.id)
a.bibjson().eissn = "2718-2818"
a.bibjson().title = "Journal of Speculative Mycology"
a.bibjson().journal_url = "https://fungi-that-might-exist.com"
a.set_application_status(constants.APPLICATION_STATUS_IN_PROGRESS)
a.save(blocking=True)

# Update request setup
source = ApplicationFixtureFactory.make_update_request_source()
ur = models.Application(**source)
ur.set_id(ur.makeid())
ur.set_editor(editor_acc.id)
ur.set_owner(publisher_acc.id)
ur.bibjson().pissn = "0042-2718"
ur.bibjson().title = "Proceedings of Recursive Archaeology"
ur.bibjson().journal_url = "https://digging-up-the-future.net"
ur.save(blocking=True)

return {
"accounts": {
"admin": {"username": admin_acc.id, "password": admin_pw},
"editor": {"username": editor_acc.id, "password": editor_pw},
"publisher": {"username": publisher_acc.id, "password": publisher_pw},
},
"journals": {j.bibjson().title: j.id},
"applications": {a.bibjson().title: a.id},
"update_requests": {ur.bibjson().title: ur.id}
}

def teardown(self, params) -> dict:
for accid in ["admin", "editor", "publisher"]:
models.Account.remove_by_id(params["accounts"][accid]["username"])

for title, id in params["journals"].items():
models.Journal.remove_by_id(id)

for title, id in params["applications"].items():
models.Application.remove_by_id(id)

for title, id in params["update_requests"].items():
models.Application.remove_by_id(id)

return {"status": "success"}
2 changes: 2 additions & 0 deletions portality/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -163,3 +163,5 @@ class BaseArticlesUploadStatus(ConstantList):

# Extra params
EXPARAM_EDITING_USER = 'editing_user'

DUMMY_STRING = "thisisadummystringthathasverylittlechanceofappearingintheuilegitimetly"
Loading