@@ -1877,6 +1877,62 @@ def test_resource_form_is_invalid_extra_metadata_not_json_format(self):
1877
1877
expected = {"success" : False , "errors" : ["extra_metadata: The value provided for the Extra metadata field is not a valid JSON" ]}
1878
1878
self .assertDictEqual (expected , response .json ())
1879
1879
1880
+ def test_change_owner_in_metadata (self ):
1881
+ try :
1882
+ test_user = get_user_model ().objects .create_user (
1883
+ username = 'non_auth' ,
1884
+
1885
+ password = 'password' )
1886
+ norman = get_user_model ().objects .get (username = 'norman' )
1887
+ dataset = Dataset .objects .first ()
1888
+ data = {
1889
+ "resource-title" : "geoapp_title" ,
1890
+ "resource-date" : "2022-01-24 16:38 pm" ,
1891
+ "resource-date_type" : "creation" ,
1892
+ "resource-language" : "eng" ,
1893
+ 'dataset_attribute_set-TOTAL_FORMS' : 0 ,
1894
+ 'dataset_attribute_set-INITIAL_FORMS' : 0
1895
+ }
1896
+ perm_spec = {
1897
+ "users" : {
1898
+ "non_auth" : [
1899
+ 'change_resourcebase_metadata' ,
1900
+ 'change_resourcebase' ,
1901
+ ],
1902
+ "norman" : [
1903
+ 'change_resourcebase_metadata' ,
1904
+ 'change_resourcebase_permissions'
1905
+ ],
1906
+ }
1907
+ }
1908
+ self .assertTrue (dataset .set_permissions (perm_spec ))
1909
+ self .assertFalse (test_user .has_perm ('change_resourcebase_permissions' , dataset .get_self_resource ()))
1910
+
1911
+ url = reverse ("dataset_metadata" , args = (dataset .alternate ,))
1912
+ # post as non-authorised user
1913
+ self .client .login (username = "non_auth" , password = "password" )
1914
+ data ["resource-owner" ] = test_user .id
1915
+ response = self .client .post (url , data = data )
1916
+ self .assertEqual (response .status_code , 200 )
1917
+ self .assertNotEqual (dataset .owner , test_user )
1918
+ # post as admin
1919
+ self .client .login (username = "admin" , password = "admin" )
1920
+ response = self .client .post (url , data = data )
1921
+ dataset .refresh_from_db ()
1922
+ self .assertEqual (response .status_code , 200 )
1923
+ self .assertEqual (dataset .owner , test_user )
1924
+ # post as an authorised user
1925
+ self .client .login (username = "norman" , password = "norman" )
1926
+ self .assertTrue (norman .has_perm ('change_resourcebase_permissions' , dataset .get_self_resource ()))
1927
+ data ["resource-owner" ] = norman .id
1928
+ response = self .client .post (url , data = data )
1929
+ dataset .refresh_from_db ()
1930
+ self .assertEqual (response .status_code , 200 )
1931
+ self .assertEqual (dataset .owner , norman )
1932
+ finally :
1933
+ get_user_model ().objects .filter (username = 'non_auth' ).delete
1934
+ Dataset .objects .filter (name = 'dataset_name' ).delete ()
1935
+
1880
1936
@override_settings (EXTRA_METADATA_SCHEMA = {"key" : "value" })
1881
1937
def test_resource_form_is_invalid_extra_metadata_not_schema_in_settings (self ):
1882
1938
self .client .login (username = "admin" , password = "admin" )
0 commit comments