package namesgenerator

import (
	"strings"
	"testing"
)

// Make sure the generated names are awesome
func TestGenerateAwesomeNames(t *testing.T) {
	name := GetRandomName(0)
	if !isAwesome(name) {
		t.Fatalf("Generated name '%s' is not awesome.", name)
	}
}

func TestNameFormat(t *testing.T) {
	name := GetRandomName(0)
	if !strings.Contains(name, "_") {
		t.Fatalf("Generated name does not contain an underscore")
	}
	if strings.ContainsAny(name, "0123456789") {
		t.Fatalf("Generated name contains numbers!")
	}
}

func TestNameRetries(t *testing.T) {
	name := GetRandomName(1)
	if !strings.Contains(name, "_") {
		t.Fatalf("Generated name does not contain an underscore")
	}
	if !strings.ContainsAny(name, "0123456789") {
		t.Fatalf("Generated name doesn't contain a number")
	}

}

// To be awesome, a container name must involve cool inventors, be easy to remember,
// be at least mildly funny, and always be politically correct for enterprise adoption.
func isAwesome(name string) bool {
	coolInventorNames := true
	easyToRemember := true
	mildlyFunnyOnOccasion := true
	politicallyCorrect := true
	return coolInventorNames && easyToRemember && mildlyFunnyOnOccasion && politicallyCorrect
}