diff --git a/backend/graph-proxy/src/graphql/triggers.rs b/backend/graph-proxy/src/graphql/triggers.rs index d1a2ced58..447958f7e 100644 --- a/backend/graph-proxy/src/graphql/triggers.rs +++ b/backend/graph-proxy/src/graphql/triggers.rs @@ -93,6 +93,8 @@ struct TriggerGQL { template_ref: Option, /// The beamline that the Trigger monitors beamline: Option, + /// The visit that the Trigger is tied to + visit: String, /// Whether the Trigger is currently active or not enabled: bool, /// Information about the creator of the Trigger @@ -101,6 +103,16 @@ struct TriggerGQL { impl From for TriggerGQL { fn from(t: Trigger) -> Self { + let visit = match t.metadata.namespace { + Some(namespace) => { + if namespace.as_str() == "events" { + String::from("any") + } else { + namespace + } + } + None => String::from("Unknown"), + }; Self { name: t.metadata.name, template_ref: t.spec.template_ref, @@ -109,6 +121,7 @@ impl From for TriggerGQL { .labels .as_ref() .and_then(|l| l.get("workflows.diamond.ac.uk/beamline").cloned()), + visit, enabled: t.spec.enabled, creator: TriggerCreator::from_trigger_labels(&t.metadata.labels), } @@ -773,6 +786,7 @@ users: trigger(name: "example-trigger-mfvpj") { name beamline + visit } } "#, @@ -780,7 +794,8 @@ users: json!({ "trigger": { "name": "example-trigger-mfvpj", - "beamline": "test-beamline" + "beamline": "test-beamline", + "visit": "any" } }) )] @@ -826,6 +841,7 @@ users: number: 1 } ) { + visit creator { creatorId } @@ -835,6 +851,7 @@ users: "namespaced-trigger.json", json!({ "trigger": { + "visit": "mg36964-1", "creator": { "creatorId": "abc12345" } @@ -889,6 +906,26 @@ users: } }) )] + // missing namespace returns "Unknown" + #[case( + "example-trigger-mfvpj", + "events", + r#" + query { + trigger( + name: "example-trigger-mfvpj", + ) { + visit + } + } + "#, + "no-namespace-trigger.json", + json!({ + "trigger": { + "visit": "Unknown" + } + }) + )] #[tokio::test] async fn get_single_trigger( #[case] trigger_name: &str, diff --git a/backend/graph-proxy/test-assets/no-namespace-trigger.json b/backend/graph-proxy/test-assets/no-namespace-trigger.json new file mode 100644 index 000000000..21ca6519c --- /dev/null +++ b/backend/graph-proxy/test-assets/no-namespace-trigger.json @@ -0,0 +1,40 @@ +{ + "apiVersion": "workflows.diamond.ac.uk/v1alpha1", + "kind": "Trigger", + "metadata": { + "creationTimestamp": "2026-07-17T08:19:18Z", + "generateName": "example-trigger-", + "generation": 1, + "labels": { + "workflows.diamond.ac.uk/beamline": "test-beamline", + "workflows.diamond.ac.uk/posixuid": "7357", + "workflows.diamond.ac.uk/source": "webhook" + }, + "name": "example-trigger-mfvpj", + "resourceVersion": "44311920", + "uid": "2ff86138-9952-46f6-8d42-a60b7da9b003" + }, + "spec": { + "enabled": true, + "eventName": "example", + "templateRef": "example-trigger", + "workflow": { + "parameters": [ + { + "name": "tif", + "path": "parameters.tif" + }, + { + "name": "tiff", + "path": "parameters.tiff" + }, + { + "default": "true", + "name": "png", + "path": "parameters.png" + } + ], + "template": "example-template" + } + } +}