/*
Copyright © 2023 Philipp Wolfer <phw@uploadedlobster.com>

This file is part of Scotty.

Scotty is free software: you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation, either version 3 of the License, or (at your option) any later version.

Scotty is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with
Scotty. If not, see <https://www.gnu.org/licenses/>.
*/
package subsonic_test

import (
	"testing"
	"time"

	go_subsonic "github.com/delucks/go-subsonic"
	"github.com/spf13/viper"
	"github.com/stretchr/testify/assert"
	"go.uploadedlobster.com/scotty/backends/subsonic"
)

func TestFromConfig(t *testing.T) {
	config := viper.New()
	config.Set("server-url", "https://subsonic.example.com")
	config.Set("token", "thetoken")
	backend := (&subsonic.SubsonicApiBackend{}).FromConfig(config)
	assert.IsType(t, &subsonic.SubsonicApiBackend{}, backend)
}

func TestSongToLove(t *testing.T) {
	user := "outsidecontext"
	song := go_subsonic.Child{
		Starred:    time.Unix(1699574369, 0),
		Title:      "Oweynagat",
		Album:      "Here Now, There Then",
		Artist:     "Dool",
		Duration:   414,
		Genre:      "psychedelic rock",
		DiscNumber: 1,
		Track:      5,
	}
	love := subsonic.SongToLove(song, user)
	assert := assert.New(t)
	assert.Equal(time.Unix(1699574369, 0).Unix(), love.Created.Unix())
	assert.Equal(user, love.UserName)
	assert.Equal(time.Duration(414*time.Second), love.Duration)
	assert.Equal(song.Title, love.TrackName)
	assert.Equal(song.Album, love.ReleaseName)
	assert.Equal([]string{song.Artist}, love.ArtistNames)
	assert.Equal(song.Track, love.Track.TrackNumber)
	assert.Equal([]string{song.Genre}, love.Track.Tags)
}