1
2 package delete
3
4 import (
5 "context"
6 "encoding/json"
7 "errors"
8 "strings"
9 "testing"
10 "time"
11
12 "github.com/stretchr/testify/require"
13
14 "edge-infra.dev/pkg/edge/api/fake"
15 "edge-infra.dev/pkg/edge/api/graph/model"
16 "edge-infra.dev/pkg/edge/edgecli"
17 "edge-infra.dev/pkg/edge/edgecli/flagutil"
18 "edge-infra.dev/pkg/lib/cli/rags"
19 )
20
21 type DeleteOperatorInterventionRoleMappingResponse struct {
22 DeleteOperatorInterventionRoleMapping model.DeleteOperatorInterventionResponse `json:"deleteOperatorInterventionRoleMapping"`
23 }
24
25
26
27
28 func DeleteOperatorInterventionRoleMapping(body []byte) (interface{}, bool, error) {
29 if !strings.Contains(string(body), "deleteOperatorInterventionRoleMapping(mapping: $mapping)") {
30 return nil, false, nil
31 }
32
33 var ok = true
34
35 var m struct {
36 Query string
37 Variables struct {
38 Mapping struct {
39 Role string
40 Privilege struct {
41 Name string
42 }
43 }
44 }
45 }
46 err := json.Unmarshal(body, &m)
47 if err != nil {
48 return nil, ok, err
49 }
50
51 var errors []*model.OperatorInterventionErrorResponse
52 if m.Variables.Mapping.Role == "bad-role" {
53 errors = []*model.OperatorInterventionErrorResponse{{
54 Type: model.OperatorInterventionErrorTypeUnknownRoleMapping,
55 Role: &m.Variables.Mapping.Role,
56 Privilege: &m.Variables.Mapping.Privilege.Name,
57 }}
58 }
59 return DeleteOperatorInterventionRoleMappingResponse{
60 DeleteOperatorInterventionRoleMapping: model.DeleteOperatorInterventionResponse{
61 Errors: errors,
62 },
63 }, ok, nil
64 }
65
66 func TestDeleteRoleMapping(t *testing.T) {
67 t.Parallel()
68
69 edgeAPIMockSvr := fake.GetMockAPIServer(DeleteOperatorInterventionRoleMapping)
70 edgeAPIMockURL := edgeAPIMockSvr.URL + "/api/v2"
71 t.Cleanup(func() {
72 edgeAPIMockSvr.Close()
73 })
74
75 tests := map[string]struct {
76 flagsFunc func(*rags.RagSet) error
77 expError require.ErrorAssertionFunc
78 }{
79 "No Flags": {
80 flagsFunc: func(*rags.RagSet) error { return nil },
81 expError: require.Error,
82 },
83 "Only Role Flag": {
84 flagsFunc: func(rs *rags.RagSet) error {
85 return flagutil.SetFlag(rs, flagutil.OIRole, "abcd")
86 },
87 expError: require.Error,
88 },
89 "Only Privilege Flag": {
90 flagsFunc: func(rs *rags.RagSet) error {
91 return flagutil.SetFlag(rs, flagutil.OIPrivilege, "efgh")
92 },
93 expError: require.Error,
94 },
95 "All flags": {
96 flagsFunc: func(rs *rags.RagSet) error {
97 return errors.Join(
98 flagutil.SetFlag(rs, flagutil.OIRole, "abcd"),
99 flagutil.SetFlag(rs, flagutil.OIPrivilege, "efgh"),
100 )
101 },
102 expError: require.NoError,
103 },
104 "Unknown role mapping": {
105 flagsFunc: func(rs *rags.RagSet) error {
106 return errors.Join(
107 flagutil.SetFlag(rs, flagutil.OIRole, "bad-role"),
108 flagutil.SetFlag(rs, flagutil.OIPrivilege, "efgh"),
109 )
110 },
111 expError: require.Error,
112 },
113 }
114
115 for name, tc := range tests {
116 tc := tc
117 t.Run(name, func(t *testing.T) {
118 t.Parallel()
119
120
121
122
123
124 future := time.Now().Add(time.Hour * 24)
125 testConfig := edgecli.Config{
126 CurrentBannerContext: "fakeBanner",
127 BannerContexts: map[string]*edgecli.BannerContext{
128 "fakeBanner": {
129 TokenTime: future.Format(time.RFC3339),
130 Token: "fakeToken",
131 Endpoint: edgeAPIMockURL,
132 },
133 },
134 }
135
136 cmd := NewDeleteRoleMapping(&testConfig)
137 cmd.Command()
138
139 require.NoError(t, tc.flagsFunc(cmd.Rags))
140
141 err := cmd.Command().Exec(context.Background(), []string{})
142 tc.expError(t, err)
143 })
144 }
145 }
146
View as plain text