github.com/aquasecurity/trivy-iac@v0.8.1-0.20240127024015-3d8e412cf0ab/internal/adapters/terraform/aws/apigateway/apiv1_test.go (about)

     1  package apigateway
     2  
     3  import (
     4  	"testing"
     5  
     6  	v1 "github.com/aquasecurity/defsec/pkg/providers/aws/apigateway/v1"
     7  	"github.com/aquasecurity/trivy-iac/internal/adapters/terraform/tftestutil"
     8  	"github.com/aquasecurity/trivy-iac/test/testutil"
     9  )
    10  
    11  func Test_adaptAPIMethodsV1(t *testing.T) {
    12  	tests := []struct {
    13  		name      string
    14  		terraform string
    15  		expected  []v1.Method
    16  	}{
    17  		{
    18  			name: "defaults",
    19  			terraform: `
    20  resource "aws_api_gateway_rest_api" "MyDemoAPI" {
    21    name        = "MyDemoAPI"
    22    description = "This is my API for demonstration purposes"
    23  }
    24  
    25  resource "aws_api_gateway_resource" "example" {
    26      rest_api_id = aws_api_gateway_rest_api.MyDemoAPI.id
    27  }
    28  
    29  resource "aws_api_gateway_method" "example" {
    30      rest_api_id = aws_api_gateway_rest_api.MyDemoAPI.id
    31  	resource_id = aws_api_gateway_resource.example.id
    32      http_method      = "GET"
    33      authorization    = "NONE"
    34  }
    35  `,
    36  			expected: []v1.Method{
    37  				{
    38  					HTTPMethod:        String("GET"),
    39  					AuthorizationType: String("NONE"),
    40  					APIKeyRequired:    Bool(false),
    41  				},
    42  			},
    43  		},
    44  		{
    45  			name: "basic",
    46  			terraform: `
    47  resource "aws_api_gateway_rest_api" "MyDemoAPI" {
    48    name        = "MyDemoAPI"
    49    description = "This is my API for demonstration purposes"
    50  }
    51  
    52  resource "aws_api_gateway_resource" "example" {
    53      rest_api_id = aws_api_gateway_rest_api.MyDemoAPI.id
    54  }
    55  
    56  resource "aws_api_gateway_method" "example" {
    57      rest_api_id = aws_api_gateway_rest_api.MyDemoAPI.id
    58  	resource_id = aws_api_gateway_resource.example.id
    59      http_method      = "GET"
    60      authorization    = "NONE"
    61      api_key_required = true
    62  }
    63  `,
    64  			expected: []v1.Method{
    65  				{
    66  					HTTPMethod:        String("GET"),
    67  					AuthorizationType: String("NONE"),
    68  					APIKeyRequired:    Bool(true),
    69  				},
    70  			},
    71  		},
    72  	}
    73  
    74  	for _, test := range tests {
    75  		t.Run(test.name, func(t *testing.T) {
    76  			modules := tftestutil.CreateModulesFromSource(t, test.terraform, ".tf")
    77  			restApiBlock := modules.GetBlocks()[1]
    78  			adapted := adaptAPIMethodsV1(modules, restApiBlock)
    79  			testutil.AssertDefsecEqual(t, test.expected, adapted)
    80  		})
    81  	}
    82  }
    83  
    84  func Test_adaptAPIsV1(t *testing.T) {
    85  	tests := []struct {
    86  		name      string
    87  		terraform string
    88  		expected  []v1.API
    89  	}{
    90  		{
    91  			name: "defaults",
    92  			terraform: `
    93  resource "aws_api_gateway_rest_api" "example" {
    94      
    95  }
    96  `,
    97  			expected: []v1.API{
    98  				{
    99  					Name: String(""),
   100  				},
   101  			},
   102  		},
   103  		{
   104  			name: "full",
   105  			terraform: `
   106  resource "aws_api_gateway_rest_api" "example" {
   107     name = "tfsec" 
   108  }
   109  `,
   110  			expected: []v1.API{
   111  				{
   112  					Name: String("tfsec"),
   113  				},
   114  			},
   115  		},
   116  	}
   117  
   118  	for _, test := range tests {
   119  		t.Run(test.name, func(t *testing.T) {
   120  			modules := tftestutil.CreateModulesFromSource(t, test.terraform, ".tf")
   121  			adapted := adaptAPIsV1(modules)
   122  			testutil.AssertDefsecEqual(t, test.expected, adapted)
   123  		})
   124  	}
   125  }