config: удалён GiteaCfg (GITEA_URL/GITEA_TOKEN) — нигде не использовался, хранение в локальной SQLite
All checks were successful
build-test / build (push) Successful in 33s
All checks were successful
build-test / build (push) Successful in 33s
This commit is contained in:
@@ -17,8 +17,6 @@ func TestNew(t *testing.T) {
|
|||||||
// Настраиваем минимальные env для обязательных полей
|
// Настраиваем минимальные env для обязательных полей
|
||||||
t.Setenv("TG_TOKEN", "test:token")
|
t.Setenv("TG_TOKEN", "test:token")
|
||||||
t.Setenv("TG_CHAT_ID", "12345")
|
t.Setenv("TG_CHAT_ID", "12345")
|
||||||
t.Setenv("GITEA_URL", "http://gitea.test")
|
|
||||||
t.Setenv("GITEA_TOKEN", "test-token")
|
|
||||||
t.Setenv("RATATOSKR_DB", dbPath)
|
t.Setenv("RATATOSKR_DB", dbPath)
|
||||||
|
|
||||||
// Загружаем без config-файла (дефолты + env)
|
// Загружаем без config-файла (дефолты + env)
|
||||||
@@ -50,8 +48,6 @@ func TestNew_MissingToken(t *testing.T) {
|
|||||||
dbPath := filepath.Join(tmp, "test.db")
|
dbPath := filepath.Join(tmp, "test.db")
|
||||||
t.Setenv("TG_TOKEN", "")
|
t.Setenv("TG_TOKEN", "")
|
||||||
t.Setenv("TG_CHAT_ID", "12345")
|
t.Setenv("TG_CHAT_ID", "12345")
|
||||||
t.Setenv("GITEA_URL", "http://gitea.test")
|
|
||||||
t.Setenv("GITEA_TOKEN", "test-token")
|
|
||||||
t.Setenv("RATATOSKR_DB", dbPath)
|
t.Setenv("RATATOSKR_DB", dbPath)
|
||||||
|
|
||||||
_, err := New("")
|
_, err := New("")
|
||||||
@@ -67,8 +63,6 @@ func TestNew_BadDB(t *testing.T) {
|
|||||||
dbPath := filepath.Join(tmp, "nonexistent", "test.db") // родителя нет
|
dbPath := filepath.Join(tmp, "nonexistent", "test.db") // родителя нет
|
||||||
t.Setenv("TG_TOKEN", "test:token")
|
t.Setenv("TG_TOKEN", "test:token")
|
||||||
t.Setenv("TG_CHAT_ID", "12345")
|
t.Setenv("TG_CHAT_ID", "12345")
|
||||||
t.Setenv("GITEA_URL", "http://gitea.test")
|
|
||||||
t.Setenv("GITEA_TOKEN", "test-token")
|
|
||||||
t.Setenv("RATATOSKR_DB", dbPath)
|
t.Setenv("RATATOSKR_DB", dbPath)
|
||||||
|
|
||||||
_, err := New("")
|
_, err := New("")
|
||||||
@@ -86,8 +80,6 @@ func TestNew_RunCtxCancel(t *testing.T) {
|
|||||||
dbPath := filepath.Join(tmp, "test-runcancel.db")
|
dbPath := filepath.Join(tmp, "test-runcancel.db")
|
||||||
t.Setenv("TG_TOKEN", "test:token")
|
t.Setenv("TG_TOKEN", "test:token")
|
||||||
t.Setenv("TG_CHAT_ID", "12345")
|
t.Setenv("TG_CHAT_ID", "12345")
|
||||||
t.Setenv("GITEA_URL", "http://gitea.test")
|
|
||||||
t.Setenv("GITEA_TOKEN", "test-token")
|
|
||||||
t.Setenv("RATATOSKR_DB", dbPath)
|
t.Setenv("RATATOSKR_DB", dbPath)
|
||||||
|
|
||||||
a, err := New("")
|
a, err := New("")
|
||||||
|
|||||||
@@ -22,20 +22,12 @@ func writeCfg(t *testing.T, content string) string {
|
|||||||
|
|
||||||
func TestLoad_FullConfig(t *testing.T) {
|
func TestLoad_FullConfig(t *testing.T) {
|
||||||
t.Setenv("TG_TOKEN", "tok123")
|
t.Setenv("TG_TOKEN", "tok123")
|
||||||
t.Setenv("GITEA_URL", "http://gitea.home")
|
|
||||||
t.Setenv("GITEA_TOKEN", "gtok")
|
|
||||||
t.Setenv("GITEA_USER", "kamelion")
|
|
||||||
|
|
||||||
yaml := `
|
yaml := `
|
||||||
telegram:
|
telegram:
|
||||||
token: "${TG_TOKEN}"
|
token: "${TG_TOKEN}"
|
||||||
chat_id: "123"
|
chat_id: "123"
|
||||||
|
|
||||||
gitea:
|
|
||||||
url: "${GITEA_URL}"
|
|
||||||
token: "${GITEA_TOKEN}"
|
|
||||||
user: "${GITEA_USER}"
|
|
||||||
|
|
||||||
opencode:
|
opencode:
|
||||||
bin: "my-opencode"
|
bin: "my-opencode"
|
||||||
hard_timeout: "10m"
|
hard_timeout: "10m"
|
||||||
@@ -51,9 +43,6 @@ opencode:
|
|||||||
if cfg.Telegram.ChatID != "123" {
|
if cfg.Telegram.ChatID != "123" {
|
||||||
t.Errorf("tg chat_id = %q", cfg.Telegram.ChatID)
|
t.Errorf("tg chat_id = %q", cfg.Telegram.ChatID)
|
||||||
}
|
}
|
||||||
if cfg.Gitea.URL != "http://gitea.home" {
|
|
||||||
t.Errorf("gitea url = %q", cfg.Gitea.URL)
|
|
||||||
}
|
|
||||||
if cfg.OpenCode.Bin != "my-opencode" {
|
if cfg.OpenCode.Bin != "my-opencode" {
|
||||||
t.Errorf("opencode bin = %q", cfg.OpenCode.Bin)
|
t.Errorf("opencode bin = %q", cfg.OpenCode.Bin)
|
||||||
}
|
}
|
||||||
@@ -65,19 +54,11 @@ opencode:
|
|||||||
func TestLoad_Defaults(t *testing.T) {
|
func TestLoad_Defaults(t *testing.T) {
|
||||||
t.Setenv("TG_TOKEN", "tok")
|
t.Setenv("TG_TOKEN", "tok")
|
||||||
t.Setenv("TG_CHAT_ID", "42")
|
t.Setenv("TG_CHAT_ID", "42")
|
||||||
t.Setenv("GITEA_URL", "http://x")
|
|
||||||
t.Setenv("GITEA_TOKEN", "secret")
|
|
||||||
t.Setenv("GITEA_USER", "u")
|
|
||||||
|
|
||||||
yaml := `
|
yaml := `
|
||||||
telegram:
|
telegram:
|
||||||
token: "${TG_TOKEN}"
|
token: "${TG_TOKEN}"
|
||||||
chat_id: "${TG_CHAT_ID}"
|
chat_id: "${TG_CHAT_ID}"
|
||||||
|
|
||||||
gitea:
|
|
||||||
url: "${GITEA_URL}"
|
|
||||||
token: "${GITEA_TOKEN}"
|
|
||||||
user: "${GITEA_USER}"
|
|
||||||
`
|
`
|
||||||
path := writeCfg(t, yaml)
|
path := writeCfg(t, yaml)
|
||||||
cfg, err := Load(path)
|
cfg, err := Load(path)
|
||||||
@@ -102,19 +83,12 @@ gitea:
|
|||||||
func TestLoad_EnvOverride(t *testing.T) {
|
func TestLoad_EnvOverride(t *testing.T) {
|
||||||
t.Setenv("TG_TOKEN", "tok")
|
t.Setenv("TG_TOKEN", "tok")
|
||||||
t.Setenv("TG_CHAT_ID", "42")
|
t.Setenv("TG_CHAT_ID", "42")
|
||||||
t.Setenv("GITEA_URL", "http://x")
|
|
||||||
t.Setenv("GITEA_TOKEN", "secret")
|
|
||||||
t.Setenv("GITEA_USER", "u")
|
|
||||||
// env override для opencode.timeout
|
// env override для opencode.timeout
|
||||||
t.Setenv("OPENCODE_CONFIG", "/custom/opencode.json")
|
t.Setenv("OPENCODE_CONFIG", "/custom/opencode.json")
|
||||||
|
|
||||||
yaml := `telegram:
|
yaml := `telegram:
|
||||||
token: "${TG_TOKEN}"
|
token: "${TG_TOKEN}"
|
||||||
chat_id: "${TG_CHAT_ID}"
|
chat_id: "${TG_CHAT_ID}"
|
||||||
gitea:
|
|
||||||
url: "${GITEA_URL}"
|
|
||||||
token: "${GITEA_TOKEN}"
|
|
||||||
user: "${GITEA_USER}"
|
|
||||||
`
|
`
|
||||||
path := writeCfg(t, yaml)
|
path := writeCfg(t, yaml)
|
||||||
cfg, err := Load(path)
|
cfg, err := Load(path)
|
||||||
@@ -129,17 +103,10 @@ gitea:
|
|||||||
func TestLoad_MissingEnvVarUsesDefault(t *testing.T) {
|
func TestLoad_MissingEnvVarUsesDefault(t *testing.T) {
|
||||||
t.Setenv("TG_TOKEN", "tok")
|
t.Setenv("TG_TOKEN", "tok")
|
||||||
t.Setenv("TG_CHAT_ID", "42")
|
t.Setenv("TG_CHAT_ID", "42")
|
||||||
t.Setenv("GITEA_URL", "http://x")
|
|
||||||
t.Setenv("GITEA_TOKEN", "secret")
|
|
||||||
t.Setenv("GITEA_USER", "u")
|
|
||||||
|
|
||||||
yaml := `telegram:
|
yaml := `telegram:
|
||||||
token: "${TG_TOKEN}"
|
token: "${TG_TOKEN}"
|
||||||
chat_id: "${TG_CHAT_ID}"
|
chat_id: "${TG_CHAT_ID}"
|
||||||
gitea:
|
|
||||||
url: "${GITEA_URL}"
|
|
||||||
token: "${GITEA_TOKEN}"
|
|
||||||
user: "${GITEA_USER}"
|
|
||||||
opencode:
|
opencode:
|
||||||
db_path: "${OPENCODE_DB:-/default/db.sqlite}"
|
db_path: "${OPENCODE_DB:-/default/db.sqlite}"
|
||||||
`
|
`
|
||||||
@@ -162,19 +129,12 @@ func TestLoad_FileNotFound(t *testing.T) {
|
|||||||
|
|
||||||
func TestLoad_MissingRequired(t *testing.T) {
|
func TestLoad_MissingRequired(t *testing.T) {
|
||||||
// пустой конфиг — все обязательные поля отсутствуют
|
// пустой конфиг — все обязательные поля отсутствуют
|
||||||
t.Setenv("GITEA_URL", "") // не ставим
|
|
||||||
t.Setenv("GITEA_TOKEN", "")
|
|
||||||
t.Setenv("TG_TOKEN", "")
|
t.Setenv("TG_TOKEN", "")
|
||||||
t.Setenv("TG_CHAT_ID", "")
|
t.Setenv("TG_CHAT_ID", "")
|
||||||
t.Setenv("GITEA_USER", "")
|
|
||||||
|
|
||||||
yaml := `telegram:
|
yaml := `telegram:
|
||||||
token: ""
|
token: ""
|
||||||
chat_id: ""
|
chat_id: ""
|
||||||
gitea:
|
|
||||||
url: ""
|
|
||||||
token: ""
|
|
||||||
user: ""
|
|
||||||
`
|
`
|
||||||
path := writeCfg(t, yaml)
|
path := writeCfg(t, yaml)
|
||||||
_, err := Load(path)
|
_, err := Load(path)
|
||||||
@@ -184,22 +144,18 @@ gitea:
|
|||||||
if !strings.Contains(err.Error(), "telegram.token") {
|
if !strings.Contains(err.Error(), "telegram.token") {
|
||||||
t.Errorf("ожидалось telegram.token в ошибке, got %v", err)
|
t.Errorf("ожидалось telegram.token в ошибке, got %v", err)
|
||||||
}
|
}
|
||||||
|
if !strings.Contains(err.Error(), "telegram.chat_id") {
|
||||||
|
t.Errorf("ожидалось telegram.chat_id в ошибке, got %v", err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestLoad_InvalidDuration(t *testing.T) {
|
func TestLoad_InvalidDuration(t *testing.T) {
|
||||||
t.Setenv("TG_TOKEN", "x")
|
t.Setenv("TG_TOKEN", "x")
|
||||||
t.Setenv("TG_CHAT_ID", "x")
|
t.Setenv("TG_CHAT_ID", "x")
|
||||||
t.Setenv("GITEA_URL", "x")
|
|
||||||
t.Setenv("GITEA_TOKEN", "x")
|
|
||||||
t.Setenv("GITEA_USER", "x")
|
|
||||||
|
|
||||||
yaml := `telegram:
|
yaml := `telegram:
|
||||||
token: "x"
|
token: "x"
|
||||||
chat_id: "x"
|
chat_id: "x"
|
||||||
gitea:
|
|
||||||
url: "x"
|
|
||||||
token: "x"
|
|
||||||
user: "x"
|
|
||||||
opencode:
|
opencode:
|
||||||
hard_timeout: "не-длительность"
|
hard_timeout: "не-длительность"
|
||||||
`
|
`
|
||||||
|
|||||||
@@ -35,7 +35,6 @@ func (d *Duration) UnmarshalYAML(unmarshal func(any) error) error {
|
|||||||
// Config — полная конфигурация бинаря.
|
// Config — полная конфигурация бинаря.
|
||||||
type Config struct {
|
type Config struct {
|
||||||
Telegram TelegramCfg `yaml:"telegram"`
|
Telegram TelegramCfg `yaml:"telegram"`
|
||||||
Gitea GiteaCfg `yaml:"gitea"`
|
|
||||||
OpenCode OpenCodeCfg `yaml:"opencode"`
|
OpenCode OpenCodeCfg `yaml:"opencode"`
|
||||||
Chat ChatCfg `yaml:"chat"`
|
Chat ChatCfg `yaml:"chat"`
|
||||||
Paths PathsCfg `yaml:"paths"`
|
Paths PathsCfg `yaml:"paths"`
|
||||||
@@ -46,12 +45,6 @@ type TelegramCfg struct {
|
|||||||
ChatID string `yaml:"chat_id" env:"TG_CHAT_ID"`
|
ChatID string `yaml:"chat_id" env:"TG_CHAT_ID"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type GiteaCfg struct {
|
|
||||||
URL string `yaml:"url" env:"GITEA_URL"`
|
|
||||||
Token string `yaml:"token" env:"GITEA_TOKEN"`
|
|
||||||
User string `yaml:"user" env:"GITEA_USER"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type OpenCodeCfg struct {
|
type OpenCodeCfg struct {
|
||||||
Bin string `yaml:"bin" default:"opencode"`
|
Bin string `yaml:"bin" default:"opencode"`
|
||||||
DBPath string `yaml:"db_path" default:""`
|
DBPath string `yaml:"db_path" default:""`
|
||||||
@@ -80,11 +73,5 @@ func (c *Config) Validate() error {
|
|||||||
if c.Telegram.ChatID == "" {
|
if c.Telegram.ChatID == "" {
|
||||||
errs = append(errs, fmt.Errorf("%w: telegram.chat_id", ErrMissingField))
|
errs = append(errs, fmt.Errorf("%w: telegram.chat_id", ErrMissingField))
|
||||||
}
|
}
|
||||||
if c.Gitea.URL == "" {
|
|
||||||
errs = append(errs, fmt.Errorf("%w: gitea.url", ErrMissingField))
|
|
||||||
}
|
|
||||||
if c.Gitea.Token == "" {
|
|
||||||
errs = append(errs, fmt.Errorf("%w: gitea.token", ErrMissingField))
|
|
||||||
}
|
|
||||||
return errors.Join(errs...)
|
return errors.Join(errs...)
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user