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 object size"),
            (ObjectSize("simple", 10), "simple object size"),
            (ObjectSize("complex", 5000), "complex object size"),
            (ObjectSize("complex", 5555), "complex object size"),
            (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