@@ -91,6 +91,60 @@ def test_fails_properties_with_pattern_mismatch():
9191 assert issues [0 ].jsonpath == "$.contributors[0].path"
9292
9393
94+ @mark .parametrize ("primary_key" , ["id" , ["id" , "name" ]])
95+ def test_pass_good_primary_key (primary_key ):
96+ properties = example_package_properties ()
97+ properties ["resources" ][0 ]["schema" ]["primaryKey" ] = primary_key
98+ properties ["resources" ][0 ]["schema" ]["fields" ].extend (
99+ [
100+ {"name" : "id" , "type" : "integer" },
101+ {"name" : "name" , "type" : "string" },
102+ ]
103+ )
104+
105+ issues = check (properties )
106+
107+ assert issues == []
108+
109+
110+ @mark .parametrize ("primary_key" , ["" , "last_name" , ["first_name" , "last_name" ]])
111+ def test_fail_primary_key_with_unknown_fields (primary_key ):
112+ properties = example_package_properties ()
113+ properties ["resources" ][0 ]["schema" ]["primaryKey" ] = primary_key
114+
115+ issues = check (properties )
116+
117+ assert len (issues ) == 1
118+ assert issues [0 ].jsonpath == "$.resources[0].schema.primaryKey"
119+ assert issues [0 ].type == "primary-key"
120+ assert issues [0 ].instance == primary_key
121+
122+
123+ @mark .parametrize ("primary_key" , [None , 123 , [], [123 , "a_field" ]])
124+ def test_do_not_check_bad_primary_key_against_fields (primary_key ):
125+ properties = example_package_properties ()
126+ properties ["resources" ][0 ]["schema" ]["primaryKey" ] = primary_key
127+
128+ issues = check (properties )
129+
130+ assert len (issues ) == 1
131+ assert issues [0 ].type != "primary-key"
132+
133+
134+ def test_do_not_check_primary_key_against_bad_field ():
135+ properties = example_package_properties ()
136+ properties ["resources" ][0 ]["schema" ]["primaryKey" ] = "eye-colour"
137+ properties ["resources" ][0 ]["schema" ]["fields" ].append (
138+ # Bad name
139+ {"name" : 123 , "type" : "integer" },
140+ )
141+
142+ issues = check (properties )
143+
144+ assert len (issues ) == 1
145+ assert issues [0 ].type != "primary-key"
146+
147+
94148def test_pass_good_foreign_keys_same_resource ():
95149 properties = example_package_properties ()
96150 properties ["resources" ][0 ]["schema" ]["fields" ].extend (
@@ -832,16 +886,6 @@ def test_fail_foreign_keys_with_bad_array_item():
832886 )
833887
834888
835- @mark .parametrize ("primary_key" , ["id" , ["name" , "address" ]])
836- def test_pass_good_primary_key (primary_key ):
837- properties = example_package_properties ()
838- properties ["resources" ][0 ]["schema" ]["primaryKey" ] = primary_key
839-
840- issues = check (properties )
841-
842- assert issues == []
843-
844-
845889def test_fail_primary_key_of_bad_type ():
846890 properties = example_package_properties ()
847891 properties ["resources" ][0 ]["schema" ]["primaryKey" ] = 123
0 commit comments