package lvl

import (
	"testing"
)

func TestString(t *testing.T) {
	cases := []struct {
		l Level
		e string
	}{
		{
			l: Debug,
			e: "Debug",
		},
		{
			l: Info,
			e: "Info",
		},
		{
			l: Warn,
			e: "Warn",
		},
		{
			l: Error,
			e: "Error",
		},
	}

	for _, c := range cases {
		t.Run(c.e, func(t *testing.T) {
			s := c.l.String()

			if s != c.e {
				t.Errorf("Expected %s but got %s", c.e, s)
			}
		})
	}

}

func TestColor(t *testing.T) {
	testCases := []struct {
		level    Level
		message  string
		expected string
	}{
		{Debug, "Debug message", "\033[32mDebug message\033[0m"},
		{Info, "Info message", "\033[97mInfo message\033[0m"},
		{Warn, "Warning message", "\033[33mWarning message\033[0m"},
		{Error, "Error message", "\033[31mError message\033[0m"},
	}

	for _, tc := range testCases {
		coloredMessage := tc.level.Colorize(tc.message)
		if coloredMessage != tc.expected {
			t.Errorf("For level %v, expected '%v', but got '%v'", tc.level, tc.expected, coloredMessage)
		}
	}
}