Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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 submit_ce/ui/workflow/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ def index(self, stage: Union[type, Stage, str]) -> int:
raise ValueError(f"{stage} not In workflow")

if isinstance(stage, str): # it could be classname, stage label
for idx, wstg in self.order:
for idx, wstg in enumerate(self.order):
if(wstg.label == stage
or wstg.__class__.__name__ == stage):
return idx
Expand Down
16 changes: 16 additions & 0 deletions submit_ce/ui/workflow/tests/test_stage_from_endpoint.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
"""Test getting stage from endpoint."""
# tests/ui/workflow/test_stage_from_endpoint.py
import pytest
from submit_ce.ui.workflow import WorkflowDefinition
from submit_ce.ui.workflow.stages import Stage

class P(Stage):
endpoint = "p"; label = "P"
def is_complete(self, sub): return True
def incomplete(self, sub): return []

def test_stage_from_endpoint_and_error():
wf = WorkflowDefinition("WF", order=[P()], confirmation=P())
assert type(wf.stage_from_endpoint("p")).__name__ == "P"
with pytest.raises(ValueError):
wf.stage_from_endpoint("nope")
22 changes: 22 additions & 0 deletions submit_ce/ui/workflow/tests/test_workflow_blocked.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
"""Test blocked on finalize."""
import pytest
from submit_ce.ui.workflow import WorkflowDefinition
from submit_ce.ui.workflow.stages import (
VerifyUser, Agreement, License, Classification,
FileUpload, ReviewFiles, Process, Metadata, FinalPreview, Confirm
)
from submit_ce.ui.workflow.processor import WorkflowProcessor

@pytest.mark.usefixtures("app")
def test_blocked_rules(sub_metadata):
wf = WorkflowDefinition(
"WF",
order=[VerifyUser(), Agreement(), License(), Classification(),
FileUpload(), ReviewFiles(), Process(), Metadata(), FinalPreview()],
confirmation=Confirm(),
)
proc = WorkflowProcessor(workflow=wf, submission=sub_metadata)

# Confirmation is blocked by FinalPreview (not finalized yet)
blocks = dict(proc.blocked(wf.confirmation))
assert "FinalPreview" in blocks
18 changes: 18 additions & 0 deletions submit_ce/ui/workflow/tests/test_workflow_index_string.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
"""Test to trigger index string bug in __init__.py"""
import pytest
from submit_ce.ui.workflow import WorkflowDefinition
from submit_ce.ui.workflow.stages import Stage

class X(Stage):
label = "X"; endpoint = "x"
def is_complete(self, sub): return True
def incomplete(self, sub): return []

class Y(Stage):
label = "Y"; endpoint = "y"
def is_complete(self, sub): return True
def incomplete(self, sub): return []

def test_index_by_string():
wf = WorkflowDefinition("WF", order=[X(), Y()], confirmation=Y())
assert wf.index("Y") == 1
17 changes: 17 additions & 0 deletions submit_ce/ui/workflow/tests/test_workflow_must_see.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
"""Test behavior when must seen is set"""
import pytest
from submit_ce.ui.workflow import ReplacementWorkflow
from submit_ce.ui.workflow.processor import WorkflowProcessor

@pytest.mark.usefixtures("app")
def test_must_see_forces_visitation(sub_metadata):
wf = ReplacementWorkflow
proc = WorkflowProcessor(workflow=wf, submission=sub_metadata)

# First stage must be seen even if predicates are satisfied
first = proc.current_stage()
assert type(first).__name__ == "VerifyUser"

# After marking seen, the processor should advance
proc.mark_seen(first)
assert type(proc.current_stage()).__name__ != "VerifyUser"
Loading