package arn_test

import (
	"testing"

	"github.com/akyoto/assert"
	"github.com/animenotifier/notify.moe/arn"
)

func TestNewAnime(t *testing.T) {
	anime := arn.NewAnime()
	assert.NotNil(t, anime)
	assert.NotEqual(t, anime.ID, "")
	assert.NotEqual(t, anime.Created, "")
}

func TestGetAnime(t *testing.T) {
	// Existing anime
	anime, err := arn.GetAnime("74y2cFiiR")
	assert.Nil(t, err)
	assert.NotNil(t, anime)
	assert.NotEqual(t, anime.ID, "")
	assert.NotEqual(t, anime.Title.Canonical, "")

	// Not existing anime
	anime, err = arn.GetAnime("does not exist")
	assert.NotNil(t, err)
	assert.Nil(t, anime)
}

func TestAllAnime(t *testing.T) {
	validAnimeStatus := []string{
		"finished",
		"current",
		"upcoming",
		"tba",
	}

	validAnimeType := []string{
		"tv",
		"movie",
		"ova",
		"ona",
		"special",
		"music",
	}

	allAnime := arn.AllAnime()

	for _, anime := range allAnime {
		assert.NotEqual(t, anime.ID, "")
		assert.Contains(t, validAnimeStatus, anime.Status)
		assert.Contains(t, validAnimeType, anime.Type)
		assert.Contains(t, validAnimeStatus, anime.CalculatedStatus())
		assert.NotEqual(t, anime.StatusHumanReadable(), "")
		assert.NotEqual(t, anime.TypeHumanReadable(), "")
		assert.NotEqual(t, anime.Link(), "")
		assert.NotEqual(t, anime.EpisodeCountString(), "")

		anime.Episodes()
		anime.Characters()
		anime.StartDateTime()
		anime.EndDateTime()
		anime.HasImage()
		anime.GetMapping("shoboi/anime")
		anime.Studios()
		anime.Producers()
		anime.Licensors()
		anime.Prequels()
	}
}