import pytest

from escpos.capabilities import BARCODE_B, NotSupported, Profile, get_profile


@pytest.fixture
def profile():
    return get_profile("default")


class TestBaseProfile:
    """Test the `BaseProfile` class."""

    def test_get_font(self, profile):
        with pytest.raises(NotSupported):
            assert profile.get_font("3")
        assert profile.get_font(1) == 1
        assert profile.get_font("a") == 0

    def test_supports(self, profile):
        assert not profile.supports("asdf asdf")
        assert profile.supports(BARCODE_B)

    def test_get_columns(self, profile):
        assert profile.get_columns("a") > 5
        with pytest.raises(NotSupported):
            assert profile.get_columns("asdfasdf")


class TestCustomProfile:
    """Test custom profile options with the `Profile` class."""

    def test_columns(self):
        assert Profile(columns=10).get_columns("sdfasdf") == 10

    def test_features(self):
        assert Profile(features={"foo": True}).supports("foo")