Files

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)
}