package utils

import (
	"math"
	"testing"
)

func TestRandomString(t *testing.T) {
	t.Run("Test valid length", func(t *testing.T) {
		length := 10
		result, err := RandomString(length)

		if err != nil {
			t.Errorf("Expected no error, but got: %v", err)
		}

		if len(result) != length {
			t.Errorf("Expected a string of length %d, but got: %d", length, len(result))
		}
	})

	t.Run("Test zero length", func(t *testing.T) {
		length := 0
		result, err := RandomString(length)

		if err != nil {
			t.Errorf("Expected no error, but got: %v", err)
		}

		if len(result) != length {
			t.Errorf("Expected an empty string, but got: %s", result)
		}
	})

	t.Run("Test negative length", func(t *testing.T) {
		length := -10
		result, err := RandomString(length)

		if err == nil {
			t.Errorf("Expected an error, but got none")
		}

		if result != "" {
			t.Errorf("Expected an empty string, but got: %s", result)
		}
	})

	t.Run("Test max Int32 Length", func(t *testing.T) {
		length := math.MaxInt32
		result, err := RandomString(length)

		if err != nil {
			t.Errorf("Expected no error, but got: %v", err)
		}

		if len(result) != length {
			t.Errorf("Expected an empty string, but got: %s", result)
		}

	})

}
