@@ -154,9 +154,58 @@ func Test_splitCookie_joinCookies(t *testing.T) {
154154 Value: value,
155155 }
156156 splitCookies := splitCookie(cookie)
157− joinedCookie, err := joinCookies(splitCookies)
157+ joinedCookie, err := joinCookies(splitCookies, cookie.Name)
158158 assert.NoError(t, err)
159159 assert.Equal(t, *cookie, *joinedCookie)
160160 })
161161 }
162162}
163+
164+func Test_joinCookies_withUnderlineSuffix(t *testing.T) {
165+ testCases := map[string]struct {
166+ CookieName string
167+ SplitOrder []int
168+ }{
169+ "Ascending order split with \"_\" suffix": {
170+ CookieName: "_cookie_name_",
171+ SplitOrder: []int{0, 1, 2, 3, 4},
172+ },
173+ "Descending order split with \"_\" suffix": {
174+ CookieName: "_cookie_name_",
175+ SplitOrder: []int{4, 3, 2, 1, 0},
176+ },
177+ "Arbitrary order split with \"_\" suffix": {
178+ CookieName: "_cookie_name_",
179+ SplitOrder: []int{3, 1, 2, 0, 4},
180+ },
181+ "Arbitrary order split with \"_0\" suffix": {
182+ CookieName: "_cookie_name_0",
183+ SplitOrder: []int{1, 3, 0, 2, 4},
184+ },
185+ "Arbitrary order split with \"_1\" suffix": {
186+ CookieName: "_cookie_name_1",
187+ SplitOrder: []int{4, 1, 3, 0, 2},
188+ },
189+ "Arbitrary order split with \"__\" suffix": {
190+ CookieName: "_cookie_name__",
191+ SplitOrder: []int{1, 0, 4, 3, 2},
192+ },
193+ }
194+
195+ for testName, testCase := range testCases {
196+ t.Run(testName, func(t *testing.T) {
197+ cookieName := testCase.CookieName
198+ var splitCookies []*http.Cookie
199+ for _, splitSuffix := range testCase.SplitOrder {
200+ cookie := &http.Cookie{
201+ Name: splitCookieName(cookieName, splitSuffix),
202+ Value: strings.Repeat("v", 1000),
203+ }
204+ splitCookies = append(splitCookies, cookie)
205+ }
206+ joinedCookie, err := joinCookies(splitCookies, cookieName)
207+ assert.NoError(t, err)
208+ assert.Equal(t, cookieName, joinedCookie.Name)
209+ })
210+ }
211+}