github.com/fastly/cli@v1.7.2-0.20240304164155-9d0f1d77c3bf/pkg/commands/tls/platform/platform_test.go (about) 1 package platform_test 2 3 import ( 4 "bytes" 5 "fmt" 6 "io" 7 "testing" 8 9 "github.com/fastly/go-fastly/v9/fastly" 10 11 "github.com/fastly/cli/pkg/app" 12 "github.com/fastly/cli/pkg/global" 13 "github.com/fastly/cli/pkg/mock" 14 "github.com/fastly/cli/pkg/testutil" 15 ) 16 17 const ( 18 validateAPIError = "validate API error" 19 validateAPISuccess = "validate API success" 20 validateMissingIDFlag = "validate missing --id flag" 21 mockResponseID = "123" 22 ) 23 24 func TestTLSPlatformCreate(t *testing.T) { 25 args := testutil.Args 26 scenarios := []testutil.TestScenario{ 27 { 28 Name: "validate missing --cert-blob flag", 29 Args: args("tls-platform upload --intermediates-blob example"), 30 WantError: "required flag --cert-blob not provided", 31 }, 32 { 33 Name: "validate missing --intermediates-blob flag", 34 Args: args("tls-platform upload --cert-blob example"), 35 WantError: "required flag --intermediates-blob not provided", 36 }, 37 { 38 Name: validateAPIError, 39 API: mock.API{ 40 CreateBulkCertificateFn: func(_ *fastly.CreateBulkCertificateInput) (*fastly.BulkCertificate, error) { 41 return nil, testutil.Err 42 }, 43 }, 44 Args: args("tls-platform upload --cert-blob example --intermediates-blob example"), 45 WantError: testutil.Err.Error(), 46 }, 47 { 48 Name: validateAPISuccess, 49 API: mock.API{ 50 CreateBulkCertificateFn: func(_ *fastly.CreateBulkCertificateInput) (*fastly.BulkCertificate, error) { 51 return &fastly.BulkCertificate{ 52 ID: mockResponseID, 53 }, nil 54 }, 55 }, 56 Args: args("tls-platform upload --cert-blob example --intermediates-blob example"), 57 WantOutput: fmt.Sprintf("Uploaded TLS Bulk Certificate '%s'", mockResponseID), 58 }, 59 } 60 61 for testcaseIdx := range scenarios { 62 testcase := &scenarios[testcaseIdx] 63 t.Run(testcase.Name, func(t *testing.T) { 64 var stdout bytes.Buffer 65 app.Init = func(_ []string, _ io.Reader) (*global.Data, error) { 66 opts := testutil.MockGlobalData(testcase.Args, &stdout) 67 opts.APIClientFactory = mock.APIClient(testcase.API) 68 return opts, nil 69 } 70 err := app.Run(testcase.Args, nil) 71 testutil.AssertErrorContains(t, err, testcase.WantError) 72 testutil.AssertStringContains(t, stdout.String(), testcase.WantOutput) 73 }) 74 } 75 } 76 77 func TestTLSPlatformDelete(t *testing.T) { 78 args := testutil.Args 79 scenarios := []testutil.TestScenario{ 80 { 81 Name: validateMissingIDFlag, 82 Args: args("tls-platform delete"), 83 WantError: "error parsing arguments: required flag --id not provided", 84 }, 85 { 86 Name: validateAPIError, 87 API: mock.API{ 88 DeleteBulkCertificateFn: func(_ *fastly.DeleteBulkCertificateInput) error { 89 return testutil.Err 90 }, 91 }, 92 Args: args("tls-platform delete --id example"), 93 WantError: testutil.Err.Error(), 94 }, 95 { 96 Name: validateAPISuccess, 97 API: mock.API{ 98 DeleteBulkCertificateFn: func(_ *fastly.DeleteBulkCertificateInput) error { 99 return nil 100 }, 101 }, 102 Args: args("tls-platform delete --id example"), 103 WantOutput: "Deleted TLS Bulk Certificate 'example'", 104 }, 105 } 106 107 for testcaseIdx := range scenarios { 108 testcase := &scenarios[testcaseIdx] 109 t.Run(testcase.Name, func(t *testing.T) { 110 var stdout bytes.Buffer 111 app.Init = func(_ []string, _ io.Reader) (*global.Data, error) { 112 opts := testutil.MockGlobalData(testcase.Args, &stdout) 113 opts.APIClientFactory = mock.APIClient(testcase.API) 114 return opts, nil 115 } 116 err := app.Run(testcase.Args, nil) 117 testutil.AssertErrorContains(t, err, testcase.WantError) 118 testutil.AssertStringContains(t, stdout.String(), testcase.WantOutput) 119 }) 120 } 121 } 122 123 func TestTLSPlatformDescribe(t *testing.T) { 124 args := testutil.Args 125 scenarios := []testutil.TestScenario{ 126 { 127 Name: validateMissingIDFlag, 128 Args: args("tls-platform describe"), 129 WantError: "error parsing arguments: required flag --id not provided", 130 }, 131 { 132 Name: validateAPIError, 133 API: mock.API{ 134 GetBulkCertificateFn: func(_ *fastly.GetBulkCertificateInput) (*fastly.BulkCertificate, error) { 135 return nil, testutil.Err 136 }, 137 }, 138 Args: args("tls-platform describe --id example"), 139 WantError: testutil.Err.Error(), 140 }, 141 { 142 Name: validateAPISuccess, 143 API: mock.API{ 144 GetBulkCertificateFn: func(_ *fastly.GetBulkCertificateInput) (*fastly.BulkCertificate, error) { 145 t := testutil.Date 146 return &fastly.BulkCertificate{ 147 ID: "123", 148 CreatedAt: &t, 149 UpdatedAt: &t, 150 Replace: true, 151 }, nil 152 }, 153 }, 154 Args: args("tls-platform describe --id example"), 155 WantOutput: "\nID: 123\nCreated at: 2021-06-15 23:00:00 +0000 UTC\nUpdated at: 2021-06-15 23:00:00 +0000 UTC\nReplace: true\n", 156 }, 157 } 158 159 for testcaseIdx := range scenarios { 160 testcase := &scenarios[testcaseIdx] 161 t.Run(testcase.Name, func(t *testing.T) { 162 var stdout bytes.Buffer 163 app.Init = func(_ []string, _ io.Reader) (*global.Data, error) { 164 opts := testutil.MockGlobalData(testcase.Args, &stdout) 165 opts.APIClientFactory = mock.APIClient(testcase.API) 166 return opts, nil 167 } 168 err := app.Run(testcase.Args, nil) 169 testutil.AssertErrorContains(t, err, testcase.WantError) 170 testutil.AssertStringContains(t, stdout.String(), testcase.WantOutput) 171 }) 172 } 173 } 174 175 func TestTLSPlatformList(t *testing.T) { 176 args := testutil.Args 177 scenarios := []testutil.TestScenario{ 178 { 179 Name: validateAPIError, 180 API: mock.API{ 181 ListBulkCertificatesFn: func(_ *fastly.ListBulkCertificatesInput) ([]*fastly.BulkCertificate, error) { 182 return nil, testutil.Err 183 }, 184 }, 185 Args: args("tls-platform list"), 186 WantError: testutil.Err.Error(), 187 }, 188 { 189 Name: validateAPISuccess, 190 API: mock.API{ 191 ListBulkCertificatesFn: func(_ *fastly.ListBulkCertificatesInput) ([]*fastly.BulkCertificate, error) { 192 t := testutil.Date 193 return []*fastly.BulkCertificate{ 194 { 195 ID: mockResponseID, 196 CreatedAt: &t, 197 UpdatedAt: &t, 198 Replace: true, 199 }, 200 }, nil 201 }, 202 }, 203 Args: args("tls-platform list --verbose"), 204 WantOutput: "\nID: " + mockResponseID + "\nCreated at: 2021-06-15 23:00:00 +0000 UTC\nUpdated at: 2021-06-15 23:00:00 +0000 UTC\nReplace: true\n", 205 }, 206 } 207 208 for testcaseIdx := range scenarios { 209 testcase := &scenarios[testcaseIdx] 210 t.Run(testcase.Name, func(t *testing.T) { 211 var stdout bytes.Buffer 212 app.Init = func(_ []string, _ io.Reader) (*global.Data, error) { 213 opts := testutil.MockGlobalData(testcase.Args, &stdout) 214 opts.APIClientFactory = mock.APIClient(testcase.API) 215 return opts, nil 216 } 217 err := app.Run(testcase.Args, nil) 218 testutil.AssertErrorContains(t, err, testcase.WantError) 219 testutil.AssertStringContains(t, stdout.String(), testcase.WantOutput) 220 }) 221 } 222 } 223 224 func TestTLSPlatformUpdate(t *testing.T) { 225 args := testutil.Args 226 scenarios := []testutil.TestScenario{ 227 { 228 Name: validateMissingIDFlag, 229 Args: args("tls-platform update --cert-blob example --intermediates-blob example"), 230 WantError: "required flag --id not provided", 231 }, 232 { 233 Name: "validate missing --cert-blob flag", 234 Args: args("tls-platform update --id example --intermediates-blob example"), 235 WantError: "required flag --cert-blob not provided", 236 }, 237 { 238 Name: "validate missing --intermediates-blob flag", 239 Args: args("tls-platform update --id example --cert-blob example"), 240 WantError: "required flag --intermediates-blob not provided", 241 }, 242 { 243 Name: validateAPIError, 244 API: mock.API{ 245 UpdateBulkCertificateFn: func(_ *fastly.UpdateBulkCertificateInput) (*fastly.BulkCertificate, error) { 246 return nil, testutil.Err 247 }, 248 }, 249 Args: args("tls-platform update --id example --cert-blob example --intermediates-blob example"), 250 WantError: testutil.Err.Error(), 251 }, 252 { 253 Name: validateAPISuccess, 254 API: mock.API{ 255 UpdateBulkCertificateFn: func(_ *fastly.UpdateBulkCertificateInput) (*fastly.BulkCertificate, error) { 256 return &fastly.BulkCertificate{ 257 ID: mockResponseID, 258 }, nil 259 }, 260 }, 261 Args: args("tls-platform update --id example --cert-blob example --intermediates-blob example"), 262 WantOutput: "Updated TLS Bulk Certificate '123'", 263 }, 264 } 265 266 for testcaseIdx := range scenarios { 267 testcase := &scenarios[testcaseIdx] 268 t.Run(testcase.Name, func(t *testing.T) { 269 var stdout bytes.Buffer 270 app.Init = func(_ []string, _ io.Reader) (*global.Data, error) { 271 opts := testutil.MockGlobalData(testcase.Args, &stdout) 272 opts.APIClientFactory = mock.APIClient(testcase.API) 273 return opts, nil 274 } 275 err := app.Run(testcase.Args, nil) 276 testutil.AssertErrorContains(t, err, testcase.WantError) 277 testutil.AssertStringContains(t, stdout.String(), testcase.WantOutput) 278 }) 279 } 280 }