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

Commit 0bbaf58

Browse files
authored
Features/productgroup (#352)
* [Creator] added product group * [Creator] added Tests for ProductGroup
1 parent c951d1d commit 0bbaf58

File tree

6 files changed

+99
-3
lines changed

6 files changed

+99
-3
lines changed

src/APIM_ARMTemplate/apimtemplate.test/Creator/TemplateCreatorFactories/ProductTemplateCreatorFactory.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ public class ProductTemplateCreatorFactory
88
public static ProductTemplateCreator GenerateProductTemplateCreator()
99
{
1010
PolicyTemplateCreator policyTemplateCreator = PolicyTemplateCreatorFactory.GeneratePolicyTemplateCreator();
11-
ProductTemplateCreator productTemplateCreator = new ProductTemplateCreator(policyTemplateCreator);
11+
ProductGroupTemplateCreator productGroupTemplateCreator = new ProductGroupTemplateCreator();
12+
ProductTemplateCreator productTemplateCreator = new ProductTemplateCreator(policyTemplateCreator, productGroupTemplateCreator);
1213
return productTemplateCreator;
1314
}
1415
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
using System.Collections.Generic;
2+
using Xunit;
3+
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common;
4+
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Create;
5+
6+
namespace Microsoft.Azure.Management.ApiManagement.ArmTemplates.Test
7+
{
8+
public class ProductGroupTemplateCreatorTests
9+
{
10+
[Fact]
11+
public void ShouldCreateProductGroupTemplateResourceFromValues()
12+
{
13+
// arrange
14+
ProductGroupTemplateCreator productgroupTemplateCreator = new ProductGroupTemplateCreator();
15+
string groupName = "groupName";
16+
string productName = "productName";
17+
string[] dependsOn = new string[] { "dependsOn" };
18+
19+
// act
20+
ProductGroupsValue productGroupTemplateResource = productgroupTemplateCreator.CreateProductGroupTemplateResource(groupName, productName, dependsOn);
21+
22+
// assert
23+
Assert.Equal($"[concat(parameters('ApimServiceName'), '/{productName}/{groupName}')]", productGroupTemplateResource.name);
24+
Assert.Equal(dependsOn, productGroupTemplateResource.dependsOn);
25+
}
26+
27+
[Fact]
28+
public void ShouldCreateCorrectNumberOfProductGroupTemplateResourcesFromCreatorConfig()
29+
{
30+
// arrange
31+
ProductGroupTemplateCreator productgroupTemplateCreator = new ProductGroupTemplateCreator();
32+
ProductConfig config = new ProductConfig()
33+
{
34+
groups = "1, 2, 3"
35+
};
36+
int count = 3;
37+
string[] dependsOn = new string[] { "dependsOn" };
38+
39+
// act
40+
List<ProductGroupsValue> productAPITemplateResources = productgroupTemplateCreator.CreateProductGroupTemplateResources(config, dependsOn);
41+
42+
// assert
43+
Assert.Equal(count, productAPITemplateResources.Count);
44+
45+
}
46+
}
47+
}

src/APIM_ARMTemplate/apimtemplate/Commands/Create.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,10 @@ public CreateCommand()
4444
ProductAPITemplateCreator productAPITemplateCreator = new ProductAPITemplateCreator();
4545
TagAPITemplateCreator tagAPITemplateCreator = new TagAPITemplateCreator();
4646
PolicyTemplateCreator policyTemplateCreator = new PolicyTemplateCreator(fileReader);
47+
ProductGroupTemplateCreator productGroupTemplateCreator = new ProductGroupTemplateCreator();
4748
DiagnosticTemplateCreator diagnosticTemplateCreator = new DiagnosticTemplateCreator();
4849
ReleaseTemplateCreator releaseTemplateCreator = new ReleaseTemplateCreator();
49-
ProductTemplateCreator productTemplateCreator = new ProductTemplateCreator(policyTemplateCreator);
50+
ProductTemplateCreator productTemplateCreator = new ProductTemplateCreator(policyTemplateCreator, productGroupTemplateCreator);
5051
TagTemplateCreator tagTemplateCreator = new TagTemplateCreator();
5152
APITemplateCreator apiTemplateCreator = new APITemplateCreator(fileReader, policyTemplateCreator, productAPITemplateCreator, tagAPITemplateCreator, diagnosticTemplateCreator, releaseTemplateCreator);
5253
MasterTemplateCreator masterTemplateCreator = new MasterTemplateCreator();

src/APIM_ARMTemplate/apimtemplate/Creator/Models/CreatorConfiguration.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@ public class ProductConfig : ProductsTemplateProperties
8484
{
8585
// policy file location (local or url)
8686
public string policy { get; set; }
87+
// coma separated names
88+
public string groups { get; set; }
8789
}
8890

8991
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
using System.Collections.Generic;
2+
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common;
3+
4+
namespace Microsoft.Azure.Management.ApiManagement.ArmTemplates.Create
5+
{
6+
public class ProductGroupTemplateCreator
7+
{
8+
public ProductGroupsValue CreateProductGroupTemplateResource(string groupName, string productName, string[] dependsOn)
9+
{
10+
// create products/apis resource with properties
11+
ProductGroupsValue productAPITemplateResource = new ProductGroupsValue()
12+
{
13+
name = $"[concat(parameters('{ParameterNames.ApimServiceName}'), '/{productName}/{groupName}')]",
14+
type = ResourceTypeConstants.ProductGroup,
15+
apiVersion = GlobalConstants.APIVersion,
16+
dependsOn = dependsOn
17+
};
18+
return productAPITemplateResource;
19+
}
20+
21+
public List<ProductGroupsValue> CreateProductGroupTemplateResources(ProductConfig product, string[] dependsOn)
22+
{
23+
// create a products/apis association resource for each product provided in the config file
24+
List<ProductGroupsValue> productGroupTemplates = new List<ProductGroupsValue>();
25+
// products is comma separated list of productIds
26+
string[] groupNames = product.groups.Split(", ");
27+
foreach (string groupName in groupNames)
28+
{
29+
ProductGroupsValue productAPITemplate = this.CreateProductGroupTemplateResource(groupName, product.displayName, dependsOn);
30+
productGroupTemplates.Add(productAPITemplate);
31+
}
32+
return productGroupTemplates;
33+
}
34+
}
35+
}

src/APIM_ARMTemplate/apimtemplate/Creator/TemplateCreators/ProductTemplateCreator.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@ namespace Microsoft.Azure.Management.ApiManagement.ArmTemplates.Create
66
public class ProductTemplateCreator : TemplateCreator
77
{
88
private PolicyTemplateCreator policyTemplateCreator;
9+
private ProductGroupTemplateCreator productGroupTemplateCreator;
910

10-
public ProductTemplateCreator(PolicyTemplateCreator policyTemplateCreator)
11+
public ProductTemplateCreator(PolicyTemplateCreator policyTemplateCreator,ProductGroupTemplateCreator productGroupTemplateCreator)
1112
{
1213
this.policyTemplateCreator = policyTemplateCreator;
14+
this.productGroupTemplateCreator = productGroupTemplateCreator;
1315
}
1416

1517
public Template CreateProductTemplate(CreatorConfig creatorConfig)
@@ -53,6 +55,14 @@ public Template CreateProductTemplate(CreatorConfig creatorConfig)
5355
PolicyTemplateResource productPolicy = this.policyTemplateCreator.CreateProductPolicyTemplateResource(product, dependsOn);
5456
resources.Add(productPolicy);
5557
}
58+
59+
// create product group resources if provided
60+
if(product.groups != null)
61+
{
62+
string[] dependsOn = new string[] { $"[resourceId('Microsoft.ApiManagement/service/products', parameters('{ParameterNames.ApimServiceName}'), '{product.displayName}')]" };
63+
List<ProductGroupsValue> productGroups = this.productGroupTemplateCreator.CreateProductGroupTemplateResources(product, dependsOn);
64+
resources.AddRange(productGroups);
65+
}
5666
}
5767

5868
productTemplate.resources = resources.ToArray();

0 commit comments

Comments
 (0)