diff --git a/VideoApi/Testing.Common/Testing.Common.csproj b/VideoApi/Testing.Common/Testing.Common.csproj
index 9f6902166..e1d7af33a 100644
--- a/VideoApi/Testing.Common/Testing.Common.csproj
+++ b/VideoApi/Testing.Common/Testing.Common.csproj
@@ -14,7 +14,7 @@
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/VideoApi/VideoApi.Common/VideoApi.Common.csproj b/VideoApi/VideoApi.Common/VideoApi.Common.csproj
index 43a0a3a8f..95236bb02 100644
--- a/VideoApi/VideoApi.Common/VideoApi.Common.csproj
+++ b/VideoApi/VideoApi.Common/VideoApi.Common.csproj
@@ -11,7 +11,7 @@
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/VideoApi/VideoApi.Common/packages.lock.json b/VideoApi/VideoApi.Common/packages.lock.json
index 0c8eccca2..230686e74 100644
--- a/VideoApi/VideoApi.Common/packages.lock.json
+++ b/VideoApi/VideoApi.Common/packages.lock.json
@@ -47,9 +47,9 @@
},
"SonarAnalyzer.CSharp": {
"type": "Direct",
- "requested": "[8.56.0.67649, )",
- "resolved": "8.56.0.67649",
- "contentHash": "u5klyn4PBAOe38/CoPbxGjuMqJQ5K0M7SA17H2DHgHyQ+neSU+abneRGjSQSVD76kbYXzG7E1/KQwTuj+nnMZw=="
+ "requested": "[9.12.0.78982, )",
+ "resolved": "9.12.0.78982",
+ "contentHash": "QxhfMFCNeZWP3gP/R8QM3MuDWm+Esj8Lt3oD61tid5TPuqsaKJtwMZNZWE2FOqqGuKlu3805o8MlkTWBL75skA=="
},
"System.IdentityModel.Tokens.Jwt": {
"type": "Direct",
diff --git a/VideoApi/VideoApi.Contract/Requests/BookNewConferenceRequest.cs b/VideoApi/VideoApi.Contract/Requests/BookNewConferenceRequest.cs
index 768d5a737..fa7c5476a 100644
--- a/VideoApi/VideoApi.Contract/Requests/BookNewConferenceRequest.cs
+++ b/VideoApi/VideoApi.Contract/Requests/BookNewConferenceRequest.cs
@@ -9,7 +9,8 @@ public BookNewConferenceRequest()
{
Endpoints = new List();
}
-
+
+ public string CaseTypeServiceId { get; set; }
public Guid HearingRefId { get; set; }
public string CaseType { get; set; }
public DateTime ScheduledDateTime { get; set; }
diff --git a/VideoApi/VideoApi.Contract/VideoApi.Contract.csproj b/VideoApi/VideoApi.Contract/VideoApi.Contract.csproj
index b47ad52f9..4b2f783ab 100644
--- a/VideoApi/VideoApi.Contract/VideoApi.Contract.csproj
+++ b/VideoApi/VideoApi.Contract/VideoApi.Contract.csproj
@@ -8,7 +8,7 @@
$(NoWarn);1591
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/VideoApi/VideoApi.DAL/VideoApi.DAL.csproj b/VideoApi/VideoApi.DAL/VideoApi.DAL.csproj
index 897f7058e..0ee9783ed 100644
--- a/VideoApi/VideoApi.DAL/VideoApi.DAL.csproj
+++ b/VideoApi/VideoApi.DAL/VideoApi.DAL.csproj
@@ -19,7 +19,7 @@
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/VideoApi/VideoApi.DAL/packages.lock.json b/VideoApi/VideoApi.DAL/packages.lock.json
index 1ef11cf7b..cbc2498ce 100644
--- a/VideoApi/VideoApi.DAL/packages.lock.json
+++ b/VideoApi/VideoApi.DAL/packages.lock.json
@@ -76,9 +76,9 @@
},
"SonarAnalyzer.CSharp": {
"type": "Direct",
- "requested": "[8.56.0.67649, )",
- "resolved": "8.56.0.67649",
- "contentHash": "u5klyn4PBAOe38/CoPbxGjuMqJQ5K0M7SA17H2DHgHyQ+neSU+abneRGjSQSVD76kbYXzG7E1/KQwTuj+nnMZw=="
+ "requested": "[9.12.0.78982, )",
+ "resolved": "9.12.0.78982",
+ "contentHash": "QxhfMFCNeZWP3gP/R8QM3MuDWm+Esj8Lt3oD61tid5TPuqsaKJtwMZNZWE2FOqqGuKlu3805o8MlkTWBL75skA=="
},
"Z.EntityFramework.Plus.EFCore": {
"type": "Direct",
@@ -153,6 +153,58 @@
"resolved": "2.8.26",
"contentHash": "OiKusGL20vby4uDEswj2IgkdchC1yQ6rwbIkZDVBPIR6al2b7n3pC91elBul9q33KaBgRKhbZH3+2Ur4fnWx2A=="
},
+ "LaunchDarkly.Cache": {
+ "type": "Transitive",
+ "resolved": "1.0.2",
+ "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw=="
+ },
+ "LaunchDarkly.CommonSdk": {
+ "type": "Transitive",
+ "resolved": "6.0.1",
+ "contentHash": "VznCYcyVawa93/hIv9i8mIGSskvMJ4rN9fkwkRU5GDnFlE69UFf2whQ5N3OrLmh4Or5dxJ0k7mnQEIxBf+eosw==",
+ "dependencies": {
+ "System.Collections.Immutable": "1.7.1"
+ }
+ },
+ "LaunchDarkly.EventSource": {
+ "type": "Transitive",
+ "resolved": "5.0.1",
+ "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==",
+ "dependencies": {
+ "LaunchDarkly.Logging": "[1.0.1, 3.0.0)"
+ }
+ },
+ "LaunchDarkly.InternalSdk": {
+ "type": "Transitive",
+ "resolved": "3.1.2",
+ "contentHash": "wag5BzohWxzrAQN6eH6PPevfHcTBSnsbdDF6EBMeaAxcTL6hRB8T/QU7AwfUIp941KzS9fQusFo9OJLm+ZQ6BA==",
+ "dependencies": {
+ "LaunchDarkly.CommonSdk": "6.0.1",
+ "LaunchDarkly.Logging": "[2.0.0, 3.0.0)",
+ "System.Collections.Immutable": "1.7.1"
+ }
+ },
+ "LaunchDarkly.Logging": {
+ "type": "Transitive",
+ "resolved": "2.0.0",
+ "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==",
+ "dependencies": {
+ "Microsoft.Extensions.Logging.Abstractions": "6.0.0"
+ }
+ },
+ "LaunchDarkly.ServerSdk": {
+ "type": "Transitive",
+ "resolved": "7.1.0",
+ "contentHash": "k/ATty36RoXogJ286AJJ2KIXBnaLP1oh18yH0iW/ODnlAWXYpBa4iC/PwjJpeQRCG0n/V+brlMLnO2oco/yoOg==",
+ "dependencies": {
+ "LaunchDarkly.Cache": "1.0.2",
+ "LaunchDarkly.CommonSdk": "6.0.1",
+ "LaunchDarkly.EventSource": "5.0.1",
+ "LaunchDarkly.InternalSdk": "3.1.2",
+ "LaunchDarkly.Logging": "2.0.0",
+ "System.Collections.Immutable": "1.7.1"
+ }
+ },
"Microsoft.ApplicationInsights": {
"type": "Transitive",
"resolved": "2.21.0",
@@ -1878,6 +1930,7 @@
"type": "Project",
"dependencies": {
"Azure.Storage.Blobs": "[12.14.1, )",
+ "LaunchDarkly.ServerSdk": "[7.1.0, )",
"Microsoft.AspNetCore.Mvc.Abstractions": "[2.2.0, )",
"Microsoft.Extensions.Configuration": "[7.0.0, )",
"Polly": "[7.2.0, )",
diff --git a/VideoApi/VideoApi.Domain/VideoApi.Domain.csproj b/VideoApi/VideoApi.Domain/VideoApi.Domain.csproj
index 125dc9fbd..e92053dc7 100644
--- a/VideoApi/VideoApi.Domain/VideoApi.Domain.csproj
+++ b/VideoApi/VideoApi.Domain/VideoApi.Domain.csproj
@@ -6,7 +6,7 @@
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/VideoApi/VideoApi.Events/VideoApi.Events.csproj b/VideoApi/VideoApi.Events/VideoApi.Events.csproj
index 42a91b34a..0f109db56 100644
--- a/VideoApi/VideoApi.Events/VideoApi.Events.csproj
+++ b/VideoApi/VideoApi.Events/VideoApi.Events.csproj
@@ -6,7 +6,7 @@
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/VideoApi/VideoApi.IntegrationTests/Hooks/ConfigHooks.cs b/VideoApi/VideoApi.IntegrationTests/Hooks/ConfigHooks.cs
index b2ec3479b..66942bdcf 100644
--- a/VideoApi/VideoApi.IntegrationTests/Hooks/ConfigHooks.cs
+++ b/VideoApi/VideoApi.IntegrationTests/Hooks/ConfigHooks.cs
@@ -148,6 +148,7 @@ private static void RegisterStubs(IServiceCollection services)
services.AddScoped();
services.AddScoped();
services.AddScoped();
+ services.AddSingleton();
}
private static void RegisterAzuriteStorageService(TestContext context, IServiceCollection services)
diff --git a/VideoApi/VideoApi.IntegrationTests/VideoApi.IntegrationTests.csproj b/VideoApi/VideoApi.IntegrationTests/VideoApi.IntegrationTests.csproj
index afa9d20da..5b9a3098c 100644
--- a/VideoApi/VideoApi.IntegrationTests/VideoApi.IntegrationTests.csproj
+++ b/VideoApi/VideoApi.IntegrationTests/VideoApi.IntegrationTests.csproj
@@ -7,7 +7,7 @@
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
@@ -16,7 +16,7 @@
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/VideoApi/VideoApi.IntegrationTests/packages.lock.json b/VideoApi/VideoApi.IntegrationTests/packages.lock.json
index f68c712b4..20cd0b21f 100644
--- a/VideoApi/VideoApi.IntegrationTests/packages.lock.json
+++ b/VideoApi/VideoApi.IntegrationTests/packages.lock.json
@@ -14,9 +14,9 @@
},
"coverlet.msbuild": {
"type": "Direct",
- "requested": "[3.2.0, )",
- "resolved": "3.2.0",
- "contentHash": "lu/eJJpqJb4qy3BGPtDD/LI5RSOwXYYyRErTyaG0OTP69llzVK3FEe74hBQx0JtLUTLEVBfERV4uGYcE1Br2sg=="
+ "requested": "[6.0.0, )",
+ "resolved": "6.0.0",
+ "contentHash": "cUKI50VSVBqDQDFIdBnjN0Jk5JYhjtD0geP2BZZv71/ZrKORJXcLRswFsojI+cHdV+rFUL2XDJEpuhK3x1YqLA=="
},
"FluentAssertions": {
"type": "Direct",
@@ -68,9 +68,9 @@
},
"SonarAnalyzer.CSharp": {
"type": "Direct",
- "requested": "[8.56.0.67649, )",
- "resolved": "8.56.0.67649",
- "contentHash": "u5klyn4PBAOe38/CoPbxGjuMqJQ5K0M7SA17H2DHgHyQ+neSU+abneRGjSQSVD76kbYXzG7E1/KQwTuj+nnMZw=="
+ "requested": "[9.12.0.78982, )",
+ "resolved": "9.12.0.78982",
+ "contentHash": "QxhfMFCNeZWP3gP/R8QM3MuDWm+Esj8Lt3oD61tid5TPuqsaKJtwMZNZWE2FOqqGuKlu3805o8MlkTWBL75skA=="
},
"VH.AcceptanceTests.Common": {
"type": "Direct",
@@ -241,6 +241,58 @@
"resolved": "1.11.46",
"contentHash": "dLMn4EVfJBHWmWK4Uh0XGD76FPLHI0qr2Tm0s1m/xmgiHb1JUb9zB8AzO8HtrkBBlMN6JfCUBYddhqC0hZNR+g=="
},
+ "LaunchDarkly.Cache": {
+ "type": "Transitive",
+ "resolved": "1.0.2",
+ "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw=="
+ },
+ "LaunchDarkly.CommonSdk": {
+ "type": "Transitive",
+ "resolved": "6.0.1",
+ "contentHash": "VznCYcyVawa93/hIv9i8mIGSskvMJ4rN9fkwkRU5GDnFlE69UFf2whQ5N3OrLmh4Or5dxJ0k7mnQEIxBf+eosw==",
+ "dependencies": {
+ "System.Collections.Immutable": "1.7.1"
+ }
+ },
+ "LaunchDarkly.EventSource": {
+ "type": "Transitive",
+ "resolved": "5.0.1",
+ "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==",
+ "dependencies": {
+ "LaunchDarkly.Logging": "[1.0.1, 3.0.0)"
+ }
+ },
+ "LaunchDarkly.InternalSdk": {
+ "type": "Transitive",
+ "resolved": "3.1.2",
+ "contentHash": "wag5BzohWxzrAQN6eH6PPevfHcTBSnsbdDF6EBMeaAxcTL6hRB8T/QU7AwfUIp941KzS9fQusFo9OJLm+ZQ6BA==",
+ "dependencies": {
+ "LaunchDarkly.CommonSdk": "6.0.1",
+ "LaunchDarkly.Logging": "[2.0.0, 3.0.0)",
+ "System.Collections.Immutable": "1.7.1"
+ }
+ },
+ "LaunchDarkly.Logging": {
+ "type": "Transitive",
+ "resolved": "2.0.0",
+ "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==",
+ "dependencies": {
+ "Microsoft.Extensions.Logging.Abstractions": "6.0.0"
+ }
+ },
+ "LaunchDarkly.ServerSdk": {
+ "type": "Transitive",
+ "resolved": "7.1.0",
+ "contentHash": "k/ATty36RoXogJ286AJJ2KIXBnaLP1oh18yH0iW/ODnlAWXYpBa4iC/PwjJpeQRCG0n/V+brlMLnO2oco/yoOg==",
+ "dependencies": {
+ "LaunchDarkly.Cache": "1.0.2",
+ "LaunchDarkly.CommonSdk": "6.0.1",
+ "LaunchDarkly.EventSource": "5.0.1",
+ "LaunchDarkly.InternalSdk": "3.1.2",
+ "LaunchDarkly.Logging": "2.0.0",
+ "System.Collections.Immutable": "1.7.1"
+ }
+ },
"MicroElements.Swashbuckle.FluentValidation": {
"type": "Transitive",
"resolved": "5.7.0",
@@ -2824,6 +2876,7 @@
"type": "Project",
"dependencies": {
"Azure.Storage.Blobs": "[12.14.1, )",
+ "LaunchDarkly.ServerSdk": "[7.1.0, )",
"Microsoft.AspNetCore.Mvc.Abstractions": "[2.2.0, )",
"Microsoft.Extensions.Configuration": "[7.0.0, )",
"Polly": "[7.2.0, )",
diff --git a/VideoApi/VideoApi.Services/AudioPlatformService.cs b/VideoApi/VideoApi.Services/AudioPlatformService.cs
index fea158bc9..66652bd78 100644
--- a/VideoApi/VideoApi.Services/AudioPlatformService.cs
+++ b/VideoApi/VideoApi.Services/AudioPlatformService.cs
@@ -3,6 +3,7 @@
using System.Linq;
using System.Net;
using System.Net.Http;
+using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
@@ -29,8 +30,20 @@ public AudioPlatformService(IEnumerable wowzaClients, WowzaCon
_logger = logger;
ApplicationName = configuration.ApplicationName;
}
-
+
public string GetAudioIngestUrl(string hearingId) => $"{_configuration.StreamingEndpoint}{ApplicationName}/{hearingId}";
+
+ public string GetAudioIngestUrl(string serviceId, string caseNumber, string hearingId)
+ {
+ const string regex = "[^a-zA-Z0-9]";
+ const RegexOptions regexOptions = RegexOptions.None;
+ var timeout = TimeSpan.FromMilliseconds(500);
+
+ var sanitisedServiceId = Regex.Replace(serviceId, regex, "", regexOptions, timeout);
+ var sanitisedCaseNumber = Regex.Replace(caseNumber, regex, "", regexOptions, timeout);
+
+ return $"{_configuration.StreamingEndpoint}{ApplicationName}/{sanitisedServiceId}-{sanitisedCaseNumber}-{hearingId}";
+ }
public string ApplicationName { get; }
diff --git a/VideoApi/VideoApi.Services/AudioPlatformServiceStub.cs b/VideoApi/VideoApi.Services/AudioPlatformServiceStub.cs
index f1d556a57..d91a9d906 100644
--- a/VideoApi/VideoApi.Services/AudioPlatformServiceStub.cs
+++ b/VideoApi/VideoApi.Services/AudioPlatformServiceStub.cs
@@ -74,6 +74,11 @@ public string GetAudioIngestUrl(string hearingId)
{
return $"https://localhost.streaming.mediaServices.windows.net/{hearingId}";
}
+
+ public string GetAudioIngestUrl(string serviceId, string caseNumber, string hearingId)
+ {
+ return $"https://localhost.streaming.mediaServices.windows.net/{serviceId}-{caseNumber}-{hearingId}";
+ }
public string ApplicationName { get; }
}
diff --git a/VideoApi/VideoApi.Services/Contracts/IAudioPlatformService.cs b/VideoApi/VideoApi.Services/Contracts/IAudioPlatformService.cs
index ee81d1d17..9c34ff691 100644
--- a/VideoApi/VideoApi.Services/Contracts/IAudioPlatformService.cs
+++ b/VideoApi/VideoApi.Services/Contracts/IAudioPlatformService.cs
@@ -18,6 +18,11 @@ public interface IAudioPlatformService
///
public string GetAudioIngestUrl(string hearingId);
+ ///
+ /// Builds the URI pointing to the location the wowza application that Kinly will stream the audio to
+ ///
+ public string GetAudioIngestUrl(string serviceId, string caseNumber, string hearingId);
+
///
/// Wowza recorder application name
///
diff --git a/VideoApi/VideoApi.Services/FeatureToggles.cs b/VideoApi/VideoApi.Services/FeatureToggles.cs
new file mode 100644
index 000000000..329e806f8
--- /dev/null
+++ b/VideoApi/VideoApi.Services/FeatureToggles.cs
@@ -0,0 +1,41 @@
+using System;
+using System.Diagnostics.CodeAnalysis;
+using LaunchDarkly.Logging;
+using LaunchDarkly.Sdk;
+using LaunchDarkly.Sdk.Server;
+using LaunchDarkly.Sdk.Server.Interfaces;
+
+namespace VideoApi.Services
+{
+ public interface IFeatureToggles
+ {
+ public bool HrsIntegrationEnabled();
+ }
+
+ [ExcludeFromCodeCoverage]
+ public class FeatureToggles : IFeatureToggles
+ {
+ private readonly ILdClient _ldClient;
+ private readonly Context _context;
+ private const string LdUser = "vh-video-api";
+ private const string HrsIntegrationEnabledToggleKey = "hrs-integration";
+
+ public FeatureToggles(string sdkKey, string environmentName)
+ {
+ var config = Configuration.Builder(sdkKey)
+ .Logging(Components.Logging(Logs.ToWriter(Console.Out)).Level(LogLevel.Warn)).Build();
+ _context = Context.Builder(LdUser).Name(environmentName).Build();
+ _ldClient = new LdClient(config);
+ }
+
+ public bool HrsIntegrationEnabled()
+ {
+ if (!_ldClient.Initialized)
+ {
+ throw new InvalidOperationException("LaunchDarkly client not initialized");
+ }
+
+ return _ldClient.BoolVariation(HrsIntegrationEnabledToggleKey, _context);
+ }
+ }
+}
diff --git a/VideoApi/VideoApi.Services/FeatureTogglesStub.cs b/VideoApi/VideoApi.Services/FeatureTogglesStub.cs
new file mode 100644
index 000000000..f45dee376
--- /dev/null
+++ b/VideoApi/VideoApi.Services/FeatureTogglesStub.cs
@@ -0,0 +1,12 @@
+namespace VideoApi.Services
+{
+ public class FeatureTogglesStub : IFeatureToggles
+ {
+ public bool HrsIntegration { get; set; } = false;
+
+ public bool HrsIntegrationEnabled()
+ {
+ return HrsIntegration;
+ }
+ }
+}
diff --git a/VideoApi/VideoApi.Services/VideoApi.Services.csproj b/VideoApi/VideoApi.Services/VideoApi.Services.csproj
index 47b8e96e6..f10aebdc1 100644
--- a/VideoApi/VideoApi.Services/VideoApi.Services.csproj
+++ b/VideoApi/VideoApi.Services/VideoApi.Services.csproj
@@ -7,10 +7,11 @@
+
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/VideoApi/VideoApi.UnitTests/Controllers/Conference/BookNewConferenceTests.cs b/VideoApi/VideoApi.UnitTests/Controllers/Conference/BookNewConferenceTests.cs
index 7108536fc..5716aa4de 100644
--- a/VideoApi/VideoApi.UnitTests/Controllers/Conference/BookNewConferenceTests.cs
+++ b/VideoApi/VideoApi.UnitTests/Controllers/Conference/BookNewConferenceTests.cs
@@ -10,6 +10,7 @@
using VideoApi.DAL.Commands;
using VideoApi.DAL.Queries;
using VideoApi.Domain;
+using VideoApi.Services;
using VideoApi.Services.Dtos;
using VideoApi.Services.Exceptions;
using Task = System.Threading.Tasks.Task;
@@ -136,6 +137,36 @@ public async Task Should_book_kinly_conference_with_ingesturl_when_audio_recordi
QueryHandlerMock.Verify(q => q.Handle(It.IsAny()), Times.Once);
}
+ [Test]
+ public async Task Should_book_kinly_conference_with_ingest_url_when_hrs_integration_feature_is_enabled()
+ {
+ Mocker.Mock().Setup(x => x.HrsIntegrationEnabled()).Returns(true);
+ var expectedIngestUrl = $"https://localhost.streaming.mediaServices.windows.net/{_request.CaseTypeServiceId}-{_request.CaseNumber}-{_request.HearingRefId.ToString()}";
+ AudioPlatformServiceMock.Setup(x => x.GetAudioIngestUrl(_request.CaseTypeServiceId, _request.CaseNumber, _request.HearingRefId.ToString())).Returns(expectedIngestUrl);
+ SetupCallToMockRetryService(new AudioPlatformServiceResponse(true) {IngestUrl = expectedIngestUrl});
+ SetupCallToMockRetryService(Guid.NewGuid());
+ SetupCallToMockRetryService(true);
+
+ await Controller.BookNewConferenceAsync(_request);
+
+ VideoPlatformServiceMock.Verify(v => v.BookVirtualCourtroomAsync(It.IsAny(), It.IsAny(), expectedIngestUrl, It.IsAny>()), Times.Once);
+ }
+
+ [Test]
+ public async Task Should_book_kinly_conference_with_ingest_url_when_hrs_integration_feature_is_disabled()
+ {
+ Mocker.Mock().Setup(x => x.HrsIntegrationEnabled()).Returns(false);
+ var expectedIngestUrl = $"https://localhost.streaming.mediaServices.windows.net/{_request.HearingRefId.ToString()}";
+ AudioPlatformServiceMock.Setup(x => x.GetAudioIngestUrl(_request.HearingRefId.ToString())).Returns(expectedIngestUrl);
+ SetupCallToMockRetryService(new AudioPlatformServiceResponse(true) {IngestUrl = expectedIngestUrl});
+ SetupCallToMockRetryService(Guid.NewGuid());
+ SetupCallToMockRetryService(true);
+
+ await Controller.BookNewConferenceAsync(_request);
+
+ VideoPlatformServiceMock.Verify(v => v.BookVirtualCourtroomAsync(It.IsAny(), It.IsAny(), expectedIngestUrl, It.IsAny>()), Times.Once);
+ }
+
[Test]
public async Task Should_book_kinly_conference_room_for_given_conference_id_with_endpoints()
{
diff --git a/VideoApi/VideoApi.UnitTests/Services/AudioPlatformServiceTest.cs b/VideoApi/VideoApi.UnitTests/Services/AudioPlatformServiceTest.cs
index aaf144742..de0141ff8 100644
--- a/VideoApi/VideoApi.UnitTests/Services/AudioPlatformServiceTest.cs
+++ b/VideoApi/VideoApi.UnitTests/Services/AudioPlatformServiceTest.cs
@@ -383,5 +383,29 @@ public void GetAudioIngestUrl_returns_expected_url()
url.Should().Contain(_wowzaConfiguration.ApplicationName);
url.Should().Contain(_wowzaConfiguration.StreamingEndpoint);
}
+
+ [Test]
+ public void GetAudioIngestUrl_overload_returns_expected_url()
+ {
+ var serviceId = "ServiceId";
+ var caseNumber = "CaseNumber";
+ var hearingId = Guid.NewGuid().ToString();
+ var url = _audioPlatformService.GetAudioIngestUrl(serviceId, caseNumber, hearingId);
+ url.Should().Contain($"{serviceId}-{caseNumber}-{hearingId}");
+ url.Should().Contain(_wowzaConfiguration.ApplicationName);
+ url.Should().Contain(_wowzaConfiguration.StreamingEndpoint);
+ }
+
+ [TestCase(" Name with spaces", "Namewithspaces")]
+ [TestCase("Name!@#$%^&*()_+=[{]}|;:'\\\",<>/~`?", "Name")]
+ [TestCase("-Name-", "Name")]
+ public void GetAudioIngestUrl_overload_strips_out_special_characters(string suppliedString, string expectedString)
+ {
+ var hearingId = Guid.NewGuid().ToString();
+ var url = _audioPlatformService.GetAudioIngestUrl(suppliedString, suppliedString, hearingId);
+ url.Should().Contain($"{expectedString}-{expectedString}-{hearingId}");
+ url.Should().Contain(_wowzaConfiguration.ApplicationName);
+ url.Should().Contain(_wowzaConfiguration.StreamingEndpoint);
+ }
}
}
diff --git a/VideoApi/VideoApi.UnitTests/Validation/BookNewConferenceRequestValidationTests.cs b/VideoApi/VideoApi.UnitTests/Validation/BookNewConferenceRequestValidationTests.cs
index db712af06..8d3c6e403 100644
--- a/VideoApi/VideoApi.UnitTests/Validation/BookNewConferenceRequestValidationTests.cs
+++ b/VideoApi/VideoApi.UnitTests/Validation/BookNewConferenceRequestValidationTests.cs
@@ -126,5 +126,19 @@ public async Task Should_return_participants_error()
result.Errors.Any(x => x.ErrorMessage == ParticipantRequestValidation.NoUsernameErrorMessage)
.Should().BeTrue();
}
+
+ [Test]
+ public async Task Should_return_missing_service_id_error()
+ {
+ var request = BuildRequest();
+ request.CaseTypeServiceId = string.Empty;
+
+ var result = await _validator.ValidateAsync(request);
+
+ result.IsValid.Should().BeFalse();
+ result.Errors.Count.Should().Be(1);
+ result.Errors.Any(x => x.ErrorMessage == BookNewConferenceRequestValidation.NoCaseTypeServiceIdErrorMessage)
+ .Should().BeTrue();
+ }
}
}
diff --git a/VideoApi/VideoApi.UnitTests/VideoApi.UnitTests.csproj b/VideoApi/VideoApi.UnitTests/VideoApi.UnitTests.csproj
index 86d1bfb72..769c3afba 100644
--- a/VideoApi/VideoApi.UnitTests/VideoApi.UnitTests.csproj
+++ b/VideoApi/VideoApi.UnitTests/VideoApi.UnitTests.csproj
@@ -7,7 +7,7 @@
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
@@ -18,7 +18,7 @@
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/VideoApi/VideoApi.UnitTests/packages.lock.json b/VideoApi/VideoApi.UnitTests/packages.lock.json
index 813011c58..1bb65dd6a 100644
--- a/VideoApi/VideoApi.UnitTests/packages.lock.json
+++ b/VideoApi/VideoApi.UnitTests/packages.lock.json
@@ -15,9 +15,9 @@
},
"coverlet.msbuild": {
"type": "Direct",
- "requested": "[3.2.0, )",
- "resolved": "3.2.0",
- "contentHash": "lu/eJJpqJb4qy3BGPtDD/LI5RSOwXYYyRErTyaG0OTP69llzVK3FEe74hBQx0JtLUTLEVBfERV4uGYcE1Br2sg=="
+ "requested": "[6.0.0, )",
+ "resolved": "6.0.0",
+ "contentHash": "cUKI50VSVBqDQDFIdBnjN0Jk5JYhjtD0geP2BZZv71/ZrKORJXcLRswFsojI+cHdV+rFUL2XDJEpuhK3x1YqLA=="
},
"FluentAssertions": {
"type": "Direct",
@@ -80,9 +80,9 @@
},
"SonarAnalyzer.CSharp": {
"type": "Direct",
- "requested": "[8.56.0.67649, )",
- "resolved": "8.56.0.67649",
- "contentHash": "u5klyn4PBAOe38/CoPbxGjuMqJQ5K0M7SA17H2DHgHyQ+neSU+abneRGjSQSVD76kbYXzG7E1/KQwTuj+nnMZw=="
+ "requested": "[9.12.0.78982, )",
+ "resolved": "9.12.0.78982",
+ "contentHash": "QxhfMFCNeZWP3gP/R8QM3MuDWm+Esj8Lt3oD61tid5TPuqsaKJtwMZNZWE2FOqqGuKlu3805o8MlkTWBL75skA=="
},
"Autofac": {
"type": "Transitive",
@@ -191,6 +191,58 @@
"Microsoft.Extensions.Dependencyinjection.Abstractions": "2.1.0"
}
},
+ "LaunchDarkly.Cache": {
+ "type": "Transitive",
+ "resolved": "1.0.2",
+ "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw=="
+ },
+ "LaunchDarkly.CommonSdk": {
+ "type": "Transitive",
+ "resolved": "6.0.1",
+ "contentHash": "VznCYcyVawa93/hIv9i8mIGSskvMJ4rN9fkwkRU5GDnFlE69UFf2whQ5N3OrLmh4Or5dxJ0k7mnQEIxBf+eosw==",
+ "dependencies": {
+ "System.Collections.Immutable": "1.7.1"
+ }
+ },
+ "LaunchDarkly.EventSource": {
+ "type": "Transitive",
+ "resolved": "5.0.1",
+ "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==",
+ "dependencies": {
+ "LaunchDarkly.Logging": "[1.0.1, 3.0.0)"
+ }
+ },
+ "LaunchDarkly.InternalSdk": {
+ "type": "Transitive",
+ "resolved": "3.1.2",
+ "contentHash": "wag5BzohWxzrAQN6eH6PPevfHcTBSnsbdDF6EBMeaAxcTL6hRB8T/QU7AwfUIp941KzS9fQusFo9OJLm+ZQ6BA==",
+ "dependencies": {
+ "LaunchDarkly.CommonSdk": "6.0.1",
+ "LaunchDarkly.Logging": "[2.0.0, 3.0.0)",
+ "System.Collections.Immutable": "1.7.1"
+ }
+ },
+ "LaunchDarkly.Logging": {
+ "type": "Transitive",
+ "resolved": "2.0.0",
+ "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==",
+ "dependencies": {
+ "Microsoft.Extensions.Logging.Abstractions": "6.0.0"
+ }
+ },
+ "LaunchDarkly.ServerSdk": {
+ "type": "Transitive",
+ "resolved": "7.1.0",
+ "contentHash": "k/ATty36RoXogJ286AJJ2KIXBnaLP1oh18yH0iW/ODnlAWXYpBa4iC/PwjJpeQRCG0n/V+brlMLnO2oco/yoOg==",
+ "dependencies": {
+ "LaunchDarkly.Cache": "1.0.2",
+ "LaunchDarkly.CommonSdk": "6.0.1",
+ "LaunchDarkly.EventSource": "5.0.1",
+ "LaunchDarkly.InternalSdk": "3.1.2",
+ "LaunchDarkly.Logging": "2.0.0",
+ "System.Collections.Immutable": "1.7.1"
+ }
+ },
"MicroElements.Swashbuckle.FluentValidation": {
"type": "Transitive",
"resolved": "5.7.0",
@@ -1981,6 +2033,7 @@
"type": "Project",
"dependencies": {
"Azure.Storage.Blobs": "[12.14.1, )",
+ "LaunchDarkly.ServerSdk": "[7.1.0, )",
"Microsoft.AspNetCore.Mvc.Abstractions": "[2.2.0, )",
"Microsoft.Extensions.Configuration": "[7.0.0, )",
"Polly": "[7.2.0, )",
diff --git a/VideoApi/VideoApi/Controllers/ConferenceController.cs b/VideoApi/VideoApi/Controllers/ConferenceController.cs
index b7dc06d80..564ccc8d2 100644
--- a/VideoApi/VideoApi/Controllers/ConferenceController.cs
+++ b/VideoApi/VideoApi/Controllers/ConferenceController.cs
@@ -21,6 +21,7 @@
using VideoApi.Extensions;
using VideoApi.Services.Factories;
using VideoApi.Mappings;
+using VideoApi.Services;
using VideoApi.Services.Contracts;
using VideoApi.Services.Dtos;
using VideoApi.Services.Exceptions;
@@ -45,12 +46,13 @@ public class ConferenceController : ControllerBase
private readonly IAzureStorageServiceFactory _azureStorageServiceFactory;
private readonly IPollyRetryService _pollyRetryService;
private readonly IBackgroundWorkerQueue _backgroundWorkerQueue;
-
+ private readonly IFeatureToggles _featureToggles;
public ConferenceController(IQueryHandler queryHandler, ICommandHandler commandHandler,
IVideoPlatformService videoPlatformService, IOptions kinlyConfiguration,
ILogger logger, IAudioPlatformService audioPlatformService,
- IAzureStorageServiceFactory azureStorageServiceFactory, IPollyRetryService pollyRetryService, IBackgroundWorkerQueue backgroundWorkerQueue)
+ IAzureStorageServiceFactory azureStorageServiceFactory, IPollyRetryService pollyRetryService, IBackgroundWorkerQueue backgroundWorkerQueue,
+ IFeatureToggles featureToggles)
{
_queryHandler = queryHandler;
_commandHandler = commandHandler;
@@ -61,6 +63,7 @@ public ConferenceController(IQueryHandler queryHandler, ICommandHandler commandH
_azureStorageServiceFactory = azureStorageServiceFactory;
_pollyRetryService = pollyRetryService;
_backgroundWorkerQueue = backgroundWorkerQueue;
+ _featureToggles = featureToggles;
}
///
@@ -84,7 +87,10 @@ public async Task BookNewConferenceAsync(BookNewConferenceRequest
participant.LastName = participant.LastName.Trim();
participant.DisplayName = participant.DisplayName.Trim();
}
- var audioIngestUrl = _audioPlatformService.GetAudioIngestUrl(request.HearingRefId.ToString());
+
+ var audioIngestUrl = _featureToggles.HrsIntegrationEnabled() ?
+ _audioPlatformService.GetAudioIngestUrl(request.CaseTypeServiceId, request.CaseNumber, request.HearingRefId.ToString())
+ : _audioPlatformService.GetAudioIngestUrl(request.HearingRefId.ToString());
var conferenceId = await CreateConferenceWithRetiesAsync(request, audioIngestUrl);
_logger.LogDebug("Conference Created");
diff --git a/VideoApi/VideoApi/Startup.cs b/VideoApi/VideoApi/Startup.cs
index 34f24cc2c..204f8ebd1 100644
--- a/VideoApi/VideoApi/Startup.cs
+++ b/VideoApi/VideoApi/Startup.cs
@@ -56,6 +56,9 @@ public void ConfigureServices(IServiceCollection services)
.SetIsOriginAllowed((host) => true)
.AllowCredentials();
}));
+
+ var envName = Configuration["Services:VideoApiUrl"];
+ services.AddSingleton(new FeatureToggles(Configuration["LaunchDarkly:SdkKey"], envName));
services.AddApplicationInsightsTelemetry();
services.AddApplicationInsightsTelemetryProcessor();
diff --git a/VideoApi/VideoApi/Validations/BookNewConferenceRequestValidation.cs b/VideoApi/VideoApi/Validations/BookNewConferenceRequestValidation.cs
index 1fc55a45e..b11fd3563 100644
--- a/VideoApi/VideoApi/Validations/BookNewConferenceRequestValidation.cs
+++ b/VideoApi/VideoApi/Validations/BookNewConferenceRequestValidation.cs
@@ -12,6 +12,7 @@ public class BookNewConferenceRequestValidation : AbstractValidator x.ScheduledDuration).NotEmpty().WithMessage(ScheduledDurationErrorMessage);
RuleFor(x => x.ScheduledDateTime.Date)
.GreaterThanOrEqualTo(DateTime.Now.Date).WithMessage(ScheduleDateTimeInPastErrorMessage);
+ RuleFor(x => x.CaseTypeServiceId).NotEmpty().WithMessage(NoCaseTypeServiceIdErrorMessage);
RuleFor(x => x.Participants).NotEmpty()
diff --git a/VideoApi/VideoApi/VideoApi.csproj b/VideoApi/VideoApi/VideoApi.csproj
index 7ae97f9f4..1da1a5507 100644
--- a/VideoApi/VideoApi/VideoApi.csproj
+++ b/VideoApi/VideoApi/VideoApi.csproj
@@ -43,7 +43,7 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/VideoApi/VideoApi/packages.lock.json b/VideoApi/VideoApi/packages.lock.json
index 3e3083d53..864fc085e 100644
--- a/VideoApi/VideoApi/packages.lock.json
+++ b/VideoApi/VideoApi/packages.lock.json
@@ -160,9 +160,9 @@
},
"SonarAnalyzer.CSharp": {
"type": "Direct",
- "requested": "[8.56.0.67649, )",
- "resolved": "8.56.0.67649",
- "contentHash": "u5klyn4PBAOe38/CoPbxGjuMqJQ5K0M7SA17H2DHgHyQ+neSU+abneRGjSQSVD76kbYXzG7E1/KQwTuj+nnMZw=="
+ "requested": "[9.12.0.78982, )",
+ "resolved": "9.12.0.78982",
+ "contentHash": "QxhfMFCNeZWP3gP/R8QM3MuDWm+Esj8Lt3oD61tid5TPuqsaKJtwMZNZWE2FOqqGuKlu3805o8MlkTWBL75skA=="
},
"VH.Core.Configuration": {
"type": "Direct",
@@ -252,6 +252,58 @@
"resolved": "2.8.26",
"contentHash": "OiKusGL20vby4uDEswj2IgkdchC1yQ6rwbIkZDVBPIR6al2b7n3pC91elBul9q33KaBgRKhbZH3+2Ur4fnWx2A=="
},
+ "LaunchDarkly.Cache": {
+ "type": "Transitive",
+ "resolved": "1.0.2",
+ "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw=="
+ },
+ "LaunchDarkly.CommonSdk": {
+ "type": "Transitive",
+ "resolved": "6.0.1",
+ "contentHash": "VznCYcyVawa93/hIv9i8mIGSskvMJ4rN9fkwkRU5GDnFlE69UFf2whQ5N3OrLmh4Or5dxJ0k7mnQEIxBf+eosw==",
+ "dependencies": {
+ "System.Collections.Immutable": "1.7.1"
+ }
+ },
+ "LaunchDarkly.EventSource": {
+ "type": "Transitive",
+ "resolved": "5.0.1",
+ "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==",
+ "dependencies": {
+ "LaunchDarkly.Logging": "[1.0.1, 3.0.0)"
+ }
+ },
+ "LaunchDarkly.InternalSdk": {
+ "type": "Transitive",
+ "resolved": "3.1.2",
+ "contentHash": "wag5BzohWxzrAQN6eH6PPevfHcTBSnsbdDF6EBMeaAxcTL6hRB8T/QU7AwfUIp941KzS9fQusFo9OJLm+ZQ6BA==",
+ "dependencies": {
+ "LaunchDarkly.CommonSdk": "6.0.1",
+ "LaunchDarkly.Logging": "[2.0.0, 3.0.0)",
+ "System.Collections.Immutable": "1.7.1"
+ }
+ },
+ "LaunchDarkly.Logging": {
+ "type": "Transitive",
+ "resolved": "2.0.0",
+ "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==",
+ "dependencies": {
+ "Microsoft.Extensions.Logging.Abstractions": "6.0.0"
+ }
+ },
+ "LaunchDarkly.ServerSdk": {
+ "type": "Transitive",
+ "resolved": "7.1.0",
+ "contentHash": "k/ATty36RoXogJ286AJJ2KIXBnaLP1oh18yH0iW/ODnlAWXYpBa4iC/PwjJpeQRCG0n/V+brlMLnO2oco/yoOg==",
+ "dependencies": {
+ "LaunchDarkly.Cache": "1.0.2",
+ "LaunchDarkly.CommonSdk": "6.0.1",
+ "LaunchDarkly.EventSource": "5.0.1",
+ "LaunchDarkly.InternalSdk": "3.1.2",
+ "LaunchDarkly.Logging": "2.0.0",
+ "System.Collections.Immutable": "1.7.1"
+ }
+ },
"Microsoft.ApplicationInsights": {
"type": "Transitive",
"resolved": "2.21.0",
@@ -2304,6 +2356,7 @@
"type": "Project",
"dependencies": {
"Azure.Storage.Blobs": "[12.14.1, )",
+ "LaunchDarkly.ServerSdk": "[7.1.0, )",
"Microsoft.AspNetCore.Mvc.Abstractions": "[2.2.0, )",
"Microsoft.Extensions.Configuration": "[7.0.0, )",
"Polly": "[7.2.0, )",
diff --git a/VideoApi/run_coverage.bat b/VideoApi/run_coverage.bat
index 83ff3bd2c..f149428a2 100644
--- a/VideoApi/run_coverage.bat
+++ b/VideoApi/run_coverage.bat
@@ -1,9 +1,9 @@
rmdir /q /s Artifacts
-SET exclude=\"[*]VideoApi.Extensions.*,[VideoApi]VideoApi.ConfigureServicesExtensions,[VideoApi]VideoApi.Startup,[VideoApi]VideoApi.Program,[*]VideoApi.Swagger.*,[VideoApi.*Tests?]*,[*]VideoApi.DAL.SeedData.*,[*]VideoApi.DAL.Migrations.*,[*]VideoApi.DAL.Mappings.*,[*]VideoApi.Domain.Ddd.*,[*]VideoApi.Domain.Validations.*,[VideoApi.DAL]VideoApi.DAL.VideoApiDbContext,[VideoApi.DAL]VideoApi.DAL.DesignTimeHearingsContextFactory,[*]VideoApi.Common.*,[*]Testing.Common.*,[*]VideoApi.Services.*\"
+SET exclude=\"[*]VideoApi.Extensions.*,[VideoApi]VideoApi.ConfigureServicesExtensions,[VideoApi]VideoApi.Startup,[VideoApi]VideoApi.Program,[*]VideoApi.Swagger.*,[VideoApi.*Tests?]*,[*]VideoApi.DAL.SeedData.*,[*]VideoApi.DAL.Migrations.*,[*]VideoApi.DAL.Mappings.*,[*]VideoApi.Domain.Ddd.*,[*]VideoApi.Domain.Validations.*,[VideoApi.DAL]VideoApi.DAL.VideoApiDbContext,[VideoApi.DAL]VideoApi.DAL.DesignTimeHearingsContextFactory,[*]VideoApi.Common.*,[*]Testing.Common.*\"
dotnet test VideoApi.UnitTests/VideoApi.UnitTests.csproj /p:CollectCoverage=true /p:CoverletOutputFormat="\"opencover,cobertura,json,lcov\"" /p:CoverletOutput=../Artifacts/Coverage/ /p:MergeWith='../Artifacts/Coverage/coverage.json' /p:Exclude="${exclude}"
dotnet test VideoApi.IntegrationTests/VideoApi.IntegrationTests.csproj /p:CollectCoverage=true /p:CoverletOutputFormat="\"opencover,cobertura,json,lcov\"" /p:CoverletOutput=../Artifacts/Coverage/ /p:MergeWith='../Artifacts/Coverage/coverage.json' /p:Exclude="${exclude}"
reportgenerator -reports:Artifacts/Coverage/coverage.opencover.xml -targetDir:Artifacts/Coverage/Report -reporttypes:HtmlInline_AzurePipelines
-"Artifacts/Coverage/Report/index.htm"
\ No newline at end of file
+"Artifacts/Coverage/Report/index.htm"
diff --git a/VideoApi/run_coverage.sh b/VideoApi/run_coverage.sh
index bd925b90e..0fe29dd56 100644
--- a/VideoApi/run_coverage.sh
+++ b/VideoApi/run_coverage.sh
@@ -1,9 +1,9 @@
rm -rf Artifacts
-exclude=\"[*]VideoApi.Extensions.*,[VideoApi]VideoApi.ConfigureServicesExtensions,[VideoApi]VideoApi.Startup,[VideoApi]VideoApi.Program,[*]VideoApi.Swagger.*,[VideoApi.*Tests?]*,[*]VideoApi.DAL.SeedData.*,[*]VideoApi.DAL.Migrations.*,[*]VideoApi.DAL.Mappings.*,[*]VideoApi.Domain.Ddd.*,[*]VideoApi.Domain.Validations.*,[VideoApi.DAL]VideoApi.DAL.VideoApiDbContext,[VideoApi.DAL]VideoApi.DAL.DesignTimeHearingsContextFactory,[*]VideoApi.Common.*,[*]Testing.Common.*,[*]VideoApi.Services.*\"
+exclude=\"[*]VideoApi.Extensions.*,[VideoApi]VideoApi.ConfigureServicesExtensions,[VideoApi]VideoApi.Startup,[VideoApi]VideoApi.Program,[*]VideoApi.Swagger.*,[VideoApi.*Tests?]*,[*]VideoApi.DAL.SeedData.*,[*]VideoApi.DAL.Migrations.*,[*]VideoApi.DAL.Mappings.*,[*]VideoApi.Domain.Ddd.*,[*]VideoApi.Domain.Validations.*,[VideoApi.DAL]VideoApi.DAL.VideoApiDbContext,[VideoApi.DAL]VideoApi.DAL.DesignTimeHearingsContextFactory,[*]VideoApi.Common.*,[*]Testing.Common.*\"
dotnet test VideoApi.UnitTests/VideoApi.UnitTests.csproj /p:CollectCoverage=true /p:CoverletOutputFormat="\"opencover,cobertura,json,lcov\"" /p:CoverletOutput=../Artifacts/Coverage/ /p:MergeWith='../Artifacts/Coverage/coverage.json' /p:Exclude="${exclude}"
dotnet test VideoApi.IntegrationTests/VideoApi.IntegrationTests.csproj /p:CollectCoverage=true /p:CoverletOutputFormat="\"opencover,cobertura,json,lcov\"" /p:CoverletOutput=../Artifacts/Coverage/ /p:MergeWith='../Artifacts/Coverage/coverage.json' /p:Exclude="${exclude}"
~/.dotnet/tools/reportgenerator -reports:Artifacts/Coverage/coverage.opencover.xml -targetDir:Artifacts/Coverage/Report -reporttypes:HtmlInline_AzurePipelines
-open Artifacts/Coverage/Report/index.htm
\ No newline at end of file
+open Artifacts/Coverage/Report/index.htm
diff --git a/charts/vh-video-api/Chart.yaml b/charts/vh-video-api/Chart.yaml
index 980c90911..4416b5f77 100644
--- a/charts/vh-video-api/Chart.yaml
+++ b/charts/vh-video-api/Chart.yaml
@@ -2,7 +2,7 @@
apiVersion: v2
name: vh-video-api
home: https://github.com/hmcts/vh-video-api
-version: 0.0.15
+version: 0.0.16
description: Helm Chart for Video Hearing video-api
maintainers:
- name: VH Devops
diff --git a/charts/vh-video-api/values.yaml b/charts/vh-video-api/values.yaml
index 6ac00cab2..0c17779aa 100644
--- a/charts/vh-video-api/values.yaml
+++ b/charts/vh-video-api/values.yaml
@@ -75,6 +75,7 @@ java:
- QuickLinks--Issuer
- QuickLinks--RsaPrivateKey
- QuickLinks--ValidAudience
+ - launchdarkly--sdkkey
environment:
ASPNETCORE_URLS: http://+:8080
KINLYCONFIGURATION__CALLBACKURI: https://vh-video-web.{{ .Values.global.environment }}.platform.hmcts.net/callback
@@ -83,3 +84,4 @@ java:
Logging__LogLevel__System: warning
SERVICES__CALLBACKURI: https://vh-video-web.{{ .Values.global.environment }}.platform.hmcts.net/callback
UseStub: false
+ SERVICES__VIDEOAPIURL: https://vh-video-api.{{ .Values.global.environment }}.platform.hmcts.net/
diff --git a/scripts/tests/run-tests.sh b/scripts/tests/run-tests.sh
index 86536c480..9e91e00d3 100755
--- a/scripts/tests/run-tests.sh
+++ b/scripts/tests/run-tests.sh
@@ -1,7 +1,7 @@
#!/bin/sh
set -x
-exclusions="[Testing.Common]*,[VideoApi.Common]VideoApi.Common.*,[VideoApi.Domain]*.Ddd*,[VideoApi.DAL]*.Migrations*,[VideoApi]*.Swagger,[VideoApi.Services]*"
+exclusions="[Testing.Common]*,[VideoApi.Common]VideoApi.Common.*,[VideoApi.Domain]*.Ddd*,[VideoApi.DAL]*.Migrations*,[VideoApi]*.Swagger"
configuration=Release
# Script is for docker compose tests where the script is at the root level