@@ -1877,3 +1877,81 @@ async def test_hash_changes_if_paired_file_is_edited(tmp_path, cm, python_notebo
18771877 # the hash is for the pair (inputs first)
18781878 model_from_py_file = await ensure_async (cm .get ("notebook.py" , require_hash = True ))
18791879 assert model_from_py_file ["hash" ] == new_model ["hash" ]
1880+
1881+
1882+ @pytest .mark .requires_myst
1883+ async def test_metadata_stays_in_order_1368 (
1884+ tmp_path ,
1885+ cm ,
1886+ md = """---
1887+ jupytext:
1888+ formats: md:myst
1889+ notebook_metadata_filter: -jupytext.text_representation.jupytext_version
1890+ text_representation:
1891+ extension: .md
1892+ format_name: myst
1893+ format_version: 0.13
1894+ kernelspec:
1895+ display_name: itables
1896+ language: python
1897+ name: itables
1898+ ---
1899+
1900+ A markdown cell
1901+ """ ,
1902+ ):
1903+ cm .root_dir = str (tmp_path )
1904+
1905+ (tmp_path / "nb.md" ).write_text (md )
1906+
1907+ model = await ensure_async (cm .get (path = "nb.md" ))
1908+ assert list (model ["content" ]["metadata" ].keys ()) == [
1909+ "jupytext" ,
1910+ "kernelspec" ,
1911+ ], "order must be preserved"
1912+
1913+ cm .save (model = model , path = "nb.md" )
1914+ compare ((tmp_path / "nb.md" ).read_text (), md )
1915+
1916+
1917+ @pytest .mark .requires_myst
1918+ async def test_jupytext_orders_root_metadata (
1919+ tmp_path ,
1920+ cm ,
1921+ md = """---
1922+ title: Quick test
1923+ jupytext:
1924+ formats: md:myst
1925+ notebook_metadata_filter: -jupytext.text_representation.jupytext_version
1926+ root_level_metadata_filter: -title
1927+ text_representation:
1928+ extension: .md
1929+ format_name: myst
1930+ format_version: 0.13
1931+ kernelspec:
1932+ display_name: itables
1933+ language: python
1934+ name: itables
1935+ ---
1936+
1937+ A markdown cell
1938+ """ ,
1939+ ):
1940+ cm .root_dir = str (tmp_path )
1941+
1942+ (tmp_path / "nb.md" ).write_text (md )
1943+
1944+ model = await ensure_async (cm .get (path = "nb.md" ))
1945+ assert list (model ["content" ]["metadata" ].keys ()) == [
1946+ "jupytext" ,
1947+ "kernelspec" ,
1948+ ], "order must be preserved"
1949+
1950+ # simulate jupyter changing the order of the metadata
1951+ model ["content" ]["metadata" ]["jupytext" ] = model ["content" ]["metadata" ].pop (
1952+ "jupytext"
1953+ )
1954+ assert list (model ["content" ]["metadata" ].keys ()) == ["kernelspec" , "jupytext" ]
1955+
1956+ cm .save (model = model , path = "nb.md" )
1957+ compare ((tmp_path / "nb.md" ).read_text (), md )
0 commit comments