mirror of
https://github.com/hanzoskill/sogcli.git
synced 2026-10-30 21:03:29 +00:00
157 lines
3.6 KiB
Go
157 lines
3.6 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestConfigLoadEmpty(t *testing.T) {
|
|
// Use temp dir
|
|
tmpDir := t.TempDir()
|
|
origHome := os.Getenv("HOME")
|
|
os.Setenv("HOME", tmpDir)
|
|
defer os.Setenv("HOME", origHome)
|
|
|
|
cfg, err := Load()
|
|
require.NoError(t, err)
|
|
assert.NotNil(t, cfg)
|
|
assert.Empty(t, cfg.Accounts)
|
|
assert.Empty(t, cfg.DefaultAccount)
|
|
}
|
|
|
|
func TestConfigAddAccount(t *testing.T) {
|
|
tmpDir := t.TempDir()
|
|
origHome := os.Getenv("HOME")
|
|
os.Setenv("HOME", tmpDir)
|
|
defer os.Setenv("HOME", origHome)
|
|
|
|
cfg, err := Load()
|
|
require.NoError(t, err)
|
|
|
|
acct := Account{
|
|
Email: "[email protected]",
|
|
IMAP: ServerConfig{
|
|
Host: "imap.example.com",
|
|
Port: 993,
|
|
TLS: true,
|
|
},
|
|
SMTP: ServerConfig{
|
|
Host: "smtp.example.com",
|
|
Port: 587,
|
|
StartTLS: true,
|
|
},
|
|
}
|
|
|
|
// Note: AddAccount tries to save to keyring which may fail in test
|
|
// We'll test the config part only
|
|
cfg.Accounts[acct.Email] = acct
|
|
cfg.DefaultAccount = acct.Email
|
|
|
|
assert.Len(t, cfg.Accounts, 1)
|
|
assert.Equal(t, "[email protected]", cfg.DefaultAccount)
|
|
|
|
got, err := cfg.GetAccount("[email protected]")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "imap.example.com", got.IMAP.Host)
|
|
assert.Equal(t, 993, got.IMAP.Port)
|
|
}
|
|
|
|
func TestConfigGetAccountNotFound(t *testing.T) {
|
|
tmpDir := t.TempDir()
|
|
origHome := os.Getenv("HOME")
|
|
os.Setenv("HOME", tmpDir)
|
|
defer os.Setenv("HOME", origHome)
|
|
|
|
cfg, err := Load()
|
|
require.NoError(t, err)
|
|
|
|
_, err = cfg.GetAccount("[email protected]")
|
|
assert.Error(t, err)
|
|
assert.Contains(t, err.Error(), "not found")
|
|
}
|
|
|
|
func TestConfigListAccounts(t *testing.T) {
|
|
tmpDir := t.TempDir()
|
|
origHome := os.Getenv("HOME")
|
|
os.Setenv("HOME", tmpDir)
|
|
defer os.Setenv("HOME", origHome)
|
|
|
|
cfg, err := Load()
|
|
require.NoError(t, err)
|
|
|
|
// Empty initially
|
|
assert.Empty(t, cfg.ListAccounts())
|
|
|
|
// Add accounts
|
|
cfg.Accounts["[email protected]"] = Account{Email: "[email protected]"}
|
|
cfg.Accounts["[email protected]"] = Account{Email: "[email protected]"}
|
|
|
|
accounts := cfg.ListAccounts()
|
|
assert.Len(t, accounts, 2)
|
|
}
|
|
|
|
func TestConfigSaveLoad(t *testing.T) {
|
|
tmpDir := t.TempDir()
|
|
origHome := os.Getenv("HOME")
|
|
os.Setenv("HOME", tmpDir)
|
|
defer os.Setenv("HOME", origHome)
|
|
|
|
// Create and save
|
|
cfg, err := Load()
|
|
require.NoError(t, err)
|
|
|
|
cfg.Accounts["[email protected]"] = Account{
|
|
Email: "[email protected]",
|
|
IMAP: ServerConfig{
|
|
Host: "imap.example.com",
|
|
Port: 993,
|
|
},
|
|
}
|
|
cfg.DefaultAccount = "[email protected]"
|
|
|
|
err = cfg.Save()
|
|
require.NoError(t, err)
|
|
|
|
// Verify file exists
|
|
configPath := filepath.Join(tmpDir, ".config", "sog", "config.json")
|
|
_, err = os.Stat(configPath)
|
|
require.NoError(t, err)
|
|
|
|
// Load again
|
|
cfg2, err := Load()
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "[email protected]", cfg2.DefaultAccount)
|
|
assert.Len(t, cfg2.Accounts, 1)
|
|
}
|
|
|
|
func TestConfigRemoveAccount(t *testing.T) {
|
|
tmpDir := t.TempDir()
|
|
origHome := os.Getenv("HOME")
|
|
os.Setenv("HOME", tmpDir)
|
|
defer os.Setenv("HOME", origHome)
|
|
|
|
cfg, err := Load()
|
|
require.NoError(t, err)
|
|
|
|
cfg.Accounts["[email protected]"] = Account{Email: "[email protected]"}
|
|
cfg.Accounts["[email protected]"] = Account{Email: "[email protected]"}
|
|
cfg.DefaultAccount = "[email protected]"
|
|
|
|
// Remove non-default
|
|
err = cfg.RemoveAccount("[email protected]")
|
|
require.NoError(t, err)
|
|
assert.Len(t, cfg.Accounts, 1)
|
|
assert.Equal(t, "[email protected]", cfg.DefaultAccount)
|
|
|
|
// Remove default (should pick new default)
|
|
cfg.Accounts["[email protected]"] = Account{Email: "[email protected]"}
|
|
err = cfg.RemoveAccount("[email protected]")
|
|
require.NoError(t, err)
|
|
assert.Len(t, cfg.Accounts, 1)
|
|
assert.Equal(t, "[email protected]", cfg.DefaultAccount)
|
|
}
|