Skip to main content
Glama
qualifications.rs3.99 kB
use std::time::Duration; use dal::{ Component, DalContext, qualification::{ QualificationOutputStreamView, QualificationResult, QualificationSubCheck, QualificationSubCheckStatus, QualificationView, }, }; use dal_test::{ helpers::{ ChangeSetTestHelpers, create_component_for_default_schema_name_in_default_view, }, test, }; use pretty_assertions_sorted::assert_eq; const DUMMY_OUTPUT_STREAM_VIEW_LINE: &str = "[THIS IS FAKE DATA]"; #[test] async fn list_qualifications(ctx: &mut DalContext) { let component = create_component_for_default_schema_name_in_default_view( ctx, "dummy-secret", "deserializing serde json value null into an option results in None and that's insane", ) .await .expect("could not create component"); // Prepare expected qualification views. let expected_additional_qualification_view_name = "test:qualificationDummySecretStringIsTodd".to_string(); let expected_additional_qualification_view = QualificationView { title: expected_additional_qualification_view_name.to_owned(), output: vec![QualificationOutputStreamView { stream: "output".to_string(), line: DUMMY_OUTPUT_STREAM_VIEW_LINE.to_string(), level: "info".to_string(), }], finalized: true, description: None, link: None, result: Some(QualificationResult { status: QualificationSubCheckStatus::Failure, title: Some(expected_additional_qualification_view_name.to_owned()), link: None, sub_checks: vec![QualificationSubCheck { description: "dummy secret string is empty".to_string(), status: QualificationSubCheckStatus::Failure, }], }), qualification_name: expected_additional_qualification_view_name.to_owned(), }; // Check qualifications before committing and running dependent values update. We do not need // to sanitize the views here as there should be no output. let qualifications = Component::list_qualifications(ctx, component.id()) .await .expect("could not list qualifications"); assert!(qualifications.is_empty()); // Commit and check qualifications again. We should see the populated map with all // qualifications. ChangeSetTestHelpers::commit_and_update_snapshot_to_visibility(ctx) .await .expect("could not commit and update snapshot to visibility"); let total_count = 100; let mut count = 0; let mut qualifications; loop { if count > total_count { panic!("func run log entries have not all been finalized after waiting for a period"); } qualifications = Component::list_qualifications(ctx, component.id()) .await .expect("could not list qualifications"); if qualifications.iter().all(|qual| qual.finalized) { break; } tokio::time::sleep(Duration::from_millis(100)).await; count += 1; } // Sanitize the qualification views' output stream view lines. let qualifications: Vec<QualificationView> = qualifications .into_iter() .map(replace_output_stream_view_line_contents) .collect(); // NOTE(nick): at the time of writing this test, we receive the qualifications sorted, so we // neither need to perform an additional sort nor use something like a hash set. assert_eq!( vec![replace_output_stream_view_line_contents( expected_additional_qualification_view )], // expected qualifications // actual ); } fn replace_output_stream_view_line_contents(view: QualificationView) -> QualificationView { let mut view = view; for output_stream_view in &mut view.output { output_stream_view.line = DUMMY_OUTPUT_STREAM_VIEW_LINE.to_string(); } view }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/systeminit/si'

If you have feedback or need assistance with the MCP directory API, please join our Discord server