2019-10-26 22:43:30 -07:00
|
|
|
package config
|
|
|
|
|
|
|
|
import (
|
|
|
|
"io/ioutil"
|
|
|
|
"os"
|
|
|
|
"testing"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"github.com/stretchr/testify/require"
|
2019-10-29 14:44:59 -07:00
|
|
|
|
|
|
|
"github.com/mxpv/podsync/pkg/model"
|
2019-10-26 22:43:30 -07:00
|
|
|
)
|
|
|
|
|
|
|
|
func TestLoadConfig(t *testing.T) {
|
|
|
|
const file = `
|
|
|
|
[tokens]
|
|
|
|
youtube = "123"
|
|
|
|
vimeo = "321"
|
|
|
|
|
2019-10-29 12:50:06 -07:00
|
|
|
[server]
|
|
|
|
port = 80
|
|
|
|
data_dir = "test/data/"
|
|
|
|
|
2019-12-01 15:32:51 -08:00
|
|
|
[database]
|
|
|
|
dir = "/home/user/db/"
|
|
|
|
|
2019-10-26 22:43:30 -07:00
|
|
|
[feeds]
|
|
|
|
[feeds.XYZ]
|
|
|
|
url = "https://youtube.com/watch?v=ygIUF678y40"
|
2019-11-14 23:26:40 -08:00
|
|
|
page_size = 48
|
2019-10-26 22:43:30 -07:00
|
|
|
update_period = "5h"
|
2019-10-29 12:50:06 -07:00
|
|
|
format = "audio"
|
|
|
|
quality = "low"
|
2020-03-07 18:01:00 -08:00
|
|
|
filters = { title = "regex for title here" }
|
|
|
|
clean = { keep_last = 10 }
|
2019-10-26 22:43:30 -07:00
|
|
|
`
|
|
|
|
|
|
|
|
f, err := ioutil.TempFile("", "")
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
defer os.Remove(f.Name())
|
|
|
|
|
|
|
|
_, err = f.WriteString(file)
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
config, err := LoadConfig(f.Name())
|
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.NotNil(t, config)
|
|
|
|
|
2019-10-29 12:50:06 -07:00
|
|
|
assert.Equal(t, "test/data/", config.Server.DataDir)
|
|
|
|
assert.EqualValues(t, 80, config.Server.Port)
|
2019-10-26 22:43:30 -07:00
|
|
|
|
2019-12-01 15:32:51 -08:00
|
|
|
assert.Equal(t, "/home/user/db/", config.Database.Dir)
|
|
|
|
|
2019-10-26 22:43:30 -07:00
|
|
|
assert.Equal(t, "123", config.Tokens.YouTube)
|
|
|
|
assert.Equal(t, "321", config.Tokens.Vimeo)
|
|
|
|
|
|
|
|
assert.Len(t, config.Feeds, 1)
|
|
|
|
feed, ok := config.Feeds["XYZ"]
|
|
|
|
assert.True(t, ok)
|
|
|
|
assert.Equal(t, "https://youtube.com/watch?v=ygIUF678y40", feed.URL)
|
2019-11-14 23:26:40 -08:00
|
|
|
assert.EqualValues(t, 48, feed.PageSize)
|
2019-10-26 22:43:30 -07:00
|
|
|
assert.EqualValues(t, Duration{5 * time.Hour}, feed.UpdatePeriod)
|
2019-10-29 12:50:06 -07:00
|
|
|
assert.EqualValues(t, "audio", feed.Format)
|
|
|
|
assert.EqualValues(t, "low", feed.Quality)
|
2020-03-07 18:01:00 -08:00
|
|
|
assert.EqualValues(t, "regex for title here", feed.Filters.Title)
|
|
|
|
assert.EqualValues(t, 10, feed.Clean.KeepLast)
|
2019-10-29 12:50:06 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestApplyDefaults(t *testing.T) {
|
|
|
|
const file = `
|
2019-10-29 15:07:59 -07:00
|
|
|
[server]
|
|
|
|
data_dir = "/data"
|
|
|
|
|
2019-10-29 12:50:06 -07:00
|
|
|
[feeds]
|
|
|
|
[feeds.A]
|
|
|
|
url = "https://youtube.com/watch?v=ygIUF678y40"
|
|
|
|
`
|
|
|
|
f, err := ioutil.TempFile("", "")
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
defer os.Remove(f.Name())
|
|
|
|
|
|
|
|
_, err = f.WriteString(file)
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
config, err := LoadConfig(f.Name())
|
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.NotNil(t, config)
|
|
|
|
|
|
|
|
assert.Len(t, config.Feeds, 1)
|
|
|
|
feed, ok := config.Feeds["A"]
|
|
|
|
require.True(t, ok)
|
|
|
|
|
2019-10-29 14:44:59 -07:00
|
|
|
assert.EqualValues(t, feed.UpdatePeriod, Duration{model.DefaultUpdatePeriod})
|
2019-10-29 12:50:06 -07:00
|
|
|
assert.EqualValues(t, feed.PageSize, 50)
|
|
|
|
assert.EqualValues(t, feed.Quality, "high")
|
|
|
|
assert.EqualValues(t, feed.Format, "video")
|
2019-10-26 22:43:30 -07:00
|
|
|
}
|
2019-11-23 13:25:07 -08:00
|
|
|
|
|
|
|
func TestDefaultHostname(t *testing.T) {
|
|
|
|
cfg := Config{
|
|
|
|
Server: Server{},
|
|
|
|
}
|
|
|
|
|
|
|
|
t.Run("empty hostname", func(t *testing.T) {
|
2019-12-01 15:32:51 -08:00
|
|
|
cfg.applyDefaults("")
|
2019-11-23 13:25:07 -08:00
|
|
|
assert.Equal(t, "http://localhost", cfg.Server.Hostname)
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("empty hostname with port", func(t *testing.T) {
|
|
|
|
cfg.Server.Hostname = ""
|
|
|
|
cfg.Server.Port = 7979
|
2019-12-01 15:32:51 -08:00
|
|
|
cfg.applyDefaults("")
|
2019-11-23 13:25:07 -08:00
|
|
|
assert.Equal(t, "http://localhost:7979", cfg.Server.Hostname)
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("skip overwrite", func(t *testing.T) {
|
|
|
|
cfg.Server.Hostname = "https://my.host:4443"
|
|
|
|
cfg.Server.Port = 80
|
2019-12-01 15:32:51 -08:00
|
|
|
cfg.applyDefaults("")
|
2019-11-23 13:25:07 -08:00
|
|
|
assert.Equal(t, "https://my.host:4443", cfg.Server.Hostname)
|
|
|
|
})
|
|
|
|
}
|
2019-12-01 15:32:51 -08:00
|
|
|
|
|
|
|
func TestDefaultDatabasePath(t *testing.T) {
|
|
|
|
cfg := Config{}
|
|
|
|
cfg.applyDefaults("/home/user/podsync/config.toml")
|
|
|
|
assert.Equal(t, "/home/user/podsync/db", cfg.Database.Dir)
|
|
|
|
}
|