435 lines
		
	
	
	
		
			10 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			435 lines
		
	
	
	
		
			10 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
 | 
						|
// SPDX-License-Identifier: Apache-2.0
 | 
						|
 | 
						|
package request // import "miniflux.app/v2/internal/http/request"
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
	"net/http"
 | 
						|
	"testing"
 | 
						|
)
 | 
						|
 | 
						|
func TestContextStringValue(t *testing.T) {
 | 
						|
	r, _ := http.NewRequest("GET", "http://example.org", nil)
 | 
						|
	ctx := r.Context()
 | 
						|
	ctx = context.WithValue(ctx, ClientIPContextKey, "IP")
 | 
						|
	r = r.WithContext(ctx)
 | 
						|
 | 
						|
	result := getContextStringValue(r, ClientIPContextKey)
 | 
						|
	expected := "IP"
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %q instead of %q`, result, expected)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestContextStringValueWithInvalidType(t *testing.T) {
 | 
						|
	r, _ := http.NewRequest("GET", "http://example.org", nil)
 | 
						|
	ctx := r.Context()
 | 
						|
	ctx = context.WithValue(ctx, ClientIPContextKey, 0)
 | 
						|
	r = r.WithContext(ctx)
 | 
						|
 | 
						|
	result := getContextStringValue(r, ClientIPContextKey)
 | 
						|
	expected := ""
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %q instead of %q`, result, expected)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestContextStringValueWhenUnset(t *testing.T) {
 | 
						|
	r, _ := http.NewRequest("GET", "http://example.org", nil)
 | 
						|
 | 
						|
	result := getContextStringValue(r, ClientIPContextKey)
 | 
						|
	expected := ""
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %q instead of %q`, result, expected)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestContextBoolValue(t *testing.T) {
 | 
						|
	r, _ := http.NewRequest("GET", "http://example.org", nil)
 | 
						|
	ctx := r.Context()
 | 
						|
	ctx = context.WithValue(ctx, IsAdminUserContextKey, true)
 | 
						|
	r = r.WithContext(ctx)
 | 
						|
 | 
						|
	result := getContextBoolValue(r, IsAdminUserContextKey)
 | 
						|
	expected := true
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %v instead of %v`, result, expected)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestContextBoolValueWithInvalidType(t *testing.T) {
 | 
						|
	r, _ := http.NewRequest("GET", "http://example.org", nil)
 | 
						|
	ctx := r.Context()
 | 
						|
	ctx = context.WithValue(ctx, IsAdminUserContextKey, "invalid")
 | 
						|
	r = r.WithContext(ctx)
 | 
						|
 | 
						|
	result := getContextBoolValue(r, IsAdminUserContextKey)
 | 
						|
	expected := false
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %v instead of %v`, result, expected)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestContextBoolValueWhenUnset(t *testing.T) {
 | 
						|
	r, _ := http.NewRequest("GET", "http://example.org", nil)
 | 
						|
 | 
						|
	result := getContextBoolValue(r, IsAdminUserContextKey)
 | 
						|
	expected := false
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %v instead of %v`, result, expected)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestContextInt64Value(t *testing.T) {
 | 
						|
	r, _ := http.NewRequest("GET", "http://example.org", nil)
 | 
						|
	ctx := r.Context()
 | 
						|
	ctx = context.WithValue(ctx, UserIDContextKey, int64(1234))
 | 
						|
	r = r.WithContext(ctx)
 | 
						|
 | 
						|
	result := getContextInt64Value(r, UserIDContextKey)
 | 
						|
	expected := int64(1234)
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %d instead of %d`, result, expected)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestContextInt64ValueWithInvalidType(t *testing.T) {
 | 
						|
	r, _ := http.NewRequest("GET", "http://example.org", nil)
 | 
						|
	ctx := r.Context()
 | 
						|
	ctx = context.WithValue(ctx, UserIDContextKey, "invalid")
 | 
						|
	r = r.WithContext(ctx)
 | 
						|
 | 
						|
	result := getContextInt64Value(r, UserIDContextKey)
 | 
						|
	expected := int64(0)
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %d instead of %d`, result, expected)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestContextInt64ValueWhenUnset(t *testing.T) {
 | 
						|
	r, _ := http.NewRequest("GET", "http://example.org", nil)
 | 
						|
 | 
						|
	result := getContextInt64Value(r, UserIDContextKey)
 | 
						|
	expected := int64(0)
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %d instead of %d`, result, expected)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestIsAdmin(t *testing.T) {
 | 
						|
	r, _ := http.NewRequest("GET", "http://example.org", nil)
 | 
						|
 | 
						|
	result := IsAdminUser(r)
 | 
						|
	expected := false
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %v instead of %v`, result, expected)
 | 
						|
	}
 | 
						|
 | 
						|
	ctx := r.Context()
 | 
						|
	ctx = context.WithValue(ctx, IsAdminUserContextKey, true)
 | 
						|
	r = r.WithContext(ctx)
 | 
						|
 | 
						|
	result = IsAdminUser(r)
 | 
						|
	expected = true
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %v instead of %v`, result, expected)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestIsAuthenticated(t *testing.T) {
 | 
						|
	r, _ := http.NewRequest("GET", "http://example.org", nil)
 | 
						|
 | 
						|
	result := IsAuthenticated(r)
 | 
						|
	expected := false
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %v instead of %v`, result, expected)
 | 
						|
	}
 | 
						|
 | 
						|
	ctx := r.Context()
 | 
						|
	ctx = context.WithValue(ctx, IsAuthenticatedContextKey, true)
 | 
						|
	r = r.WithContext(ctx)
 | 
						|
 | 
						|
	result = IsAuthenticated(r)
 | 
						|
	expected = true
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %v instead of %v`, result, expected)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestUserID(t *testing.T) {
 | 
						|
	r, _ := http.NewRequest("GET", "http://example.org", nil)
 | 
						|
 | 
						|
	result := UserID(r)
 | 
						|
	expected := int64(0)
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %v instead of %v`, result, expected)
 | 
						|
	}
 | 
						|
 | 
						|
	ctx := r.Context()
 | 
						|
	ctx = context.WithValue(ctx, UserIDContextKey, int64(123))
 | 
						|
	r = r.WithContext(ctx)
 | 
						|
 | 
						|
	result = UserID(r)
 | 
						|
	expected = int64(123)
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %v instead of %v`, result, expected)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestUserTimezone(t *testing.T) {
 | 
						|
	r, _ := http.NewRequest("GET", "http://example.org", nil)
 | 
						|
 | 
						|
	result := UserTimezone(r)
 | 
						|
	expected := "UTC"
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %q instead of %q`, result, expected)
 | 
						|
	}
 | 
						|
 | 
						|
	ctx := r.Context()
 | 
						|
	ctx = context.WithValue(ctx, UserTimezoneContextKey, "Europe/Paris")
 | 
						|
	r = r.WithContext(ctx)
 | 
						|
 | 
						|
	result = UserTimezone(r)
 | 
						|
	expected = "Europe/Paris"
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %q instead of %q`, result, expected)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestUserLanguage(t *testing.T) {
 | 
						|
	r, _ := http.NewRequest("GET", "http://example.org", nil)
 | 
						|
 | 
						|
	result := UserLanguage(r)
 | 
						|
	expected := "en_US"
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %q instead of %q`, result, expected)
 | 
						|
	}
 | 
						|
 | 
						|
	ctx := r.Context()
 | 
						|
	ctx = context.WithValue(ctx, UserLanguageContextKey, "fr_FR")
 | 
						|
	r = r.WithContext(ctx)
 | 
						|
 | 
						|
	result = UserLanguage(r)
 | 
						|
	expected = "fr_FR"
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %q instead of %q`, result, expected)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestUserTheme(t *testing.T) {
 | 
						|
	r, _ := http.NewRequest("GET", "http://example.org", nil)
 | 
						|
 | 
						|
	result := UserTheme(r)
 | 
						|
	expected := "system_serif"
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %q instead of %q`, result, expected)
 | 
						|
	}
 | 
						|
 | 
						|
	ctx := r.Context()
 | 
						|
	ctx = context.WithValue(ctx, UserThemeContextKey, "dark_serif")
 | 
						|
	r = r.WithContext(ctx)
 | 
						|
 | 
						|
	result = UserTheme(r)
 | 
						|
	expected = "dark_serif"
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %q instead of %q`, result, expected)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestCSRF(t *testing.T) {
 | 
						|
	r, _ := http.NewRequest("GET", "http://example.org", nil)
 | 
						|
 | 
						|
	result := CSRF(r)
 | 
						|
	expected := ""
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %q instead of %q`, result, expected)
 | 
						|
	}
 | 
						|
 | 
						|
	ctx := r.Context()
 | 
						|
	ctx = context.WithValue(ctx, CSRFContextKey, "secret")
 | 
						|
	r = r.WithContext(ctx)
 | 
						|
 | 
						|
	result = CSRF(r)
 | 
						|
	expected = "secret"
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %q instead of %q`, result, expected)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestSessionID(t *testing.T) {
 | 
						|
	r, _ := http.NewRequest("GET", "http://example.org", nil)
 | 
						|
 | 
						|
	result := SessionID(r)
 | 
						|
	expected := ""
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %q instead of %q`, result, expected)
 | 
						|
	}
 | 
						|
 | 
						|
	ctx := r.Context()
 | 
						|
	ctx = context.WithValue(ctx, SessionIDContextKey, "id")
 | 
						|
	r = r.WithContext(ctx)
 | 
						|
 | 
						|
	result = SessionID(r)
 | 
						|
	expected = "id"
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %q instead of %q`, result, expected)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestUserSessionToken(t *testing.T) {
 | 
						|
	r, _ := http.NewRequest("GET", "http://example.org", nil)
 | 
						|
 | 
						|
	result := UserSessionToken(r)
 | 
						|
	expected := ""
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %q instead of %q`, result, expected)
 | 
						|
	}
 | 
						|
 | 
						|
	ctx := r.Context()
 | 
						|
	ctx = context.WithValue(ctx, UserSessionTokenContextKey, "token")
 | 
						|
	r = r.WithContext(ctx)
 | 
						|
 | 
						|
	result = UserSessionToken(r)
 | 
						|
	expected = "token"
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %q instead of %q`, result, expected)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestOAuth2State(t *testing.T) {
 | 
						|
	r, _ := http.NewRequest("GET", "http://example.org", nil)
 | 
						|
 | 
						|
	result := OAuth2State(r)
 | 
						|
	expected := ""
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %q instead of %q`, result, expected)
 | 
						|
	}
 | 
						|
 | 
						|
	ctx := r.Context()
 | 
						|
	ctx = context.WithValue(ctx, OAuth2StateContextKey, "state")
 | 
						|
	r = r.WithContext(ctx)
 | 
						|
 | 
						|
	result = OAuth2State(r)
 | 
						|
	expected = "state"
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %q instead of %q`, result, expected)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestFlashMessage(t *testing.T) {
 | 
						|
	r, _ := http.NewRequest("GET", "http://example.org", nil)
 | 
						|
 | 
						|
	result := FlashMessage(r)
 | 
						|
	expected := ""
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %q instead of %q`, result, expected)
 | 
						|
	}
 | 
						|
 | 
						|
	ctx := r.Context()
 | 
						|
	ctx = context.WithValue(ctx, FlashMessageContextKey, "message")
 | 
						|
	r = r.WithContext(ctx)
 | 
						|
 | 
						|
	result = FlashMessage(r)
 | 
						|
	expected = "message"
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %q instead of %q`, result, expected)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestFlashErrorMessage(t *testing.T) {
 | 
						|
	r, _ := http.NewRequest("GET", "http://example.org", nil)
 | 
						|
 | 
						|
	result := FlashErrorMessage(r)
 | 
						|
	expected := ""
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %q instead of %q`, result, expected)
 | 
						|
	}
 | 
						|
 | 
						|
	ctx := r.Context()
 | 
						|
	ctx = context.WithValue(ctx, FlashErrorMessageContextKey, "error message")
 | 
						|
	r = r.WithContext(ctx)
 | 
						|
 | 
						|
	result = FlashErrorMessage(r)
 | 
						|
	expected = "error message"
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %q instead of %q`, result, expected)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestPocketRequestToken(t *testing.T) {
 | 
						|
	r, _ := http.NewRequest("GET", "http://example.org", nil)
 | 
						|
 | 
						|
	result := PocketRequestToken(r)
 | 
						|
	expected := ""
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %q instead of %q`, result, expected)
 | 
						|
	}
 | 
						|
 | 
						|
	ctx := r.Context()
 | 
						|
	ctx = context.WithValue(ctx, PocketRequestTokenContextKey, "request token")
 | 
						|
	r = r.WithContext(ctx)
 | 
						|
 | 
						|
	result = PocketRequestToken(r)
 | 
						|
	expected = "request token"
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %q instead of %q`, result, expected)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestClientIP(t *testing.T) {
 | 
						|
	r, _ := http.NewRequest("GET", "http://example.org", nil)
 | 
						|
 | 
						|
	result := ClientIP(r)
 | 
						|
	expected := ""
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %q instead of %q`, result, expected)
 | 
						|
	}
 | 
						|
 | 
						|
	ctx := r.Context()
 | 
						|
	ctx = context.WithValue(ctx, ClientIPContextKey, "127.0.0.1")
 | 
						|
	r = r.WithContext(ctx)
 | 
						|
 | 
						|
	result = ClientIP(r)
 | 
						|
	expected = "127.0.0.1"
 | 
						|
 | 
						|
	if result != expected {
 | 
						|
		t.Errorf(`Unexpected context value, got %q instead of %q`, result, expected)
 | 
						|
	}
 | 
						|
}
 |