diff --git a/nextgraph/src/tests/orm.rs b/nextgraph/src/tests/orm.rs index efe8e46..5286e89 100644 --- a/nextgraph/src/tests/orm.rs +++ b/nextgraph/src/tests/orm.rs @@ -7,13 +7,15 @@ // notice may not be copied, modified, or distributed except // according to those terms. -use crate::local_broker::{doc_create, doc_sparql_construct, doc_sparql_update}; +use crate::local_broker::{doc_create, doc_sparql_construct, doc_sparql_update, orm_start}; use crate::tests::create_or_open_wallet::create_or_open_wallet; +use async_std::stream::{IntoStream, StreamExt}; +use ng_net::app_protocol::{AppResponse, AppResponseV0, NuriV0}; use ng_net::orm::{ BasicType, OrmSchemaDataType, OrmSchemaLiteralType, OrmSchemaPredicate, OrmSchemaShape, OrmShapeType, }; -use ng_verifier::orm::orm::shape_type_to_sparql; +use ng_verifier::orm::shape_type_to_sparql; use ng_repo::log_info; use std::collections::HashMap; @@ -531,13 +533,11 @@ INSERT DATA { // Generate and run query. This must not infinite loop. let query = shape_type_to_sparql(&shape_type.schema, &shape_type.shape, None).unwrap(); - log_info!("cyclic query result:\n{}", query); let triples = doc_sparql_construct(session_id, query, Some(doc_nuri.clone())) .await .unwrap(); // Assert: All 6 triples (3 per person) should be returned. - log_info!("Triples:\n{:?}", triples); assert_eq!(triples.len(), 6); } @@ -810,6 +810,24 @@ INSERT DATA { shape: "http://example.org/TestObject".to_string(), }; - // + log_info!("starting orm test"); + let nuri = NuriV0::new_from(&doc_nuri).expect("parse nuri"); + let (mut receiver, cancel_fn) = orm_start(nuri, shape_type, session_id) + .await + .expect("orm_start"); + + log_info!("orm_start called"); + + while let Some(app_response) = receiver.next().await { + let orm_json = match app_response { + AppResponse::V0(v) => match v { + AppResponseV0::OrmInitial(json) => Some(json), + _ => None, + }, + } + .unwrap(); + + log_info!("ORM JSON arrived\n: {:?}", orm_json); + } // } diff --git a/ng-verifier/src/orm/mod.rs b/ng-verifier/src/orm/mod.rs index f6260e7..4e60b55 100644 --- a/ng-verifier/src/orm/mod.rs +++ b/ng-verifier/src/orm/mod.rs @@ -13,6 +13,7 @@ pub mod validation; use futures::channel::mpsc; use ng_oxigraph::oxrdf::Subject; +use ng_repo::types::OverlayId; use std::collections::HashMap; use std::collections::HashSet; @@ -59,6 +60,8 @@ impl Verifier { // ); //let base = NuriV0::repo_id(&repo.id); + log_debug!("querying construct\n{}\n\n", query); + let nuri_str = nuri.as_ref().map(|s| s.as_str()); let parsed = @@ -133,8 +136,6 @@ impl Verifier { triples_removed: &[Triple], orm_changes: &mut OrmChanges, ) -> Result<(), NgError> { - let nuri_repo = nuri.repo(); - // First in, last out stack to keep track of objects to validate (nested objects first). Strings are object IRIs. let mut shape_validation_queue: Vec<(Arc, Vec)> = vec![]; // Add root shape for first validation run. @@ -188,8 +189,7 @@ impl Verifier { .unwrap() .iter_mut() .find(|s| s.session_id == session_id && s.shape_type.shape == shape.iri) - .unwrap() - .clone(); + .unwrap(); if let Err(e) = add_remove_triples( shape.clone(), @@ -252,7 +252,7 @@ impl Verifier { let shape_query = shape_type_to_sparql(&schema, &shape_iri, Some(objects_to_fetch))?; let new_triples = - self.query_sparql_construct(shape_query, Some(nuri_repo.clone()))?; + self.query_sparql_construct(shape_query, Some(nuri_to_string(nuri)))?; self.process_changes_for_shape_and_session( nuri, @@ -491,8 +491,7 @@ impl Verifier { ) -> Result { // Query triples for this shape let shape_query = shape_type_to_sparql(&shape_type.schema, &shape_type.shape, None)?; - // TODO: How to stringify nuri correctly? - let shape_triples = self.query_sparql_construct(shape_query, Some(nuri.repo()))?; + let shape_triples = self.query_sparql_construct(shape_query, Some(nuri_to_string(nuri)))?; let changes: OrmChanges = self.apply_triple_changes(&shape_triples, &[], nuri, Some(session_id.clone()))?; @@ -868,3 +867,16 @@ pub fn group_by_subject_for_shape<'a>( return triples_by_subject; } + +fn nuri_to_string(nuri: &NuriV0) -> String { + // Get repo_id and overlay_id from the nuri + let repo_id = nuri.target.repo_id(); + let overlay_id = if let Some(overlay_link) = &nuri.overlay { + overlay_link.clone().try_into().unwrap() + } else { + // Default overlay for the repo + OverlayId::outer(repo_id) + }; + let graph_name = NuriV0::repo_graph_name(repo_id, &overlay_id); + graph_name +}