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