""" Tests for the formatting utility functions. VIN API tests are excluded because they require network access. """ import pytest from console.utils.formatting import ( format_currency, format_number, truncate, pad_right, format_table_row, quality_bar, ) # ========================================================================= # format_currency # ========================================================================= class TestFormatCurrency: def test_none_returns_dash(self): assert format_currency(None) == "──" def test_zero_returns_zero_dollars(self): assert format_currency(0) == "$0.00" def test_positive_value(self): assert format_currency(45.99) == "$45.99" def test_integer_value(self): assert format_currency(100) == "$100.00" def test_large_value_with_commas(self): assert format_currency(1234.56) == "$1,234.56" def test_small_decimal(self): assert format_currency(0.5) == "$0.50" # ========================================================================= # format_number # ========================================================================= class TestFormatNumber: def test_none_returns_zero(self): assert format_number(None) == "0" def test_zero(self): assert format_number(0) == "0" def test_thousands_separator(self): assert format_number(13685) == "13,685" def test_small_number(self): assert format_number(42) == "42" def test_million(self): assert format_number(1000000) == "1,000,000" # ========================================================================= # truncate # ========================================================================= class TestTruncate: def test_none_returns_empty(self): assert truncate(None, 10) == "" def test_short_string_unchanged(self): assert truncate("hello", 10) == "hello" def test_exact_length_unchanged(self): assert truncate("hello", 5) == "hello" def test_long_string_truncated_with_ellipsis(self): assert truncate("hello world!", 8) == "hello..." def test_very_short_max_len(self): result = truncate("hello world", 3) assert result == "..." # ========================================================================= # pad_right # ========================================================================= class TestPadRight: def test_none_returns_empty(self): assert pad_right(None, 10) == "" def test_short_string_padded(self): result = pad_right("hi", 5) assert result == "hi " assert len(result) == 5 def test_exact_length_unchanged(self): result = pad_right("hello", 5) assert result == "hello" def test_long_string_truncated(self): result = pad_right("hello world", 5) assert result == "hello" assert len(result) == 5 # ========================================================================= # format_table_row # ========================================================================= class TestFormatTableRow: def test_basic_row(self): result = format_table_row(["A", "B", "C"], [5, 5, 5]) assert " │ " in result assert len(result.split(" │ ")) == 3 def test_values_padded_to_widths(self): result = format_table_row(["hi", "there"], [5, 7]) parts = result.split(" │ ") assert len(parts[0]) == 5 assert len(parts[1]) == 7 def test_custom_separator(self): result = format_table_row(["A", "B"], [3, 3], separator=" | ") assert " | " in result def test_truncation_when_value_exceeds_width(self): result = format_table_row(["toolongvalue", "ok"], [5, 5]) parts = result.split(" │ ") assert len(parts[0]) == 5 # ========================================================================= # quality_bar # ========================================================================= class TestQualityBar: def test_oem(self): result = quality_bar("oem") assert "█" in result assert len(result) > 0 def test_premium(self): result = quality_bar("premium") assert "█" in result def test_standard(self): result = quality_bar("standard") assert "█" in result assert "░" in result def test_economy(self): result = quality_bar("economy") assert "█" in result assert "░" in result def test_oem_longer_than_economy(self): oem = quality_bar("oem") economy = quality_bar("economy") oem_blocks = oem.count("█") economy_blocks = economy.count("█") assert oem_blocks > economy_blocks def test_unknown_tier_returns_string(self): result = quality_bar("unknown") assert isinstance(result, str)