github.com/fastly/cli@v1.7.2-0.20240304164155-9d0f1d77c3bf/pkg/commands/tls/config/config_test.go (about) 1 package config_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 mockResponseID = "123" 21 ) 22 23 func TestDescribe(t *testing.T) { 24 args := testutil.Args 25 scenarios := []testutil.TestScenario{ 26 { 27 Name: "validate missing --id flag", 28 Args: args("tls-config describe"), 29 WantError: "error parsing arguments: required flag --id not provided", 30 }, 31 { 32 Name: validateAPIError, 33 API: mock.API{ 34 GetCustomTLSConfigurationFn: func(i *fastly.GetCustomTLSConfigurationInput) (*fastly.CustomTLSConfiguration, error) { 35 return nil, testutil.Err 36 }, 37 }, 38 Args: args("tls-config describe --id example"), 39 WantError: testutil.Err.Error(), 40 }, 41 { 42 Name: validateAPISuccess, 43 API: mock.API{ 44 GetCustomTLSConfigurationFn: func(_ *fastly.GetCustomTLSConfigurationInput) (*fastly.CustomTLSConfiguration, error) { 45 t := testutil.Date 46 return &fastly.CustomTLSConfiguration{ 47 ID: mockResponseID, 48 Name: "Foo", 49 DNSRecords: []*fastly.DNSRecord{ 50 { 51 ID: "456", 52 RecordType: "Bar", 53 Region: "Baz", 54 }, 55 }, 56 Bulk: true, 57 Default: true, 58 HTTPProtocols: []string{"1.1"}, 59 TLSProtocols: []string{"1.3"}, 60 CreatedAt: &t, 61 UpdatedAt: &t, 62 }, nil 63 }, 64 }, 65 Args: args("tls-config describe --id example"), 66 WantOutput: "\nID: " + mockResponseID + "\nName: Foo\nDNS Record ID: 456\nDNS Record Type: Bar\nDNS Record Region: Baz\nBulk: true\nDefault: true\nHTTP Protocol: 1.1\nTLS Protocol: 1.3\nCreated at: 2021-06-15 23:00:00 +0000 UTC\nUpdated at: 2021-06-15 23:00:00 +0000 UTC\n", 67 }, 68 } 69 70 for testcaseIdx := range scenarios { 71 testcase := &scenarios[testcaseIdx] 72 t.Run(testcase.Name, func(t *testing.T) { 73 var stdout bytes.Buffer 74 app.Init = func(_ []string, _ io.Reader) (*global.Data, error) { 75 opts := testutil.MockGlobalData(testcase.Args, &stdout) 76 opts.APIClientFactory = mock.APIClient(testcase.API) 77 return opts, nil 78 } 79 err := app.Run(testcase.Args, nil) 80 testutil.AssertErrorContains(t, err, testcase.WantError) 81 testutil.AssertStringContains(t, stdout.String(), testcase.WantOutput) 82 }) 83 } 84 } 85 86 func TestList(t *testing.T) { 87 args := testutil.Args 88 scenarios := []testutil.TestScenario{ 89 { 90 Name: validateAPIError, 91 API: mock.API{ 92 ListCustomTLSConfigurationsFn: func(_ *fastly.ListCustomTLSConfigurationsInput) ([]*fastly.CustomTLSConfiguration, error) { 93 return nil, testutil.Err 94 }, 95 }, 96 Args: args("tls-config list"), 97 WantError: testutil.Err.Error(), 98 }, 99 { 100 Name: validateAPISuccess, 101 API: mock.API{ 102 ListCustomTLSConfigurationsFn: func(_ *fastly.ListCustomTLSConfigurationsInput) ([]*fastly.CustomTLSConfiguration, error) { 103 t := testutil.Date 104 return []*fastly.CustomTLSConfiguration{ 105 { 106 ID: mockResponseID, 107 Name: "Foo", 108 DNSRecords: []*fastly.DNSRecord{ 109 { 110 ID: "456", 111 RecordType: "Bar", 112 Region: "Baz", 113 }, 114 }, 115 Bulk: true, 116 Default: true, 117 HTTPProtocols: []string{"1.1"}, 118 TLSProtocols: []string{"1.3"}, 119 CreatedAt: &t, 120 UpdatedAt: &t, 121 }, 122 }, nil 123 }, 124 }, 125 Args: args("tls-config list --verbose"), 126 WantOutput: "\nID: " + mockResponseID + "\nName: Foo\nDNS Record ID: 456\nDNS Record Type: Bar\nDNS Record Region: Baz\nBulk: true\nDefault: true\nHTTP Protocol: 1.1\nTLS Protocol: 1.3\nCreated at: 2021-06-15 23:00:00 +0000 UTC\nUpdated at: 2021-06-15 23:00:00 +0000 UTC\n", 127 }, 128 } 129 130 for testcaseIdx := range scenarios { 131 testcase := &scenarios[testcaseIdx] 132 t.Run(testcase.Name, func(t *testing.T) { 133 var stdout bytes.Buffer 134 app.Init = func(_ []string, _ io.Reader) (*global.Data, error) { 135 opts := testutil.MockGlobalData(testcase.Args, &stdout) 136 opts.APIClientFactory = mock.APIClient(testcase.API) 137 return opts, nil 138 } 139 err := app.Run(testcase.Args, nil) 140 testutil.AssertErrorContains(t, err, testcase.WantError) 141 testutil.AssertStringContains(t, stdout.String(), testcase.WantOutput) 142 }) 143 } 144 } 145 146 func TestUpdate(t *testing.T) { 147 args := testutil.Args 148 scenarios := []testutil.TestScenario{ 149 { 150 Name: "validate missing --id flag", 151 Args: args("tls-config update --name example"), 152 WantError: "error parsing arguments: required flag --id not provided", 153 }, 154 { 155 Name: "validate missing --name flag", 156 Args: args("tls-config update --id 123"), 157 WantError: "error parsing arguments: required flag --name not provided", 158 }, 159 { 160 Name: validateAPIError, 161 API: mock.API{ 162 UpdateCustomTLSConfigurationFn: func(i *fastly.UpdateCustomTLSConfigurationInput) (*fastly.CustomTLSConfiguration, error) { 163 return nil, testutil.Err 164 }, 165 }, 166 Args: args("tls-config update --id example --name example"), 167 WantError: testutil.Err.Error(), 168 }, 169 { 170 Name: validateAPISuccess, 171 API: mock.API{ 172 UpdateCustomTLSConfigurationFn: func(_ *fastly.UpdateCustomTLSConfigurationInput) (*fastly.CustomTLSConfiguration, error) { 173 return &fastly.CustomTLSConfiguration{ 174 ID: mockResponseID, 175 }, nil 176 }, 177 }, 178 Args: args("tls-config update --id example --name example"), 179 WantOutput: fmt.Sprintf("Updated TLS Configuration '%s'", mockResponseID), 180 }, 181 } 182 183 for testcaseIdx := range scenarios { 184 testcase := &scenarios[testcaseIdx] 185 t.Run(testcase.Name, func(t *testing.T) { 186 var stdout bytes.Buffer 187 app.Init = func(_ []string, _ io.Reader) (*global.Data, error) { 188 opts := testutil.MockGlobalData(testcase.Args, &stdout) 189 opts.APIClientFactory = mock.APIClient(testcase.API) 190 return opts, nil 191 } 192 err := app.Run(testcase.Args, nil) 193 testutil.AssertErrorContains(t, err, testcase.WantError) 194 testutil.AssertStringContains(t, stdout.String(), testcase.WantOutput) 195 }) 196 } 197 }