diff --git a/contracts/okp4-cognitarium/src/contract.rs b/contracts/okp4-cognitarium/src/contract.rs index 837c8c08..8d7f0b07 100644 --- a/contracts/okp4-cognitarium/src/contract.rs +++ b/contracts/okp4-cognitarium/src/contract.rs @@ -248,7 +248,6 @@ mod tests { namespaces, triples, Namespace, Node, Object, StoreLimits, StoreStat, Subject, Triple, }; use crate::{msg, state}; - use blake3::Hash; use cosmwasm_std::testing::{mock_dependencies, mock_env, mock_info}; use cosmwasm_std::{from_binary, Addr, Attribute, Order, Uint128}; use std::collections::BTreeMap; @@ -386,10 +385,11 @@ mod tests { .load( &deps.storage, ( - Hash::from_hex( - "09653b5306fa80dc7bea8313d84ac6ed9ded591d42c7f4838c39d1d7a4f09d03" - ) - .unwrap() + Object::Named(Node { + namespace: 4u128, + value: "0x04d1f1b8f8a7a28f9a5a254c326a963a22f5a5b5d5f5e5d5c5b5a5958575655" + .to_string() + }).as_hash() .as_bytes(), Node { namespace: 3u128, @@ -1178,18 +1178,7 @@ mod tests { DescribeResponse { format: DataFormat::Turtle, data: Binary::from( - " , ; -\t \"test\" ; -\t \"test Dataset\"@en , \"Dataset de test\"@fr ; -\t ; -\t ; -\t ; -\t \"Me\" ; -\t ; -\t \"OKP4\" ; -\t \"Un Dataset de test.\"@fr , \"A test Dataset.\"@en . -\ - ".to_string().as_bytes().to_vec()), + " , ;\n\t \"test\" ;\n\t \"test Dataset\"@en , \"Dataset de test\"@fr ;\n\t ;\n\t ;\n\t ;\n\t \"Me\" ;\n\t ;\n\t \"OKP4\" ;\n\t \"Un Dataset de test.\"@fr , \"A test Dataset.\"@en .\n".to_string().as_bytes().to_vec()), } ), ]; @@ -1256,25 +1245,7 @@ mod tests { DescribeResponse { format: DataFormat::Turtle, data: Binary::from( - " , ; -\t \"Test\" , \"OKP4\" ; -\t \"Data Space de test\"@fr , \"Test Data Space\"@en ; -\t ; -\t ; -\t \"OKP4\" ; -\t \"A test Data Space.\"@en , \"Un Data Space de test.\"@fr . - , ; -\t \"test\" ; -\t \"test Dataset\"@en , \"Dataset de test\"@fr ; -\t ; -\t ; -\t ; -\t \"Me\" ; -\t ; -\t \"OKP4\" ; -\t \"Un Dataset de test.\"@fr , \"A test Dataset.\"@en . -\ - ".to_string().as_bytes().to_vec()), + " , ;\n\t \"Test\" , \"OKP4\" ;\n\t \"Data Space de test\"@fr , \"Test Data Space\"@en ;\n\t ;\n\t ;\n\t \"OKP4\" ;\n\t \"A test Data Space.\"@en , \"Un Data Space de test.\"@fr .\n , ;\n\t \"test\" ;\n\t \"test Dataset\"@en , \"Dataset de test\"@fr ;\n\t ;\n\t ;\n\t ;\n\t \"Me\" ;\n\t ;\n\t \"OKP4\" ;\n\t \"Un Dataset de test.\"@fr , \"A test Dataset.\"@en .\n".to_string().as_bytes().to_vec()), } ), ]; @@ -1345,10 +1316,7 @@ mod tests { DescribeResponse { format: DataFormat::Turtle, data: Binary::from( - " , ; -\t \"2022-01-01T00:00:00+00:00\"^^ . -\ - ".to_string().as_bytes().to_vec()), + " , ;\n\t \"2022-01-01T00:00:00+00:00\"^^ .\n".to_string().as_bytes().to_vec()), } ), ]; diff --git a/contracts/okp4-cognitarium/src/querier/engine.rs b/contracts/okp4-cognitarium/src/querier/engine.rs index ca869bdb..8b0c3220 100644 --- a/contracts/okp4-cognitarium/src/querier/engine.rs +++ b/contracts/okp4-cognitarium/src/querier/engine.rs @@ -587,19 +587,19 @@ mod test { results: Results { bindings: vec![ BTreeMap::from([ - ("subject".to_string(), Value::URI {value: IRI::Full("https://ontology.okp4.space/dataverse/dataset/0ea1fc7a-dd97-4adc-a10e-169c6597bcde".to_string())}), - ("predicate".to_string(), Value::URI {value: IRI::Full("https://ontology.okp4.space/core/hasIdentifier".to_string())}), - ("object".to_string(), Value::URI {value: IRI::Full("urn:uuid:0ea1fc7a-dd97-4adc-a10e-169c6597bcde".to_string())}), + ("subject".to_string(), Value::URI {value: IRI::Full("https://ontology.okp4.space/dataverse/dataset/metadata/d1615703-4ee1-4e2f-997e-15aecf1eea4e".to_string())}), + ("predicate".to_string(), Value::URI {value: IRI::Full("https://ontology.okp4.space/core/describes".to_string())}), + ("object".to_string(), Value::URI {value: IRI::Full("https://ontology.okp4.space/dataverse/dataset/0ea1fc7a-dd97-4adc-a10e-169c6597bcde".to_string())}), ]), BTreeMap::from([ - ("subject".to_string(), Value::URI {value: IRI::Full("https://ontology.okp4.space/dataverse/dataspace/97ff7e16-c08d-47be-8475-211016c82e33".to_string())}), - ("predicate".to_string(), Value::URI {value: IRI::Full("http://www.w3.org/1999/02/22-rdf-syntax-ns#type".to_string())}), - ("object".to_string(), Value::URI {value: IRI::Full("https://ontology.okp4.space/core/DataSpace".to_string())}), + ("subject".to_string(), Value::URI {value: IRI::Full("https://ontology.okp4.space/dataverse/dataset/metadata/d1615703-4ee1-4e2f-997e-15aecf1eea4e".to_string())}), + ("predicate".to_string(), Value::URI {value: IRI::Full("https://ontology.okp4.space/core/hasDescription".to_string())}), + ("object".to_string(), Value::Literal {value: "Un Dataset de test.".to_string(), lang: Some("fr".to_string()), datatype: None }), ]), BTreeMap::from([ - ("subject".to_string(), Value::URI {value: IRI::Full("https://ontology.okp4.space/dataverse/dataset/0ea1fc7a-dd97-4adc-a10e-169c6597bcde".to_string())}), - ("predicate".to_string(), Value::URI {value: IRI::Full("http://www.w3.org/1999/02/22-rdf-syntax-ns#type".to_string())}), - ("object".to_string(), Value::URI {value: IRI::Full("https://ontology.okp4.space/core/Dataset".to_string())}), + ("subject".to_string(), Value::URI {value: IRI::Full("https://ontology.okp4.space/dataverse/dataset/metadata/d1615703-4ee1-4e2f-997e-15aecf1eea4e".to_string())}), + ("predicate".to_string(), Value::URI {value: IRI::Full("https://ontology.okp4.space/core/hasTitle".to_string())}), + ("object".to_string(), Value::Literal { value: "test Dataset".to_string(), lang: Some("en".to_string()), datatype: None }), ]), ], }, diff --git a/contracts/okp4-cognitarium/src/state/triples.rs b/contracts/okp4-cognitarium/src/state/triples.rs index 27253226..87014d1f 100644 --- a/contracts/okp4-cognitarium/src/state/triples.rs +++ b/contracts/okp4-cognitarium/src/state/triples.rs @@ -85,7 +85,7 @@ impl Object { hasher .update(&[b'n']) .update(n.namespace.to_be_bytes().as_slice()) - .update(n.namespace.to_be_bytes().as_slice()); + .update(n.value.as_bytes()); } Object::Blank(n) => { hasher.update(&[b'b']).update(n.as_bytes()); @@ -143,3 +143,124 @@ pub enum Literal { I18NString { value: String, language: String }, Typed { value: String, datatype: Node }, } + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn object_hash() { + let cases = vec![ + ( + Object::Named(Node { + namespace: 0, + value: "val1".to_string(), + }), + Object::Named(Node { + namespace: 0, + value: "val2".to_string(), + }), + ), + ( + Object::Named(Node { + namespace: 1, + value: "val".to_string(), + }), + Object::Named(Node { + namespace: 2, + value: "val".to_string(), + }), + ), + ( + Object::Blank("val1".to_string()), + Object::Blank("val2".to_string()), + ), + ( + Object::Literal(Literal::Simple { + value: "val1".to_string(), + }), + Object::Literal(Literal::Simple { + value: "val2".to_string(), + }), + ), + ( + Object::Literal(Literal::I18NString { + language: "fr".to_string(), + value: "val1".to_string(), + }), + Object::Literal(Literal::I18NString { + language: "fr".to_string(), + value: "val2".to_string(), + }), + ), + ( + Object::Literal(Literal::I18NString { + language: "fr".to_string(), + value: "val".to_string(), + }), + Object::Literal(Literal::I18NString { + language: "en".to_string(), + value: "val".to_string(), + }), + ), + ( + Object::Literal(Literal::Typed { + datatype: Node { + namespace: 0, + value: "n".to_string(), + }, + value: "val1".to_string(), + }), + Object::Literal(Literal::Typed { + datatype: Node { + namespace: 0, + value: "n".to_string(), + }, + value: "val2".to_string(), + }), + ), + ( + Object::Literal(Literal::Typed { + datatype: Node { + namespace: 0, + value: "n1".to_string(), + }, + value: "val".to_string(), + }), + Object::Literal(Literal::Typed { + datatype: Node { + namespace: 0, + value: "n2".to_string(), + }, + value: "val".to_string(), + }), + ), + ( + Object::Literal(Literal::Typed { + datatype: Node { + namespace: 1, + value: "n".to_string(), + }, + value: "val".to_string(), + }), + Object::Literal(Literal::Typed { + datatype: Node { + namespace: 2, + value: "n".to_string(), + }, + value: "val".to_string(), + }), + ), + ( + Object::Blank("val".to_string()), + Object::Literal(Literal::Simple { + value: "val".to_string(), + }), + ), + ]; + + for case in cases { + assert_ne!(case.0.as_hash(), case.1.as_hash()) + } + } +}