from typing import Any

import pytest

from frostfs_testlib.s3 import AwsCliClient, Boto3ClientWrapper
from frostfs_testlib.storage.dataclasses.acl import EACLRole
from frostfs_testlib.storage.dataclasses.frostfs_services import HTTPGate, InnerRing, MorphChain, S3Gate, StorageNode
from frostfs_testlib.storage.dataclasses.object_size import ObjectSize


class TestDataclassesStr:
    """Here we are testing important classes string representation."""

    @pytest.mark.parametrize(
        "obj, expected",
        [
            (Boto3ClientWrapper, "Boto3 client"),
            (AwsCliClient, "AWS CLI"),
            (ObjectSize("simple", 1), "simple"),
            (ObjectSize("simple", 10), "simple"),
            (ObjectSize("complex", 5000), "complex"),
            (ObjectSize("complex", 5555), "complex"),
            (StorageNode, "StorageNode"),
            (MorphChain, "MorphChain"),
            (S3Gate, "S3Gate"),
            (HTTPGate, "HTTPGate"),
            (InnerRing, "InnerRing"),
            (EACLRole.OTHERS, "OTHERS"),
        ],
    )
    def test_classes_string_representation(self, obj: Any, expected: str):
        assert f"{obj}" == expected
        assert repr(obj) == expected