@@ -2,6 +2,7 @@ package cloud
22
33import (
44 "context"
5+ "net/http"
56 "os"
67 "os/signal"
78 "strings"
@@ -1250,3 +1251,120 @@ func TestCloud_planOtherError(t *testing.T) {
12501251 t .Fatalf ("expected error message, got: %s" , err .Error ())
12511252 }
12521253}
1254+
1255+ func TestCloud_planShouldRenderSRO (t * testing.T ) {
1256+ t .Run ("when instance is TFC" , func (t * testing.T ) {
1257+ handlers := map [string ]func (http.ResponseWriter , * http.Request ){
1258+ "/api/v2/ping" : func (w http.ResponseWriter , r * http.Request ) {
1259+ w .Header ().Set ("Content-Type" , "application/json" )
1260+ w .Header ().Set ("TFP-API-Version" , "2.5" )
1261+ w .Header ().Set ("TFP-AppName" , "Terraform Cloud" )
1262+ },
1263+ }
1264+ b , bCleanup := testBackendWithHandlers (t , handlers )
1265+ t .Cleanup (bCleanup )
1266+ b .renderer = & jsonformat.Renderer {}
1267+
1268+ t .Run ("and SRO is enabled" , func (t * testing.T ) {
1269+ r := & tfe.Run {
1270+ Workspace : & tfe.Workspace {
1271+ StructuredRunOutputEnabled : true ,
1272+ },
1273+ }
1274+ assertSRORendered (t , b , r , true )
1275+ })
1276+
1277+ t .Run ("and SRO is not enabled" , func (t * testing.T ) {
1278+ r := & tfe.Run {
1279+ Workspace : & tfe.Workspace {
1280+ StructuredRunOutputEnabled : false ,
1281+ },
1282+ }
1283+ assertSRORendered (t , b , r , false )
1284+ })
1285+
1286+ })
1287+
1288+ t .Run ("when instance is TFE and version supports CLI SRO" , func (t * testing.T ) {
1289+ handlers := map [string ]func (http.ResponseWriter , * http.Request ){
1290+ "/api/v2/ping" : func (w http.ResponseWriter , r * http.Request ) {
1291+ w .Header ().Set ("Content-Type" , "application/json" )
1292+ w .Header ().Set ("TFP-API-Version" , "2.5" )
1293+ w .Header ().Set ("TFP-AppName" , "Terraform Enterprise" )
1294+ w .Header ().Set ("X-TFE-Version" , "202303-1" )
1295+ },
1296+ }
1297+ b , bCleanup := testBackendWithHandlers (t , handlers )
1298+ t .Cleanup (bCleanup )
1299+ b .renderer = & jsonformat.Renderer {}
1300+
1301+ t .Run ("and SRO is enabled" , func (t * testing.T ) {
1302+ r := & tfe.Run {
1303+ Workspace : & tfe.Workspace {
1304+ StructuredRunOutputEnabled : true ,
1305+ },
1306+ }
1307+ assertSRORendered (t , b , r , true )
1308+ })
1309+
1310+ t .Run ("and SRO is not enabled" , func (t * testing.T ) {
1311+ r := & tfe.Run {
1312+ Workspace : & tfe.Workspace {
1313+ StructuredRunOutputEnabled : false ,
1314+ },
1315+ }
1316+ assertSRORendered (t , b , r , false )
1317+ })
1318+ })
1319+
1320+ t .Run ("when instance is a known unsupported TFE release" , func (t * testing.T ) {
1321+ handlers := map [string ]func (http.ResponseWriter , * http.Request ){
1322+ "/api/v2/ping" : func (w http.ResponseWriter , r * http.Request ) {
1323+ w .Header ().Set ("Content-Type" , "application/json" )
1324+ w .Header ().Set ("TFP-API-Version" , "2.5" )
1325+ w .Header ().Set ("TFP-AppName" , "Terraform Enterprise" )
1326+ w .Header ().Set ("X-TFE-Version" , "202208-1" )
1327+ },
1328+ }
1329+ b , bCleanup := testBackendWithHandlers (t , handlers )
1330+ t .Cleanup (bCleanup )
1331+ b .renderer = & jsonformat.Renderer {}
1332+
1333+ r := & tfe.Run {
1334+ Workspace : & tfe.Workspace {
1335+ StructuredRunOutputEnabled : true ,
1336+ },
1337+ }
1338+ assertSRORendered (t , b , r , false )
1339+ })
1340+
1341+ t .Run ("when instance is an unknown TFE release" , func (t * testing.T ) {
1342+ handlers := map [string ]func (http.ResponseWriter , * http.Request ){
1343+ "/api/v2/ping" : func (w http.ResponseWriter , r * http.Request ) {
1344+ w .Header ().Set ("Content-Type" , "application/json" )
1345+ w .Header ().Set ("TFP-API-Version" , "2.5" )
1346+ },
1347+ }
1348+ b , bCleanup := testBackendWithHandlers (t , handlers )
1349+ t .Cleanup (bCleanup )
1350+ b .renderer = & jsonformat.Renderer {}
1351+
1352+ r := & tfe.Run {
1353+ Workspace : & tfe.Workspace {
1354+ StructuredRunOutputEnabled : true ,
1355+ },
1356+ }
1357+ assertSRORendered (t , b , r , false )
1358+ })
1359+
1360+ }
1361+
1362+ func assertSRORendered (t * testing.T , b * Cloud , r * tfe.Run , shouldRender bool ) {
1363+ got , err := b .shouldRenderStructuredRunOutput (r )
1364+ if err != nil {
1365+ t .Fatalf ("expected no error: %v" , err )
1366+ }
1367+ if shouldRender != got {
1368+ t .Fatalf ("expected SRO to be rendered: %t, got %t" , shouldRender , got )
1369+ }
1370+ }
0 commit comments