@@ -585,3 +585,114 @@ def test_post_node_expansion_invalid_request(self):
585585
586586def test_stop_server_never_started ():
587587 graph_server .graph_server .stop_server ()
588+
589+
590+ def test_convert_schema ():
591+ input_schema = {
592+ "propertyGraphReference" : {"propertyGraphId" : "LDBC_SNB" },
593+ "nodeTables" : [
594+ {
595+ "name" : "PersonNode" ,
596+ "dataSourceTable" : {"tableId" : "PersonTable" },
597+ "keyColumns" : ["id" ],
598+ "labelAndProperties" : [
599+ {
600+ "label" : "Person" ,
601+ "properties" : [
602+ {
603+ "name" : "name" ,
604+ "dataType" : {"typeKind" : "STRING" },
605+ "expression" : "p_name" ,
606+ }
607+ ],
608+ }
609+ ],
610+ }
611+ ],
612+ "edgeTables" : [
613+ {
614+ "name" : "KnowsEdge" ,
615+ "dataSourceTable" : {"tableId" : "KnowsTable" },
616+ "keyColumns" : ["p1" , "p2" ],
617+ "sourceNodeReference" : {
618+ "nodeTable" : "PersonNode" ,
619+ "edgeTableColumns" : ["p1" ],
620+ "nodeTableColumns" : ["id" ],
621+ },
622+ "destinationNodeReference" : {
623+ "nodeTable" : "PersonNode" ,
624+ "edgeTableColumns" : ["p2" ],
625+ "nodeTableColumns" : ["id" ],
626+ },
627+ "labelAndProperties" : [
628+ {
629+ "label" : "KNOWS" ,
630+ "properties" : [
631+ {
632+ "name" : "since" ,
633+ "dataType" : {"typeKind" : "DATE" },
634+ "expression" : "k_since" ,
635+ }
636+ ],
637+ }
638+ ],
639+ }
640+ ],
641+ }
642+
643+ schema_json = json .dumps (input_schema )
644+ result_json = graph_server ._convert_schema (schema_json )
645+ result = json .loads (result_json )
646+
647+ assert result ["name" ] == "LDBC_SNB"
648+ assert len (result ["nodeTables" ]) == 1
649+ assert result ["nodeTables" ][0 ]["name" ] == "PersonNode"
650+ assert result ["nodeTables" ][0 ]["baseTableName" ] == "PersonTable"
651+ assert result ["nodeTables" ][0 ]["kind" ] == "NODE"
652+ assert result ["nodeTables" ][0 ]["labelNames" ] == ["Person" ]
653+ assert result ["nodeTables" ][0 ]["propertyDefinitions" ] == [
654+ {"propertyDeclarationName" : "name" , "valueExpressionSql" : "p_name" }
655+ ]
656+
657+ assert len (result ["edgeTables" ]) == 1
658+ assert result ["edgeTables" ][0 ]["name" ] == "KnowsEdge"
659+ assert result ["edgeTables" ][0 ]["baseTableName" ] == "KnowsTable"
660+ assert result ["edgeTables" ][0 ]["kind" ] == "EDGE"
661+ assert result ["edgeTables" ][0 ]["labelNames" ] == ["KNOWS" ]
662+ assert result ["edgeTables" ][0 ]["sourceNodeTable" ]["nodeTableName" ] == "PersonNode"
663+ assert (
664+ result ["edgeTables" ][0 ]["destinationNodeTable" ]["nodeTableName" ] == "PersonNode"
665+ )
666+ assert result ["edgeTables" ][0 ]["propertyDefinitions" ] == [
667+ {"propertyDeclarationName" : "since" , "valueExpressionSql" : "k_since" }
668+ ]
669+
670+ assert len (result ["labels" ]) == 2
671+ labels = {l ["name" ]: l for l in result ["labels" ]}
672+ assert "Person" in labels
673+ assert "name" in labels ["Person" ]["propertyDeclarationNames" ]
674+ assert "KNOWS" in labels
675+ assert "since" in labels ["KNOWS" ]["propertyDeclarationNames" ]
676+
677+ assert len (result ["propertyDeclarations" ]) == 2
678+ props = {p ["name" ]: p for p in result ["propertyDeclarations" ]}
679+ assert props ["name" ]["type" ] == "STRING"
680+ assert props ["since" ]["type" ] == "DATE"
681+
682+
683+ def test_convert_schema_empty ():
684+ input_schema = {
685+ "propertyGraphReference" : {"propertyGraphId" : "EmptyGraph" },
686+ "nodeTables" : [],
687+ "edgeTables" : [],
688+ }
689+
690+ schema_json = json .dumps (input_schema )
691+ result_json = graph_server ._convert_schema (schema_json )
692+ result = json .loads (result_json )
693+
694+ assert result ["name" ] == "EmptyGraph"
695+ assert result ["nodeTables" ] == []
696+ assert result ["edgeTables" ] == []
697+ assert result ["labels" ] == []
698+ assert result ["propertyDeclarations" ] == []
0 commit comments