Skip to content

Commit 9337848

Browse files
authored
[ENG-9122] Update fix (#11403)
1 parent 1965f4a commit 9337848

File tree

2 files changed

+38
-2
lines changed

2 files changed

+38
-2
lines changed

osf/models/preprint.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -382,14 +382,18 @@ def create(cls, provider, title, creator, description, manual_guid=None, manual_
382382

383383
def get_last_not_rejected_version(self):
384384
"""Get the last version that is not rejected.
385+
Returns None if all versions are rejected.
385386
"""
386-
return self.get_guid().versions.filter(is_rejected=False).order_by('-version').first().referent
387+
last_not_rejected = self.get_guid().versions.filter(is_rejected=False).order_by('-version').first()
388+
return last_not_rejected.referent if last_not_rejected else None
387389

388390
def has_unpublished_pending_version(self):
389391
"""Check if preprint has pending unpublished version.
390392
Note: use `.check_unfinished_or_unpublished_version()` if checking both types
391393
"""
392394
last_not_rejected_version = self.get_last_not_rejected_version()
395+
if not last_not_rejected_version:
396+
return False
393397
return not last_not_rejected_version.date_published and last_not_rejected_version.machine_state == 'pending'
394398

395399
def has_initiated_but_unfinished_version(self):
@@ -800,7 +804,7 @@ def date_created_first_version(self):
800804
if not base_guid:
801805
return self.created
802806

803-
first_version = base_guid.versions.filter(is_rejected=False).order_by('version').first()
807+
first_version = base_guid.versions.order_by('version').first()
804808

805809
if first_version and first_version.referent:
806810
return first_version.referent.created

tests/test_preprints.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2701,6 +2701,38 @@ def test_preprint_version_withdrawal_request_post_mod(self, make_withdrawal_requ
27012701
assert new_version.is_published is True
27022702
assert new_version.machine_state == ReviewStates.WITHDRAWN.value
27032703

2704+
def test_date_created_first_version_with_rejected_v1(self, creator, moderator):
2705+
v1 = PreprintFactory(reviews_workflow='pre-moderation', is_published=False, creator=creator)
2706+
v1.run_submit(creator)
2707+
v1.run_reject(moderator, 'Rejecting v1')
2708+
v1.reload()
2709+
2710+
assert v1.machine_state == ReviewStates.REJECTED.value
2711+
assert v1.versioned_guids.first().is_rejected is True
2712+
v1_created = v1.created
2713+
2714+
v2 = PreprintFactory.create_version(
2715+
create_from=v1,
2716+
creator=creator,
2717+
final_machine_state='initial',
2718+
is_published=False,
2719+
set_doi=False
2720+
)
2721+
v2.run_submit(creator)
2722+
v2.run_accept(moderator, 'Accepting v2')
2723+
v2.reload()
2724+
2725+
assert v2.machine_state == ReviewStates.ACCEPTED.value
2726+
assert v2.is_published is True
2727+
v2_created = v2.created
2728+
2729+
assert v2_created > v1_created
2730+
2731+
assert v2.date_created_first_version == v1_created
2732+
assert v2.date_created_first_version != v2_created
2733+
2734+
assert v1.date_created_first_version == v1_created
2735+
27042736

27052737
class TestEmberRedirect(OsfTestCase):
27062738

0 commit comments

Comments
 (0)