Skip to content
This repository was archived by the owner on Feb 23, 2024. It is now read-only.

Commit e8c8075

Browse files
f-alizadaFarhad Alizada
andauthored
Add contact and termsOfService properties to API template (#851)
Co-authored-by: Farhad Alizada <falizada@microsoft.com>
1 parent 1f30504 commit e8c8075

File tree

4 files changed

+109
-0
lines changed

4 files changed

+109
-0
lines changed

src/ArmTemplates/Common/Templates/Apis/ApiProperties.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,5 +52,9 @@ public class ApiProperties
5252
public ApiTemplateWSDLSelector WsdlSelector { get; set; }
5353

5454
public string ApiType { get; set; }
55+
56+
public string TermsOfServiceUrl { get; set; }
57+
58+
public ApiTemplateContact Contact { get; set; }
5559
}
5660
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// --------------------------------------------------------------------------
2+
// Copyright (c) Microsoft Corporation. All rights reserved.
3+
// Licensed under the MIT License.
4+
// --------------------------------------------------------------------------
5+
6+
namespace Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.Templates.Apis
7+
{
8+
public class ApiTemplateContact
9+
{
10+
public string Email { get; set; }
11+
12+
public string Name { get; set; }
13+
14+
public string Url { get; set; }
15+
}
16+
}

tests/ArmTemplates.Tests/Extractor/Scenarios/ApiExtractorTests.cs

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,10 @@
1111
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Commands.Executors;
1212
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.Constants;
1313
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.FileHandlers;
14+
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.Templates.ApiOperations;
1415
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.Templates.Builders;
1516
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Extractor.EntityExtractors;
17+
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Extractor.EntityExtractors.Abstractions;
1618
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Extractor.Models;
1719
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Tests.Extractor.Abstractions;
1820
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Tests.Moqs.ApiClients;
@@ -298,5 +300,65 @@ public async Task GenerateApiTemplateAsync_WebsocketApiTypeOperationsNotGenerate
298300
apiTemplate.TypedResources.ApiOperationsTags.Count().Should().Be(6);
299301
apiTemplate.TypedResources.ApiOperationsPolicies.Count().Should().Be(3);
300302
}
303+
304+
[Fact]
305+
public async Task GenerateApiTemplateAsync_ContainsContactAndTermOfService_Information()
306+
{
307+
// arrange
308+
var currentTestDirectory = Path.Combine(this.OutputDirectory, nameof(GenerateApiTemplateAsync_ContainsContactAndTermOfService_Information));
309+
310+
var extractorConfig = this.GetDefaultExtractorConsoleAppConfiguration(
311+
multipleAPIs: string.Empty,
312+
apiVersionSetName: string.Empty,
313+
apiName: "apiName"
314+
);
315+
316+
var extractorParameters = new ExtractorParameters(extractorConfig);
317+
318+
// mocked clients
319+
var responseFileLocation = Path.Combine(MockClientUtils.ApiClientJsonResponsesPath, "ApiManagementGetApiContract_success_response.json");
320+
var mockedApiClientAllCurrent = await MockApisClient.GetMockedHttpApiClient(new MockClientConfiguration(responseFileLocation: responseFileLocation));
321+
322+
// mocked extractors
323+
var mockedDiagnosticExtractor = new Mock<IDiagnosticExtractor>(MockBehavior.Loose);
324+
var mockedApiSchemaExtractor = new Mock<IApiSchemaExtractor>(MockBehavior.Loose);
325+
var mockedPolicyExtractor = new Mock<IPolicyExtractor>(MockBehavior.Loose);
326+
var mockedProductApisExtractor = new Mock<IProductApisExtractor>(MockBehavior.Loose);
327+
var mockedTagExtractor = new Mock<ITagExtractor>(MockBehavior.Loose);
328+
var mockedApiOperationExtractor = new Mock<IApiOperationExtractor>(MockBehavior.Loose);
329+
mockedApiOperationExtractor.Setup(
330+
x => x.GenerateApiOperationsResourcesAsync(It.IsAny<string>(), It.IsAny<ExtractorParameters>())
331+
).ReturnsAsync(new List<ApiOperationTemplateResource>());
332+
333+
334+
var apiExtractor = new ApiExtractor(
335+
this.GetTestLogger<ApiExtractor>(),
336+
new TemplateBuilder(),
337+
mockedApiClientAllCurrent,
338+
mockedDiagnosticExtractor.Object,
339+
mockedApiSchemaExtractor.Object,
340+
mockedPolicyExtractor.Object,
341+
mockedProductApisExtractor.Object,
342+
mockedTagExtractor.Object,
343+
mockedApiOperationExtractor.Object,
344+
null
345+
);
346+
347+
// act
348+
var apiTemplate = await apiExtractor.GenerateSingleApiTemplateResourcesAsync(
349+
singleApiName: "api-contract-and-terms",
350+
currentTestDirectory,
351+
extractorParameters);
352+
353+
// assert
354+
apiTemplate.Apis.Should().NotBeNull();
355+
apiTemplate.Apis.Count.Should().Be(1);
356+
apiTemplate.Apis[0].Name.Contains("api-contract-and-terms").Should().BeTrue();
357+
apiTemplate.Apis[0].Properties.Contact.Should().NotBeNull();
358+
apiTemplate.Apis[0].Properties.Contact.Name.Should().Be("name-value");
359+
apiTemplate.Apis[0].Properties.Contact.Email.Should().Be("email-value");
360+
apiTemplate.Apis[0].Properties.Contact.Url.Should().Be("url-value");
361+
apiTemplate.Apis[0].Properties.TermsOfServiceUrl.Should().Be("test-url-value");
362+
}
301363
}
302364
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
{
2+
"id": "/subscriptions/subid/resourceGroups/rg1/providers/Microsoft.ApiManagement/service/apimService1/apis/api-contract-and-terms",
3+
"type": "Microsoft.ApiManagement/service/apis",
4+
"name": "api-contract-and-terms",
5+
"properties": {
6+
"displayName": "Service",
7+
"apiRevision": "1",
8+
"serviceUrl": "https://api.plexonline.com/DataSource/Service.asmx",
9+
"path": "schulte",
10+
"protocols": [
11+
"https"
12+
],
13+
"subscriptionKeyParameterNames": {
14+
"header": "Ocp-Apim-Subscription-Key",
15+
"query": "subscription-key"
16+
},
17+
"type": "soap",
18+
"isCurrent": true,
19+
"isOnline": true,
20+
"contact": {
21+
"email": "email-value",
22+
"name": "name-value",
23+
"url": "url-value"
24+
},
25+
"termsOfServiceUrl": "test-url-value"
26+
}
27+
}

0 commit comments

Comments
 (0)