Commit eb09c8f
mo khan <mo@mokhan.ca>
2025-05-07 14:34:19
feat: add helper for writing cookie to response writer
Changed files (6)
pkg
pkg/cookie/expire.go
@@ -6,6 +6,14 @@ import (
"github.com/xlgmokha/x/pkg/x"
)
+func Write(w http.ResponseWriter, cookie *http.Cookie) {
+ http.SetCookie(w, cookie)
+}
+
+func WriteWith(w http.ResponseWriter, options ...x.Option[*http.Cookie]) {
+ Write(w, x.New[*http.Cookie](options...))
+}
+
func Expire(w http.ResponseWriter, name string, options ...x.Option[*http.Cookie]) {
- http.SetCookie(w, Reset(name, options...))
+ Write(w, Reset(name, options...))
}
pkg/cookie/expire_test.go
@@ -4,6 +4,7 @@ import (
"net/http"
"net/http/httptest"
"testing"
+ "time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
@@ -16,7 +17,10 @@ func TestExpire(t *testing.T) {
cookie, err := http.ParseSetCookie(w.Header().Get("Set-Cookie"))
require.NoError(t, err)
+
+ assert.Empty(t, cookie.Value)
assert.Equal(t, "example", cookie.Name)
- assert.Equal(t, "", cookie.Value)
assert.Equal(t, "example.com", cookie.Domain)
+ assert.Equal(t, -1, cookie.MaxAge)
+ assert.Equal(t, time.Unix(0, 0).Unix(), cookie.Expires.Unix())
}
pkg/cookie/new.go
@@ -7,11 +7,5 @@ import (
)
func New(name string, options ...x.Option[*http.Cookie]) *http.Cookie {
- options = x.Prepend[x.Option[*http.Cookie]](
- options,
- With(func(c *http.Cookie) {
- c.Name = name
- }),
- )
- return x.New[*http.Cookie](options...)
+ return x.New[*http.Cookie](x.Prepend[x.Option[*http.Cookie]](options, WithName(name))...)
}
pkg/cookie/option.go
@@ -14,6 +14,12 @@ func With(with x.Configure[*http.Cookie]) x.Option[*http.Cookie] {
return x.With[*http.Cookie](with)
}
+func WithName(name string) x.Option[*http.Cookie] {
+ return With(func(c *http.Cookie) {
+ c.Name = name
+ })
+}
+
func WithValue(value string) x.Option[*http.Cookie] {
return With(func(c *http.Cookie) {
c.Value = value
pkg/cookie/reset.go
@@ -8,11 +8,9 @@ import (
)
func Reset(name string, options ...x.Option[*http.Cookie]) *http.Cookie {
- options = append(
+ return New(name, append(
options,
WithValue(""),
WithExpiration(time.Unix(0, 0)),
- )
-
- return New(name, options...)
+ )...)
}
pkg/cookie/reset_test.go
@@ -17,12 +17,12 @@ func TestReset(t *testing.T) {
WithDomain("example.com"),
)
- assert.Equal(t, -1, result.MaxAge)
- assert.Equal(t, time.Unix(0, 0), result.Expires)
assert.Empty(t, result.Value)
+ assert.Equal(t, "example", result.Name)
+ assert.Equal(t, "example.com", result.Domain)
+ assert.Equal(t, -1, result.MaxAge)
+ assert.Equal(t, http.SameSiteDefaultMode, result.SameSite)
assert.Equal(t, time.Unix(0, 0), result.Expires)
assert.True(t, result.HttpOnly)
assert.True(t, result.Secure)
- assert.Equal(t, http.SameSiteDefaultMode, result.SameSite)
- assert.Equal(t, "example.com", result.Domain)
}