Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions source/AAS.TwinEngine.DataEngine/appsettings.development.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,6 @@
},
"TemplateMappingRules": {
"SubmodelTemplateMappings": [
{
"templateId": "https://admin-shell.io/idta/SubmodelTemplate/Reliability/1/0",
"pattern": [ "Reliability" ]
},
{
"templateId": "https://admin-shell.io/idta/SubmodelTemplate/DigitalNameplate/3/0",
"pattern": [ "Nameplate" ]
Expand All @@ -64,6 +60,10 @@
{
"templateId": "https://admin-shell.io/idta/SubmodelTemplate/HandoverDocumentation/2/0",
"pattern": [ "HandoverDocumentation" ]
},
{
"templateId": "https://admin-shell.io/idta/CustomSubmodel/Template/0/1",
"pattern": [ "CustomSubmodel" ]
}
],
"ShellTemplateMappings": [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,31 +43,28 @@
<None Update="SubmodelRegistry\TestData\GetSubmodelDescriptorById_Contact_Expected.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="SubmodelRegistry\TestData\GetSubmodelDescriptorById_Nameplate_Expected.json">
<None Update="SubmodelRegistry\TestData\GetSubmodelDescriptorById_HandoverDocumentation_Expected.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="SubmodelRegistry\TestData\GetSubmodelDescriptorById_Reliability_Expected.json">
<None Update="SubmodelRegistry\TestData\GetSubmodelDescriptorById_CustomSubmodel_Expected.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="SubmodelRepository\TestData\GetSubmodelElement_ContactInfo_ContactInformation_Expected.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="SubmodelRepository\TestData\GetSubmodelElement_Nameplate_ManufacturerName_Expected.json">
<None Update="SubmodelRepository\TestData\GetSubmodelElement_HandoverDocumentation_Documents0_DocumentVersions0_Language0.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="SubmodelRepository\TestData\GetSubmodelElement_Nameplate_Markings_Expected.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="SubmodelRepository\TestData\GetSubmodelElement_Reliability_ReliabilityCharacteristics_MTTF.json">
<None Update="SubmodelRepository\TestData\GetSubmodelElement_CustomSubmodel_OperatingConditionsOfReliabilityCharacteristics.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="SubmodelRepository\TestData\GetSubmodel_ContactInfo_Expected.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="SubmodelRepository\TestData\GetSubmodel_Nameplate_Expected.json">
<None Update="SubmodelRepository\TestData\GetSubmodel_HandoverDocumentation_Expected.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="SubmodelRepository\TestData\GetSubmodel_Reliability_Expected.json">
<None Update="SubmodelRepository\TestData\GetSubmodel_CustomSubmodel_Expected.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
"keys": [
{
"type": "Submodel",
"value": "https://mm-software.com/submodel/000-001/Nameplate"
"value": "https://mm-software.com/submodel/000-001/CustomSubmodel"
}
]
},
Expand All @@ -33,7 +33,7 @@
"keys": [
{
"type": "Submodel",
"value": "https://mm-software.com/submodel/000-001/Reliability"
"value": "https://mm-software.com/submodel/000-001/HandoverDocumentation"
}
]
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"keys": [
{
"type": "Submodel",
"value": "https://mm-software.com/submodel/000-001/Nameplate"
"value": "https://mm-software.com/submodel/000-001/CustomSubmodel"
}
]
},
Expand All @@ -29,7 +29,7 @@
"keys": [
{
"type": "Submodel",
"value": "https://mm-software.com/submodel/000-001/Reliability"
"value": "https://mm-software.com/submodel/000-001/HandoverDocumentation"
}
]
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,13 @@
private static readonly JsonSerializerOptions JsonSerializerOptions = new() { WriteIndented = false };

protected IAPIRequestContext ApiContext { get; private set; } = null!;
protected string BaseUrl { get; private set; } = Environment.GetEnvironmentVariable("BASE_URL") ?? "http://localhost:8085";

Check warning on line 16 in source/AAS.TwinEngine.Plugin.TestPlugin.PlaywrightTests/ApiTestBase.cs

View workflow job for this annotation

GitHub Actions / Build & Test

Change the type of property 'ApiTestBase.BaseUrl' from 'string' to 'System.Uri' (https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1056)

Check warning on line 16 in source/AAS.TwinEngine.Plugin.TestPlugin.PlaywrightTests/ApiTestBase.cs

View workflow job for this annotation

GitHub Actions / Run Playwright Tests

Change the type of property 'ApiTestBase.BaseUrl' from 'string' to 'System.Uri' (https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1056)

// Base64 encoded identifiers
protected string AasIdentifier { get; private set; } = null!;
protected string SubmodelIdentifierContact { get; private set; } = null!;
protected string SubmodelIdentifierNameplate { get; private set; } = null!;
protected string SubmodelIdentifierReliability { get; private set; } = null!;
protected string SubmodelIdentifierHandoverDocumentation { get; private set; } = null!;
protected string SubmodelIdentifierCustomSubmodel { get; private set; } = null!;

public async Task InitializeAsync()
{
Expand All @@ -40,8 +40,8 @@
// Initialize base64 encoded identifiers
AasIdentifier = Base64EncodeUrl("https://mm-software.com/ids/aas/000-001");
SubmodelIdentifierContact = Base64EncodeUrl("https://mm-software.com/submodel/000-001/ContactInformation");
SubmodelIdentifierNameplate = Base64EncodeUrl("https://mm-software.com/submodel/000-001/Nameplate");
SubmodelIdentifierReliability = Base64EncodeUrl("https://mm-software.com/submodel/000-001/Reliability");
SubmodelIdentifierHandoverDocumentation = Base64EncodeUrl("https://mm-software.com/submodel/000-001/HandoverDocumentation");
SubmodelIdentifierCustomSubmodel = Base64EncodeUrl("https://mm-software.com/submodel/000-001/CustomSubmodel");
}

public async Task DisposeAsync() => await ApiContext.DisposeAsync();
Expand All @@ -49,7 +49,7 @@
/// <summary>
/// Base64 URL encodes a string
/// </summary>
public static string Base64EncodeUrl(string str)

Check warning on line 52 in source/AAS.TwinEngine.Plugin.TestPlugin.PlaywrightTests/ApiTestBase.cs

View workflow job for this annotation

GitHub Actions / Build & Test

Change the return type of method 'ApiTestBase.Base64EncodeUrl(string)' from 'string' to 'System.Uri' (https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1055)

Check warning on line 52 in source/AAS.TwinEngine.Plugin.TestPlugin.PlaywrightTests/ApiTestBase.cs

View workflow job for this annotation

GitHub Actions / Run Playwright Tests

Change the return type of method 'ApiTestBase.Base64EncodeUrl(string)' from 'string' to 'System.Uri' (https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1055)
{
var bytes = Encoding.UTF8.GetBytes(str);
return Convert.ToBase64String(bytes);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,18 @@ public async Task GetSubmodelDescriptorById_Contact_ShouldReturnSuccess_ContentA
AssertSuccessResponse(response);
var content = await response.TextAsync();
Assert.False(string.IsNullOrEmpty(content));

var json = JsonDocument.Parse(content);
Assert.NotNull(json);

await CompareJsonAsync(json, Path.Combine(Directory.GetCurrentDirectory(), "SubmodelRegistry", "TestData", "GetSubmodelDescriptorById_Contact_Expected.json"));
}

[Fact]
public async Task GetSubmodelDescriptorById_Nameplate_ShouldReturnSuccess_ContentAsExpected()
public async Task GetSubmodelDescriptorById_HandoverDocumentation_ShouldReturnSuccess_ContentAsExpected()
{
// Arrange
var url = $"/submodel-descriptors/{SubmodelIdentifierNameplate}";
var url = $"/submodel-descriptors/{SubmodelIdentifierHandoverDocumentation}";

// Act
var response = await ApiContext.GetAsync(url);
Expand All @@ -40,18 +40,18 @@ public async Task GetSubmodelDescriptorById_Nameplate_ShouldReturnSuccess_Conten
AssertSuccessResponse(response);
var content = await response.TextAsync();
Assert.False(string.IsNullOrEmpty(content));

var json = JsonDocument.Parse(content);
Assert.NotNull(json);

await CompareJsonAsync(json, Path.Combine(Directory.GetCurrentDirectory(), "SubmodelRegistry", "TestData", "GetSubmodelDescriptorById_Nameplate_Expected.json"));
await CompareJsonAsync(json, Path.Combine(Directory.GetCurrentDirectory(), "SubmodelRegistry", "TestData", "GetSubmodelDescriptorById_HandoverDocumentation_Expected.json"));
}

[Fact]
public async Task GetSubmodelDescriptorById_Reliability_ShouldReturnSuccess_ContentAsExpected()
public async Task GetSubmodelDescriptorById_CustomSubmodel_ShouldReturnSuccess_ContentAsExpected()
{
// Arrange
var url = $"/submodel-descriptors/{SubmodelIdentifierReliability}";
var url = $"/submodel-descriptors/{SubmodelIdentifierCustomSubmodel}";

// Act
var response = await ApiContext.GetAsync(url);
Expand All @@ -60,10 +60,10 @@ public async Task GetSubmodelDescriptorById_Reliability_ShouldReturnSuccess_Cont
AssertSuccessResponse(response);
var content = await response.TextAsync();
Assert.False(string.IsNullOrEmpty(content));

var json = JsonDocument.Parse(content);
Assert.NotNull(json);

await CompareJsonAsync(json, Path.Combine(Directory.GetCurrentDirectory(), "SubmodelRegistry", "TestData", "GetSubmodelDescriptorById_Reliability_Expected.json"));
await CompareJsonAsync(json, Path.Combine(Directory.GetCurrentDirectory(), "SubmodelRegistry", "TestData", "GetSubmodelDescriptorById_CustomSubmodel_Expected.json"));
}
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
{
"description": null,
"description": [
{
"language": null,
"text": null
}
],
"displayName": null,
"extensions": null,
"administration": {
"embeddedDataSpecifications": null,
"version": null,
"revision": null,
"creator": null,
"templateId": null
},
"idShort": "Reliability",
"id": "https://mm-software.com/submodel/000-001/Reliability",
"administration": null,
"idShort": "CustomSubmodel",
"id": "https://mm-software.com/submodel/000-001/CustomSubmodel",
"semanticId": {
"type": 0,
"referredSemanticId": null,
Expand All @@ -21,7 +20,7 @@
{
"interface": "SUBMODEL-3.0",
"protocolInformation": {
"href": "http://localhost:8080/submodels/aHR0cHM6Ly9tbS1zb2Z0d2FyZS5jb20vc3VibW9kZWwvMDAwLTAwMS9SZWxpYWJpbGl0eQ",
"href": "http://localhost:8080/submodels/aHR0cHM6Ly9tbS1zb2Z0d2FyZS5jb20vc3VibW9kZWwvMDAwLTAwMS9DdXN0b21TdWJtb2RlbA",
"endpointProtocol": "http",
"endpointProtocolVersion": null,
"subprotocol": null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,19 +14,25 @@
"creator": null,
"templateId": null
},
"idShort": "Nameplate",
"id": "https://mm-software.com/submodel/000-001/Nameplate",
"idShort": "HandoverDocumentation",
"id": "https://mm-software.com/submodel/000-001/HandoverDocumentation",
"semanticId": {
"type": 0,
"referredSemanticId": null,
"keys": null
},
"supplementalSemanticId": null,
"supplementalSemanticId": [
{
"type": 0,
"referredSemanticId": null,
"keys": null
}
],
"endpoints": [
{
"interface": "SUBMODEL-3.0",
"protocolInformation": {
"href": "http://localhost:8080/submodels/aHR0cHM6Ly9tbS1zb2Z0d2FyZS5jb20vc3VibW9kZWwvMDAwLTAwMS9OYW1lcGxhdGU",
"href": "http://localhost:8080/submodels/aHR0cHM6Ly9tbS1zb2Z0d2FyZS5jb20vc3VibW9kZWwvMDAwLTAwMS9IYW5kb3ZlckRvY3VtZW50YXRpb24",
"endpointProtocol": "http",
"endpointProtocolVersion": null,
"subprotocol": null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ public async Task GetAppropriateSerialization_WithMultipleSubmodels_ShouldReturn
var url = $"/serialization" +
$"?aasIds={AasIdentifier}" +
$"&submodelIds={SubmodelIdentifierContact}" +
$"&submodelIds={SubmodelIdentifierNameplate}" +
$"&submodelIds={SubmodelIdentifierReliability}" +
$"&submodelIds={SubmodelIdentifierHandoverDocumentation}" +
$"&submodelIds={SubmodelIdentifierCustomSubmodel}" +
$"&includeConceptDescriptions=false";

// Act
Expand All @@ -22,7 +22,7 @@ public async Task GetAppropriateSerialization_WithMultipleSubmodels_ShouldReturn

Assert.False(string.IsNullOrEmpty(content));

Assert.Contains("https://mm-software.com/submodel/000-001/Nameplate", content, System.StringComparison.Ordinal);
Assert.Contains("https://mm-software.com/submodel/000-003/HandoverDocumentation", content, System.StringComparison.Ordinal);
Assert.Contains("https://admin-shell.io/zvei/nameplate/1/0/ContactInformations/ContactInformation", content, System.StringComparison.Ordinal);
Assert.Contains("http://schemas.openxmlformats.org/package/2006/relationships", content, System.StringComparison.Ordinal);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,10 @@ public async Task GetSubmodelElement_ContactInfo_ContactInformation_ShouldReturn
}

[Fact]
public async Task GetSubmodelElement_Nameplate_Markings_ShouldReturnSuccess_ContentAsExpected()
public async Task GetSubmodelElement_HandoverDocumentation_Documents0_DocumentVersions0_Language0_ShouldReturnSuccess_ContentAsExpected()
{
// Arrange
var url = $"/submodels/{SubmodelIdentifierNameplate}/submodel-elements/Markings";
var url = $"/submodels/{SubmodelIdentifierHandoverDocumentation}/submodel-elements/Documents%255B0%255D.DocumentVersions%255B0%255D.Language%255B0%255D";

// Act
var response = await ApiContext.GetAsync(url);
Expand All @@ -44,14 +44,14 @@ public async Task GetSubmodelElement_Nameplate_Markings_ShouldReturnSuccess_Cont
var json = JsonDocument.Parse(content);
Assert.NotNull(json);

await CompareJsonAsync(json, Path.Combine(Directory.GetCurrentDirectory(), "SubmodelRepository", "TestData", "GetSubmodelElement_Nameplate_Markings_Expected.json"));
await CompareJsonAsync(json, Path.Combine(Directory.GetCurrentDirectory(), "SubmodelRepository", "TestData", "GetSubmodelElement_HandoverDocumentation_Documents0_DocumentVersions0_Language0.json"));
}

[Fact]
public async Task GetSubmodelElement_Nameplate_ManufacturerName_ShouldReturnSuccess_ContentAsExpected()
public async Task GetSubmodelElement_CustomSubmodel_OperatingConditionsOfReliabilityCharacteristics_ShouldReturnSuccess_ContentAsExpected()
{
// Arrange
var url = $"/submodels/{SubmodelIdentifierNameplate}/submodel-elements/ManufacturerName";
var url = $"/submodels/{SubmodelIdentifierCustomSubmodel}/submodel-elements/OperatingConditionsOfReliabilityCharacteristics";

// Act
var response = await ApiContext.GetAsync(url);
Expand All @@ -64,26 +64,6 @@ public async Task GetSubmodelElement_Nameplate_ManufacturerName_ShouldReturnSucc
var json = JsonDocument.Parse(content);
Assert.NotNull(json);

await CompareJsonAsync(json, Path.Combine(Directory.GetCurrentDirectory(), "SubmodelRepository", "TestData", "GetSubmodelElement_Nameplate_ManufacturerName_Expected.json"));
}

[Fact]
public async Task GetSubmodelElement_Reliability_ReliabilityCharacteristics_MTTF_ShouldReturnSuccess_ContentAsExpected()
{
// Arrange
var url = $"/submodels/{SubmodelIdentifierReliability}/submodel-elements/ReliabilityCharacteristics.MTTF";

// Act
var response = await ApiContext.GetAsync(url);

// Assert
AssertSuccessResponse(response);
var content = await response.TextAsync();
Assert.False(string.IsNullOrEmpty(content));

var json = JsonDocument.Parse(content);
Assert.NotNull(json);

await CompareJsonAsync(json, Path.Combine(Directory.GetCurrentDirectory(), "SubmodelRepository", "TestData", "GetSubmodelElement_Reliability_ReliabilityCharacteristics_MTTF.json"));
await CompareJsonAsync(json, Path.Combine(Directory.GetCurrentDirectory(), "SubmodelRepository", "TestData", "GetSubmodelElement_CustomSubmodel_OperatingConditionsOfReliabilityCharacteristics.json"));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@ namespace AAS.TwinEngine.Plugin.TestPlugin.PlaywrightTests.SubmodelRepository;
public class SubmodelTests : ApiTestBase
{
[Fact]
public async Task GetSubmodel_Nameplate_ShouldReturnSuccess_ContentAsExpected()
public async Task GetSubmodel_ContactInfo_ShouldReturnSuccess_ContentAsExpected()
{
// Arrange
var url = $"/submodels/{SubmodelIdentifierNameplate}/";
var url = $"/submodels/{SubmodelIdentifierContact}/";

// Act
var response = await ApiContext.GetAsync(url);
Expand All @@ -20,18 +20,18 @@ public async Task GetSubmodel_Nameplate_ShouldReturnSuccess_ContentAsExpected()
AssertSuccessResponse(response);
var content = await response.TextAsync();
Assert.False(string.IsNullOrEmpty(content));

var json = JsonDocument.Parse(content);
Assert.NotNull(json);

await CompareJsonAsync(json, Path.Combine(Directory.GetCurrentDirectory(), "SubmodelRepository", "TestData", "GetSubmodel_Nameplate_Expected.json"));
await CompareJsonAsync(json, Path.Combine(Directory.GetCurrentDirectory(), "SubmodelRepository", "TestData", "GetSubmodel_ContactInfo_Expected.json"));
}

[Fact]
public async Task GetSubmodel_ContactInfo_ShouldReturnSuccess_ContentAsExpected()
public async Task GetSubmodel_HandoverDocumentation_ShouldReturnSuccess_ContentAsExpected()
{
// Arrange
var url = $"/submodels/{SubmodelIdentifierContact}/";
var url = $"/submodels/{SubmodelIdentifierHandoverDocumentation}/";

// Act
var response = await ApiContext.GetAsync(url);
Expand All @@ -40,18 +40,18 @@ public async Task GetSubmodel_ContactInfo_ShouldReturnSuccess_ContentAsExpected(
AssertSuccessResponse(response);
var content = await response.TextAsync();
Assert.False(string.IsNullOrEmpty(content));

var json = JsonDocument.Parse(content);
Assert.NotNull(json);

await CompareJsonAsync(json, Path.Combine(Directory.GetCurrentDirectory(), "SubmodelRepository", "TestData", "GetSubmodel_ContactInfo_Expected.json"));
await CompareJsonAsync(json, Path.Combine(Directory.GetCurrentDirectory(), "SubmodelRepository", "TestData", "GetSubmodel_HandoverDocumentation_Expected.json"));
}

[Fact]
public async Task GetSubmodel_Reliability_ShouldReturnSuccess_ContentAsExpected()
public async Task GetSubmodel_CustomSubmodel_ShouldReturnSuccess_ContentAsExpected()
{
// Arrange
var url = $"/submodels/{SubmodelIdentifierReliability}/";
var url = $"/submodels/{SubmodelIdentifierCustomSubmodel}/";

// Act
var response = await ApiContext.GetAsync(url);
Expand All @@ -60,10 +60,10 @@ public async Task GetSubmodel_Reliability_ShouldReturnSuccess_ContentAsExpected(
AssertSuccessResponse(response);
var content = await response.TextAsync();
Assert.False(string.IsNullOrEmpty(content));

var json = JsonDocument.Parse(content);
Assert.NotNull(json);

await CompareJsonAsync(json, Path.Combine(Directory.GetCurrentDirectory(), "SubmodelRepository", "TestData", "GetSubmodel_Reliability_Expected.json"));
await CompareJsonAsync(json, Path.Combine(Directory.GetCurrentDirectory(), "SubmodelRepository", "TestData", "GetSubmodel_CustomSubmodel_Expected.json"));
}
}
Loading
Loading