evcc-io/cmd/password_test.go

49 lines
1.4 KiB
Go

package cmd
import (
"path/filepath"
"testing"
"github.com/evcc-io/evcc/api/globalconfig"
"github.com/evcc-io/evcc/core/keys"
"github.com/evcc-io/evcc/server/db/settings"
"github.com/evcc-io/evcc/util/auth"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
// TestPasswordWithInvalidSponsorToken verifies that password commands work
// even when an invalid sponsor token is present in the database
func TestPasswordWithInvalidSponsorToken(t *testing.T) {
tmpDir := t.TempDir()
dbPath := filepath.Join(tmpDir, "test.db")
// Setup database (same as password commands do)
err := configureDatabase(globalconfig.DB{
Type: "sqlite",
Dsn: dbPath,
})
require.NoError(t, err)
// Store invalid sponsor token
settings.SetString(keys.SponsorToken, "invalid-token")
storedToken, err := settings.String(keys.SponsorToken)
require.NoError(t, err)
assert.Equal(t, "invalid-token", storedToken)
// Set password - should work despite invalid sponsor token
authInstance := auth.New()
err = authInstance.SetAdminPassword("test-password")
require.NoError(t, err)
// Verify password works
assert.True(t, authInstance.IsAdminPasswordValid("test-password"))
// Reset password - should work despite invalid sponsor token
authInstance.RemoveAdminPassword()
// Verify password was removed
storedHash, err := settings.String(keys.AdminPassword)
require.NoError(t, err)
assert.Empty(t, storedHash)
}