Files
wonderwall/pkg/cookie/cookie_test.go
Trong Huu Nguyen fcba6815b9 feat: add feature toggled support for loginstatus
Co-Authored-By: Youssef Bel Mekki <youssef.bel.mekki@nav.no>
Co-Authored-By: Tommy Trøen <tommy.troen@nav.no>
2022-02-03 11:41:40 +01:00

123 lines
3.1 KiB
Go

package cookie_test
import (
"net/http"
"net/http/httptest"
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/nais/wonderwall/pkg/cookie"
"github.com/nais/wonderwall/pkg/crypto"
)
var (
encryptionKey = `G8Roe6AcoBpdr5GhO3cs9iORl4XIC8eq` // 256 bits AES
)
func TestMake(t *testing.T) {
expiresIn := 5 * time.Minute
opts := cookie.DefaultOptions().WithExpiresIn(expiresIn)
name := "some-cookie"
value := "some-value"
result := cookie.Make(name, value, opts)
shouldExpireBefore := time.Now().Add(expiresIn)
assert.True(t, result.Expires.Before(shouldExpireBefore))
assert.Equal(t, int(opts.ExpiresIn.Seconds()), result.MaxAge)
assert.True(t, result.HttpOnly)
assert.Equal(t, name, result.Name)
assert.Equal(t, value, result.Value)
assert.Equal(t, opts.SameSite, result.SameSite)
assert.Equal(t, opts.Secure, result.Secure)
assert.Equal(t, "/", result.Path)
assert.Empty(t, result.Domain)
}
func TestMakeWithDomain(t *testing.T) {
opts := cookie.DefaultOptions().WithDomain(".some.domain")
result := cookie.Make("some-cookie", "some-value", opts)
assert.Equal(t, ".some.domain", result.Domain)
}
func TestClear(t *testing.T) {
opts := cookie.DefaultOptions()
name := "some-name"
writer := httptest.NewRecorder()
cookie.Clear(writer, name, opts)
cookies := writer.Result().Cookies()
var result *http.Cookie
for _, c := range cookies {
if c.Name == name {
result = c
}
}
assert.NotNil(t, result)
assert.True(t, result.Expires.Before(time.Now()))
assert.True(t, result.Expires.Equal(time.Unix(0, 0)))
assert.Equal(t, -1, result.MaxAge)
assert.True(t, result.HttpOnly)
assert.Equal(t, name, result.Name)
assert.Equal(t, "", result.Value)
assert.Equal(t, opts.SameSite, result.SameSite)
assert.Equal(t, opts.Secure, result.Secure)
assert.Equal(t, "/", result.Path)
}
func TestClearWithDomain(t *testing.T) {
opts := cookie.DefaultOptions().WithDomain(".some.domain")
name := "some-cookie"
writer := httptest.NewRecorder()
cookie.Clear(writer, name, opts)
cookies := writer.Result().Cookies()
var result *http.Cookie
for _, c := range cookies {
if c.Name == name {
result = c
}
}
assert.NotNil(t, result)
assert.Equal(t, "some.domain", result.Domain)
}
func TestCookie_Encrypt(t *testing.T) {
crypter := crypto.NewCrypter([]byte(encryptionKey))
opts := cookie.DefaultOptions().WithExpiresIn(1 * time.Minute)
name := "some-name"
value := "some-value"
plaintextCookie := cookie.Make(name, value, opts)
encryptedCookie, err := plaintextCookie.Encrypt(crypter)
assert.NoError(t, err)
assert.NotEqual(t, value, encryptedCookie.Value)
}
func TestCookie_Decrypt(t *testing.T) {
crypter := crypto.NewCrypter([]byte(encryptionKey))
opts := cookie.DefaultOptions().WithExpiresIn(1 * time.Minute)
name := "some-name"
value := "some-value"
plaintextCookie := cookie.Make(name, value, opts)
encryptedCookie, err := plaintextCookie.Encrypt(crypter)
assert.NoError(t, err)
assert.NotEqual(t, value, encryptedCookie.Value)
plaintext, err := encryptedCookie.Decrypt(crypter)
assert.NoError(t, err)
assert.Equal(t, value, plaintext)
}