github.com/Axway/agent-sdk@v1.1.101/pkg/apic/servicebuilder_test.go (about)

     1  package apic
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/assert"
     7  )
     8  
     9  const longDescription = `This is a sample Pet Store Server based on the OpenAPI 3.0 specification.  You can find out more about
    10  Swagger at [http://swagger.io](http://swagger.io). In the third iteration of the pet store, we've switched to the design first approach!
    11  You can now help us improve the API whether it's by making changes to the definition itself or to the code.
    12  That way, with time, we can improve the API in general, and expose some of the new features in OAS3.
    13  
    14  Some useful links:
    15  - [The Pet Store repository](https://github.com/swagger-api/swagger-petstore)
    16  - [The source API definition for the Pet Store](https://github.com/swagger-api/swagger-petstore/blob/master/src/main/resources/openapi.yaml)`
    17  
    18  func TestNewServiceBodyBuilder(t *testing.T) {
    19  	svcBody, err := NewServiceBodyBuilder().Build()
    20  	assert.NotNil(t, err) // service body does not build any spec for json or yaml, and no resource type
    21  	assert.NotNil(t, svcBody)
    22  
    23  	// test all the default values
    24  	assert.Equal(t, Passthrough, svcBody.AuthPolicy)
    25  	assert.Equal(t, PublishedState, svcBody.State)
    26  	assert.Equal(t, PublishedStatus, svcBody.Status)
    27  }
    28  
    29  func TestServiceBodySetters(t *testing.T) {
    30  	tags := map[string]interface{}{"tag1": "t1", "tag2": "t2"}
    31  	attribs := map[string]string{"attrib1": "a1", "attrib2": "a2"}
    32  	revAttr := map[string]string{"svc": "attr"}
    33  	instAttr := map[string]string{"inst": "attr"}
    34  	svcDetails := map[string]interface{}{"svc": "details"}
    35  	instDetails := map[string]interface{}{"inst": "details"}
    36  	revDetails := map[string]interface{}{"rev": "details"}
    37  	ep := []EndpointDefinition{
    38  		{
    39  			Protocol: "https",
    40  			Host:     "test.com",
    41  			Port:     443,
    42  			BasePath: "/test",
    43  		},
    44  	}
    45  
    46  	serviceBuilder := NewServiceBodyBuilder()
    47  	serviceBuilder = serviceBuilder.
    48  		SetTitle("sbtitle").
    49  		SetAPIName("testAPI").
    50  		SetID("1234").
    51  		SetPrimaryKey("PrimaryKey").
    52  		SetRequestDefinitionsAllowed(true).
    53  		SetStage("stageID").
    54  		SetStageDisplayName("teststage").
    55  		SetURL("https://1234.execute-api.us-region.amazonaws.com/teststage").
    56  		SetDescription(longDescription).
    57  		SetVersion("1.0.0").
    58  		SetAuthPolicy("Oauth").
    59  		SetAPISpec([]byte{}).
    60  		SetDocumentation([]byte("documentation")).
    61  		SetAPIUpdateSeverity("MAJOR").
    62  		SetStatus(UnpublishedStatus).
    63  		SetState(PublishedStatus).
    64  		SetSubscriptionName("testsubscription").
    65  		AddServiceEndpoint("https", "test.com", 443, "/test").
    66  		SetImage("image").
    67  		SetImageContentType("image/jpeg").
    68  		SetResourceType("foobar").
    69  		SetTags(tags).
    70  		SetServiceAttribute(attribs).
    71  		SetRevisionAttribute(revAttr).
    72  		SetInstanceAttribute(instAttr).
    73  		SetUnstructuredContentType("application/zip").
    74  		SetUnstructuredFilename("test.zip").
    75  		SetUnstructuredLabel("Label").
    76  		SetUnstructuredType("Type").
    77  		SetTeamName("00000").
    78  		SetServiceAgentDetails(svcDetails).
    79  		SetInstanceAgentDetails(instDetails).
    80  		SetRevisionAgentDetails(revDetails).
    81  		SetReferenceServiceName("refSvc", "refEnv").
    82  		SetReferenceInstanceName("refInstance", "refEnv").
    83  		SetIgnoreSpecBasedCreds(true)
    84  
    85  	sb, err := serviceBuilder.
    86  		SetServiceEndpoints(ep).
    87  		Build()
    88  
    89  	assert.Nil(t, err)
    90  	assert.NotNil(t, sb)
    91  	assert.Equal(t, "sbtitle", sb.NameToPush)
    92  	assert.Equal(t, "testAPI", sb.APIName)
    93  	assert.Equal(t, "1234", sb.RestAPIID)
    94  	assert.Equal(t, "PrimaryKey", sb.PrimaryKey)
    95  	assert.Equal(t, "stageID", sb.Stage)
    96  	assert.Equal(t, "teststage", sb.StageDisplayName)
    97  	assert.Equal(t, "https://1234.execute-api.us-region.amazonaws.com/teststage", sb.URL)
    98  	assert.Equal(t, 350, len(sb.Description))
    99  
   100  	description := longDescription[0:maxDescriptionLength-len(strEllipsis)] + strEllipsis
   101  	assert.Equal(t, description, sb.Description)
   102  	assert.Equal(t, "1.0.0", sb.Version)
   103  	assert.Equal(t, "Oauth", sb.AuthPolicy)
   104  	assert.Equal(t, UnpublishedStatus, sb.Status)
   105  	assert.Equal(t, PublishedStatus, sb.State)
   106  
   107  	assert.Equal(t, []byte{}, sb.SpecDefinition)
   108  	assert.Equal(t, []byte("documentation"), sb.Documentation)
   109  
   110  	assert.Equal(t, "image/jpeg", sb.ImageContentType)
   111  	assert.Equal(t, "image", sb.Image)
   112  	assert.Equal(t, Unstructured, sb.ResourceType)
   113  
   114  	assert.Equal(t, "MAJOR", sb.APIUpdateSeverity)
   115  	assert.Len(t, sb.Tags, 2)
   116  	assert.Equal(t, "t2", sb.Tags["tag2"])
   117  	assert.Len(t, sb.ServiceAttributes, 2)
   118  	assert.Equal(t, "a2", sb.ServiceAttributes["attrib2"])
   119  	assert.Equal(t, "application/zip", sb.UnstructuredProps.ContentType)
   120  	assert.Equal(t, "test.zip", sb.UnstructuredProps.Filename)
   121  	assert.Equal(t, "Label", sb.UnstructuredProps.Label)
   122  	assert.Equal(t, "Type", sb.UnstructuredProps.AssetType)
   123  	assert.Equal(t, "00000", sb.TeamName)
   124  	assert.Equal(t, ep, sb.Endpoints)
   125  	assert.Equal(t, revAttr, sb.RevisionAttributes)
   126  	assert.Equal(t, instAttr, sb.InstanceAttributes)
   127  	assert.Equal(t, svcDetails, sb.ServiceAgentDetails)
   128  	assert.Equal(t, instDetails, sb.InstanceAgentDetails)
   129  	assert.Equal(t, revDetails, sb.RevisionAgentDetails)
   130  	assert.Equal(t, Unidentified, sb.dataplaneType)
   131  	assert.Equal(t, false, sb.isDesignDataplane)
   132  	assert.Equal(t, "refEnv/refSvc", sb.GetReferencedServiceName())
   133  	assert.Equal(t, "refEnv/refInstance", sb.GetReferenceInstanceName())
   134  	assert.Equal(t, true, sb.ignoreSpecBasesCreds)
   135  
   136  	sb, err = serviceBuilder.
   137  		SetSourceDataplaneType(GitHub, true).
   138  		Build()
   139  
   140  	assert.Nil(t, err)
   141  	assert.NotNil(t, sb)
   142  	assert.Equal(t, GitHub, sb.dataplaneType)
   143  	assert.Equal(t, true, sb.isDesignDataplane)
   144  
   145  	// invalid service body path
   146  	ep[0].BasePath = "#/basepath"
   147  	sb, err = serviceBuilder.
   148  		SetServiceEndpoints(ep).
   149  		Build()
   150  
   151  	assert.NotNil(t, err)
   152  	assert.NotNil(t, sb)
   153  
   154  	// valid service body with empty path
   155  	ep[0].BasePath = ""
   156  	sb, err = serviceBuilder.
   157  		SetServiceEndpoints(ep).
   158  		Build()
   159  
   160  	assert.Nil(t, err)
   161  	assert.NotNil(t, sb)
   162  }
   163  
   164  func TestServiceBodyWithParseError(t *testing.T) {
   165  	serviceBuilder := NewServiceBodyBuilder()
   166  	_, err := serviceBuilder.SetResourceType(Oas3).SetAPISpec([]byte("{\"test\":\"123\"}")).Build()
   167  	assert.NotNil(t, err)
   168  
   169  	_, err = serviceBuilder.SetResourceType(Oas2).SetAPISpec([]byte("{\"test\":\"123\"}")).Build()
   170  	assert.NotNil(t, err)
   171  
   172  	_, err = serviceBuilder.SetResourceType(Wsdl).SetAPISpec([]byte("{\"test\":\"123\"}")).Build()
   173  	assert.NotNil(t, err)
   174  
   175  	_, err = serviceBuilder.SetResourceType(Protobuf).SetAPISpec([]byte("{\"test\":\"123\"}")).Build()
   176  	assert.NotNil(t, err)
   177  
   178  	_, err = serviceBuilder.SetResourceType(AsyncAPI).SetAPISpec([]byte("{\"test\":\"123\"}")).Build()
   179  	assert.NotNil(t, err)
   180  
   181  	_, err = serviceBuilder.SetResourceType(Unstructured).SetAPISpec([]byte("{\"test\":\"123\"}")).Build()
   182  	assert.Nil(t, err)
   183  }