@@ -772,7 +772,7 @@ describe("Convertor", () => {
772
772
result . schemas . basic . properties . payment . oneOf [ 0 ] . default
773
773
) . to . be . equal ( "one" ) ;
774
774
775
- const cloned = JSON . parse ( JSON . stringify ( basicOpenAPI ) ) ;
775
+ const cloned = cloneDeep ( basicOpenAPI ) ;
776
776
Object . assign ( cloned , { components : result } ) ;
777
777
expect ( cloned ) . to . have . property ( "components" ) ;
778
778
expect ( cloned . components ) . to . have . property ( "schemas" ) ;
@@ -807,7 +807,7 @@ describe("Convertor", () => {
807
807
result . schemas . basic . properties . payment . anyOf [ 1 ] . default
808
808
) . to . be . equal ( 1 ) ;
809
809
810
- const cloned = JSON . parse ( JSON . stringify ( basicOpenAPI ) ) ;
810
+ const cloned = cloneDeep ( basicOpenAPI ) ;
811
811
Object . assign ( cloned , { components : result } ) ;
812
812
expect ( cloned ) . to . have . property ( "components" ) ;
813
813
expect ( cloned . components ) . to . have . property ( "schemas" ) ;
@@ -836,7 +836,7 @@ describe("Convertor", () => {
836
836
result . schemas . basic . properties . payment . allOf [ 0 ] . default
837
837
) . to . be . equal ( "one" ) ;
838
838
839
- const cloned = JSON . parse ( JSON . stringify ( basicOpenAPI ) ) ;
839
+ const cloned = cloneDeep ( basicOpenAPI ) ;
840
840
Object . assign ( cloned , { components : result } ) ;
841
841
expect ( cloned ) . to . have . property ( "components" ) ;
842
842
expect ( cloned . components ) . to . have . property ( "schemas" ) ;
@@ -848,12 +848,120 @@ describe("Convertor", () => {
848
848
849
849
describe ( `circular schemas` , function ( ) {
850
850
it ( `should convert a circular schema` , async function ( ) {
851
- const bundled = await $RefParser . bundle ( circular ) ;
852
- const dereferenced = await $RefParser . dereference ( bundled ) ;
851
+ const parser = new $RefParser ( ) ;
852
+ const bundled = await parser . bundle ( circular ) ;
853
+ const dereferenced = await parser . dereference ( bundled ) ;
854
+
855
+ const getCircularReplacer = ( ) => {
856
+ const seen = new WeakSet ( ) ;
857
+ return ( key , value ) => {
858
+ if ( typeof value === "object" && value !== null ) {
859
+ if ( seen . has ( value ) ) {
860
+ return ;
861
+ }
862
+ seen . add ( value ) ;
863
+ }
864
+ return value ;
865
+ } ;
866
+ } ;
867
+
868
+ // console.log(JSON.stringify(dereferenced, getCircularReplacer()));
869
+
870
+ expect ( parser . $refs . circular ) . to . be . true ;
871
+ expect ( dereferenced ) . to . have . property ( "definitions" ) ;
872
+ expect (
873
+ dereferenced . properties . user . properties . classes . items . properties
874
+ ) . to . haveOwnProperty ( "subRows" ) ;
875
+ expect (
876
+ dereferenced . properties . user . properties . classes . items . properties
877
+ ) . to . haveOwnProperty ( "className" ) ;
878
+ expect (
879
+ dereferenced . properties . user . properties . classes . items . properties
880
+ ) . to . haveOwnProperty ( "details" ) ;
881
+ expect (
882
+ dereferenced . properties . user . properties . classes . items . properties
883
+ ) . to . haveOwnProperty ( "id" ) ;
884
+ expect (
885
+ dereferenced . properties . user . properties . classes . items . properties
886
+ ) . to . haveOwnProperty ( "parentId" ) ;
887
+
888
+ expect (
889
+ dereferenced . properties . user . properties . classes . items . properties
890
+ . subRows . type
891
+ ) . to . be . equal ( "array" ) ;
892
+ expect (
893
+ dereferenced . properties . user . properties . classes . items . properties
894
+ . subRows . items . properties
895
+ ) . to . haveOwnProperty ( "subRows" ) ;
896
+ expect (
897
+ dereferenced . properties . user . properties . classes . items . properties
898
+ . subRows . items . properties
899
+ ) . to . haveOwnProperty ( "className" ) ;
900
+ expect (
901
+ dereferenced . properties . user . properties . classes . items . properties
902
+ . subRows . items . properties
903
+ ) . to . haveOwnProperty ( "details" ) ;
904
+ expect (
905
+ dereferenced . properties . user . properties . classes . items . properties
906
+ . subRows . items . properties
907
+ ) . to . haveOwnProperty ( "id" ) ;
908
+ expect (
909
+ dereferenced . properties . user . properties . classes . items . properties
910
+ . subRows . items . properties
911
+ ) . to . haveOwnProperty ( "parentId" ) ;
853
912
854
913
const newConvertor = new Convertor ( dereferenced ) ;
855
- const result = newConvertor . convert ( "basic" ) ;
856
- console . log ( result ) ;
914
+ try {
915
+ const result = newConvertor . convert ( "basic" ) ;
916
+
917
+ expect ( result . schemas . basic ) . to . not . have . property ( "definitions" ) ;
918
+ expect (
919
+ result . schemas . basic . properties . user . properties . classes . items
920
+ . properties
921
+ ) . to . haveOwnProperty ( "subRows" ) ;
922
+ expect (
923
+ result . schemas . basic . properties . user . properties . classes . items
924
+ . properties
925
+ ) . to . haveOwnProperty ( "className" ) ;
926
+ expect (
927
+ result . schemas . basic . properties . user . properties . classes . items
928
+ . properties
929
+ ) . to . haveOwnProperty ( "details" ) ;
930
+ expect (
931
+ result . schemas . basic . properties . user . properties . classes . items
932
+ . properties
933
+ ) . to . haveOwnProperty ( "id" ) ;
934
+ expect (
935
+ result . schemas . basic . properties . user . properties . classes . items
936
+ . properties
937
+ ) . to . haveOwnProperty ( "parentId" ) ;
938
+
939
+ expect (
940
+ result . schemas . basic . properties . user . properties . classes . items
941
+ . properties . subRows . type
942
+ ) . to . be . equal ( "array" ) ;
943
+
944
+ expect (
945
+ result . schemas . basic . properties . user . properties . classes . items
946
+ . properties . subRows
947
+ ) . to . have . property ( "items" ) ;
948
+ expect (
949
+ result . schemas . basic . properties . user . properties . classes . items
950
+ . properties . subRows . items
951
+ ) . to . be . deep . equal ( { } ) ;
952
+
953
+ // console.log(JSON.stringify(result));
954
+
955
+ const cloned = cloneDeep ( basicOpenAPI ) ;
956
+ Object . assign ( cloned , { components : result } ) ;
957
+ expect ( cloned ) . to . have . property ( "components" ) ;
958
+ expect ( cloned . components ) . to . have . property ( "schemas" ) ;
959
+ expect ( cloned . components . schemas ) . to . have . property ( "basic" ) ;
960
+ let valid = await validator . validateInner ( cloned , { } ) ;
961
+ expect ( valid ) . to . be . true ;
962
+ } catch ( err ) {
963
+ expect ( err ) . to . be . undefined ;
964
+ }
857
965
} ) ;
858
966
} ) ;
859
967
0 commit comments