Test chain extractor metadata
(t *testing.T)
| 194 | |
| 195 | // Test chain extractor metadata |
| 196 | func Test_CSRF_Chain_Extractor_Metadata(t *testing.T) { |
| 197 | t.Parallel() |
| 198 | |
| 199 | t.Run("EmptyChain", func(t *testing.T) { |
| 200 | t.Parallel() |
| 201 | chained := extractors.Chain() |
| 202 | require.Equal(t, extractors.SourceCustom, chained.Source) |
| 203 | require.Empty(t, chained.Key) |
| 204 | require.Empty(t, chained.Chain) |
| 205 | }) |
| 206 | |
| 207 | t.Run("SingleExtractor", func(t *testing.T) { |
| 208 | t.Parallel() |
| 209 | header := extractors.FromHeader("X-Token") |
| 210 | chained := extractors.Chain(header) |
| 211 | require.Equal(t, extractors.SourceHeader, chained.Source) |
| 212 | require.Equal(t, "X-Token", chained.Key) |
| 213 | require.Len(t, chained.Chain, 1) |
| 214 | }) |
| 215 | |
| 216 | t.Run("MultipleExtractors", func(t *testing.T) { |
| 217 | t.Parallel() |
| 218 | header := extractors.FromHeader("X-Token") |
| 219 | form := extractors.FromForm("_csrf") |
| 220 | chained := extractors.Chain(header, form) |
| 221 | |
| 222 | // Should use first extractor's metadata |
| 223 | require.Equal(t, extractors.SourceHeader, chained.Source) |
| 224 | require.Equal(t, "X-Token", chained.Key) |
| 225 | require.Len(t, chained.Chain, 2) |
| 226 | require.Equal(t, header.Source, chained.Chain[0].Source) |
| 227 | require.Equal(t, form.Source, chained.Chain[1].Source) |
| 228 | }) |
| 229 | } |
| 230 | |
| 231 | // Test custom extractor with new struct pattern |
| 232 | func Test_CSRF_Custom_Extractor_Struct(t *testing.T) { |
nothing calls this directly
no test coverage detected