1
0
mirror of https://github.com/mxpv/podsync.git synced 2024-05-11 05:55:04 +00:00
mxpv-podsync/pkg/config/config_test.go

202 lines
4.5 KiB
Go
Raw Normal View History

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"
2020-04-20 18:53:28 -07:00
vimeo = [
"321",
"456"
]
2019-10-26 22:43:30 -07:00
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/"
2020-04-19 13:19:31 -07:00
[downloader]
self_update = true
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 }
2020-10-04 14:00:51 -07:00
custom = { cover_art = "http://img", category = "TV", subcategories = ["1", "2"], explicit = true, lang = "en" }
2019-10-26 22:43:30 -07:00
`
2020-04-15 14:13:48 -07:00
path := setup(t, file)
defer os.Remove(path)
2019-10-26 22:43:30 -07:00
2020-04-15 14:13:48 -07:00
config, err := LoadConfig(path)
2019-10-26 22:43:30 -07:00
assert.NoError(t, err)
require.NotNil(t, config)
2019-10-26 22:43:30 -07:00
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)
2020-04-20 20:54:49 -07:00
require.Len(t, config.Tokens["youtube"], 1)
assert.Equal(t, "123", config.Tokens["youtube"][0])
require.Len(t, config.Tokens["vimeo"], 2)
assert.Equal(t, "321", config.Tokens["vimeo"][0])
assert.Equal(t, "456", config.Tokens["vimeo"][1])
2019-10-26 22:43:30 -07:00
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)
2020-03-07 22:32:51 -08:00
assert.EqualValues(t, "http://img", feed.Custom.CoverArt)
assert.EqualValues(t, "TV", feed.Custom.Category)
assert.True(t, feed.Custom.Explicit)
assert.EqualValues(t, "en", feed.Custom.Language)
2020-04-15 14:13:48 -07:00
2020-10-04 14:00:51 -07:00
assert.EqualValues(t, feed.Custom.Subcategories, []string{"1", "2"})
2020-04-15 14:13:48 -07:00
assert.Nil(t, config.Database.Badger)
2020-04-19 13:19:31 -07:00
assert.True(t, config.Downloader.SelfUpdate)
2019-10-29 12:50:06 -07:00
}
2020-04-20 18:53:28 -07:00
func TestLoadEmptyKeyList(t *testing.T) {
const file = `
[tokens]
vimeo = []
[server]
data_dir = "/data"
[feeds]
[feeds.A]
url = "https://youtube.com/watch?v=ygIUF678y40"
`
path := setup(t, file)
defer os.Remove(path)
config, err := LoadConfig(path)
assert.NoError(t, err)
require.NotNil(t, config)
2020-04-20 20:54:49 -07:00
require.Len(t, config.Tokens, 1)
require.Len(t, config.Tokens["vimeo"], 0)
2020-04-20 18:53:28 -07:00
}
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"
`
2020-04-15 14:13:48 -07:00
path := setup(t, file)
defer os.Remove(path)
2019-10-29 12:50:06 -07:00
2020-04-15 14:13:48 -07:00
config, err := LoadConfig(path)
2019-10-29 12:50:06 -07:00
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
}
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("")
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("")
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("")
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)
}
2020-04-15 14:13:48 -07:00
func TestLoadBadgerConfig(t *testing.T) {
const file = `
[server]
data_dir = "/data"
[feeds]
[feeds.A]
url = "https://youtube.com/watch?v=ygIUF678y40"
[database]
badger = { truncate = true, file_io = true }
`
path := setup(t, file)
defer os.Remove(path)
config, err := LoadConfig(path)
assert.NoError(t, err)
require.NotNil(t, config)
require.NotNil(t, config.Database.Badger)
assert.True(t, config.Database.Badger.Truncate)
assert.True(t, config.Database.Badger.FileIO)
}
func setup(t *testing.T, file string) string {
t.Helper()
f, err := ioutil.TempFile("", "")
require.NoError(t, err)
defer f.Close()
_, err = f.WriteString(file)
require.NoError(t, err)
return f.Name()
2020-04-15 14:18:05 -07:00
}