| 51 | } |
| 52 | |
| 53 | func TestMethodExprFinalizeInheritsBearerFormat(t *testing.T) { |
| 54 | cases := []struct { |
| 55 | name string |
| 56 | kind expr.SchemeKind |
| 57 | setup func(*expr.SecurityExpr) (*expr.APIExpr, *expr.ServiceExpr) |
| 58 | schemeName string |
| 59 | }{ |
| 60 | { |
| 61 | name: "service security", |
| 62 | kind: expr.BearerKind, |
| 63 | setup: func(req *expr.SecurityExpr) (*expr.APIExpr, *expr.ServiceExpr) { |
| 64 | return &expr.APIExpr{}, &expr.ServiceExpr{ |
| 65 | Name: "Service", |
| 66 | Requirements: []*expr.SecurityExpr{req}, |
| 67 | } |
| 68 | }, |
| 69 | schemeName: "bearer", |
| 70 | }, |
| 71 | { |
| 72 | name: "API security", |
| 73 | kind: expr.JWTKind, |
| 74 | setup: func(req *expr.SecurityExpr) (*expr.APIExpr, *expr.ServiceExpr) { |
| 75 | return &expr.APIExpr{ |
| 76 | Requirements: []*expr.SecurityExpr{req}, |
| 77 | }, &expr.ServiceExpr{Name: "Service"} |
| 78 | }, |
| 79 | schemeName: "jwt", |
| 80 | }, |
| 81 | } |
| 82 | |
| 83 | root := expr.Root |
| 84 | t.Cleanup(func() { |
| 85 | expr.Root = root |
| 86 | }) |
| 87 | |
| 88 | for _, tc := range cases { |
| 89 | t.Run(tc.name, func(t *testing.T) { |
| 90 | scheme := &expr.SchemeExpr{ |
| 91 | Kind: tc.kind, |
| 92 | SchemeName: tc.schemeName, |
| 93 | BearerFormat: "JWT", |
| 94 | In: "header", |
| 95 | Name: "Authorization", |
| 96 | } |
| 97 | req := &expr.SecurityExpr{Schemes: []*expr.SchemeExpr{scheme}} |
| 98 | api, service := tc.setup(req) |
| 99 | expr.Root = &expr.RootExpr{API: api} |
| 100 | |
| 101 | method := &expr.MethodExpr{ |
| 102 | Name: "Method", |
| 103 | Service: service, |
| 104 | } |
| 105 | method.Finalize() |
| 106 | |
| 107 | require.Len(t, method.Requirements, 1) |
| 108 | require.Len(t, method.Requirements[0].Schemes, 1) |
| 109 | inherited := method.Requirements[0].Schemes[0] |
| 110 | require.NotSame(t, scheme, inherited) |