From 306a50e344522a3f321d49d95488f457975fa553 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny@gentoo.org>
Date: Wed, 31 Jan 2024 11:31:26 +0100
Subject: [PATCH 1/2] test_dataset: remove incorrect pytest.warns() to fix
 pytest-8

Remove two incorrect `pytest.warns()` assertions to fix test failures
with pytest-8.0.0.  Prior to this version, an exception raised would
cause `pytest.warns()` to be ignored.  This way fixed in 8.0.0, and now
warnings must actually be emitted prior to the exception.

In `test_drop_index_labels()`, the exception is raised at the very
beginning of the function, prior to the deprecation warning.

In `test_rename_multiindex()`, the warning is not emitted at all (it is
not applicable to the call in question).
---
 xarray/tests/test_dataset.py | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/xarray/tests/test_dataset.py b/xarray/tests/test_dataset.py
index fa9448f2f4..77d172f00b 100644
--- a/xarray/tests/test_dataset.py
+++ b/xarray/tests/test_dataset.py
@@ -2724,8 +2724,7 @@ def test_drop_index_labels(self) -> None:
         assert_identical(data, actual)
 
         with pytest.raises(ValueError):
-            with pytest.warns(DeprecationWarning):
-                data.drop(["c"], dim="x", errors="wrong_value")  # type: ignore[arg-type]
+            data.drop(["c"], dim="x", errors="wrong_value")  # type: ignore[arg-type]
 
         with pytest.warns(DeprecationWarning):
             actual = data.drop(["a", "b", "c"], "x", errors="ignore")
@@ -3159,8 +3158,7 @@ def test_rename_multiindex(self) -> None:
                 original.rename({"a": "x"})
 
         with pytest.raises(ValueError, match=r"'b' conflicts"):
-            with pytest.warns(UserWarning, match="does not create an index anymore"):
-                original.rename({"a": "b"})
+            original.rename({"a": "b"})
 
     def test_rename_perserve_attrs_encoding(self) -> None:
         # test propagate attrs/encoding to new variable(s) created from Index object

From 3bc5abf4da35edda1f0c3e9e0d53e39331c1a76b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny@gentoo.org>
Date: Wed, 31 Jan 2024 11:35:04 +0100
Subject: [PATCH 2/2] test_groupby: Clear recorded warnings for pytest-8
 compatibility

Clear the warnings recorded during the `pytest.warns()` use
in `test_groupby_dims_property`, to fix test failures with pytest-8.0.0.
Prior to this version, `pytest.warns()` invocation used to capture all
warnings.  Now it only captures the warnings that match the arguments,
and the remaining warnings are re-emitted and therefore caught by
`recwarn` fixture.  To provide compatibility with both versions of
pytest, clear the recorded warnings immediately after `pytest.warns()`.

Fixes #8681
---
 xarray/tests/test_groupby.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/xarray/tests/test_groupby.py b/xarray/tests/test_groupby.py
index 25fabd5e2b..b65c01fe76 100644
--- a/xarray/tests/test_groupby.py
+++ b/xarray/tests/test_groupby.py
@@ -67,6 +67,8 @@ def test_groupby_dims_property(dataset, recwarn) -> None:
     with pytest.warns(UserWarning, match="The `squeeze` kwarg"):
         assert dataset.groupby("x").dims == dataset.isel(x=1).dims
         assert dataset.groupby("y").dims == dataset.isel(y=1).dims
+    # in pytest-8, pytest.warns() no longer clears all warnings
+    recwarn.clear()
 
     # when squeeze=False, no warning should be raised
     assert tuple(dataset.groupby("x", squeeze=False).dims) == tuple(
