mirror of
https://github.com/beetbox/beets.git
synced 2025-12-06 08:39:17 +01:00
Handle missing reflink dependency in tests
This commit is contained in:
parent
06ca500ff2
commit
4f3b0faba5
4 changed files with 30 additions and 24 deletions
|
|
@ -16,7 +16,6 @@
|
|||
|
||||
import os
|
||||
import sys
|
||||
import tempfile
|
||||
import unittest
|
||||
from contextlib import contextmanager
|
||||
|
||||
|
|
@ -66,13 +65,6 @@ _item_ident = 0
|
|||
HAVE_SYMLINK = sys.platform != "win32"
|
||||
HAVE_HARDLINK = sys.platform != "win32"
|
||||
|
||||
try:
|
||||
import reflink
|
||||
|
||||
HAVE_REFLINK = reflink.supported_at(tempfile.gettempdir())
|
||||
except ImportError:
|
||||
HAVE_REFLINK = False
|
||||
|
||||
|
||||
def item(lib=None):
|
||||
global _item_ident
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ from enum import Enum
|
|||
from functools import cached_property
|
||||
from io import StringIO
|
||||
from pathlib import Path
|
||||
from tempfile import mkdtemp, mkstemp
|
||||
from tempfile import gettempdir, mkdtemp, mkstemp
|
||||
from typing import Any, ClassVar
|
||||
from unittest.mock import patch
|
||||
|
||||
|
|
@ -147,6 +147,20 @@ def has_program(cmd, args=["--version"]):
|
|||
return True
|
||||
|
||||
|
||||
def check_reflink_support(path: str) -> bool:
|
||||
try:
|
||||
import reflink
|
||||
except ImportError:
|
||||
return False
|
||||
|
||||
return reflink.supported_at(path)
|
||||
|
||||
|
||||
NEEDS_REFLINK = unittest.skipUnless(
|
||||
check_reflink_support(gettempdir()), "no reflink support for libdir"
|
||||
)
|
||||
|
||||
|
||||
class TestHelper(_common.Assertions):
|
||||
"""Helper mixin for high-level cli and plugin tests.
|
||||
|
||||
|
|
|
|||
|
|
@ -12,8 +12,7 @@
|
|||
# The above copyright notice and this permission notice shall be
|
||||
# included in all copies or substantial portions of the Software.
|
||||
|
||||
"""Test file manipulation functionality of Item.
|
||||
"""
|
||||
"""Test file manipulation functionality of Item."""
|
||||
|
||||
import os
|
||||
import shutil
|
||||
|
|
@ -27,7 +26,7 @@ import beets.library
|
|||
from beets import util
|
||||
from beets.test import _common
|
||||
from beets.test._common import item, touch
|
||||
from beets.test.helper import BeetsTestCase
|
||||
from beets.test.helper import NEEDS_REFLINK, BeetsTestCase
|
||||
from beets.util import MoveOperation, bytestring_path, syspath
|
||||
|
||||
|
||||
|
|
@ -87,22 +86,22 @@ class MoveTest(BeetsTestCase):
|
|||
self.i.move(operation=MoveOperation.COPY)
|
||||
self.assertExists(self.path)
|
||||
|
||||
@unittest.skipUnless(_common.HAVE_REFLINK, "need reflink")
|
||||
@NEEDS_REFLINK
|
||||
def test_reflink_arrives(self):
|
||||
self.i.move(operation=MoveOperation.REFLINK_AUTO)
|
||||
self.assertExists(self.dest)
|
||||
|
||||
@unittest.skipUnless(_common.HAVE_REFLINK, "need reflink")
|
||||
@NEEDS_REFLINK
|
||||
def test_reflink_does_not_depart(self):
|
||||
self.i.move(operation=MoveOperation.REFLINK_AUTO)
|
||||
self.assertExists(self.path)
|
||||
|
||||
@unittest.skipUnless(_common.HAVE_REFLINK, "need reflink")
|
||||
@NEEDS_REFLINK
|
||||
def test_force_reflink_arrives(self):
|
||||
self.i.move(operation=MoveOperation.REFLINK)
|
||||
self.assertExists(self.dest)
|
||||
|
||||
@unittest.skipUnless(_common.HAVE_REFLINK, "need reflink")
|
||||
@NEEDS_REFLINK
|
||||
def test_force_reflink_does_not_depart(self):
|
||||
self.i.move(operation=MoveOperation.REFLINK)
|
||||
self.assertExists(self.path)
|
||||
|
|
@ -286,7 +285,7 @@ class AlbumFileTest(BeetsTestCase):
|
|||
self.assertExists(oldpath)
|
||||
self.assertExists(self.i.path)
|
||||
|
||||
@unittest.skipUnless(_common.HAVE_REFLINK, "need reflink")
|
||||
@NEEDS_REFLINK
|
||||
def test_albuminfo_move_reflinks_file(self):
|
||||
oldpath = self.i.path
|
||||
self.ai.album = "newAlbumName"
|
||||
|
|
@ -571,7 +570,7 @@ class SafeMoveCopyTest(BeetsTestCase):
|
|||
self.assertExists(self.dest)
|
||||
self.assertExists(self.path)
|
||||
|
||||
@unittest.skipUnless(_common.HAVE_REFLINK, "need reflink")
|
||||
@NEEDS_REFLINK
|
||||
def test_successful_reflink(self):
|
||||
util.reflink(self.path, self.dest)
|
||||
self.assertExists(self.dest)
|
||||
|
|
@ -585,7 +584,7 @@ class SafeMoveCopyTest(BeetsTestCase):
|
|||
with pytest.raises(util.FilesystemError):
|
||||
util.copy(self.path, self.otherpath)
|
||||
|
||||
@unittest.skipUnless(_common.HAVE_REFLINK, "need reflink")
|
||||
@NEEDS_REFLINK
|
||||
def test_unsuccessful_reflink(self):
|
||||
with pytest.raises(util.FilesystemError):
|
||||
util.reflink(self.path, self.otherpath)
|
||||
|
|
|
|||
|
|
@ -13,8 +13,8 @@
|
|||
# included in all copies or substantial portions of the Software.
|
||||
|
||||
|
||||
"""Tests for the general importer functionality.
|
||||
"""
|
||||
"""Tests for the general importer functionality."""
|
||||
|
||||
import os
|
||||
import re
|
||||
import shutil
|
||||
|
|
@ -37,6 +37,7 @@ from beets.autotag import AlbumInfo, AlbumMatch, TrackInfo
|
|||
from beets.importer import albums_in_dir
|
||||
from beets.test import _common
|
||||
from beets.test.helper import (
|
||||
NEEDS_REFLINK,
|
||||
AsIsImporterMixin,
|
||||
AutotagStub,
|
||||
BeetsTestCase,
|
||||
|
|
@ -209,7 +210,7 @@ class NonAutotaggedImportTest(AsIsImporterMixin, ImportTestCase):
|
|||
s2[stat.ST_DEV],
|
||||
)
|
||||
|
||||
@unittest.skipUnless(_common.HAVE_REFLINK, "need reflinks")
|
||||
@NEEDS_REFLINK
|
||||
def test_import_reflink_arrives(self):
|
||||
# Detecting reflinks is currently tricky due to various fs
|
||||
# implementations, we'll just check the file exists.
|
||||
|
|
@ -392,7 +393,7 @@ class ImportSingletonTest(ImportTestCase):
|
|||
assert len(self.lib.albums()) == 2
|
||||
|
||||
def test_set_fields(self):
|
||||
genre = "\U0001F3B7 Jazz"
|
||||
genre = "\U0001f3b7 Jazz"
|
||||
collection = "To Listen"
|
||||
|
||||
config["import"]["set_fields"] = {
|
||||
|
|
@ -579,7 +580,7 @@ class ImportTest(ImportTestCase):
|
|||
self.lib.items().get().data_source
|
||||
|
||||
def test_set_fields(self):
|
||||
genre = "\U0001F3B7 Jazz"
|
||||
genre = "\U0001f3b7 Jazz"
|
||||
collection = "To Listen"
|
||||
comments = "managed by beets"
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue