1
0
Fork 0
mirror of https://codeberg.org/forgejo/forgejo.git synced 2025-07-26 04:59:39 +02:00
forgejo/modules/util/string_test.go
Nis Wechselberg 24d6972f6b fix: ASCII equal fold for authorization header (#8391)
For the "Authorization:" header only lowercase "token" was accepted. This change allows uppercase "Token" as well.

Signed-off-by: Nis Wechselberg <enbewe@enbewe.de>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/8391
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
Co-authored-by: Nis Wechselberg <enbewe@enbewe.de>
Co-committed-by: Nis Wechselberg <enbewe@enbewe.de>
2025-07-09 23:01:03 +02:00

73 lines
2.3 KiB
Go

// Copyright 2022 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package util
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestToSnakeCase(t *testing.T) {
cases := map[string]string{
// all old cases from the legacy package
"HTTPServer": "http_server",
"_camelCase": "_camel_case",
"NoHTTPS": "no_https",
"Wi_thF": "wi_th_f",
"_AnotherTES_TCaseP": "_another_tes_t_case_p",
"ALL": "all",
"_HELLO_WORLD_": "_hello_world_",
"HELLO_WORLD": "hello_world",
"HELLO____WORLD": "hello____world",
"TW": "tw",
"_C": "_c",
" sentence case ": "__sentence_case__",
" Mixed-hyphen case _and SENTENCE_case and UPPER-case": "_mixed_hyphen_case__and_sentence_case_and_upper_case",
// new cases
" ": "_",
"A": "a",
"A0": "a0",
"a0": "a0",
"Aa0": "aa0",
"啊": "啊",
"A啊": "a啊",
"Aa啊b": "aa啊b",
"A啊B": "a啊_b",
"Aa啊B": "aa啊_b",
"TheCase2": "the_case2",
"ObjIDs": "obj_i_ds", // the strange database column name which already exists
}
for input, expected := range cases {
assert.Equal(t, expected, ToSnakeCase(input))
}
}
func TestASCIIEqualFold(t *testing.T) {
cases := map[string]struct {
First string
Second string
Expected bool
}{
"Empty String": {First: "", Second: "", Expected: true},
"Single Letter Ident": {First: "h", Second: "h", Expected: true},
"Single Letter Equal": {First: "h", Second: "H", Expected: true},
"Single Letter Unequal": {First: "h", Second: "g", Expected: false},
"Simple Match Ident": {First: "someString", Second: "someString", Expected: true},
"Simple Match Equal": {First: "someString", Second: "someSTRIng", Expected: true},
"Simple Match Unequal": {First: "someString", Second: "sameString", Expected: false},
"Different Length": {First: "abcdef", Second: "abcdefg", Expected: false},
"Unicode Kelvin": {First: "ghijklm", Second: "GHIJ\u212ALM", Expected: false},
}
for name := range cases {
c := cases[name]
t.Run(name, func(t *testing.T) {
Actual := ASCIIEqualFold(c.First, c.Second)
assert.Equal(t, c.Expected, Actual)
})
}
}