diff --git a/shared/workspaces/test/test_capability_request.py b/shared/workspaces/test/test_capability_request.py index 191e7312b094f6298803405509d7ccf1d4ef7bb0..d09274c4d6e7fcf7175185389e821efe7cef9510 100644 --- a/shared/workspaces/test/test_capability_request.py +++ b/shared/workspaces/test/test_capability_request.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU General Public License # along with Workspaces. If not, see <https://www.gnu.org/licenses/>. -import random from typing import Dict from hypothesis import given @@ -93,14 +92,12 @@ st.register_type_strategy( def test_determine_state_complete(mock_capability_info: CapabilityInfo, request_json: Dict, list_of_version_json: Dict): """ Given: A capability request with multiple versions - When: QA is passed for the current version - And: The current version status is set to Complete - And: All other versions' statuses are set to Failed + When: The current version status is set to Complete Then: The request state should be set to Complete """ request = CapabilityRequest.from_json(request_json) versions = [CapabilityVersion.from_json(blob) for blob in list_of_version_json] - version_to_pass = random.choice(versions) + current_version_number = max(version.version_number for version in versions) with clear_test_database(mock_capability_info): mock_capability_info.save_entity(request) @@ -111,11 +108,9 @@ def test_determine_state_complete(mock_capability_info: CapabilityInfo, request_ version.capability_request_id = request.id # Set one version to Complete, the rest to Failed or Executing - if version.version_number == version_to_pass.version_number: - print("Setting passing version to Complete") + if version.version_number == current_version_number: version.state = CapabilityVersionState.Complete.name else: - print("Setting other version") version.state = ( CapabilityVersionState.Failed.name if version.state == CapabilityVersionState.Complete.name or not version.state diff --git a/shared/workspaces/workspaces/capability/schema.py b/shared/workspaces/workspaces/capability/schema.py index 55816b515380e2e06106b512b901675838c278bf..2cdafe8343c3da96afd236af9c2600eadbf0527c 100644 --- a/shared/workspaces/workspaces/capability/schema.py +++ b/shared/workspaces/workspaces/capability/schema.py @@ -477,18 +477,24 @@ class CapabilityRequest(Base, CapabilityRequestIF): - If all versions are created, the request is created - Otherwise, it is submitted """ + logger.info("Determine request state...") + logger.info(f"Current version: {self.current_version.__json__()}") version_states = [version.state for version in self.versions] - if any(state == CapabilityVersionState.Complete.name for state in version_states): - # Request has a complete version, so it is complete + if self.current_version.state == CapabilityVersionState.Complete.name: + # The current version is complete, so the request is complete + logger.info("Current version is complete. Setting request to Complete.") self.state = CapabilityRequestState.Complete.name elif all(state == CapabilityRequestState.Failed.name for state in version_states): # Request has all failed versions, so it is failed + logger.info("All versions are failed. Setting request to Failed.") self.state = CapabilityRequestState.Failed.name elif all(state == CapabilityRequestState.Created.name for state in version_states): # Request has no submitted versions, so it is still in the created state + logger.info("All versions are created. Setting request to Created.") self.state = CapabilityRequestState.Created.name else: + logger.info("Versions are in a mixture of states. Setting request to Submitted.") self.state = CapabilityRequestState.Submitted.name def __str__(self): diff --git a/shared/workspaces/workspaces/capability/services/capability_service.py b/shared/workspaces/workspaces/capability/services/capability_service.py index 84887f2374284524b0984f64785344796a928492..b990b3b1c3f5a987b610421cb01ea6f5126e5d9b 100644 --- a/shared/workspaces/workspaces/capability/services/capability_service.py +++ b/shared/workspaces/workspaces/capability/services/capability_service.py @@ -71,17 +71,17 @@ class CapabilityService(CapabilityServiceIF): logger.info(f"RECEIVED EXECUTION-COMPLETE: {message}") execution = message["subject"] - - # Update request state capability_request = self.capability_info.lookup_capability_request(execution["capability_request_id"]) - capability_request.determine_state() - self.capability_info.save_entity(capability_request) + version = self.capability_info.lookup_version(capability_request.id, execution["version_number"]) # Set version state to Complete if the execution is indeed complete; else, leave it alone - version = self.capability_info.lookup_version(capability_request.id, execution["version_number"]) version.state = CapabilityVersionState.Complete.name if execution["state_name"] == "Complete" else version.state self.capability_info.save_entity(version) + # Update request state + capability_request.determine_state() + self.capability_info.save_entity(capability_request) + capability_complete_msg = CapabilityMessageArchitect(request=capability_request).compose_message( "capability_complete" ) @@ -92,17 +92,17 @@ class CapabilityService(CapabilityServiceIF): logger.info(f"RECEIVED EXECUTION-FAILED: {message}") execution = message["subject"] - - # Update request state capability_request = self.capability_info.lookup_capability_request(execution["capability_request_id"]) - capability_request.determine_state() - self.capability_info.save_entity(capability_request) + version = self.capability_info.lookup_version(capability_request.id, execution["version_number"]) # Set version state to Failed - version = self.capability_info.lookup_version(capability_request.id, execution["version_number"]) version.state = CapabilityVersionState.Failed.name self.capability_info.save_entity(version) + # Update request state + capability_request.determine_state() + self.capability_info.save_entity(capability_request) + capability_failed_msg = CapabilityMessageArchitect(request=capability_request).compose_message( "capability_failed" )