diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/AdminWebsite.AcceptanceTests.csproj b/AdminWebsite/AdminWebsite.AcceptanceTests/AdminWebsite.AcceptanceTests.csproj deleted file mode 100644 index a22a89433..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/AdminWebsite.AcceptanceTests.csproj +++ /dev/null @@ -1,51 +0,0 @@ - - - - net6.0 - false - AdminWebsite.AcceptanceTests - true - true - false - false - false - B0F83938-CBCF-4059-9B42-8961B4D075A1 - ef943d1a-7506-483b-92b7-dc6e6b41270a - latestmajor - - - - - - - - - - - - - - - - - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - saucelabs.json - - - - - - - - diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Configuration/AdminWebConfig.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Configuration/AdminWebConfig.cs deleted file mode 100644 index 1198579a4..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Configuration/AdminWebConfig.cs +++ /dev/null @@ -1,21 +0,0 @@ -using AcceptanceTests.Common.Configuration; -using AdminWebsite.Configuration; - -namespace AdminWebsite.AcceptanceTests.Configuration -{ - public class AdminWebConfig - { - public AzureAdConfiguration AzureAdConfiguration { get; set; } - public bool IsLive { get; set; } - public AdminWebTestConfig TestConfig { get; set; } - public AdminWebVhServiceConfig VhServices { get; set; } - public SauceLabsSettingsConfig SauceLabsConfiguration { get; set; } - public WowzaConfiguration Wowza { get; set; } - - public KinlyConfiguration KinlyConfiguration { get; set; } - public NotifyConfiguration NotifyConfiguration { get; set; } - public bool UsingEjud { get; set; } - public int SeleniumElementTimeout { get; set; } - public bool BookingConfirmToggle { get; set; } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Configuration/AdminWebTestConfig.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Configuration/AdminWebTestConfig.cs deleted file mode 100644 index a954ada18..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Configuration/AdminWebTestConfig.cs +++ /dev/null @@ -1,16 +0,0 @@ -using AcceptanceTests.Common.Configuration; -using AcceptanceTests.Common.Driver.Enums; - -namespace AdminWebsite.AcceptanceTests.Configuration -{ - public class AdminWebTestConfig : ITestSettingsConfig - { - public string TestUsernameStem { get; set; } - public string TestUserPassword { get; set; } - public TargetBrowser TargetBrowser { get; set; } - public string TargetBrowserVersion { get; set; } - public TargetDevice TargetDevice { get; set; } - public string TargetDeviceName { get; set; } - public TargetOS TargetOS { get; set; } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Configuration/AdminWebTokens.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Configuration/AdminWebTokens.cs deleted file mode 100644 index 24e2b6a68..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Configuration/AdminWebTokens.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace AdminWebsite.AcceptanceTests.Configuration -{ - public class AdminWebTokens - { - public string BookingsApiBearerToken { get; set; } - public string UserApiBearerToken { get; set; } - public string VideoApiBearerToken { get; set; } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Configuration/AdminWebVhServiceConfig.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Configuration/AdminWebVhServiceConfig.cs deleted file mode 100644 index 09bd03f2a..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Configuration/AdminWebVhServiceConfig.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace AdminWebsite.AcceptanceTests.Configuration -{ - public class AdminWebVhServiceConfig - { - public string AdminWebUrl { get; set; } - public bool RunningAdminWebLocally { get; set; } - public string TestApiUrl { get; set; } - public string TestApiResourceId { get; set; } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Configuration/NotifyConfiguration.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Configuration/NotifyConfiguration.cs deleted file mode 100644 index ed696d198..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Configuration/NotifyConfiguration.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace AdminWebsite.AcceptanceTests.Configuration -{ - public class NotifyConfiguration - { - public string ApiKey { get; set; } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Configuration/WowzaConfiguration.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Configuration/WowzaConfiguration.cs deleted file mode 100644 index 837df902f..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Configuration/WowzaConfiguration.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace AdminWebsite.AcceptanceTests.Configuration -{ - public class WowzaConfiguration - { - public string StorageAccountName { get; set; } - public string StorageAccountKey { get; set; } - public string StorageContainerName { get; set; } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Data/AssertConference.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Data/AssertConference.cs deleted file mode 100644 index bec0f4b8a..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Data/AssertConference.cs +++ /dev/null @@ -1,88 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using BookingsApi.Contract.V1.Responses; -using FluentAssertions; -using VideoApi.Contract.Enums; -using VideoApi.Contract.Responses; - -namespace AdminWebsite.AcceptanceTests.Data -{ - public static class AssertConference - { - public static void Assert(HearingDetailsResponse hearing, ConferenceDetailsResponse conference) - { - AssertConferenceDetails(hearing, conference); - AssertEndpoints(hearing.Endpoints, conference.Endpoints, hearing.Participants); - AssertConferenceParticipants(hearing.Participants, conference.Participants); - } - - private static void AssertConferenceDetails(HearingDetailsResponse hearing, ConferenceDetailsResponse conference) - { - conference.AudioRecordingRequired.Should().Be(hearing.AudioRecordingRequired); - hearing.Cases.First().Name.Should().StartWith(conference.CaseName); - conference.CaseNumber.Should().Be(hearing.Cases.First().Number); - conference.CaseType.Should().Be(hearing.CaseTypeName); - conference.ClosedDateTime.Should().BeNull(); - conference.CurrentStatus.Should().Be(ConferenceState.NotStarted); - conference.HearingId.Should().Be(hearing.Id); - conference.HearingVenueName.Should().Be(hearing.HearingVenueName); - conference.Id.Should().NotBeEmpty(); - conference.MeetingRoom.AdminUri.Should().NotBeNullOrEmpty(); - conference.MeetingRoom.JudgeUri.Should().NotBeNullOrEmpty(); - conference.MeetingRoom.ParticipantUri.Should().NotBeNullOrEmpty(); - conference.MeetingRoom.PexipNode.Should().NotBeNullOrEmpty(); - conference.MeetingRoom.PexipSelfTestNode.Should().NotBeNullOrEmpty(); - conference.ScheduledDateTime.Should().Be(hearing.ScheduledDateTime); - conference.ScheduledDuration.Should().Be(hearing.ScheduledDuration); - conference.StartedDateTime.Should().BeNull(); - conference.MeetingRoom.TelephoneConferenceId.Should().NotBeNullOrWhiteSpace(); - } - - private static void AssertEndpoints(IReadOnlyCollection hearingEndpoints, - IEnumerable conferenceEndpoints, IReadOnlyCollection hearingParticipants) - { - foreach (var conferenceEndpoint in conferenceEndpoints) - { - var hearingEndpoint = hearingEndpoints.First(x => x.Sip.Equals(conferenceEndpoint.SipAddress)); - - if (conferenceEndpoint.DefenceAdvocate == null) - { - hearingEndpoint.DefenceAdvocateId.Should().BeNull(); - } - else - { - hearingParticipants.Any(x => x.Username.Equals(conferenceEndpoint.DefenceAdvocate, StringComparison.CurrentCultureIgnoreCase)).Should().BeTrue(); - } - - conferenceEndpoint.DisplayName.Should().Be(hearingEndpoint.DisplayName); - conferenceEndpoint.Id.Should().NotBeEmpty(); - conferenceEndpoint.Pin.Should().Be(hearingEndpoint.Pin); - } - } - - private static void AssertConferenceParticipants(IReadOnlyCollection hearingParticipants, IEnumerable conferenceParticipants) - { - foreach (var conferenceParticipant in conferenceParticipants) - { - var hearingParticipant = hearingParticipants.First(x => x.ContactEmail.Equals(conferenceParticipant.ContactEmail)); - conferenceParticipant.CaseTypeGroup.Should().Be(hearingParticipant.CaseRoleName); - if (conferenceParticipant.UserRole != UserRole.Judge) - { - conferenceParticipant.ContactEmail.Should().Be(hearingParticipant.ContactEmail); - } - conferenceParticipant.Name.Trim().Should().Contain($"{hearingParticipant.FirstName.Trim()} {hearingParticipant.LastName.Trim()}"); - conferenceParticipant.ContactTelephone?.Trim().Should().Be(hearingParticipant.TelephoneNumber?.Trim()); - conferenceParticipant.CurrentStatus.Should().Be(ParticipantState.NotSignedIn); - conferenceParticipant.DisplayName.Trim().Should().Be(hearingParticipant.DisplayName.Trim()); - conferenceParticipant.FirstName.Trim().Should().Be(hearingParticipant.FirstName.Trim()); - conferenceParticipant.HearingRole.Trim().Should().Be(hearingParticipant.HearingRoleName.Trim()); - conferenceParticipant.Id.Should().NotBeEmpty(); - conferenceParticipant.LastName.Trim().Should().Be(hearingParticipant.LastName.Trim()); - conferenceParticipant.RefId.Should().Be(hearingParticipant.Id); - conferenceParticipant.UserRole.ToString().Should().Be(hearingParticipant.UserRoleName.Trim()); - conferenceParticipant.Username.Trim().Should().Be(hearingParticipant.Username.Trim()); - } - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Data/AssertHearing.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Data/AssertHearing.cs deleted file mode 100644 index c4c1fde62..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Data/AssertHearing.cs +++ /dev/null @@ -1,125 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using FluentAssertions; -using AcceptanceTests.Common.Configuration.Users; -using AcceptanceTests.Common.Model.Participant; -using AdminWebsite.AcceptanceTests.Helpers; -using AdminWebsite.AcceptanceTests.Steps; -using BookingsApi.Contract.V1.Responses; - -namespace AdminWebsite.AcceptanceTests.Data -{ - public static class AssertHearing - { - public static void AssertHearingDetails(HearingDetailsResponse hearing, Test testData) - { - AssertDetails(hearing, testData); - AssertCreatedDate(hearing.CreatedDate, DateTime.UtcNow); - AssertQuestionnaire(hearing, testData); - } - - private static void AssertDetails(HearingDetailsResponse hearing, Test testData) - { - hearing.Cases.First().Name.Should().Contain(testData.HearingDetails.CaseName); - hearing.Cases.First().Number.Should().Contain(testData.HearingDetails.CaseNumber); - hearing.CaseTypeName.Should().Be(testData.HearingDetails.CaseType.Name); - hearing.HearingRoomName.Should().Be(testData.HearingSchedule.Room); - hearing.HearingTypeName.Should().Be(testData.HearingDetails.HearingType.Name); - hearing.HearingVenueName.Should().Be(testData.HearingSchedule.HearingVenue); - OtherInformationSteps.GetOtherInfo(hearing.OtherInformation).Should().Be(OtherInformationSteps.GetOtherInfo(testData.TestData.OtherInformationDetails.OtherInformation)); - } - - private static void AssertCreatedDate(DateTime actual, DateTime expected) - { - actual.ToShortDateString().Should().Be(expected.ToShortDateString()); - actual.ToShortTimeString().Should().BeOneOf( - expected.AddMinutes(-3).ToShortTimeString(), - expected.AddMinutes(-2).ToShortTimeString(), - expected.AddMinutes(-1).ToShortTimeString(), - expected.ToShortTimeString()); - } - - private static void AssertQuestionnaire(HearingDetailsResponse hearing, Test testData) - { - if (!hearing.Cases.First().Name.Contains("Day") || hearing.Cases.First().Name.Contains("Day 1 of")) - { - hearing.QuestionnaireNotRequired.Should().BeFalse(); - } - else - { - hearing.QuestionnaireNotRequired.Should().BeTrue(); - } - } - - public static void AssertScheduledDate(int day, DateTime actual, DateTime expected, bool isMultiDayHearing, - bool isRunningOnSauceLabs) - { - if (isMultiDayHearing) - { - var newDate = DateHelper.GetNextWorkingDay(expected, day - 1); - expected = newDate; - } - - actual.ToShortDateString().Should().Be(expected.ToShortDateString()); - - if (isRunningOnSauceLabs) - { - actual.ToShortTimeString().Should().BeOneOf( - expected.AddMinutes(-3).ToShortTimeString(), - expected.AddMinutes(-2).ToShortTimeString(), - expected.AddMinutes(-1).ToShortTimeString(), - expected.ToShortTimeString()); - } - } - - public static void AssertTimeSpansMatch(int actual, int hours, int minutes, bool isMultiDayHearing) - { - var actualDuration = TimeSpan.FromMinutes(actual); - var expectedDuration = isMultiDayHearing ? TimeSpan.FromHours(8) : TimeSpan.FromHours(hours).Add(TimeSpan.FromMinutes(minutes)); - actualDuration.Should().Be(expectedDuration); - } - - public static void AssertCreatedBy(string actual, string expected) - { - actual.Should().Be(expected); - } - - public static void AssertHearingParticipants(List participants, List testHearingParticipants, string organisation) - { - participants.Count.Should().Be(testHearingParticipants.Count); - foreach (var actualParticipant in participants) - { - var expectedParticipant = testHearingParticipants.First(x => x.Lastname.ToLower().Equals(actualParticipant.LastName.ToLower())); - if (expectedParticipant.Role.ToLower() != "judge") - { - actualParticipant.ContactEmail.Should().Be(expectedParticipant.AlternativeEmail); - } - - if (!string.IsNullOrEmpty(expectedParticipant.Interpretee)) - { - var interpretee = participants.FirstOrDefault(p => p.DisplayName == expectedParticipant.Interpretee); - actualParticipant.LinkedParticipants.Single(p => p.LinkedId == interpretee.Id).Should().NotBeNull(); - interpretee.LinkedParticipants.Single(p => p.LinkedId == actualParticipant.Id).Should().NotBeNull(); - } - - actualParticipant.CaseRoleName.Should().Be(expectedParticipant.CaseRoleName); - // actualParticipant.DisplayName.Should().Be($"{expectedParticipant.Firstname} {expectedParticipant.Role}"); TODO: removed as workaround for new user naming conventions - actualParticipant.FirstName.Should().Be(expectedParticipant.Firstname); - actualParticipant.HearingRoleName.Should().Be(expectedParticipant.HearingRoleName); - actualParticipant.LastName.Should().Be(expectedParticipant.Lastname); - var role = expectedParticipant.Role.ToLower().Equals("judge") ? "Judge" : expectedParticipant.Role; - actualParticipant.UserRoleName.Should().Be(role); - if (!expectedParticipant.HearingRoleName.Equals(PartyRole.Representative.Name)) continue; - actualParticipant.Organisation.Should().Be(organisation); - actualParticipant.Representee.Should().Be(expectedParticipant.Representee); - } - } - - public static void AssertUpdatedStatus(HearingDetailsResponse hearing, string updatedBy, DateTime updatedDate) - { - hearing.UpdatedBy.Should().Be(updatedBy); - hearing.UpdatedDate.ToLocalTime().ToShortTimeString().Should().BeOneOf(updatedDate.ToLocalTime().AddMinutes(-1).ToShortTimeString(), updatedDate.ToLocalTime().ToShortTimeString(), updatedDate.ToLocalTime().AddMinutes(1).ToShortTimeString()); - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Data/CallbackEvent.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Data/CallbackEvent.cs deleted file mode 100644 index 36ef04679..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Data/CallbackEvent.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using VideoApi.Contract.Enums; - - -namespace AdminWebsite.AcceptanceTests.Data -{ - public class CallbackEvent - { - public string EventId { get; set; } - public EventType EventType { get; set; } - public DateTime TimeStampUtc { get; set; } - public Guid ConferenceId { get; set; } - public Guid ParticipantId { get; set; } - - public string TransferFrom { get; set; } - - public string TransferTo { get; set; } - - public string Reason { get; set; } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Data/ConferenceEventRequestBuilder.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Data/ConferenceEventRequestBuilder.cs deleted file mode 100644 index 0c82a146a..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Data/ConferenceEventRequestBuilder.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System; -using VideoApi.Contract.Enums; -using VideoApi.Contract.Requests; -using RoomType = AdminWebsite.Testing.Common.Data.RoomType; - -namespace AdminWebsite.AcceptanceTests.Data -{ - public class ConferenceEventRequestBuilder - { - private readonly ConferenceEventRequest _request; - - public ConferenceEventRequestBuilder() - { - _request = new ConferenceEventRequest() - { - EventId = Guid.NewGuid().ToString(), - Reason = "Automated", - TimeStampUtc = DateTime.UtcNow, - TransferFrom = RoomType.WaitingRoom, - TransferTo = RoomType.WaitingRoom - }; - } - - public ConferenceEventRequestBuilder FromRoomType(string roomType) - { - _request.TransferTo = roomType; - return this; - } - - public ConferenceEventRequestBuilder WithConferenceId(Guid conferenceId) - { - _request.ConferenceId = conferenceId.ToString(); - return this; - } - - public ConferenceEventRequestBuilder WithParticipantId(Guid? participantId) - { - if (participantId == null) - throw new DataMisalignedException("Participant Id cannot be null"); - _request.ParticipantId = participantId.ToString(); - return this; - } - - public ConferenceEventRequestBuilder WithEventType(EventType eventType) - { - _request.EventType = eventType; - return this; - } - - public ConferenceEventRequest Build() - { - return _request; - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Data/DateFormats.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Data/DateFormats.cs deleted file mode 100644 index 90b52756e..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Data/DateFormats.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System.Globalization; - -namespace AdminWebsite.AcceptanceTests.Data -{ - public static class DateFormats - { - public static string LocalDateFormat(bool runningOnSaucelabs) - { - if (runningOnSaucelabs) return new CultureInfo("es-PR").DateTimeFormat.ShortDatePattern; - return CultureInfo.CurrentCulture.Name.ToLower().Equals("en-us") || CultureInfo.CurrentCulture.TwoLetterISOLanguageName.ToLower().Equals("iv") - ? new CultureInfo("en-GB").DateTimeFormat.ShortDatePattern - : CultureInfo.CurrentUICulture.DateTimeFormat.ShortDatePattern; - } - - public static string HearingSummaryDate = "dddd dd MMMM yyyy, h:mmtt"; - public static string AudioScheduledDate = "dd MMMM yyyy"; - public static string HearingSummaryDateMultiDays = "dddd dd MMMM yyyy"; - public static string HearingSummaryTimeMultiDays = "h:mmtt"; - - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Data/HearingDetails.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Data/HearingDetails.cs deleted file mode 100644 index 669707c6d..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Data/HearingDetails.cs +++ /dev/null @@ -1,14 +0,0 @@ -using AcceptanceTests.Common.Model.Case; -using AcceptanceTests.Common.Model.Hearing; - -namespace AdminWebsite.AcceptanceTests.Data -{ - public class HearingDetails - { - public string CaseNumber { get; set; } - public string CaseName { get; set; } - public HearingType HearingType { get; set; } - public CaseType CaseType { get; set; } - public bool DoNotSendQuestionnaires { get; set; } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Data/HearingRequestBuilder.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Data/HearingRequestBuilder.cs deleted file mode 100644 index 969ff5933..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Data/HearingRequestBuilder.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Collections.Generic; -using TestApi.Contract.Dtos; -using TestApi.Contract.Enums; -using TestApi.Contract.Requests; - -namespace AdminWebsite.AcceptanceTests.Data -{ - internal class HearingRequestBuilder - { - private readonly CreateHearingRequest _request; - private const string DEFAULT_VENUE = "Birmingham Civil and Family Justice Centre"; - private const string CACD_CaseTypeName = "Court of Appeal Criminal Division"; - - public HearingRequestBuilder() - { - _request = new CreateHearingRequest() - { - Application = Application.AdminWeb, - AudioRecordingRequired = false, - QuestionnaireNotRequired = false, - ScheduledDateTime = DateTime.UtcNow.AddHours(1), - TestType = TestType.Automated, - Users = new List(), - Venue = DEFAULT_VENUE - }; - } - - public HearingRequestBuilder WithUsers(List users) - { - _request.Users = users; - return this; - } - - public HearingRequestBuilder WithAudioRecordingRequired(bool audioRecording) - { - _request.AudioRecordingRequired = audioRecording; - return this; - } - - public CreateHearingRequest Build() - { - return _request; - } - - public HearingRequestBuilder WithCACDCaseType() - { - _request.CaseType = CACD_CaseTypeName; - return this; - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Data/Test.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Data/Test.cs deleted file mode 100644 index 5ac738bb2..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Data/Test.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.Collections.Generic; -using AcceptanceTests.Common.Configuration.Users; -using AcceptanceTests.Common.Data.TestData; -using AdminWebsite.AcceptanceTests.Data.TestData; -using BookingsApi.Contract.V1.Responses; -using VideoApi.Contract.Responses; - -namespace AdminWebsite.AcceptanceTests.Data -{ - public class Test - { - public string CreatedBy { get; set; } - public List HearingParticipants { get; set; } - public HearingDetails HearingDetails { get; set; } - public HearingSchedule HearingSchedule { get; set; } - public AssignJudge AssignJudge { get; set; } - public AddParticipant AddParticipant { get; set; } - public bool SubmittedAndCreatedNewAadUsers { get; set; } = false; - public CommonData CommonData { get; set; } - public DefaultData TestData { get; set; } - public ConferenceDetailsResponse ConferenceResponse { get; set; } - public HearingDetailsResponse HearingResponse { get; set; } - public VideoAccessPoints VideoAccessPoints { get; set; } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Data/TestData/CommonData.xml b/AdminWebsite/AdminWebsite.AcceptanceTests/Data/TestData/CommonData.xml deleted file mode 100644 index cdd7693bd..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Data/TestData/CommonData.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - @ondemand.eu-central-1.saucelabs.com:80/wd/hub - - - video-hearings@justice.gov.uk - 0300 303 0655 - - - login.microsoftonline.com - - diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Data/TestData/DefaultData.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Data/TestData/DefaultData.cs deleted file mode 100644 index 0be0a58ab..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Data/TestData/DefaultData.cs +++ /dev/null @@ -1,80 +0,0 @@ -using System; - -namespace AdminWebsite.AcceptanceTests.Data.TestData -{ - public class DefaultData - { - public HearingDetails HearingDetails { get; set; } - public HearingSchedule HearingSchedule { get; set; } - public AssignJudge AssignJudge { get; set; } - public AddParticipant AddParticipant { get; set; } - public OtherInformationDetails OtherInformationDetails { get; set; } - public BookingDetailsPage BookingDetailsPage { get; set; } - public VideoAccessPoints VideoAccessPoints { get; set; } - } - - public class HearingDetails - { - public string CaseType { get; set; } - public string HearingType { get; set; } - public bool DoNotSendQuestionnaires { get; set; } - } - - public class HearingSchedule - { - public int DurationHours { get; set; } = 0; - public int DurationMinutes { get; set; } = 0; - public string HearingVenue { get; set; } - public string Room { get; set; } - public DateTime ScheduledDate { get; set; } - public int NumberOfMultiDays { get; set; } - public bool MultiDays { get; set; } - public DateTime EndHearingDate { get; set; } - } - - public class AssignJudge - { - public bool AudioRecord { get; set; } - public bool AddNewStaff { get; set; } - } - - public class AddParticipant - { - public Participant Participant { get; set; } - } - - public class Participant - { - public string NewUserPrefix { get; set; } - public string Title { get; set; } - public string Phone { get; set; } - public string Organisation { get; set; } - } - - public class OtherInformationDetails - { - public string OtherInformation { get; set; } - } - - public class Questionnaire - { - public string SelfTestQuestion1 { get; set; } - public string SelfTestQuestion2 { get; set; } - public string IndividualQuestion { get; set; } - public string RepresentativeQuestion { get; set; } - public string ExtendedAnswer { get; set; } - public string UnansweredQuestion { get; set; } - } - - public class BookingDetailsPage - { - public string CancelReason { get; set; } - public string CancelReason2 { get; set; } - public string DetailReason { get; set; } - } - - public class VideoAccessPoints - { - public string DisplayName { get; set; } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Data/TestData/DefaultData.xml b/AdminWebsite/AdminWebsite.AcceptanceTests/Data/TestData/DefaultData.xml deleted file mode 100644 index be214425d..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Data/TestData/DefaultData.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - Generic - Automated Test - false - - - 00 - 45 - 3 - Birmingham Civil and Family Justice Centre - 1 - - - false - - - - Automation_ - Mrs - 01234567890 - MoJ - - - - Endpoint 001 - CourtRoom1 - - - |JudgeEmail|test@test.com|JudgePhone|01234567890|OtherInformation|Other Info - - - Could you see yourself on the screen in the camera window? - Could you see the bar moving when you spoke? - Is there anything you'd like the court to take into account when it decides which type of hearing will be suitable? - Is there anything you'd like the court to know that could affect this hearing taking place by video? - An extended answer - Could you see and hear the video clearly? - - - Abandonment (not heard from all parties) - Other (please provide details) - Hearing cancelled due to unprecedented circumstances! - - diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Data/TestData/DefaultDataManager.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Data/TestData/DefaultDataManager.cs deleted file mode 100644 index 7d9da1142..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Data/TestData/DefaultDataManager.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System.IO; -using AcceptanceTests.Common.Data.Helpers; - -namespace AdminWebsite.AcceptanceTests.Data.TestData -{ - public class DefaultDataManager - { - public DefaultData SerialiseTestData(string path = "Data/TestData/DefaultData.xml") - { - var xmlInputData = File.ReadAllText(path); - return XmlSerialiser.Deserialize(xmlInputData); - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Data/UserToUserAccountMapper.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Data/UserToUserAccountMapper.cs deleted file mode 100644 index 9e9867207..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Data/UserToUserAccountMapper.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.Collections.Generic; -using AcceptanceTests.Common.Configuration.Users; -using TestApi.Contract.Dtos; - -namespace AdminWebsite.AcceptanceTests.Data -{ - public static class UserToUserAccountMapper - { - public static UserAccount Map(UserDto user) - { - return new UserAccount() - { - AlternativeEmail = user.ContactEmail, - CaseRoleName = null, - DefaultParticipant = false, - DisplayName = user.DisplayName, - Firstname = user.FirstName, - HearingRoleName = null, - HearingTypes = new List(), - Key = user.LastName, - Lastname = user.LastName, - Representee = null, - Reference = null, - Role = user.UserType.ToString(), - Username = user.Username - }; - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/Accessibility.feature b/AdminWebsite/AdminWebsite.AcceptanceTests/Features/Accessibility.feature deleted file mode 100644 index a2e333959..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/Accessibility.feature +++ /dev/null @@ -1,69 +0,0 @@ -Feature: Accessibility - In order to ensure admin web is accessible to all users - As a service - I want to check each page for potential accessibility issues - -@Accessibility -Scenario: Dashboard page accessibility - Given the Video Hearings Officer user has progressed to the Dashboard page - Then the page should be accessible - -@Accessibility -Scenario: Hearing Details page accessibility - Given the Video Hearings Officer user has progressed to the Hearing Details page - Then the page should be accessible - -@Accessibility -Scenario: Hearing Schedule page accessibility - Given the Video Hearings Officer user has progressed to the Hearing Schedule page - Then the page should be accessible - -@Accessibility -Scenario: Assign Judge page accessibility - Given the Video Hearings Officer user has progressed to the Assign Judge page - Then the page should be accessible - -@Accessibility -Scenario: Add Participants page accessibility - Given the Video Hearings Officer user has progressed to the Add Participants page - Then the page should be accessible - -@Accessibility -Scenario: Other Information page accessibility - Given the Video Hearings Officer user has progressed to the Other Information page - Then the page should be accessible - -@Accessibility -Scenario: Summary page accessibility - Given the Video Hearings Officer user has progressed to the Summary page - Then the page should be accessible - -@Accessibility -Scenario: Booking Confirmation page accessibility - Given the Video Hearings Officer user has progressed to the Booking Confirmation page - Then the page should be accessible - -@Accessibility -Scenario: Bookings List page accessibility - Given the Video Hearings Officer user has progressed to the Bookings List page - Then the page should be accessible - -@Accessibility -Scenario: Booking Details page accessibility - Given the Video Hearings Officer user has progressed to the Booking Details page - Then the page should be accessible - -@Accessibility -Scenario: Questionnaire page accessibility - Given the Video Hearings Officer user has progressed to the Questionnaire page - Then the page should be accessible - -@Accessibility -Scenario: Get Audio Link File accessibility - Given the Video Hearings Officer user has progressed to the Get Audio File page - Then the page should be accessible - -@Accessibility -Scenario: Change Password page accessibility - Given the Video Hearings Officer user has progressed to the Change Password page - Then the page should be accessible \ No newline at end of file diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/AddParticipants.feature b/AdminWebsite/AdminWebsite.AcceptanceTests/Features/AddParticipants.feature deleted file mode 100644 index fc6637f37..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/AddParticipants.feature +++ /dev/null @@ -1,76 +0,0 @@ -Feature: Add Participants - As a VH-Officer - I need to be able to assign a courtroom account to a hearing - So that a judge is assigned the hearing - -Scenario: Add Participants - Given the Video Hearings Officer user has progressed to the Add Participants page - When the user completes the add participants form - Then the user is on the Video Access Points page - -@Smoketest-Extended -Scenario: Edit New Participant - Given the Video Hearings Officer user has progressed to the Booking Details page - When the user edits a new participant - Then the participant details are updated - -@VIH-4194 -Scenario: Cannot Add Participants with reform email address - Given the Video Hearings Officer user has progressed to the Add Participants page - When the user attempts to add a participant with a reform email - Then an error message is displayed for the invalid email - -Scenario: Add Participant as Interpreter - Given the Video Hearings Officer user has progressed to the Add Participants page - When the user completes the add participants form with an Interpreter - And the user has progressed to the Summary page - Then the user views the information on the summary form - -@VIH-6938 -Scenario: Adding Interpreter sets and disables audio recording option - Given the Video Hearings Officer user has progressed to the Add Participants page - When the user completes the add participants form with an Interpreter - And the user has progressed to the Other Information page - Then audio recording is selected by default with options disabled - -Scenario: Adding participant sets and enables audio recording option - Given the Video Hearings Officer user has progressed to the Add Participants page - When the user completes the add participants form - And the user has progressed to the Other Information page - Then audio recording is selected by default with options enabled - -Scenario: Edit Audio Recording option - Given the Video Hearings Officer user has progressed to the Other information page - When the user sets audio recording to No - Then audio recording is set to No - -Scenario: Removing Participant and Interpreter - Given the Video Hearings Officer user has progressed to the Add Participants page - When the user completes the add participants form with an Interpreter And Litigant In Person - And the user has progressed to the Summary page - And the user removes participant - Then the user views the information on the summary form - -Scenario: Removing Interpreter - Given the Video Hearings Officer user has progressed to the Add Participants page - When the user completes the add participants form with an Interpreter - And the user has progressed to the Summary page - And the user removes Interpreter - Then the user views the information on the summary form - -Scenario: Edit Interpreter - Given the Video Hearings Officer user has progressed to the Add Participants page - And the user completes the add participants form with an Interpreter - When the user adds a Litigant in person - And the user edits an Interpreter - And the user has progressed to the summary page - Then the user views the information on the summary form - -Scenario: Edit Interpreter After Saving Booking - Given the Video Hearings Officer user has progressed to the Add Participants page - And the user completes the add participants form with an Interpreter - And the user has progressed to the Booking Confirmation page - When the user edits booking and adds a Litigant in person - And the user has progressed to the summary page - And the user edits a saved Interpreter - Then the user views the information on the summary form diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/AssignJudge.feature b/AdminWebsite/AdminWebsite.AcceptanceTests/Features/AssignJudge.feature deleted file mode 100644 index 30f731632..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/AssignJudge.feature +++ /dev/null @@ -1,20 +0,0 @@ -Feature: Assign Judge - As a VH-Officer - I need to be able to assign a courtroom account to a hearing - So that a judge is assigned the hearing - -Scenario: Assign Judge - Given the Video Hearings Officer user has progressed to the Assign Judge page - When the user completes the assign judge form - Then the user is on the Add Participants page - -Scenario: Edit Audio Recording - Given the Video Hearings Officer user has progressed to the Booking Details page - When the user edits the audio recording - Then the details are updated - -@VIH-7159 -Scenario: Assign Judge With Email and Phone - Given the Video Hearings Officer user has progressed to the Assign Judge page - When the user completes the assign judge form with phone and email - Then the email and phone details are updated \ No newline at end of file diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/BookingConfirmation.feature b/AdminWebsite/AdminWebsite.AcceptanceTests/Features/BookingConfirmation.feature deleted file mode 100644 index 8ec7e6e55..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/BookingConfirmation.feature +++ /dev/null @@ -1,21 +0,0 @@ -Feature: Booking Confirmation - As a VH-Officer - I need to be able to check that the information is correct before I submit the form - So that I can reduce the chances of mistakes on the booking - -Scenario: Booking Confirmation - Given the Video Hearings Officer user has progressed to the Booking Confirmation page - When the user views the booking confirmation form - And the user clicks the Return to dashboard link - Then the user is on the Dashboard page - -Scenario: Booking Confirmation Book Another Hearing - Given the Video Hearings Officer user has progressed to the Booking Confirmation page - When the user views the booking confirmation form - And the user clicks the Book another hearing button - Then the user is on the Hearing Details page - -Scenario: Email Notification For Newly Added Participants - Given the Video Hearings Officer user has progressed to the Booking Confirmation page - When the user views the booking confirmation form - Then the participant has been notified \ No newline at end of file diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/BookingDetails.feature b/AdminWebsite/AdminWebsite.AcceptanceTests/Features/BookingDetails.feature deleted file mode 100644 index 688ee4d1e..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/BookingDetails.feature +++ /dev/null @@ -1,58 +0,0 @@ -Feature: Booking Details - As a VH-Officer - I need to be able to view the details of a booking - So that I can access the hearing information - -@Smoketest @Smoketest-Extended -Scenario: Bookings Details for single day hearing - Given the Video Hearings Officer user has progressed to the Booking Details page - When the user views the booking details - And the user confirms the hearing - Then the hearing is available in video web - And the conference details match the hearing - -@Smoketest @Smoketest-Extended -Scenario: Bookings Details for multi days hearing - Given the Video Hearings Officer user has progressed to the Booking Details page of a multi days hearing - When the user views the booking details - And the user confirms all the hearings - Then the hearings are available in video web - And the conference details match the hearing - -Scenario: Cancel a booked hearing - Given the Video Hearings Officer user has progressed to the Booking Details page - When the user cancels the hearing - Then the hearing is cancelled - -Scenario: Cancel a booked hearing without reason - Given the Video Hearings Officer user has progressed to the Booking Details page - When the user cancels the hearing without a cancel reason - Then an error message is displayed and hearing is not cancelled - -Scenario: Cancel a booked hearing with Cancel Reason - Given the Video Hearings Officer user has progressed to the Booking Details page - When the user cancels the hearing with other reason and no text - Then an error message is displayed for the details box and hearing is not cancelled - -Scenario: Cancel a booked hearing with Other cancel reason - Given the Video Hearings Officer user has progressed to the Booking Details page - When the user cancels the hearing with other reason and detail text - Then the hearing is cancelled - -@Smoketest-Extended -Scenario: Cancel a confirmed hearing - Given the Video Hearings Officer user has progressed to the Booking Details page - When the user confirms the hearing - Then the hearing is available in video web - When the user cancels the hearing - Then the hearing is cancelled - And the conference is deleted - -@VIH-2150 @VIH-3734 @Ignore -Scenario: Case admin user can view another users booking - Given the Video Hearings Officer user has progressed to the Booking Confirmation page - And the user logs out - And the Case Admin user has progressed to the Dashboard page - When the user navigates to the Bookings List page - And selects a booking - Then the user views the booking details diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/BookingsList.feature b/AdminWebsite/AdminWebsite.AcceptanceTests/Features/BookingsList.feature deleted file mode 100644 index b37958f40..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/BookingsList.feature +++ /dev/null @@ -1,10 +0,0 @@ -Feature: Bookings List - As a VH-Officer - I need to be able to check all the future bookings - So that I can drill down for hearing information - -Scenario: Bookings List - Given the Video Hearings Officer user has progressed to the Bookings List page - When the user views the bookings list - And selects a booking - Then the user is on the Booking Details page \ No newline at end of file diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/ChangePassword.feature b/AdminWebsite/AdminWebsite.AcceptanceTests/Features/ChangePassword.feature deleted file mode 100644 index 053935501..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/ChangePassword.feature +++ /dev/null @@ -1,10 +0,0 @@ -Feature: Change Password - In order to manage users - As an admin web user - I want the ability to reset users passwords - -@VIH-5416 @Smoketest-Extended @VIH-6530 -Scenario: Change Password - Given the Video Hearings Officer user has progressed to the Change Password page - When the user resets the participants password - Then the changed password message can be dismissed diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/Dashboard.feature b/AdminWebsite/AdminWebsite.AcceptanceTests/Features/Dashboard.feature deleted file mode 100644 index 848542840..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/Dashboard.feature +++ /dev/null @@ -1,9 +0,0 @@ -Feature: Dashboard - In order to have an overview of the various user options - As a registered Video Hearings administrator - I want to be able to quickly access different screens within the application - -Scenario: Video Hearings Officer Dashboard - Given the Video Hearings Officer user has progressed to the Dashboard page - Then there are various dashboard options available - And they can navigate to the Open Government licence diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/EditParticipantName.feature b/AdminWebsite/AdminWebsite.AcceptanceTests/Features/EditParticipantName.feature deleted file mode 100644 index c22db960e..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/EditParticipantName.feature +++ /dev/null @@ -1,29 +0,0 @@ -Feature: EditParticipantName - In order to manage users - As an admin web user - I want the ability to edit participant name - -@VIH-6637 -Scenario Outline: Edit Participant Name - Given the Video Hearings Officer user has progressed to the Edit Participant Name page - When I search for '' by contact email - And then update First and Last Name - Then the participant's details are updated - Examples: - | ParticipantTypes | - | Individual | - | Representative | - | PanelMember | - - -@VIH-6637 -Scenario: Edit Participant Does Not Exists - Given the Video Hearings Officer user has progressed to the Edit Participant Name page - When I search for 'Unknown' by contact email - Then the user does not exists message is displayed - -@VIH-6637 -Scenario: Edit Participant Should Not Retrieve Judge - Given the Video Hearings Officer user has progressed to the Edit Participant Name page - When I search for 'Judge' by contact email - Then the user is not allowed to be edited message is displayed \ No newline at end of file diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/Errors.feature b/AdminWebsite/AdminWebsite.AcceptanceTests/Features/Errors.feature deleted file mode 100644 index 44d2bd3a4..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/Errors.feature +++ /dev/null @@ -1,4 +0,0 @@ -Feature: Error Pages - As a registered video hearings user - I would expect information error messages when things go wrong - So that I know how to resolve the issue diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/GetAudioFile.feature b/AdminWebsite/AdminWebsite.AcceptanceTests/Features/GetAudioFile.feature deleted file mode 100644 index 20855c79a..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/GetAudioFile.feature +++ /dev/null @@ -1,21 +0,0 @@ -Feature: Get Audio File - In order to be able to retrieve audio recordings of hearings - As a Video Hearings Officier - I want to be able to search for audio recordings - -@VIH-5331 @Smoketest-Extended @AudioRecording -Scenario: Get Audio File - Given I have an audio recording for the closed conference - And the Video Hearings Officer user has progressed to the Get Audio File page - When I search for the audio recording by case number - Then the audio recording is retrieved - And the link can be retrieved - -#VIH-7984 -@Smoketest-Extended @AudioRecording -Scenario: Get Audio File For Main Hearing Room And Interpreter - Given I have an audio recording for the closed conference with an Interpreter - And the Video Hearings Officer user has progressed to the Get Audio File page - When I search for the audio recording by case number - Then the audio recording is retrieved - And the links can be retrieved \ No newline at end of file diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/HearingDetails.feature b/AdminWebsite/AdminWebsite.AcceptanceTests/Features/HearingDetails.feature deleted file mode 100644 index 12f9002be..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/HearingDetails.feature +++ /dev/null @@ -1,21 +0,0 @@ -Feature: Hearing Details - As a VH-Officer - I need to be able to add hearing details - So that the correct information is available to all participants who are joining the hearing - -Scenario: Hearing Details - Given the Video Hearings Officer user has progressed to the Hearing Details page - When the user completes the hearing details form - Then the user is on the Hearing Schedule page - -@Smoketest-Extended -Scenario: Edit Hearing Details - Given the Video Hearings Officer user has progressed to the Booking Details page - When the user edits the hearing details - Then the details are updated - -#Scenario: Hearing details send questionnaires -# Given the Video Hearings Officer user has progressed to the Hearing Details page -# When the user elects to send the questionnaires -# And progresses from the Hearing Schedule page to the Summary page -# Then the questionnaires have been sent \ No newline at end of file diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/HearingSchedule.feature b/AdminWebsite/AdminWebsite.AcceptanceTests/Features/HearingSchedule.feature deleted file mode 100644 index f9f210936..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/HearingSchedule.feature +++ /dev/null @@ -1,32 +0,0 @@ -Feature: Hearing Schedule - As a VH-Officer - I need to be able to add hearing schedule details - So that the correct information is available to all participants who are joining the hearing - -Scenario: Hearing Schedule - Given the Video Hearings Officer user has progressed to the Hearing Schedule page - When the user completes the hearing schedule form - Then the user is on the Assign Judge page - -Scenario: Hearing Schedule with multi days hearing - Given the Video Hearings Officer user has progressed to the Hearing Schedule page - When the user completes the hearing schedule form with multi days - Then the user is on the Assign Judge page - -@Smoketest-Extended -Scenario: Edit Hearing Schedule - Given the Video Hearings Officer user has progressed to the Booking Details page - When the user edits the hearing schedule - Then the details are updated - -Scenario: Hearing schedule date must be in the future - Given the Video Hearings Officer user has progressed to the Hearing Schedule page - When the user attempts to set a date in the past - Then an error message appears to enter a future date - And the user cannot proceed to the next page - -Scenario: Hearing schedule time must be in the future - Given the Video Hearings Officer user has progressed to the Hearing Schedule page - When the user attempts to set a time in the past - Then an error message appears to enter a future time - And the user cannot proceed to the next page \ No newline at end of file diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/Login.feature b/AdminWebsite/AdminWebsite.AcceptanceTests/Features/Login.feature deleted file mode 100644 index cdcfd8610..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/Login.feature +++ /dev/null @@ -1,33 +0,0 @@ -Feature: Login - As a registered video hearings user - I would like to login and Logout - So that I can access and sign out of the application - -@Ignore -Scenario: Case Admin login - Given a Case Admin is on the login page - When they attempt to login with valid credentials - Then they should be on the Dashboard page - And they should be able to logout - -Scenario: Video Hearings Officer login - Given a Video Hearings Officer is on the login page - When they attempt to login with valid credentials - Then they should be on the Dashboard page - And they should be able to logout - -Scenario: Judge login denied - Given a Judge is on the login page - When they attempt to login with valid credentials - Then they should be on the Unauthorised page - -Scenario: Panel member login denied - Given a Panel Member is on the login page - When they attempt to login with valid credentials - Then they should be on the Unauthorised page - -@Winger -Scenario: Winger login denied - Given a Winger is on the login page - When they attempt to login with valid credentials - Then they should be on the Unauthorised page \ No newline at end of file diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/OtherInformation.feature b/AdminWebsite/AdminWebsite.AcceptanceTests/Features/OtherInformation.feature deleted file mode 100644 index 53aff58f6..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/OtherInformation.feature +++ /dev/null @@ -1,15 +0,0 @@ -Feature: Other Information - As a VH-Officer - I need to be able to add other information to a hearing - So that I can keep a note of any extra hearing information - -Scenario: Other Information - Given the Video Hearings Officer user has progressed to the Other Information page - When the user completes the other information form - Then the user is on the Summary page - -@Smoketest-Extended -Scenario: Edit Other Information - Given the Video Hearings Officer user has progressed to the Booking Details page - When the user edits the other information - Then the details are updated \ No newline at end of file diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/Questionnaire.feature b/AdminWebsite/AdminWebsite.AcceptanceTests/Features/Questionnaire.feature deleted file mode 100644 index 44fae0081..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/Questionnaire.feature +++ /dev/null @@ -1,16 +0,0 @@ -Feature: Questionnaire - In order to view submitted questionnaire answers - As a Video Hearings Offiver - I want to have access to those answers - -@Smoketest-Extended @QuestionnairesAlreadyPartiallyCompleted -Scenario: Questionnaire Individual - Given there is a hearing where an Individual participant has completed some questionnaire answers - And the Video Hearings Officer user has progressed to the Questionnaire page - Then the user can see a list of answers including the Individual specific answer - -@Smoketest-Extended @QuestionnairesAlreadyPartiallyCompleted -Scenario: Questionnaire Representative - Given there is a hearing where an Representative participant has completed some questionnaire answers - And the Video Hearings Officer user has progressed to the Questionnaire page - Then the user can see a list of answers including the Representative specific answer diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/QuickLinks.feature b/AdminWebsite/AdminWebsite.AcceptanceTests/Features/QuickLinks.feature deleted file mode 100644 index 3c6803973..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/QuickLinks.feature +++ /dev/null @@ -1,41 +0,0 @@ -Feature: QuickLinks - As a VH-Officer - I need to be able to check that the information is correct before I submit the form - So that I can reduce the chances of mistakes on the booking - - -@Smoketest @Smoketest-Extended -Scenario: VHO Books Hearing Without Any Participants Except The Judge - Given the Video Hearings Officer user has progressed to the Add Participants page - When the user does not add participants and is on the Video Access Points page - Then the user is on the Video Access Points page - -@Smoketest @Smoketest-Extended -Scenario: VHO Confirms Booking Without Any Participants Except The Judge - Given the Video Hearings Officer user has progressed to the Add Participants page - When the user does not add participants and is on the Video Access Points page - And the user completes the Video access points form - And the user completes the other information form - And the user views the information on the summary form - And the user views the booking details after seeing the successful booking message - And the user confirms the hearing - Then the hearing is available in video web - And the conference details match the hearing - -Scenario: VHO Removes The Only Participant In The List - Given the Video Hearings Officer user has progressed to the Add Participants page - When the user adds an Individual - And the user is on the Video Access Points page - And the user completes the Video access points form - And the user completes the other information form - And the user removes Individual - Then the user views the information on the summary form - -Scenario: VHO Removes One Participant From The List Of Many Participants - Given the Video Hearings Officer user has progressed to the Add Participants page - When the user completes the add participants form - And the user is on the Video Access Points page - And the user completes the Video access points form - And the user completes the other information form - And the user removes Individual - Then the user views the information on the summary form \ No newline at end of file diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/Summary.feature b/AdminWebsite/AdminWebsite.AcceptanceTests/Features/Summary.feature deleted file mode 100644 index dbeeb11ea..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/Summary.feature +++ /dev/null @@ -1,16 +0,0 @@ -Feature: Summary - As a VH-Officer - I need to be able to check that the information is correct before I submit the form - So that I can reduce the chances of mistakes on the booking - -@Smoketest-Extended -Scenario: Summary - Given the Video Hearings Officer user has progressed to the Summary page - When the user views the information on the summary form - Then the user is on the Booking Confirmation page - -@Smoketest-Extended -Scenario: Summary for multi days hearing - Given the Video Hearings Officer user has progressed to the Summary page of a multi days hearing - When the user views the information on the summary form - Then the user is on the Booking Confirmation page \ No newline at end of file diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/TestHelpers.feature b/AdminWebsite/AdminWebsite.AcceptanceTests/Features/TestHelpers.feature deleted file mode 100644 index 766b2f3b6..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/TestHelpers.feature +++ /dev/null @@ -1,8 +0,0 @@ -Feature: Test Helpers - In order to reduce time manual testing - As a helper - I want to be able to execute certain functionality quickly - -@Ignore @KeepDataAfterTest -Scenario: Add hearings with questionnaire results - Given I have 10 hearings with questionnaire results diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/VideoAccessPoints.feature b/AdminWebsite/AdminWebsite.AcceptanceTests/Features/VideoAccessPoints.feature deleted file mode 100644 index 126f51e58..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Features/VideoAccessPoints.feature +++ /dev/null @@ -1,14 +0,0 @@ -Feature: Video Access Points - As a VH-Officer - I need to be able to add video access points to a hearing - So that 0 or more video access points are assigned to the hearing - -Scenario: Add a video access endpoint - Given the Video Hearings Officer user has progressed to the Video access points page - When the user completes the Video access points form - Then the user is on the Other Information page - -Scenario: Edit a video access endpoint - Given the Video Hearings Officer user has progressed to the Booking Details page - When the user edits an endpoint display name - Then the details are updated diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Helpers/DateHelper.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Helpers/DateHelper.cs deleted file mode 100644 index e947845dc..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Helpers/DateHelper.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; - -namespace AdminWebsite.AcceptanceTests.Helpers -{ - public class DateHelper - { - public static DateTime GetNextIfDayIfNotAWorkingDay(DateTime date) - { - while (IsWeekend(date)) - { - date = date.AddDays(1); - } - - return date; - } - - public static DateTime GetNextWorkingDay(DateTime date, int minDays) - { - var days = 0; - while (days < minDays) - { - days++; - date = date.AddDays(1); - date = GetNextIfDayIfNotAWorkingDay(date); - } - - return date; - } - - private static bool IsWeekend(DateTime date) - { - return date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday; - } - } -} \ No newline at end of file diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Helpers/TestContext.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Helpers/TestContext.cs deleted file mode 100644 index 74a13340d..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Helpers/TestContext.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.Collections.Generic; -using AcceptanceTests.Common.Api.Hearings; -using AcceptanceTests.Common.AudioRecordings; -using AcceptanceTests.Common.Data.Time; -using AcceptanceTests.Common.Driver.Drivers; -using AdminWebsite.AcceptanceTests.Configuration; -using AdminWebsite.AcceptanceTests.Data; -using AdminWebsite.AcceptanceTests.Pages; -using AdminWebsite.Services.Models; -using TestApi.Contract.Dtos; -using Notify.Interfaces; - -namespace AdminWebsite.AcceptanceTests.Helpers -{ - public class TestContext - { - public TestApiManager Api { get; set; } - public List AzureStorage { get; set; } - public UserDto CurrentUser { get; set; } - public DriverSetup Driver { get; set; } - public Page Route { get; set; } - public Test Test { get; set; } - public TimeZone TimeZone { get; set; } - public string Token { get; set; } - public List Users { get; set; } - public AdminWebConfig WebConfig { get; set; } - public IAsyncNotificationClient NotifyClient { get; set; } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Helpers/UserDetailsResponseToUsersMapper.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Helpers/UserDetailsResponseToUsersMapper.cs deleted file mode 100644 index 0118b1a76..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Helpers/UserDetailsResponseToUsersMapper.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using TestApi.Contract.Dtos; -using TestApi.Contract.Responses; - -namespace AdminWebsite.AcceptanceTests.Helpers -{ - public static class UserDetailsResponseToUsersMapper - { - public static List Map(List usersResponses) - { - return usersResponses.Select(user => new UserDto() - { - Application = user.Application, - ContactEmail = user.ContactEmail, - CreatedDate = user.CreatedDate, - DisplayName = user.DisplayName, - FirstName = user.FirstName, - Id = user.Id, - IsProdUser = user.IsProdUser, - LastName = user.LastName, - Number = user.Number, - TestType = user.TestType, - UserType = user.UserType, - Username = user.Username - }) - .ToList(); - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Helpers/Users.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Helpers/Users.cs deleted file mode 100644 index 87563ac10..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Helpers/Users.cs +++ /dev/null @@ -1,103 +0,0 @@ -using System.Collections.Generic; -using System.Data; -using System.Linq; -using TestApi.Contract.Dtos; -using TestApi.Contract.Enums; - -namespace AdminWebsite.AcceptanceTests.Helpers -{ - public static class Users - { - public static UserDto GetDefaultParticipantUser(List users) - { - return users.FirstOrDefault(x => x.UserType == UserType.Individual); - } - - public static UserDto GetJudgeUser(List users) - { - return users.FirstOrDefault(x => x.UserType == UserType.Judge); - } - - public static UserDto GetIndividualUser(List users) - { - return users.FirstOrDefault(x => x.UserType == UserType.Individual); - } - - public static UserDto GetRepresentativeUser(List users) - { - return users.FirstOrDefault(x => x.UserType == UserType.Representative); - } - - public static UserDto GetPanelMemberUser(List users) - { - return users.FirstOrDefault(x => x.UserType == UserType.PanelMember); - } - - public static UserDto GetWingerUser(List users) - { - return users.FirstOrDefault(x => x.UserType == UserType.Winger); - } - - public static UserDto GetUserFromDisplayName(List users, string displayName) - { - return users.FirstOrDefault(x => x.DisplayName.ToLower().Contains(displayName.ToLower().Replace(" ", ""))); - } - - public static UserDto GetUser(List users, string numberString, string user) - { - var number = GetNumberFromWords(numberString); - - if (user.ToLowerInvariant().Contains("judge")) - { - return users.First(x => x.UserType == UserType.Judge); - } - - if (user.ToLowerInvariant().Contains("individual")) - { - return GetAllUsersOfType(users, UserType.Individual)[number]; - } - - if (user.ToLowerInvariant().Contains("representative")) - { - return GetAllUsersOfType(users, UserType.Representative)[number]; - } - - if (user.ToLowerInvariant().Contains("panel member") || - user.ToLowerInvariant().Contains("panelmember")) - { - return GetAllUsersOfType(users, UserType.PanelMember)[number]; - } - - if (user.ToLowerInvariant().Contains("observer")) - { - return GetAllUsersOfType(users, UserType.Observer)[number]; - } - - if (user.ToLowerInvariant().Contains("video hearings officer") || - user.ToLowerInvariant().Contains("videohearingsofficer")) - { - return users.First(x => x.UserType == UserType.VideoHearingsOfficer); - } - - throw new DataException($"No matching user could be found from '{user}'"); - } - - private static int GetNumberFromWords(string text) - { - var numberTable = new Dictionary - { - {"one",1}, - {"two",2}, - {"three",3}, - {"four",4}, - {"five",5} - }; - return numberTable[text]; - } - - private static List GetAllUsersOfType(List users, UserType userType) - { - return users.FindAll(x => x.UserType == userType); - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Hooks/ConfigHooks.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Hooks/ConfigHooks.cs deleted file mode 100644 index 79966246f..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Hooks/ConfigHooks.cs +++ /dev/null @@ -1,174 +0,0 @@ -using System.Collections.Generic; -using System.Threading.Tasks; -using AcceptanceTests.Common.Configuration; -using AcceptanceTests.Common.Configuration.Users; -using AcceptanceTests.Common.Data.TestData; -using AcceptanceTests.Common.Exceptions; -using AdminWebsite.AcceptanceTests.Configuration; -using AdminWebsite.AcceptanceTests.Data; -using AdminWebsite.AcceptanceTests.Data.TestData; -using AdminWebsite.AcceptanceTests.Helpers; -using BookingsApi.Contract.V1.Responses; -using TestApi.Contract.Dtos; -using FluentAssertions; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.Options; -using TechTalk.SpecFlow; -using ConfigurationManager = AcceptanceTests.Common.Configuration.ConfigurationManager; -using HearingDetails = AdminWebsite.AcceptanceTests.Data.HearingDetails; -using AdminWebsite.Security; -using AdminWebsite.Configuration; - -namespace AdminWebsite.AcceptanceTests.Hooks -{ - [Binding] - public sealed class ConfigHooks - { - private readonly IConfigurationRoot _configRoot; - - public ConfigHooks(TestContext context) - { - _configRoot = ConfigurationManager.BuildConfig("f99a3fe8-cf72-486a-b90f-b65c27da84ee", "ef943d1a-7506-483b-92b7-dc6e6b41270a"); - context.WebConfig = new AdminWebConfig(); - context.Users = new List(); - } - - [BeforeScenario(Order = (int)HooksSequence.ConfigHooks)] - public async Task RegisterSecrets(TestContext context) - { - RegisterAzureSecrets(context); - RegisterTestUserSecrets(context); - RegisterDefaultData(context); - RegisterHearingServices(context); - RegisterIsLive(context); - RegisterUsingEjud(context); - RegisterSeleniumElementTimeout(context); - RegisterWowzaSettings(context); - RegisterSauceLabsSettings(context); - RegisterKinlySettings(context); - RegisterNotifySettings(context); - RunningAdminWebLocally(context); - await GenerateBearerTokens(context); - SetBookingConfirmToggleStatus(context); - } - - private void RegisterAzureSecrets(TestContext context) - { - context.WebConfig.AzureAdConfiguration = Options.Create(_configRoot.GetSection("AzureAd").Get()).Value; - ConfigurationManager.VerifyConfigValuesSet(context.WebConfig.AzureAdConfiguration); - } - - private void RegisterTestUserSecrets(TestContext context) - { - context.WebConfig.TestConfig = Options.Create(_configRoot.GetSection("TestUserSecrets").Get()).Value; - context.WebConfig.TestConfig.TargetBrowser.Should().NotBeNull(); - context.WebConfig.TestConfig.TargetDevice.Should().NotBeNull(); - context.WebConfig.TestConfig.TargetOS.Should().NotBeNull(); - context.WebConfig.TestConfig.TestUsernameStem.Should().NotBeNull(); - context.WebConfig.TestConfig.TestUserPassword.Should().NotBeNull(); - } - - private static void RegisterDefaultData(TestContext context) - { - context.Test = new Test - { - AddParticipant = new AddParticipant(), - AssignJudge = new AssignJudge(), - CommonData = LoadXmlFile.SerialiseCommonData(), - HearingDetails = new HearingDetails(), - HearingParticipants = new List(), - HearingResponse = new HearingDetailsResponse(), - HearingSchedule = new HearingSchedule(), - TestData = new DefaultDataManager().SerialiseTestData(), - VideoAccessPoints = new VideoAccessPoints() - }; - context.Test.AddParticipant = context.Test.TestData.AddParticipant; - } - - private void RegisterHearingServices(TestContext context) - { - context.WebConfig.VhServices = GetTargetTestEnvironment() == string.Empty ? Options.Create(_configRoot.GetSection("VhServices").Get()).Value - : Options.Create(_configRoot.GetSection($"Testing.{GetTargetTestEnvironment()}.VhServices").Get()).Value; - if (context.WebConfig.VhServices == null && GetTargetTestEnvironment() != string.Empty) - { - throw new TestSecretsFileMissingException(GetTargetTestEnvironment()); - } - ConfigurationManager.VerifyConfigValuesSet(context.WebConfig.VhServices); - } - - private void RegisterIsLive(TestContext context) - { - context.WebConfig.IsLive = _configRoot.GetValue("IsLive"); - context.WebConfig.Should().NotBeNull(); - } - - private void RegisterUsingEjud(TestContext context) - { - context.WebConfig.UsingEjud = _configRoot.GetValue("UsingEjud"); - } - - private void RegisterSeleniumElementTimeout(TestContext context) - { - context.WebConfig.SeleniumElementTimeout = _configRoot.GetValue("SeleniumElementTimeout"); - } - - private void RegisterWowzaSettings(TestContext context) - { - context.WebConfig.Wowza = Options.Create(_configRoot.GetSection("WowzaConfiguration").Get()).Value; - ConfigurationManager.VerifyConfigValuesSet(context.WebConfig.Wowza); - } - - private void RegisterKinlySettings(TestContext context) - { - context.WebConfig.KinlyConfiguration = Options.Create(_configRoot.GetSection("KinlyConfiguration").Get()).Value; - context.WebConfig.KinlyConfiguration.ConferencePhoneNumber.Should().NotBeNullOrWhiteSpace(); - } - - private void RegisterSauceLabsSettings(TestContext context) - { - context.WebConfig.SauceLabsConfiguration = RunOnSauceLabsFromLocal() ? Options.Create(_configRoot.GetSection("LocalSaucelabs").Get()).Value - : Options.Create(_configRoot.GetSection("Saucelabs").Get()).Value; - if (!context.WebConfig.SauceLabsConfiguration!.RunningOnSauceLabs()) return; - context.WebConfig.SauceLabsConfiguration.SetRemoteServerUrlForDesktop(context.Test.CommonData.CommonConfig.SauceLabsServerUrl); - context.WebConfig.SauceLabsConfiguration.AccessKey.Should().NotBeNullOrWhiteSpace(); - context.WebConfig.SauceLabsConfiguration.Username.Should().NotBeNullOrWhiteSpace(); - context.WebConfig.SauceLabsConfiguration.RealDeviceApiKey.Should().NotBeNullOrWhiteSpace(); - } - - private static string GetTargetTestEnvironment() - { - return NUnit.Framework.TestContext.Parameters["TargetTestEnvironment"] ?? string.Empty; - } - - private static bool RunOnSauceLabsFromLocal() - { - return NUnit.Framework.TestContext.Parameters["RunOnSauceLabs"] != null && - NUnit.Framework.TestContext.Parameters["RunOnSauceLabs"].Equals("true"); - } - - private void RegisterNotifySettings(TestContext context) - { - context.WebConfig.NotifyConfiguration = Options.Create(_configRoot.GetSection("NotifyConfiguration").Get()).Value; - ConfigurationManager.VerifyConfigValuesSet(context.WebConfig.NotifyConfiguration); - } - - private static void RunningAdminWebLocally(TestContext context) - { - context.WebConfig.VhServices.RunningAdminWebLocally = context.WebConfig.VhServices.AdminWebUrl.Contains("localhost"); - } - - private static async Task GenerateBearerTokens(TestContext context) - { - var tokenProvider = new TokenProvider(Options.Create(context.WebConfig.AzureAdConfiguration)); - context.Token = await tokenProvider.GetClientAccessToken(context.WebConfig.AzureAdConfiguration.ClientId, context.WebConfig.AzureAdConfiguration.ClientSecret, context.WebConfig.VhServices.TestApiResourceId); - context.Token.Should().NotBeNullOrEmpty(); - } - - private void SetBookingConfirmToggleStatus(TestContext context) - { - var featureToggle = - new FeatureToggles(_configRoot["FeatureToggle:SDKKey"], _configRoot["AzureAd:ResourceId"]); - context.WebConfig.BookingConfirmToggle = featureToggle.BookAndConfirmToggle(); - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Hooks/DataHooks.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Hooks/DataHooks.cs deleted file mode 100644 index 375faaabe..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Hooks/DataHooks.cs +++ /dev/null @@ -1,228 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net; -using System.Net.Http; -using System.Threading.Tasks; -using AcceptanceTests.Common.Api.Helpers; -using AcceptanceTests.Common.AudioRecordings; -using AdminWebsite.AcceptanceTests.Data; -using AdminWebsite.AcceptanceTests.Helpers; -using AdminWebsite.Services; -using BookingsApi.Contract.V1.Requests; -using BookingsApi.Contract.V1.Requests.Enums; -using BookingsApi.Contract.V1.Responses; -using FluentAssertions; -using Microsoft.Extensions.Caching.Memory; -using TechTalk.SpecFlow; -using TestApi.Contract.Enums; -using TestApi.Contract.Requests; -using TestApi.Contract.Responses; -using VideoApi.Contract.Enums; -using VideoApi.Contract.Responses; -using RoomType = AdminWebsite.Testing.Common.Data.RoomType; - -namespace AdminWebsite.AcceptanceTests.Hooks -{ - [Binding] - public sealed class DataHooks - { - private const int ALLOCATE_USERS_FOR_MINUTES = 3; - private readonly TestContext _c; - private readonly ScenarioContext _scenario; - - public DataHooks(TestContext context, ScenarioContext scenario) - { - _c = context; - _scenario = scenario; - } - - [BeforeScenario(Order = (int)HooksSequence.DataHooks)] - public void AddExistingUsers(ScenarioContext scenario) - { - AllocateUsers(); - - var exist = CheckIfParticipantsAlreadyExistInTheDb(); - - if (exist && !scenario.ScenarioInfo.Tags.Contains("QuestionnairesAlreadyPartiallyCompleted")) return; - _c.Test.HearingResponse = CreateHearing(); - RefreshJudgeDropdownList(); - } - - private void AllocateUsers() - { - var userTypes = new List - { - UserType.Judge, - UserType.VideoHearingsOfficer - }; - - if (_scenario.ScenarioInfo.Tags.Contains(UserType.Winger.ToString())) - { - userTypes.Add(UserType.Winger); - userTypes.Add(UserType.Individual); - } - else - { - userTypes.Add(UserType.CaseAdmin); - userTypes.Add(UserType.Individual); - userTypes.Add(UserType.Representative); - userTypes.Add(UserType.PanelMember); - } - - var request = new AllocateUsersRequest() - { - Application = Application.AdminWeb, - ExpiryInMinutes = ALLOCATE_USERS_FOR_MINUTES, - IsProdUser = _c.WebConfig.IsLive, - IsEjud = _c.WebConfig.UsingEjud, - TestType = TestType.Automated, - UserTypes = userTypes - }; - NUnit.Framework.TestContext.WriteLine($"AllocateUsersRequest: request.Application {request.Application} request.ExpiryInMinutes {request.ExpiryInMinutes} request.IsProdUser {request.IsProdUser} request.IsEjud {request.IsEjud} request.TestType {request.TestType} request.UserTypes {request.UserTypes}"); - - var response = _c.Api.AllocateUsers(request); - NUnit.Framework.TestContext.WriteLine($"AllocateUsersRequest Response: {response.Content}"); - response.StatusCode.Should().Be(HttpStatusCode.OK); - response.Should().NotBeNull(); - var users = RequestHelper.Deserialise>(response.Content); - users.Should().NotBeNullOrEmpty(); - _c.Users = UserDetailsResponseToUsersMapper.Map(users); - _c.Users.Should().NotBeNullOrEmpty(); - } - - [BeforeScenario(Order = (int)HooksSequence.AudioRecording)] - public async Task AddAudioRecording(ScenarioContext scenario) - { - if (!scenario.ScenarioInfo.Tags.Contains("AudioRecording")) return; - - _c.Test.HearingResponse = CreateHearing(true); - _c.Test.ConferenceResponse = CreateConference(); - StartTheHearing(); - CloseTheConference(); - - var file = FileManager.CreateNewAudioFile("TestAudioFile.mp4", _c.Test.HearingResponse.Id.ToString()); - - _c.AzureStorage = new List - { - new AzureStorageManager() - .SetStorageAccountName(_c.WebConfig.Wowza.StorageAccountName) - .SetStorageAccountKey(_c.WebConfig.Wowza.StorageAccountKey) - .SetStorageContainerName(_c.WebConfig.Wowza.StorageContainerName) - .CreateBlobClient(_c.Test.HearingResponse.Id.ToString()) - }; - - await _c.AzureStorage[0].UploadAudioFileToStorage(file); - FileManager.RemoveLocalAudioFile(file); - } - - private bool CheckIfParticipantsAlreadyExistInTheDb() - { - var exist = false; - - foreach (var response in from user in _c.Users - where user.UserType != UserType.CaseAdmin && user.UserType != UserType.VideoHearingsOfficer - select _c.Api.GetPersonByUsername(user.Username)) - { - exist = response.StatusCode == HttpStatusCode.OK; - } - - return exist; - } - - private HearingDetailsResponse CreateHearing(bool withAudioRecording = false) - { - var isWinger = _c.Users.Any(x => x.UserType == UserType.Winger); - - var hearingRequest = isWinger - ? CreateHearingForWinger() - : new HearingRequestBuilder() - .WithUsers(_c.Users) - .WithAudioRecordingRequired(withAudioRecording) - .Build(); - - var hearingResponse = _c.Api.CreateHearing(hearingRequest); - hearingResponse.StatusCode.Should().Be(HttpStatusCode.Created); - var hearing = RequestHelper.Deserialise(hearingResponse.Content); - hearing.Should().NotBeNull(); - ParticipantsShouldExistInTheDb(hearing.Id); - NUnit.Framework.TestContext.WriteLine($"Hearing created with Hearing Id {hearing.Id}"); - return hearing; - } - - private CreateHearingRequest CreateHearingForWinger() - { - return new HearingRequestBuilder() - .WithUsers(_c.Users) - .WithCACDCaseType() - .WithAudioRecordingRequired(false) - .Build(); - } - - private ConferenceDetailsResponse CreateConference() - { - var vho = _c.Users.First(x => x.UserType == UserType.VideoHearingsOfficer); - - var request = new UpdateBookingStatusRequest() - { - UpdatedBy = vho.Username, - CancelReason = null, - Status = UpdateBookingStatus.Created - }; - - var response = _c.Api.ConfirmHearingToCreateConference(_c.Test.HearingResponse.Id, request); - response.StatusCode.Should().Be(HttpStatusCode.Created); - var conference = RequestHelper.Deserialise(response.Content); - NUnit.Framework.TestContext.WriteLine($"Conference created with Conference Id {conference.Id}"); - return conference; - } - - private void ParticipantsShouldExistInTheDb(Guid hearingId) - { - var hearingResponse = _c.Api.GetHearing(hearingId); - var hearing = RequestHelper.Deserialise(hearingResponse.Content); - hearing.Should().NotBeNull(); - foreach (var user in _c.Users.Where(user => - user.UserType != UserType.CaseAdmin && user.UserType != UserType.VideoHearingsOfficer)) - { - hearing.Participants.Any(x => x.LastName.Equals(user.LastName)).Should().BeTrue(); - } - } - - private void StartTheHearing() - { - var judge = _c.Test.ConferenceResponse.Participants.First(x => x.UserRole == UserRole.Judge); - - var request = new ConferenceEventRequestBuilder() - .WithConferenceId(_c.Test.ConferenceResponse.Id) - .WithParticipantId(judge.Id) - .WithEventType(EventType.Start) - .FromRoomType(null) - .Build(); - - var response = _c.Api.SendEvent(request); - response.StatusCode.Should().Be(HttpStatusCode.NoContent); - } - - private void CloseTheConference() - { - var judge = _c.Test.ConferenceResponse.Participants.First(x => x.UserRole == UserRole.Judge); - - var request = new ConferenceEventRequestBuilder() - .WithConferenceId(_c.Test.ConferenceResponse.Id) - .WithParticipantId(judge.Id) - .WithEventType(EventType.Close) - .FromRoomType(RoomType.HearingRoom) - .Build(); - - var response = _c.Api.SendEvent(request); - response.StatusCode.Should().Be(HttpStatusCode.NoContent); - } - - private void RefreshJudgeDropdownList() - { - var response = _c.Api.RefreshJudgesCache(); - response.IsSuccessful.Should().BeTrue(); - } - } -} \ No newline at end of file diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Hooks/DriverHooks.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Hooks/DriverHooks.cs deleted file mode 100644 index 58343dca1..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Hooks/DriverHooks.cs +++ /dev/null @@ -1,100 +0,0 @@ -using System.Collections.Generic; -using AcceptanceTests.Common.Data.Time; -using AcceptanceTests.Common.Driver.Drivers; -using AcceptanceTests.Common.Driver.Settings; -using AdminWebsite.AcceptanceTests.Helpers; -using BoDi; -using TechTalk.SpecFlow; -using TestApi.Contract.Dtos; - -namespace AdminWebsite.AcceptanceTests.Hooks -{ - [Binding] - public sealed class DriverHooks - { - private Dictionary _browsers; - private readonly IObjectContainer _objectContainer; - - public DriverHooks(IObjectContainer objectContainer) - { - _objectContainer = objectContainer; - } - - [BeforeTestRun(Order = (int)HooksSequence.CleanUpDriverInstances)] - [AfterTestRun(Order = (int)HooksSequence.CleanUpDriverInstances)] - public static void KillAnyLocalProcesses() - { - DriverManager.KillAnyLocalDriverProcesses(); - } - - [BeforeScenario(Order = (int)HooksSequence.InitialiseBrowserHooks)] - public void InitialiseBrowserContainer() - { - _browsers = new Dictionary(); - _objectContainer.RegisterInstanceAs(_browsers); - } - - [BeforeScenario(Order = (int)HooksSequence.ConfigureDriverHooks)] - public void ConfigureDriver(TestContext context, ScenarioContext scenario) - { - context.WebConfig.TestConfig.TargetBrowser = DriverManager.GetTargetBrowser(NUnit.Framework.TestContext.Parameters["TargetBrowser"]); - context.WebConfig.TestConfig.TargetBrowserVersion = NUnit.Framework.TestContext.Parameters["TargetBrowserVersion"]; - context.WebConfig.TestConfig.TargetDevice = DriverManager.GetTargetDevice(NUnit.Framework.TestContext.Parameters["TargetDevice"]); - context.WebConfig.TestConfig.TargetDeviceName = NUnit.Framework.TestContext.Parameters["TargetDeviceName"]; - context.WebConfig.TestConfig.TargetOS = DriverManager.GetTargetOS(NUnit.Framework.TestContext.Parameters["TargetOS"]); - - var driverOptions = new DriverOptions() - { - TargetBrowser = context.WebConfig.TestConfig.TargetBrowser, - TargetBrowserVersion = context.WebConfig.TestConfig.TargetBrowserVersion, - TargetDevice = context.WebConfig.TestConfig.TargetDevice, - TargetOS = context.WebConfig.TestConfig.TargetOS - }; - - var sauceLabsOptions = new SauceLabsOptions() - { - EnableLogging = false, - Name = scenario.ScenarioInfo.Title - }; - - context.Driver = new DriverSetup(context.WebConfig.SauceLabsConfiguration, driverOptions, sauceLabsOptions); - } - - [BeforeScenario(Order = (int)HooksSequence.SetTimeZone)] - public void SetTimeZone(TestContext context) - { - context.TimeZone = new TimeZone(context.WebConfig.SauceLabsConfiguration.RunningOnSauceLabs(), context.WebConfig.TestConfig.TargetOS); - } - - [AfterScenario(Order = (int)HooksSequence.LogResultHooks)] - public void LogResult(TestContext context, ScenarioContext scenarioContext) - { - if (_browsers == null) return; - if (_browsers.Count.Equals(0)) - { - context.CurrentUser = Users.GetDefaultParticipantUser(context.Users); - var browser = new UserBrowser() - .SetBaseUrl(context.WebConfig.VhServices.AdminWebUrl) - .SetTargetBrowser(context.WebConfig.TestConfig.TargetBrowser) - .SetTargetDevice(context.WebConfig.TestConfig.TargetDevice) - .SetDriver(context.Driver); - _browsers.Add(context.CurrentUser, browser); - } - - DriverManager.LogTestResult( - context.WebConfig.SauceLabsConfiguration.RunningOnSauceLabs(), - _browsers[context.CurrentUser].Driver, - scenarioContext.TestError == null); - } - - [AfterScenario(Order = (int)HooksSequence.TearDownBrowserHooks)] - public void TearDownBrowser() - { - if (_browsers == null) return; - foreach (var browser in _browsers.Values) - { - browser.BrowserTearDown(); - } - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Hooks/HealthcheckHooks.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Hooks/HealthcheckHooks.cs deleted file mode 100644 index 55bdca5b5..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Hooks/HealthcheckHooks.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using System.Net; -using AdminWebsite.AcceptanceTests.Helpers; -using FluentAssertions; -using Polly; -using RestSharp; -using TechTalk.SpecFlow; - -namespace AdminWebsite.AcceptanceTests.Hooks -{ - [Binding] - public class HealthcheckHooks - { - private const int RETRIES = 4; - - [BeforeScenario(Order = (int)HooksSequence.HealthcheckHooks)] - public void CheckApiHealth(TestContext context) - { - var retryOnForbiddenFirewallExceptions = Policy - .HandleResult(r => r.StatusCode == HttpStatusCode.Forbidden) - .WaitAndRetry(RETRIES, retryAttempt => - TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)), - (exception, timeSpan) => - { - NUnit.Framework.TestContext.WriteLine($"Encountered error '{exception.Result.StatusCode}' after {timeSpan.Seconds} seconds. Retrying..."); - }); - - var response = retryOnForbiddenFirewallExceptions.Execute(() => context.Api.HealthCheck()); - response.StatusCode.Should().Be(HttpStatusCode.OK, $"Healthcheck failed with '{response.StatusCode}' and error message '{response.ErrorMessage}'"); - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Hooks/HooksSequence.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Hooks/HooksSequence.cs deleted file mode 100644 index 07b0279ef..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Hooks/HooksSequence.cs +++ /dev/null @@ -1,20 +0,0 @@ -namespace AdminWebsite.AcceptanceTests.Hooks -{ - internal enum HooksSequence - { - CleanUpDriverInstances, - ConfigHooks, - RegisterApisHooks, - HealthcheckHooks, - InitialiseBrowserHooks, - ConfigureDriverHooks, - SetTimeZone, - RemoveDataHooks, - DataHooks, - AudioRecording, - RemoveNewUsersHooks, - RemoveAudioFiles, - LogResultHooks, - TearDownBrowserHooks - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Hooks/RegisterApisHooks.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Hooks/RegisterApisHooks.cs deleted file mode 100644 index 104d8c826..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Hooks/RegisterApisHooks.cs +++ /dev/null @@ -1,21 +0,0 @@ -using AcceptanceTests.Common.Api.Hearings; -using AcceptanceTests.Common.Configuration; -using AdminWebsite.AcceptanceTests.Helpers; -using Notify.Client; -using System.Linq; -using TechTalk.SpecFlow; - -namespace AdminWebsite.AcceptanceTests.Hooks -{ - [Binding] - public class RegisterApisHooks - { - [BeforeScenario(Order = (int)HooksSequence.RegisterApisHooks)] - public void RegisterApis(TestContext context) - { - context.Api = new TestApiManager(context.WebConfig.VhServices.TestApiUrl, context.Token); - ConfigurationManager.VerifyConfigValuesSet(context.Api); - context.NotifyClient = new NotificationClient(context.WebConfig.NotifyConfiguration.ApiKey); - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Hooks/RemoveDataHooks.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Hooks/RemoveDataHooks.cs deleted file mode 100644 index 95ed8cada..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Hooks/RemoveDataHooks.cs +++ /dev/null @@ -1,102 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net; -using AcceptanceTests.Common.Api.Hearings; -using AcceptanceTests.Common.Api.Helpers; -using AdminWebsite.AcceptanceTests.Helpers; -using BookingsApi.Contract.V1.Responses; -using FluentAssertions; -using TechTalk.SpecFlow; -using VideoApi.Contract.Responses; - -namespace AdminWebsite.AcceptanceTests.Hooks -{ - [Binding] - public sealed class RemoveDataHooks - { - private string _username; - - [AfterScenario] - public void RemovePreviousHearings(TestContext context) - { - if (context?.Users == null) return; - if (context.Users?.Count == 0) return; - _username = Users.GetJudgeUser(context.Users).Username; - ClearHearingsForUser(context.Api); - ClearClosedConferencesForUser(context.Api); - } - - private void ClearHearingsForUser(TestApiManager api) - { - var response = api.GetHearingsByUsername(_username); - var hearings = RequestHelper.Deserialise>(response.Content); - if (hearings == null) return; - - var ids = hearings.Select(x => x.GroupId).Distinct().ToList(); - foreach (var id in ids.Where(x=> x.HasValue)) - { - DeleteTheHearing(api, id.Value); - } - } - - private static void DeleteTheHearing(TestApiManager api, Guid hearingId) - { - var response = api.DeleteHearing(hearingId); - response.IsSuccessful.Should().BeTrue($"HearingDetails {hearingId} has been deleted. Status {response.StatusCode}. {response.Content}"); - } - - private void ClearClosedConferencesForUser(TestApiManager api) - { - var response = api.GetConferencesForTodayJudge(_username); - var todaysConferences = RequestHelper.Deserialise>(FormatSerializedString(response.Content)); - if (todaysConferences == null) return; - - foreach (var conference in todaysConferences) - { - var hearingId = GetTheHearingIdFromTheConference(api, conference.Id); - - if (HearingHasNotBeenDeletedAlready(api, hearingId) && !hearingId.Equals(Guid.Empty)) - DeleteTheHearing(api, hearingId); - - if (ConferenceHasNotBeenDeletedAlready(api, conference.Id)) - DeleteTheConference(api, hearingId, conference.Id); - } - } - - private static Guid GetTheHearingIdFromTheConference(TestApiManager api, Guid conferenceId) - { - var response = api.GetConferenceByConferenceId(conferenceId); - if (!response.IsSuccessful) return Guid.Empty; - var conference = RequestHelper.Deserialise(FormatSerializedString(response.Content)); - return conference.HearingId; - } - - private static string FormatSerializedString(string content) - { - var formattedContent = content; - formattedContent = formattedContent.Replace("\\", ""); - formattedContent = formattedContent.Replace("\"[", "["); - formattedContent = formattedContent.Replace("]\"", "]"); - - return formattedContent; - } - - private static bool HearingHasNotBeenDeletedAlready(TestApiManager api, Guid hearingId) - { - var response = api.GetHearing(hearingId); - return !response.StatusCode.Equals(HttpStatusCode.NotFound); - } - - private static bool ConferenceHasNotBeenDeletedAlready(TestApiManager api, Guid conferenceId) - { - var response = api.GetConferenceByConferenceId(conferenceId); - return !response.StatusCode.Equals(HttpStatusCode.NotFound); - } - - private static void DeleteTheConference(TestApiManager api, Guid hearingId, Guid conferenceId) - { - api.DeleteConference(hearingId, conferenceId); - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Hooks/UnallocateUsersHooks.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Hooks/UnallocateUsersHooks.cs deleted file mode 100644 index f86525286..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Hooks/UnallocateUsersHooks.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System.Linq; -using System.Net; -using AdminWebsite.AcceptanceTests.Helpers; -using FluentAssertions; -using TechTalk.SpecFlow; -using TestApi.Contract.Enums; -using TestApi.Contract.Requests; - -namespace AdminWebsite.AcceptanceTests.Hooks -{ - [Binding] - public class UnallocateUsersHooks - { - [AfterScenario] - public void UnallocateUsers(TestContext context) - { - if (context?.Api == null) return; - if (context.Users == null) return; - - var usernames = context.Users.Where(user => user.UserType != UserType.Judge).Select(user => user.Username).ToList(); - if (usernames.Count <= 0) return; - - var request = new UnallocateUsersRequest() - { - Usernames = usernames - }; - - var response = context.Api.UnallocateUsers(request); - response.StatusCode.Should().Be(HttpStatusCode.OK); - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/AddPartcipantsPage.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/AddPartcipantsPage.cs deleted file mode 100644 index da0eba35a..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/AddPartcipantsPage.cs +++ /dev/null @@ -1,30 +0,0 @@ -using AcceptanceTests.Common.PageObject.Helpers; -using OpenQA.Selenium; - -namespace AdminWebsite.AcceptanceTests.Pages -{ - public static class AddParticipantsPage - { - public static By PartyDropdown = By.Id("party"); - public static By RoleDropdown = By.Id("role"); - public static By ParticipantEmailTextfield = By.Id("participantEmail"); - public static By TitleDropdown = By.Id("title"); - public static By FirstNameTextfield = By.Id("firstName"); - public static By LastNameTextfield = By.Id("lastName"); - public static By IndividualOrganisationTextfield = By.Id("companyNameIndividual"); - public static By RepOrganisationTextfield = By.Id("companyName"); - public static By PhoneTextfield = By.Id("phone"); - public static By DisplayNameTextfield = By.Id("displayName"); - public static By RepresentingTextfield = By.Id("representing"); - public static By AddParticipantLink = By.Id("addParticipantBtn"); - public static By UpdateParticipantLink = By.Id("updateParticipantBtn"); - public static By ClearDetailsLink = By.PartialLinkText("Clear details"); - public static By NextButton = By.Id(("nextButton")); - public static By CancelButton = By.Id("cancelButton"); - public static By ExistingEmailLinks = By.XPath("//li[@class='vk-showlist-m30']/a"); - public static By ParticipantsList = By.XPath("//*[contains(@class, 'vhtable-header')]"); - public static By InvalidEmailError = CommonLocators.ElementContainingText("Please enter a valid email address"); - public static By JudgeUserParticipantsList(string username) => CommonLocators.ElementContainingText(username); - public static By InterpreteeDropdown = By.Id("interpreterFor"); - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/AssignJudgePage.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/AssignJudgePage.cs deleted file mode 100644 index eda2fd61e..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/AssignJudgePage.cs +++ /dev/null @@ -1,25 +0,0 @@ -using OpenQA.Selenium; - -namespace AdminWebsite.AcceptanceTests.Pages -{ - public static class AssignJudgePage - { - public static By JudgeSearchField = By.Id("judge-email"); - public static By JudgeDisplayNameTextfield = By.Id("judgeDisplayNameFld"); - public static By JudgeEmailTextField = By.Id("judgeEmailFld"); - public static By JudgePhoneTextField = By.Id("judgePhoneFld"); - public static By NextButton = By.Id("nextButton"); - public static By CancelButton = By.Id("cancelButton"); - public static By JudgeEmailId = By.Id("judge-email"); - public static By JudgePhoneId = By.Id("judge-phone"); - public static By SearchResults = By.Id("search-results-list"); - - public static By AddStaffMember = By.Id("showAddStaffMemberFld"); - public static By AddStaffEmailTextField = By.Id("staff-member-email"); - public static By AddStaffFirstNameTextField = By.Id("firstName"); - public static By AddStaffLastNameTextField = By.Id("lastName"); - public static By AddStaffPhoneTextField = By.Id("phone"); - public static By AddStaffDisplayNameTextField = By.Id("displayName"); - - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/BookingConfirmationPage.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/BookingConfirmationPage.cs deleted file mode 100644 index bcaf1b9f0..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/BookingConfirmationPage.cs +++ /dev/null @@ -1,16 +0,0 @@ -using AcceptanceTests.Common.PageObject.Helpers; -using OpenQA.Selenium; - -namespace AdminWebsite.AcceptanceTests.Pages -{ - public static class BookingConfirmationPage - { - public static By SuccessMessage = CommonLocators.ElementContainingText("Your hearing booking was successful"); - public static By CaseNumber = By.Id("caseNumber"); - public static By CaseName = By.Id("caseName"); - public static By HearingDate = By.Id("hearingDate"); - public static By BookAnotherHearingButton = By.Id("btnBookAnotherHearing"); - public static By ReturnToDashboardLink = By.PartialLinkText("Return to dashboard"); - public static By ViewThisBookingLink = By.LinkText("View this booking"); - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/BookingDetailsPage.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/BookingDetailsPage.cs deleted file mode 100644 index 9cb6cd4e6..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/BookingDetailsPage.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using OpenQA.Selenium; - -namespace AdminWebsite.AcceptanceTests.Pages -{ - public static class BookingDetailsPage - { - public static By CaseNumberTitle = By.Id("hearingNumber"); - public static By CreatedBy = By.Id("created-by"); - public static By CreatedDate = By.Id("created-date"); - public static By CaseNumber = By.Id("hearing-number"); - public static By CaseName = By.Id("hearing-name"); - public static By HearingType = By.Id("hearing-type"); - public static By HearingStartDate = By.Id("hearing-start"); - public static By CourtroomAddress = By.Id("court-room-address"); - public static By Duration = By.Id("duration"); - public static By AudioRecorded = By.Id("audioRecorded"); - public static By OtherInformation = By.Id("otherInformation"); - public static By EditButton = By.Id("edit-button"); - public static By CancelButton = By.Id("cancel-button"); - public static By ConfirmCancelButton = By.Id("btnCancelBooking"); - public static By ConfirmButton = By.Id("confirm-button"); - public static By ConfirmedLabel = By.Id("lblCreated"); - public static By JudgeName = By.Id("judge-name"); - public static By JudgeRole = By.Id("judge-hearing-role-name"); - public static By ParticipantName(Guid participantId) => By.Id($"participant-{participantId:D}-name"); - public static By ParticipantRole(Guid participantId) => By.Id($"participant-{participantId:D}-hearing-role-name"); - public static By ParticipantEmail(Guid participantId) => By.Id($"participant-{participantId:D}-email"); - public static By ParticipantUsername(Guid participantId) => By.Id($"participant-{participantId:D}-username"); - public static By ParticipantRepresentee(Guid participantId) => By.Id($"participant-{participantId:D}-representee"); - public static By ParticipantPhone(Guid participantId) => By.Id($"participant-{participantId:D}-phone"); - public static By CancelReasonDropdown = By.Id("cancel-reason"); - public static By CancelReasonDropdownErrorLabel = By.Id("cancelReason-error"); - public static By CancelReasonDetailsErrorLabel = By.Id("more-detail-error"); - public static By CancelReasonTextfield = By.Id("cancelReason-detail"); - public static By KeepBookingButton = By.Id("btnKeepBooking"); - public static By CaseType = By.Id("case-type"); - public static By VideoAccessPoints(int i) => By.Id($"displayName{i.ToString()}"); - public static By ConferencePhoneDetails = By.Id("conference_phone_details"); - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/BookingsListPage.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/BookingsListPage.cs deleted file mode 100644 index a130102a6..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/BookingsListPage.cs +++ /dev/null @@ -1,24 +0,0 @@ -using OpenQA.Selenium; - -namespace AdminWebsite.AcceptanceTests.Pages -{ - public static class BookingsListPage - { - public static By Rows = By.XPath("//div[contains(@class,'vh-a')]"); - public static By Row(string text) => By.XPath($"//div[contains(text(),'{text}')]/parent::div/parent::div"); - public static By RowWithId(string id) => By.Id(id); - public static By ScheduledTime(string id) => By.XPath($"//div[@id='{id}']//div[contains(text(),':')]"); - public static By ScheduledDuration(string id) => By.XPath($"//div[@id='{id}']//div[contains(text(),'listed for')]"); - public static By CaseNumber(string id, string caseNumber) => CaseInfo(id, caseNumber); - public static By CaseName(string id, string caseName) => CaseInfo(id, caseName); - public static By CaseType(string id, string caseType) => CaseInfo(id, caseType); - public static By Judge(string id, string judge) => CaseInfo(id, judge); - public static By Venue(string id, string venue) => CaseInfo(id, venue); - public static By CreatedBy(string id, string createdBy) => By.XPath($"//div[@id='{id}']//div[contains(text(),'{createdBy}')]"); - public static By HearingType(string id, string hearingType) => CaseInfo(id, hearingType); - private static By CaseInfo(string id, string info) - { - return By.XPath($"//div[@id='{id}']//div[contains(text(),'{info}')]"); - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/ChangePasswordPage.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/ChangePasswordPage.cs deleted file mode 100644 index bc06ed1d8..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/ChangePasswordPage.cs +++ /dev/null @@ -1,13 +0,0 @@ -using AcceptanceTests.Common.PageObject.Helpers; -using OpenQA.Selenium; - -namespace AdminWebsite.AcceptanceTests.Pages -{ - public static class ChangePasswordPage - { - public static By UsernameTextfield = By.Id("userName"); - public static By UpdateButton = By.Id("submit"); - public static By PasswordHasBeenChangedMessage = CommonLocators.ElementContainingText("User's password has been changed"); - public static By OkButton = By.Id("btnOkay"); - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/CommonAdminWebPage.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/CommonAdminWebPage.cs deleted file mode 100644 index bd216c3f9..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/CommonAdminWebPage.cs +++ /dev/null @@ -1,16 +0,0 @@ -using AcceptanceTests.Common.PageObject.Helpers; -using OpenQA.Selenium; - -namespace AdminWebsite.AcceptanceTests.Pages -{ - public static class CommonAdminWebPage - { - public static By DashboardLink = By.PartialLinkText("Dashboard"); - public static By BookingsListLink = By.PartialLinkText("Booking list"); - public static By ContactUsLink = By.PartialLinkText("Contact us"); - public static By ContactUsTitle = CommonLocators.ElementContainingText("Contact the video hearings service"); - public static By ContactUsPhoneNumber(string phoneNumber) => CommonLocators.ElementContainingText(phoneNumber); - public static By ContactUsEmail(string email) => CommonLocators.ElementContainingText(email); - public static By OpenGovernmentLicenceLink = By.PartialLinkText("Open Government Licence"); - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/DashboardPage.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/DashboardPage.cs deleted file mode 100644 index be5e8deaa..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/DashboardPage.cs +++ /dev/null @@ -1,14 +0,0 @@ -using OpenQA.Selenium; - -namespace AdminWebsite.AcceptanceTests.Pages -{ - public static class DashboardPage - { - public static By BookVideoHearingPanel = By.Id("bookHearingBtn"); - public static By QuestionnaireResultsPanel = By.Id("questionnaireResultsBtn"); - public static By GetAudioFilePanel = By.Id("getAudioLinkBtn"); - public static By ChangePasswordPanel = By.Id("changePasswordBtn"); - public static By DeleteUserPanel = By.Id("deleteUserBtn"); - public static By EditParticipantName = By.Id("editUserBtn"); - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/DeleteUserPage.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/DeleteUserPage.cs deleted file mode 100644 index 763f0d6cb..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/DeleteUserPage.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; -using OpenQA.Selenium; - -namespace AdminWebsite.AcceptanceTests.Pages -{ - public static class DeleteUserPage - { - public static By CaseNumberTextField = By.Id("username"); - public static By SubmitButton = By.Id("submit"); - public static By ResultsCaseNumber(Guid hearingId) => By.Id($"{hearingId}-case-number"); - public static By ResultsScheduledTime(Guid hearingId) => By.Id($"{hearingId}-scheduled-time"); - public static By ResultsCaseName(Guid hearingId) => By.Id($"{hearingId}-case-name"); - public static By ResultsVenueName(Guid hearingId) => By.Id($"{hearingId}-venue"); - } -} \ No newline at end of file diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/EditParticipantNamePage.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/EditParticipantNamePage.cs deleted file mode 100644 index 9df6f4905..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/EditParticipantNamePage.cs +++ /dev/null @@ -1,23 +0,0 @@ -using AcceptanceTests.Common.PageObject.Helpers; -using OpenQA.Selenium; -using System; -using System.Collections.Generic; -using System.Text; - -namespace AdminWebsite.AcceptanceTests.Pages -{ - public static class EditParticipantNamePage - { - public static By ContactEmailTextField = By.Id("contactEmail"); - public static By SubmitButton = By.Id("submit"); - public static By FullNameField = By.Id("fullName"); - public static By UserNotFounMessage = CommonLocators.ElementContainingText("Sorry, we can't find a user with that email address."); - public static By JudgeNotAllowedToBeEditedMessage = CommonLocators.ElementContainingText("Judge accounts cannot be edited"); - public static By SaveButton = By.Id("saveButton"); - public static By FirstNameField = By.Id("firstName"); - public static By LastNameField = By.Id("lastName"); - public static By CompleteSignField = By.Id("completeSign"); - public static string CompleteSignText = "participant name updated"; - public static By ContactEmailLink(string email) => By.LinkText(email.ToLower()); - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/ErrorPage.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/ErrorPage.cs deleted file mode 100644 index 21f410ded..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/ErrorPage.cs +++ /dev/null @@ -1,10 +0,0 @@ -using AcceptanceTests.Common.PageObject.Helpers; -using OpenQA.Selenium; - -namespace AdminWebsite.AcceptanceTests.Pages -{ - public static class ErrorPage - { - public static By UnsupportedBrowserTitle = CommonLocators.ElementContainingText("You've signed in using an unsupported browser"); - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/GetAudioFilePage.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/GetAudioFilePage.cs deleted file mode 100644 index c0bc3a3ef..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/GetAudioFilePage.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using OpenQA.Selenium; - -namespace AdminWebsite.AcceptanceTests.Pages -{ - public static class GetAudioFilePage - { - public static By CaseNumberTextField = By.Id("caseNumber"); - public static By SubmitButton = By.Id("submit"); - public static By GetLinkButton = By.Id("getLinkButton"); - public static By CopyLinkButton(int fileIndex) => By.Id($"{fileIndex}-copyLinkButton"); - public static By LinkCopiedSuccessMessage(int fileIndex) => By.Id($"{fileIndex}-linkCopied"); - public static By ResultsCaseNumber(Guid hearingId) => By.Id($"{hearingId}-case-number"); - public static By ResultsScheduledTime(Guid hearingId) => By.Id($"{hearingId}-scheduled-time"); - public static By ResultsCaseName(Guid hearingId) => By.Id($"{hearingId}-case-name"); - public static By ResultsVenue(Guid hearingId) => By.Id($"{hearingId}-venue"); - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/HearingDetailsPage.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/HearingDetailsPage.cs deleted file mode 100644 index 169c5ad62..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/HearingDetailsPage.cs +++ /dev/null @@ -1,14 +0,0 @@ -using OpenQA.Selenium; - -namespace AdminWebsite.AcceptanceTests.Pages -{ - public static class HearingDetailsPage - { - public static By CaseNumberTextfield = By.Id("caseNumber"); - public static By CaseNameTextfield = By.Id("caseName"); - public static By CaseTypeDropdown = By.Id("caseType"); - public static By HearingTypeDropdown = By.Id("hearingType"); - public static By NextButton = By.Id("nextButton"); - public static By CancelButton = By.Id("cancelButton"); - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/HearingSchedulePage.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/HearingSchedulePage.cs deleted file mode 100644 index bc8404476..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/HearingSchedulePage.cs +++ /dev/null @@ -1,21 +0,0 @@ -using OpenQA.Selenium; - -namespace AdminWebsite.AcceptanceTests.Pages -{ - public static class HearingSchedulePage - { - public static By HearingDateTextfield = By.Id("hearingDate"); - public static By HearingStartTimeHourTextfield = By.Id("hearingStartTimeHour"); - public static By HearingStartTimeMinuteTextfield = By.Id("hearingStartTimeMinute"); - public static By HearingDurationHourTextfield = By.Id("hearingDurationHour"); - public static By HearingDurationMinuteTextfield = By.Id("hearingDurationMinute"); - public static By CourtAddressDropdown = By.Id("courtAddress"); - public static By CourtRoomTextfield = By.Id("court-room"); - public static By NextButton = By.Id("nextButton"); - public static By CancelButton = By.Id("cancelButton"); - public static By HearingDateError = By.Id("hearingDate-past-error"); - public static By HearingTimeError = By.Id("hearingTime-error"); - public static By HearingEndDateTextField = By.Id("endHearingDate"); - public static By MultiDaysCheckBox = By.Id("multiDaysHearing"); - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/Journeys/BookingConfirmationJourney.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/Journeys/BookingConfirmationJourney.cs deleted file mode 100644 index f2411d6e0..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/Journeys/BookingConfirmationJourney.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System.Collections.Generic; -using FluentAssertions; -using TestApi.Contract.Enums; - -namespace AdminWebsite.AcceptanceTests.Pages.Journeys -{ - public class BookingsConfirmationJourney : IJourney - { - public List Journey() - { - return new List() - { - Page.Login, - Page.Dashboard, - Page.HearingDetails, - Page.HearingSchedule, - Page.AssignJudge, - Page.AddParticipants, - Page.VideoAccessPoints, - Page.OtherInformation, - Page.Summary, - Page.BookingConfirmation - }; - } - - public void VerifyUserIsApplicableToJourney(UserType userType) - { - userType.ToString().ToLower().Should().BeOneOf("videohearingsofficer", "caseadmin"); - } - - public void VerifyDestinationIsInThatJourney(Page destinationPage) - { - Journey().Should().Contain(destinationPage); - } - - public Page GetNextPage(Page currentPage) - { - return Journey()[Journey().IndexOf(currentPage) + 1]; - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/Journeys/BookingDetailsJourney.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/Journeys/BookingDetailsJourney.cs deleted file mode 100644 index 55959d213..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/Journeys/BookingDetailsJourney.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System.Collections.Generic; -using FluentAssertions; -using TestApi.Contract.Enums; - -namespace AdminWebsite.AcceptanceTests.Pages.Journeys -{ - public class BookingDetailsJourney : IJourney - { - public List Journey() - { - return new List() - { - Page.Login, - Page.Dashboard, - Page.HearingDetails, - Page.HearingSchedule, - Page.AssignJudge, - Page.AddParticipants, - Page.VideoAccessPoints, - Page.OtherInformation, - Page.Summary, - Page.BookingConfirmation, - Page.BookingDetails - }; - } - - public void VerifyUserIsApplicableToJourney(UserType userType) - { - userType.ToString().ToLower().Should().BeOneOf("videohearingsofficer", "caseadmin"); - } - - public void VerifyDestinationIsInThatJourney(Page destinationPage) - { - Journey().Should().Contain(destinationPage); - } - - public Page GetNextPage(Page currentPage) - { - return Journey()[Journey().IndexOf(currentPage) + 1]; - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/Journeys/BookingsListJourney.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/Journeys/BookingsListJourney.cs deleted file mode 100644 index f63cd3c92..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/Journeys/BookingsListJourney.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System.Collections.Generic; -using FluentAssertions; -using TestApi.Contract.Enums; - -namespace AdminWebsite.AcceptanceTests.Pages.Journeys -{ - public class BookingListJourney : IJourney - { - public List Journey() - { - return new List() - { - Page.Login, - Page.Dashboard, - Page.HearingDetails, - Page.HearingSchedule, - Page.AssignJudge, - Page.AddParticipants, - Page.VideoAccessPoints, - Page.OtherInformation, - Page.Summary, - Page.BookingConfirmation, - Page.BookingsList - }; - } - - public void VerifyUserIsApplicableToJourney(UserType userType) - { - userType.ToString().ToLower().Should().BeOneOf("videohearingsofficer", "caseadmin"); - } - - public void VerifyDestinationIsInThatJourney(Page destinationPage) - { - Journey().Should().Contain(destinationPage); - } - - public Page GetNextPage(Page currentPage) - { - return Journey()[Journey().IndexOf(currentPage) + 1]; - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/Journeys/ChangePasswordJourney.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/Journeys/ChangePasswordJourney.cs deleted file mode 100644 index 1a47aa113..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/Journeys/ChangePasswordJourney.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System.Collections.Generic; -using FluentAssertions; -using TestApi.Contract.Enums; - -namespace AdminWebsite.AcceptanceTests.Pages.Journeys -{ - public class ChangePasswordJourney : IJourney - { - public List Journey() - { - return new List() - { - Page.Login, - Page.Dashboard, - Page.ChangePassword - }; - } - - public void VerifyUserIsApplicableToJourney(UserType userType) - { - userType.Should().Be(UserType.VideoHearingsOfficer); - } - - public void VerifyDestinationIsInThatJourney(Page destinationPage) - { - Journey().Should().Contain(destinationPage); - } - - public Page GetNextPage(Page currentPage) - { - return Journey()[Journey().IndexOf(currentPage) + 1]; - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/Journeys/EditParticipantNameJourney.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/Journeys/EditParticipantNameJourney.cs deleted file mode 100644 index 688a35440..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/Journeys/EditParticipantNameJourney.cs +++ /dev/null @@ -1,34 +0,0 @@ -using FluentAssertions; -using System.Collections.Generic; -using TestApi.Contract.Enums; - -namespace AdminWebsite.AcceptanceTests.Pages.Journeys -{ - public class EditParticipantNameJourney : IJourney - { - public List Journey() - { - return new List() - { - Page.Login, - Page.Dashboard, - Page.EditParticipantName - }; - } - - public void VerifyUserIsApplicableToJourney(UserType userType) - { - userType.Should().Be(UserType.VideoHearingsOfficer); - } - - public void VerifyDestinationIsInThatJourney(Page destinationPage) - { - Journey().Should().Contain(destinationPage); - } - - public Page GetNextPage(Page currentPage) - { - return Journey()[Journey().IndexOf(currentPage) + 1]; - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/Journeys/GetAudioFileJourney.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/Journeys/GetAudioFileJourney.cs deleted file mode 100644 index 9ebce6e4d..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/Journeys/GetAudioFileJourney.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System.Collections.Generic; -using FluentAssertions; -using TestApi.Contract.Enums; - -namespace AdminWebsite.AcceptanceTests.Pages.Journeys -{ - public class GetAudioFileJourney : IJourney - { - public List Journey() - { - return new List() - { - Page.Login, - Page.Dashboard, - Page.GetAudioFile - }; - } - - public void VerifyUserIsApplicableToJourney(UserType userType) - { - userType.Should().Be(UserType.VideoHearingsOfficer); - } - - public void VerifyDestinationIsInThatJourney(Page destinationPage) - { - Journey().Should().Contain(destinationPage); - } - - public Page GetNextPage(Page currentPage) - { - return Journey()[Journey().IndexOf(currentPage) + 1]; - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/Journeys/IJourney.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/Journeys/IJourney.cs deleted file mode 100644 index 980e0526d..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/Journeys/IJourney.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Collections.Generic; -using TestApi.Contract.Enums; - -namespace AdminWebsite.AcceptanceTests.Pages.Journeys -{ - public interface IJourney - { - List Journey(); - void VerifyDestinationIsInThatJourney(Page destinationPage); - void VerifyUserIsApplicableToJourney(UserType userType); - Page GetNextPage(Page currentPage); - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/Journeys/Journey.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/Journeys/Journey.cs deleted file mode 100644 index 060fd11f1..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/Journeys/Journey.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace AdminWebsite.AcceptanceTests.Pages.Journeys -{ - public enum Journey - { - BookingConfirmation, - BookingDetails, - BookingsList, - ChangePassword, - EditParticipantName, - GetAudioFile, - Questionnaire - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/Journeys/QuestionnaireJourney.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/Journeys/QuestionnaireJourney.cs deleted file mode 100644 index 1b996d382..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/Journeys/QuestionnaireJourney.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System.Collections.Generic; -using FluentAssertions; -using TestApi.Contract.Enums; - -namespace AdminWebsite.AcceptanceTests.Pages.Journeys -{ - public class QuestionnaireJourney : IJourney - { - public List Journey() - { - return new List() - { - Page.Login, - Page.Dashboard, - Page.Questionnaire - }; - } - - public void VerifyUserIsApplicableToJourney(UserType userType) - { - userType.ToString().ToLower().Should().BeOneOf("videohearingsofficer", "caseadmin"); - } - - public void VerifyDestinationIsInThatJourney(Page destinationPage) - { - Journey().Should().Contain(destinationPage); - } - - public Page GetNextPage(Page currentPage) - { - return Journey()[Journey().IndexOf(currentPage) + 1]; - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/OtherInformationPage.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/OtherInformationPage.cs deleted file mode 100644 index a41983722..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/OtherInformationPage.cs +++ /dev/null @@ -1,15 +0,0 @@ -using AcceptanceTests.Common.PageObject.Helpers; -using OpenQA.Selenium; - -namespace AdminWebsite.AcceptanceTests.Pages -{ - public static class OtherInformationPage - { - public static By OtherInformationTextfield = By.Id("details-other-information"); - public static By NextButton = By.Id("nextButton"); - public static By CancelButton = By.Id("cancelButton"); - public static By AudioRecordYesRadioButton = By.Id("audio-choice-yes"); - public static By AudioRecordNoRadioButton = By.Id("audio-choice-no"); - public static By AudioRecordingInterpreterMessage = CommonLocators.ElementContainingText("(mandatory for hearings with interpreters)"); - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/Page.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/Page.cs deleted file mode 100644 index f5a71d0f6..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/Page.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace AdminWebsite.AcceptanceTests.Pages -{ - public class Page - { - public string Name { get; } - public string Url { get; } - - private Page(string name, string url) - { - Name = name; - Url = url; - } - - public static readonly Page Login = new Page("Login", "login.microsoftonline.com"); - public static readonly Page Dashboard = new Page("Dashboard", "dashboard"); - public static readonly Page BookingsList = new Page("Bookings List", "bookings-list"); - public static readonly Page BookingDetails = new Page("Booking Details", "booking-details"); - public static readonly Page Questionnaire = new Page("Questionnaire", "questionnaire"); - public static readonly Page ChangePassword = new Page("Change Password", "change-password"); - public static readonly Page EditParticipantName = new Page("Edit Participant Name", "edit-participant"); - public static readonly Page GetAudioFile = new Page("Get Audio File", "get-audio-file"); - public static readonly Page DeleteUser = new Page("Delete User", "delete-user"); - public static readonly Page HearingDetails = new Page("Hearing Details", "book-hearing"); - public static readonly Page HearingSchedule = new Page("Hearing Schedule", "hearing-schedule"); - public static readonly Page AssignJudge = new Page("Assign Judge", "assign-judge"); - public static readonly Page AddParticipants = new Page("Add Participants", "add-participants"); - public static readonly Page VideoAccessPoints = new Page("Video Access Points", "video-access-points"); - public static readonly Page OtherInformation = new Page("Other Information", "other-information"); - public static readonly Page Summary = new Page("Summary", "summary"); - public static readonly Page BookingConfirmation = new Page("Booking Confirmation", "booking-confirmation"); - public static readonly Page NotFound = new Page("Not Found", "not-found"); - public static readonly Page Unauthorised = new Page("Unauthorised", "unauthorised"); - public static readonly Page ContactUs = new Page("Contact Us", "contact-us"); - public static readonly Page OpenGovernmentLicence = new Page("Open Government Licence", "open-government-licence"); - public static readonly Page UnsupportedBrowser = new Page("Unsupported Browser", "unsupported-browser"); - - public string ToString(Page page) - { - return page.Name; - } - - public static Page FromString(string name) - { - foreach (var page in Values) - { - if (page.Name.ToLower().Equals(name.ToLower())) - { - return page; - } - } - throw new ArgumentOutOfRangeException($"No page found with name '{name}'"); - } - - private static IEnumerable Values - { - get - { - yield return Login; - yield return Dashboard; - yield return BookingsList; - yield return BookingDetails; - yield return Questionnaire; - yield return ChangePassword; - yield return GetAudioFile; - yield return DeleteUser; - yield return HearingDetails; - yield return HearingSchedule; - yield return AssignJudge; - yield return AddParticipants; - yield return VideoAccessPoints; - yield return OtherInformation; - yield return Summary; - yield return BookingConfirmation; - yield return NotFound; - yield return Unauthorised; - yield return ContactUs; - yield return OpenGovernmentLicence; - yield return UnsupportedBrowser; - yield return EditParticipantName; - } - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/QuestionnairePage.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/QuestionnairePage.cs deleted file mode 100644 index 4a5dbb9e6..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/QuestionnairePage.cs +++ /dev/null @@ -1,13 +0,0 @@ -using AcceptanceTests.Common.PageObject.Helpers; -using OpenQA.Selenium; - -namespace AdminWebsite.AcceptanceTests.Pages -{ - public static class QuestionnairePage - { - public static By QuestionnaireLink(string name) => By.XPath($"//span[contains(text(),'{name}')]/parent::a"); - public static By AllQuestions = By.XPath("//*[@class='govuk-body vh-date vh-wrap vh-mr15']/../../div/span[@class='govuk-body vh-table-row']"); - public static By AllAnswers = By.XPath("//*[@class='govuk-body vh-date vh-wrap vh-mr15']"); - public static By ExtendedAnswer(string extendedAnswer) => CommonLocators.ElementContainingText(extendedAnswer); - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/SummaryPage.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/SummaryPage.cs deleted file mode 100644 index da55faa8a..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/SummaryPage.cs +++ /dev/null @@ -1,36 +0,0 @@ -using AcceptanceTests.Common.Data.TestData; -using AcceptanceTests.Common.PageObject.Helpers; -using OpenQA.Selenium; - -namespace AdminWebsite.AcceptanceTests.Pages -{ - public static class SummaryPage - { - public static By CaseNumber = By.Id("caseNumber"); - public static By CaseName = By.Id("caseName"); - public static By CaseHearingType = By.Id("caseHearingType"); - public static By HearingDate = By.Id("hearingDate"); - public static By CourtAddress = By.Id("courtAddress"); - public static By HearingDuration = By.Id("hearingDuration"); - public static By AudioRecording = By.Id("audioRecording"); - public static By OtherInformation = By.Id("otherInformation"); - public static By Judge = By.Id("judge-name"); - public static By RemoveParticipant = By.Id("btn-remove"); - public static By RemoveInterpreter = By.Id("btnConfirmRemoveInterpreter"); - public static By CancelRemoveParticipant = By.Id("btn-cancel"); - public static By RemoveInterpreterMessage = CommonLocators.ElementContainingText("Removing this participant will also remove their interpreter."); - public static By RemoveParticipantMessage(string displayName) => CommonLocators.ElementContainingText($"Are you sure you want to remove {displayName} from the hearing booking?"); - public static By ParticipantConfirmationMessage = By.XPath("//h1[contains(text(),'hearing booking')]"); - public static By ParticipantsLink = By.XPath("//a[contains(text(),'Participants')]"); - public static By BookButton = By.Id("bookButton"); - public static By EditScreenLink(string screen) => By.Id($"edit-link{screen.ToLower().Replace(" ", "-")}-id"); - public static By EditParticipantLink(string firstName) => By.XPath($"//div[contains(text(),'{firstName}')]/parent::div/parent::div//a[text()='Edit']"); - public static By RemoveParticipantLink(string firstName) => By.XPath($"//div[contains(text(),'{firstName}')]/parent::div/parent::div//a[text()='Remove']"); - public static By CaseType = By.Id("caseType"); - public static By HearingType = By.Id("caseHearingType"); - public static By VideoAccessPoints(int i) => By.Id($"displayName{i.ToString()}"); - public static By HearingStartDateMultiDays = By.Id("hearingStartDate"); - public static By HearingEndDateMultiDays = By.Id("hearingEndDateTime"); - public static By WaitPopUp = By.Id("waitPopup"); - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/VideoAccessPointsPage.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/VideoAccessPointsPage.cs deleted file mode 100644 index 4d5cab95d..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Pages/VideoAccessPointsPage.cs +++ /dev/null @@ -1,12 +0,0 @@ -using OpenQA.Selenium; - -namespace AdminWebsite.AcceptanceTests.Pages -{ - public static class VideoAccessPointsPage - { - public static By DisplayNameField(int i) => By.Id($"displayName{i.ToString()}"); - public static By AddAnotherButton = By.Id("addEndpoint"); - public static By NextButton = By.Id("nextButton"); - public static By CancelButton = By.Id("cancelButton"); - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Properties/AssemblyInfo.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Properties/AssemblyInfo.cs deleted file mode 100644 index bc9a5d30e..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,4 +0,0 @@ -using NUnit.Framework; - -[assembly: Parallelizable(ParallelScope.Fixtures)] -[assembly: LevelOfParallelism(3)] \ No newline at end of file diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/AccessibilitySteps.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/AccessibilitySteps.cs deleted file mode 100644 index 2dcfa368f..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/AccessibilitySteps.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Collections.Generic; -using AcceptanceTests.Common.Driver.Drivers; -using AdminWebsite.AcceptanceTests.Helpers; -using TestApi.Contract.Dtos; -using FluentAssertions; -using Selenium.Axe; -using TechTalk.SpecFlow; - -namespace AdminWebsite.AcceptanceTests.Steps -{ - [Binding] - public class AccessibilitySteps - { - private readonly TestContext _c; - private readonly Dictionary _browsers; - - public AccessibilitySteps(TestContext testContext, Dictionary browsers) - { - _c = testContext; - _browsers = browsers; - } - - [Then(@"the page should be accessible")] - public void ThenThePageShouldBeAccessible() - { - var axeResult = new AxeBuilder(_browsers[_c.CurrentUser].Driver).Analyze(); - axeResult.Violations.Should().BeEmpty(); - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/AddParticipantSteps.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/AddParticipantSteps.cs deleted file mode 100644 index c0da27c27..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/AddParticipantSteps.cs +++ /dev/null @@ -1,419 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using AcceptanceTests.Common.Configuration.Users; -using AcceptanceTests.Common.Driver.Drivers; -using AcceptanceTests.Common.Driver.Helpers; -using AcceptanceTests.Common.Model.Participant; -using AcceptanceTests.Common.Test.Steps; -using AdminWebsite.AcceptanceTests.Data; -using AdminWebsite.AcceptanceTests.Helpers; -using AdminWebsite.AcceptanceTests.Pages; -using TestApi.Contract.Dtos; -using FluentAssertions; -using OpenQA.Selenium; -using OpenQA.Selenium.Support.UI; -using TechTalk.SpecFlow; -using TestApi.Contract.Enums; - -namespace AdminWebsite.AcceptanceTests.Steps -{ - [Binding] - public class AddParticipantSteps : ISteps - { - private const int TimeoutToRetrieveUserFromAad = 60; - private const string RepresentingText = "Representative for"; - private const string InterpreterText = "Interpreting for"; - private readonly TestContext _c; - private readonly Dictionary _browsers; - private string _individualDisplayName = RepresentingText; - private readonly CommonSharedSteps _commonSharedSteps; - private readonly BookingDetailsSteps _bookingDetailsSteps; - - public AddParticipantSteps(TestContext testContext, Dictionary browsers, - CommonSharedSteps commonSharedSteps, BookingDetailsSteps bookingDetailsSteps) - { - _c = testContext; - _browsers = browsers; - _bookingDetailsSteps = bookingDetailsSteps; - _commonSharedSteps = commonSharedSteps; - } - - [When(@"the user completes the add participants form")] - public void ProgressToNextPage() - { - AddExistingClaimantIndividual(); - AddExistingClaimantRep(); - AddNewDefendantIndividual(PartyRole.LitigantInPerson); - AddNewDefendantRep(); - VerifyUsersAreAddedToTheParticipantsList(); - ClickNext(); - } - - [When(@"the user adds an Individual")] - public void TheUserAddsAnIndividual() - { - AddExistingClaimantIndividual(); - VerifyUsersAreAddedToTheParticipantsList(); - ClickNext(); - } - - [When(@"the user does not add participants and is on the (.*) page")] - public void TheUserCompletesTheAddParticipantsFormwithOnlyTheJudge(string page) - { - ClickNext(); - _browsers[_c.CurrentUser].PageUrl(Page.FromString(page).Url); - } - - [When(@"the user completes the add participants form with an Interpreter And Litigant In Person")] - public void WhenTheUserCompletesTheAddParticipantsFormWithAnInterpreterAndLitigantInPerson() - { - AddNewDefendantIndividual(PartyRole.LitigantInPerson); - AddNewDefendantIndividual(PartyRole.Interpreter); - AddNewDefendantIndividual(PartyRole.LitigantInPerson); - VerifyUsersAreAddedToTheParticipantsList(); - ClickNext(); - } - - [When(@"the user completes the add participants form with an Interpreter")] - [Given(@"the user completes the add participants form with an Interpreter")] - public void WhenTheUserCompletesTheAddParticipantsFormWithAnInterpreter() - { - AddNewDefendantIndividual(PartyRole.LitigantInPerson); - AddNewDefendantIndividual(PartyRole.Interpreter); - VerifyUsersAreAddedToTheParticipantsList(); - ClickNext(); - } - - [When(@"the user edits booking and adds a Litigant in person")] - public void WhenTheUserEditsBookingAndAddsALitigantInPerson() - { - _browsers[_c.CurrentUser].ClickLink(BookingConfirmationPage.ViewThisBookingLink); - _bookingDetailsSteps.ClickEdit(); - _browsers[_c.CurrentUser].ClickLink(SummaryPage.ParticipantsLink); - AddNewDefendantIndividual(PartyRole.LitigantInPerson); - VerifyUsersAreAddedToTheParticipantsList(); - ClickNext(); - } - - [When(@"the user adds a Litigant in person")] - public void WhenTheUserAddsALitigantInPerson() - { - _browsers[_c.CurrentUser].ClickLink(SummaryPage.ParticipantsLink); - AddNewDefendantIndividual(PartyRole.LitigantInPerson); - VerifyUsersAreAddedToTheParticipantsList(); - } - - - public void ClickNext() - { - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.NextButton); - _browsers[_c.CurrentUser].Click(AddParticipantsPage.NextButton); - } - - private void AddExistingClaimantIndividual() - { - var individualUser = Users.GetIndividualUser(_c.Users); - var individual = UserToUserAccountMapper.Map(individualUser); - individual.CaseRoleName = Party.Claimant.Name; - individual.HearingRoleName = PartyRole.LitigantInPerson.Name; - _c.Test.HearingParticipants.Add(individual); - SetParty(individual.CaseRoleName); - SetRole(individual.HearingRoleName); - SetExistingIndividualDetails(individual); - } - - private void AddExistingClaimantRep() - { - var repUser = Users.GetRepresentativeUser(_c.Users); - var rep = UserToUserAccountMapper.Map(repUser); - rep.CaseRoleName = Party.Claimant.Name; - rep.HearingRoleName = PartyRole.Representative.Name; - rep.Representee = _c.Users.First(x => x.UserType == UserType.Individual).DisplayName; - _c.Test.HearingParticipants.Add(rep); - SetParty(rep.CaseRoleName); - SetRole(rep.HearingRoleName); - SetExistingRepDetails(rep); - } - - private void AddNewDefendantIndividual(PartyRole partyRole) - { - var individual = CreateNewUser("Individual"); - individual.CaseRoleName = Party.Defendant.Name; - individual.HearingRoleName = partyRole.Name; - _individualDisplayName = individual.DisplayName; - _c.Test.HearingParticipants.Add(individual); - SetParty(individual.CaseRoleName); - SetRole(individual.HearingRoleName); - SetNewIndividualDetails(individual); - } - - private void AddNewDefendantRep() - { - var rep = CreateNewUser("Representative"); - rep.CaseRoleName = Party.Defendant.Name; - rep.HearingRoleName = PartyRole.Representative.Name; - rep.Representee = _individualDisplayName; - _c.Test.HearingParticipants.Add(rep); - SetParty(rep.CaseRoleName); - SetRole(rep.HearingRoleName); - SetNewRepDetails(rep); - } - - private void SetParty(string party) - { - var el = _browsers[_c.CurrentUser].Driver.FindElement(AddParticipantsPage.PartyDropdown); - var partyList = new SelectElement(el); - var waiter = new WebDriverWait(_browsers[_c.CurrentUser].Driver, TimeSpan.FromSeconds(5)); - waiter.Until(_ => partyList.Options.Count > 0); - - _commonSharedSteps.WhenTheUserSelectsTheOptionFromTheDropdown(_browsers[_c.CurrentUser].Driver, AddParticipantsPage.PartyDropdown, Party.FromString(party).Name); - } - - private void SetRole(string role) - { - _commonSharedSteps.WhenTheUserSelectsTheOptionFromTheDropdown(_browsers[_c.CurrentUser].Driver, AddParticipantsPage.RoleDropdown, PartyRole.FromString(role).Name); - } - - private UserAccount CreateNewUser(string role) - { - var user = new UserAccount(); - var prefix = _c.Test.TestData.AddParticipant.Participant.NewUserPrefix; - user.AlternativeEmail = $"{prefix}{Faker.RandomNumber.Next()}@hmcts.net"; - var firstname = Faker.Name.First(); - var lastname = Faker.Name.Last(); - var displayName = $"{firstname} {lastname}"; - user.Firstname = $"{prefix}{firstname}"; - user.Lastname = $"{lastname}"; - user.DisplayName = $"{prefix}{displayName}"; - user.Role = role; - user.Username = $"{user.Firstname.ToLower()}.{user.Lastname.ToLower()}{_c.WebConfig.TestConfig.TestUsernameStem.ToLower()}"; - return user; - } - - private void SetNewIndividualDetails(UserAccount user) - { - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.ParticipantEmailTextfield).SendKeys(user.AlternativeEmail); - var title = _c.Test.TestData.AddParticipant.Participant.Title; - _commonSharedSteps.WhenTheUserSelectsTheOptionFromTheDropdown(_browsers[_c.CurrentUser].Driver, AddParticipantsPage.TitleDropdown, title); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.FirstNameTextfield, _c.WebConfig.SeleniumElementTimeout).SendKeys(user.Firstname); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.LastNameTextfield).SendKeys(user.Lastname); - var organisation = _c.Test.TestData.AddParticipant.Participant.Organisation; - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.IndividualOrganisationTextfield).SendKeys(organisation); - var telephone = _c.Test.TestData.AddParticipant.Participant.Phone; - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.PhoneTextfield).SendKeys(telephone); - if (user.HearingRoleName == PartyRole.Interpreter.Name) - { - var citizen = _c.Test.HearingParticipants.First(p => p.HearingRoleName == PartyRole.LitigantInPerson.Name); - _commonSharedSteps.WhenTheUserSelectsTheOptionFromTheDropdown(_browsers[_c.CurrentUser].Driver, - AddParticipantsPage.InterpreteeDropdown, citizen.DisplayName); - user.Interpretee = citizen.DisplayName; - } - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.DisplayNameTextfield).SendKeys(user.DisplayName); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.AddParticipantLink); - _browsers[_c.CurrentUser].ScrollTo(AddParticipantsPage.AddParticipantLink); - _browsers[_c.CurrentUser].ClickLink(AddParticipantsPage.AddParticipantLink); - } - - private void EnterTextIfFieldIsNotPrePopulated(By element, string value) - { - if (_browsers[_c.CurrentUser].Driver.WaitUntilVisible(element).GetAttribute("value").Length.Equals(0)) - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(element).SendKeys(value); - } - - private void SetNewRepDetails(UserAccount user) - { - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.ParticipantEmailTextfield).SendKeys(user.AlternativeEmail); - var title = _c.Test.TestData.AddParticipant.Participant.Title; - _commonSharedSteps.WhenTheUserSelectsTheOptionFromTheDropdown(_browsers[_c.CurrentUser].Driver, AddParticipantsPage.TitleDropdown, title); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.FirstNameTextfield).SendKeys(user.Firstname); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.LastNameTextfield).SendKeys(user.Lastname); - var telephone = _c.Test.TestData.AddParticipant.Participant.Phone; - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.PhoneTextfield).SendKeys(telephone); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.DisplayNameTextfield).SendKeys(user.DisplayName); - var organisation = _c.Test.TestData.AddParticipant.Participant.Organisation; - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.RepOrganisationTextfield).SendKeys(organisation); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.RepresentingTextfield).SendKeys(user.Representee); - - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.AddParticipantLink); - _browsers[_c.CurrentUser].ScrollTo(AddParticipantsPage.AddParticipantLink); - _browsers[_c.CurrentUser].ClickLink(AddParticipantsPage.AddParticipantLink); - } - - private void SetExistingIndividualDetails(UserAccount user) - { - ExistingUserEmailIsSelected(user.AlternativeEmail).Should().BeTrue("Existing user email appeared in the dropdown list retrieved from AAD"); - IndividualFieldsAreSet(user); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.DisplayNameTextfield).SendKeys(user.DisplayName); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.AddParticipantLink); - _browsers[_c.CurrentUser].ScrollTo(AddParticipantsPage.AddParticipantLink); - Thread.Sleep(TimeSpan.FromSeconds(1)); - _browsers[_c.CurrentUser].ClickLink(AddParticipantsPage.AddParticipantLink); - } - - private void SetExistingRepDetails(UserAccount user) - { - ExistingUserEmailIsSelected(user.AlternativeEmail).Should().BeTrue("Existing user email appeared in the dropdown list retrieved from AAD"); - RepFieldsAreSet(user); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.DisplayNameTextfield).SendKeys(user.DisplayName); - var organisation = _c.Test.TestData.AddParticipant.Participant.Organisation; - EnterTextIfFieldIsNotPrePopulated(AddParticipantsPage.RepOrganisationTextfield, organisation); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.RepresentingTextfield).SendKeys(user.Representee); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.AddParticipantLink); - _browsers[_c.CurrentUser].ScrollTo(AddParticipantsPage.AddParticipantLink); - Thread.Sleep(TimeSpan.FromSeconds(1)); - _browsers[_c.CurrentUser].ClickLink(AddParticipantsPage.AddParticipantLink); - } - - private bool ExistingUserEmailIsSelected(string alternativeEmail) - { - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.ParticipantEmailTextfield).SendKeys(alternativeEmail); - var retrievedListOfEmails = _browsers[_c.CurrentUser].Driver.WaitUntilElementsVisible(AddParticipantsPage.ExistingEmailLinks, TimeoutToRetrieveUserFromAad); - retrievedListOfEmails.Count.Should().BeGreaterThan(0); - foreach (var email in retrievedListOfEmails) - { - if (!email.Text.ToLower().Contains(alternativeEmail.ToLower())) continue; - email.Click(); - return true; - } - - return false; - } - - private void IndividualFieldsAreSet(UserAccount user) - { - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.ParticipantEmailTextfield).Enabled.Should().BeFalse(); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.FirstNameTextfield).Enabled.Should().BeFalse(); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.LastNameTextfield).Enabled.Should().BeFalse(); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.ParticipantEmailTextfield).GetAttribute("value").Should().Be(user.AlternativeEmail); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.FirstNameTextfield).GetAttribute("value").Should().Be(user.Firstname); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.LastNameTextfield).GetAttribute("value").Should().Be(user.Lastname); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.PhoneTextfield).GetAttribute("value").Should().NotBeNullOrWhiteSpace(); - var organisation = _c.Test.TestData.AddParticipant.Participant.Organisation; - EnterTextIfFieldIsNotPrePopulated(AddParticipantsPage.IndividualOrganisationTextfield, organisation); - } - - private void RepFieldsAreSet(UserAccount user) - { - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.ParticipantEmailTextfield).Enabled.Should().BeFalse(); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.FirstNameTextfield).Enabled.Should().BeFalse(); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.LastNameTextfield).Enabled.Should().BeFalse(); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.ParticipantEmailTextfield).GetAttribute("value").Should().Be(user.AlternativeEmail); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.FirstNameTextfield).GetAttribute("value").Should().Be(user.Firstname); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.LastNameTextfield).GetAttribute("value").Should().Be(user.Lastname); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.PhoneTextfield).GetAttribute("value").Should().NotBeNullOrWhiteSpace(); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.RepOrganisationTextfield).GetAttribute("value").Should().NotBeNullOrWhiteSpace(); - } - - private void VerifyUsersAreAddedToTheParticipantsList() - { - var judge = Users.GetJudgeUser(_c.Users); - _browsers[_c.CurrentUser].Driver - .WaitUntilVisible(AddParticipantsPage.JudgeUserParticipantsList(judge.Username)) - .Displayed.Should().BeTrue(); - - var actualResult = GetAllParticipantsDetails(); - var title = _c.Test.TestData.AddParticipant.Participant.Title; - - foreach (var participant in _c.Test.HearingParticipants) - { - if (participant.Role.ToLower().Equals("judge") || participant.Role.ToLower().Equals("judge")) continue; - if (participant.Role.ToLower().Equals("staff member")) continue; - - var fullNameTitle = $"{title} {participant.Firstname} {participant.Lastname}"; - var expectedParticipant = $"{fullNameTitle} {participant.HearingRoleName} {participant.CaseRoleName}"; - - if (participant.HearingRoleName == PartyRole.Representative.Name) - { - expectedParticipant = $"{fullNameTitle} {RepresentingText} {participant.Representee} {participant.CaseRoleName}"; - } - if (participant.HearingRoleName == PartyRole.Interpreter.Name) - { - expectedParticipant = $"{fullNameTitle} {InterpreterText} {participant.Interpretee} {participant.CaseRoleName}"; - } - - actualResult.Any(x => x.Replace(Environment.NewLine, " ").Equals(expectedParticipant)).Should() - .BeTrue($"expected participant matches {expectedParticipant}"); - } - } - - public List GetAllParticipantsDetails() - { - var elements = _browsers[_c.CurrentUser].Driver.WaitUntilElementsVisible(AddParticipantsPage.ParticipantsList); - return elements.Select(element => element.Text.Trim().Replace("\r\n", " ")).ToList(); - } - - public void EditANewParticipant(string alternativeEmail) - { - var user = GetParticipantByEmailAndUpdateDisplayName(alternativeEmail); - _browsers[_c.CurrentUser].Clear(AddParticipantsPage.DisplayNameTextfield); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.DisplayNameTextfield).SendKeys(user.DisplayName); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.NextButton); - _browsers[_c.CurrentUser].ScrollTo(AddParticipantsPage.NextButton); - _browsers[_c.CurrentUser].Click(AddParticipantsPage.NextButton); - } - - public void EditAnInterpreter(string alternativeEmail,bool saved = true) - { - var user = GetParticipantByEmailAndUpdateDisplayName(alternativeEmail); - - var citizen = _c.Test.HearingParticipants.FirstOrDefault(p => p.DisplayName != user.Interpretee && p.HearingRoleName == PartyRole.LitigantInPerson.Name); - _commonSharedSteps.WhenTheUserSelectsTheOptionFromTheDropdown(_browsers[_c.CurrentUser].Driver, - AddParticipantsPage.InterpreteeDropdown, citizen.DisplayName); - user.Interpretee = citizen.DisplayName; - if(!saved) - { - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.UpdateParticipantLink); - _browsers[_c.CurrentUser].ScrollTo(AddParticipantsPage.UpdateParticipantLink); - _browsers[_c.CurrentUser].Click(AddParticipantsPage.UpdateParticipantLink); - } - - ClickNext(); - - } - - private UserAccount GetParticipantByEmailAndUpdateDisplayName(string alternativeEmail) - { - var user = _c.Test.HearingParticipants.First(x => x.AlternativeEmail.ToLower().Equals(alternativeEmail.ToLower())); - user.DisplayName = $"{_c.Test.AddParticipant.Participant.NewUserPrefix}Updated display name"; - return user; - } - - [When(@"the user attempts to add a participant with a reform email")] - public void WhenTheUserAttemptsToAddAParticipantWithAReformEmail() - { - var individualUser = Users.GetIndividualUser(_c.Users); - var individual = UserToUserAccountMapper.Map(individualUser); - individual.CaseRoleName = Party.Claimant.Name; - individual.HearingRoleName = PartyRole.LitigantInPerson.Name; - _c.Test.HearingParticipants.Add(individual); - SetParty(individual.CaseRoleName); - SetRole(individual.HearingRoleName); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.ParticipantEmailTextfield).SendKeys(individual.Username); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.ParticipantEmailTextfield).SendKeys(Keys.Tab); - } - - [Then(@"an error message is displayed for the invalid email")] - public void ThenAnErrorMessageIsDisplayedForTheInvalidEmail() - { - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AddParticipantsPage.InvalidEmailError).Displayed.Should().BeTrue(); - } - - [Then(@"audio recording is selected by default with options (.*)")] - public void ThenAudioRecordingIsSelectedByDefaultWithOptions(string option) - { - var enabled = option != "disabled"; - if (!enabled) - { - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(OtherInformationPage.AudioRecordingInterpreterMessage).Displayed.Should().BeTrue(); - } - - _browsers[_c.CurrentUser].Driver.FindElement(OtherInformationPage.AudioRecordYesRadioButton).Selected.Should().BeTrue(); - _browsers[_c.CurrentUser].Driver.FindElement(OtherInformationPage.AudioRecordYesRadioButton).Enabled.Should().Be(enabled); - } - - - - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/AssignJudgeSteps.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/AssignJudgeSteps.cs deleted file mode 100644 index 05460d7de..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/AssignJudgeSteps.cs +++ /dev/null @@ -1,130 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using AcceptanceTests.Common.Configuration.Users; -using AcceptanceTests.Common.Driver.Drivers; -using AcceptanceTests.Common.Driver.Helpers; -using AcceptanceTests.Common.Model.Participant; -using AcceptanceTests.Common.Test.Steps; -using AdminWebsite.AcceptanceTests.Data; -using AdminWebsite.AcceptanceTests.Helpers; -using AdminWebsite.AcceptanceTests.Pages; -using TestApi.Contract.Dtos; -using FluentAssertions; -using TechTalk.SpecFlow; -using OpenQA.Selenium; - -namespace AdminWebsite.AcceptanceTests.Steps -{ - [Binding] - public class AssignJudgeSteps : ISteps - { - private readonly TestContext _c; - private readonly Dictionary _browsers; - private readonly CommonSharedSteps _commonSharedSteps; - - private UserAccount Judge => _c.Test.HearingParticipants.FirstOrDefault(c => c.HearingRoleName == "Judge"); - private string JudgePhone => "01234567890"; - - public AssignJudgeSteps(TestContext testContext, Dictionary browsers, CommonSharedSteps commonSharedSteps) - { - _c = testContext; - _browsers = browsers; - _commonSharedSteps = commonSharedSteps; - } - - [When(@"the user completes the assign judge form")] - public void ProgressToNextPage() - { - JudgeSteps(false); - } - - [When(@"the user completes the assign judge form with phone and email")] - public void WhenTheUserCompletesTheAssignJudgeFormWithPhoneAndEmail() - { - JudgeSteps(true); - } - - private void JudgeSteps(bool updatePhoneAndEmail) - { - _browsers[_c.CurrentUser].WaitForPageToLoad(); - SetTheJudge(); - if (updatePhoneAndEmail) - { - SetJudgeEmailAndPhone(); - } - - if (_c.Test.AssignJudge.AddNewStaff) - { - SetTheNewStaff(); - } - ClickNext(); - } - - [Then(@"the email and phone details are updated")] - public void ThenTheEmailAndPhoneDetailsAreUpdated() - { - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AssignJudgePage.JudgeEmailId); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AssignJudgePage.JudgePhoneId); - _browsers[_c.CurrentUser].TextOf(AssignJudgePage.JudgeEmailId).Should().Be(Judge.AlternativeEmail); - _browsers[_c.CurrentUser].TextOf(AssignJudgePage.JudgePhoneId).Should().Be(JudgePhone); - } - - private void SetTheJudge() - { - var judgeUser = Users.GetJudgeUser(_c.Users); - var judge = UserToUserAccountMapper.Map(judgeUser); - judge.CaseRoleName = Party.Judge.Name; - judge.HearingRoleName = PartyRole.Judge.Name; - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AssignJudgePage.JudgeSearchField).SendKeys(judge.Username); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AssignJudgePage.SearchResults).FindElements(By.TagName("li")).FirstOrDefault().Click(); - _c.Test.HearingParticipants.Add(judge); - } - - private void SetTheNewStaff() - { - string staffMemberDisplayName = "Auto Staff Member"; - string staffMemberRole = "Staff Member"; - - _browsers[_c.CurrentUser].Click(AssignJudgePage.AddStaffMember); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AssignJudgePage.AddStaffEmailTextField).SendKeys("man"); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AssignJudgePage.SearchResults).FindElements(By.TagName("li")).FirstOrDefault().Click(); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AssignJudgePage.AddStaffDisplayNameTextField).SendKeys(staffMemberDisplayName); - - var staffUser = new UserDto() - { - ContactEmail = "manual.StaffMember_01@hearings.reform.hmcts.net", - DisplayName = staffMemberDisplayName, - FirstName = "Manual", - LastName = "StaffMember_01" - }; - - var staffMember = UserToUserAccountMapper.Map(staffUser); - staffMember.CaseRoleName = staffMemberRole; - staffMember.HearingRoleName = staffMemberRole; - staffMember.Role = staffMemberRole; - - _c.Test.HearingParticipants.Add(staffMember); - } - - private void SetJudgeEmailAndPhone() - { - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AssignJudgePage.JudgeEmailTextField).SendKeys(Judge.AlternativeEmail); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AssignJudgePage.JudgePhoneTextField).SendKeys(JudgePhone); - } - - public void EditAudioRecording() - { - Thread.Sleep(TimeSpan.FromSeconds(1)); - ClickNext(); - Thread.Sleep(TimeSpan.FromSeconds(1)); - } - - public void ClickNext() - { - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AssignJudgePage.NextButton); - _browsers[_c.CurrentUser].Click(AssignJudgePage.NextButton); - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/BookingConfirmationSteps.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/BookingConfirmationSteps.cs deleted file mode 100644 index 7996d265d..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/BookingConfirmationSteps.cs +++ /dev/null @@ -1,63 +0,0 @@ -using System.Collections.Generic; -using AcceptanceTests.Common.Driver.Drivers; -using AcceptanceTests.Common.Driver.Helpers; -using AcceptanceTests.Common.Test.Steps; -using AdminWebsite.AcceptanceTests.Data; -using AdminWebsite.AcceptanceTests.Helpers; -using AdminWebsite.AcceptanceTests.Pages; -using TestApi.Contract.Dtos; -using FluentAssertions; -using TechTalk.SpecFlow; - -namespace AdminWebsite.AcceptanceTests.Steps -{ - [Binding] - public class BookingConfirmationSteps : ISteps - { - private readonly TestContext _c; - private readonly Dictionary _browsers; - public BookingConfirmationSteps(TestContext testContext, Dictionary browsers) - { - _c = testContext; - _browsers = browsers; - } - - public void ProgressToNextPage() - { - VerifyBookingWasSuccessful(); - _browsers[_c.CurrentUser].ClickLink(_c.Route.Equals(Page.BookingDetails) - ? BookingConfirmationPage.ViewThisBookingLink - : CommonAdminWebPage.BookingsListLink); - } - - [When(@"the user views the booking details after seeing the successful booking message")] - public void TheUserViewsTheBookingDetails() - { - VerifyBookingWasSuccessful(); - _browsers[_c.CurrentUser].ClickLink(BookingConfirmationPage.ViewThisBookingLink); - } - - [When(@"the user views the booking confirmation form")] - public void VerifyBookingWasSuccessful() - { - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(BookingConfirmationPage.SuccessMessage).Displayed.Should().BeTrue(); - _browsers[_c.CurrentUser].Driver.WaitForPageToLoad(); - _browsers[_c.CurrentUser].TextOf(BookingConfirmationPage.CaseNumber).Should().Contain(_c.Test.HearingDetails.CaseNumber); - _browsers[_c.CurrentUser].TextOf(BookingConfirmationPage.CaseName).Should().Contain(_c.Test.HearingDetails.CaseName); - var scheduleDate = _c.Test.HearingSchedule.ScheduledDate.ToString(DateFormats.HearingSummaryDate); - _browsers[_c.CurrentUser].TextOf(BookingConfirmationPage.HearingDate).ToLower().Should().Be(scheduleDate.ToLower()); - } - - [When(@"the user clicks the Return to dashboard link")] - public void WhenTheUserClicksTheDashboardLink() - { - _browsers[_c.CurrentUser].ClickLink(BookingConfirmationPage.ReturnToDashboardLink); - } - - [When(@"the user clicks the Book another hearing button")] - public void WhenTheUserClicksTheBookAnotherHearingButton() - { - _browsers[_c.CurrentUser].Click(BookingConfirmationPage.BookAnotherHearingButton); - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/BookingDetailsSteps.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/BookingDetailsSteps.cs deleted file mode 100644 index d6e8294ed..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/BookingDetailsSteps.cs +++ /dev/null @@ -1,138 +0,0 @@ -using System.Collections.Generic; -using AcceptanceTests.Common.Driver.Drivers; -using AcceptanceTests.Common.Driver.Helpers; -using AcceptanceTests.Common.Test.Steps; -using AdminWebsite.AcceptanceTests.Helpers; -using AdminWebsite.AcceptanceTests.Pages; -using FluentAssertions; -using TechTalk.SpecFlow; -using TestApi.Contract.Dtos; - -namespace AdminWebsite.AcceptanceTests.Steps -{ - [Binding] - public class BookingDetailsSteps : ISteps - { - private readonly TestContext _c; - private readonly Dictionary _browsers; - private readonly CommonSharedSteps _commonSharedSteps; - private readonly BookingsListSteps _bookingsListSteps; - - public BookingDetailsSteps(TestContext testContext, Dictionary browsers, CommonSharedSteps commonSharedSteps, BookingsListSteps bookingsListSteps) - { - _c = testContext; - _browsers = browsers; - _commonSharedSteps = commonSharedSteps; - _bookingsListSteps = bookingsListSteps; - } - - [When(@"the user views the booking details")] - [Then(@"the user views the booking details")] - public void WhenTheUserViewsTheBookingDetails() - { - } - - [When(@"the user confirms the hearing")] - public void WhenTheUserConfirmsTheBooking() - { - } - - [When(@"the user confirms all the hearings")] - public void WhenTheUserConfirmsAllTheBookings() - { - } - - [Then(@"the hearing is available in video web")] - public void ThenTheHearingIsAvailableInTheVideoWeb() - { - } - - [Then(@"the hearings are available in video web")] - public void ThenTheHearingsAreAvailableInTheVideoWeb() - { - } - - [Then(@"the conference details match the hearing")] - public void ThenTheConferenceMatchesTheHearing() - { - } - - [When(@"the user cancels the hearing without a cancel reason")] - public void WhenTheUserCancelsTheHearingWithoutACancelReason() - { - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(BookingDetailsPage.CancelButton); - _browsers[_c.CurrentUser].ScrollTo(BookingDetailsPage.CancelButton); - _browsers[_c.CurrentUser].Click(BookingDetailsPage.CancelButton); - _browsers[_c.CurrentUser].Click(BookingDetailsPage.ConfirmCancelButton); - } - - [Then(@"an error message is displayed and hearing is not cancelled")] - public void ThenAnErrorMessageIsDisplayedAndHearingIsNotCancelled() - { - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(BookingDetailsPage.CancelReasonDropdownErrorLabel).Displayed.Should().BeTrue(); - _browsers[_c.CurrentUser].Click(BookingDetailsPage.KeepBookingButton); - } - - [When(@"the user cancels the hearing")] - public void WhenTheUserAttemptsToCancelTheHearing() - { - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(BookingDetailsPage.CancelButton); - _browsers[_c.CurrentUser].ScrollTo(BookingDetailsPage.CancelButton); - _browsers[_c.CurrentUser].Click(BookingDetailsPage.CancelButton); - - _commonSharedSteps.WhenTheUserSelectsTheOptionFromTheDropdown(_browsers[_c.CurrentUser].Driver, - BookingDetailsPage.CancelReasonDropdown, _c.Test.TestData.BookingDetailsPage.CancelReason); - _browsers[_c.CurrentUser].Click(BookingDetailsPage.ConfirmCancelButton); - } - - [When(@"the user cancels the hearing with other reason and no text")] - public void WhenTheUserCancelsTheHearingWithOtherReason() - { - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(BookingDetailsPage.CancelButton); - _browsers[_c.CurrentUser].ScrollTo(BookingDetailsPage.CancelButton); - _browsers[_c.CurrentUser].Click(BookingDetailsPage.CancelButton); - - _commonSharedSteps.WhenTheUserSelectsTheOptionFromTheDropdown(_browsers[_c.CurrentUser].Driver, - BookingDetailsPage.CancelReasonDropdown, _c.Test.TestData.BookingDetailsPage.CancelReason2); - _browsers[_c.CurrentUser].Click(BookingDetailsPage.ConfirmCancelButton); - } - - [Then(@"an error message is displayed for the details box and hearing is not cancelled")] - public void ThenAnErrorMessageIsDisplayedForTheDetailsBoxAndHearingIsNotCancelled() - { - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(BookingDetailsPage.CancelReasonDetailsErrorLabel).Displayed.Should().BeTrue(); - _browsers[_c.CurrentUser].Click(BookingDetailsPage.KeepBookingButton); - } - - [Then(@"the hearing is cancelled")] - public void ThenTheHearingIsCancelled() - { - } - - [Then(@"the conference is deleted")] - public void ThenTheConferenceIsDeleted() - { - } - - [When(@"the user cancels the hearing with other reason and detail text")] - public void WhenTheUserCancelsTheHearingWithOtherReasonAndDetailText() - { - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(BookingDetailsPage.CancelButton); - _browsers[_c.CurrentUser].ScrollTo(BookingDetailsPage.CancelButton); - _browsers[_c.CurrentUser].Click(BookingDetailsPage.CancelButton); - - _commonSharedSteps.WhenTheUserSelectsTheOptionFromTheDropdown(_browsers[_c.CurrentUser].Driver, - BookingDetailsPage.CancelReasonDropdown, _c.Test.TestData.BookingDetailsPage.CancelReason2); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(BookingDetailsPage.CancelReasonTextfield).SendKeys(_c.Test.TestData.BookingDetailsPage.DetailReason); - _browsers[_c.CurrentUser].Click(BookingDetailsPage.ConfirmCancelButton); - } - - public void ClickEdit() - { - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(BookingDetailsPage.EditButton); - _browsers[_c.CurrentUser].ScrollTo(BookingDetailsPage.EditButton); - _browsers[_c.CurrentUser].Click(BookingDetailsPage.EditButton); - } - public void ProgressToNextPage() { } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/BookingsListSteps.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/BookingsListSteps.cs deleted file mode 100644 index 5a41496ff..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/BookingsListSteps.cs +++ /dev/null @@ -1,71 +0,0 @@ -using System.Collections.Generic; -using AcceptanceTests.Common.Driver.Drivers; -using AcceptanceTests.Common.Driver.Helpers; -using AcceptanceTests.Common.Test.Steps; -using AdminWebsite.AcceptanceTests.Helpers; -using AdminWebsite.AcceptanceTests.Pages; -using TestApi.Contract.Dtos; -using FluentAssertions; -using TechTalk.SpecFlow; - -namespace AdminWebsite.AcceptanceTests.Steps -{ - [Binding] - public class BookingsListSteps : ISteps - { - private const int RETRIES = 10; - private readonly TestContext _c; - private readonly Dictionary _browsers; - private string _rowId; - public BookingsListSteps(TestContext testContext, Dictionary browsers) - { - _c = testContext; - _browsers = browsers; - } - - [When(@"selects a booking")] - public void ProgressToNextPage() - { - _rowId = GetRowId(_c.Test.HearingDetails.CaseNumber); - _browsers[_c.CurrentUser].Click(BookingsListPage.RowWithId(_rowId)); - } - - [When(@"selects a booking by case name (.*)")] - public void SelectsBookingByCaseName(string caseName) - { - NUnit.Framework.TestContext.WriteLine($"Searching for '{caseName}' to select..."); - - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(BookingsListPage.Row(caseName)); - - for (var i = 0; i < RETRIES; i++) - { - _rowId = GetRowId(caseName); - if (_rowId == null || _rowId.Equals(string.Empty)) continue; - break; - } - - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(BookingsListPage.RowWithId(_rowId)); - _browsers[_c.CurrentUser].Click(BookingsListPage.RowWithId(_rowId)); - } - - [When(@"the user views the bookings list")] - public void WhenTheUserViewsTheBookingsList() - { - _rowId = GetRowId(_c.Test.HearingDetails.CaseNumber); - _browsers[_c.CurrentUser].TextOf(BookingsListPage.ScheduledTime(_rowId)).ToLower().Should().Be(_c.Test.HearingSchedule.ScheduledDate.ToShortTimeString().ToLower()); - _browsers[_c.CurrentUser].TextOf(BookingsListPage.ScheduledDuration(_rowId)).Should().Contain($"listed for {_c.Test.TestData.HearingSchedule.DurationMinutes} minutes"); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(BookingsListPage.CaseName(_rowId, _c.Test.HearingDetails.CaseName)).Displayed.Should().BeTrue(); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(BookingsListPage.CaseNumber(_rowId, _c.Test.HearingDetails.CaseNumber)).Displayed.Should().BeTrue(); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(BookingsListPage.CaseType(_rowId, _c.Test.HearingDetails.CaseType.Name)).Displayed.Should().BeTrue(); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(BookingsListPage.HearingType(_rowId, _c.Test.HearingDetails.HearingType.Name)).Displayed.Should().BeTrue(); - var judge = Users.GetJudgeUser(_c.Users); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(BookingsListPage.Judge(_rowId, judge.DisplayName)).Displayed.Should().BeTrue(); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(BookingsListPage.Venue(_rowId, _c.Test.TestData.HearingSchedule.HearingVenue)).Displayed.Should().BeTrue(); - } - - private string GetRowId(string text) - { - return _browsers[_c.CurrentUser].Driver.WaitUntilVisible(BookingsListPage.Row(text)).GetAttribute("id"); - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/BrowserSteps.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/BrowserSteps.cs deleted file mode 100644 index 0f7bc4e21..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/BrowserSteps.cs +++ /dev/null @@ -1,108 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using AcceptanceTests.Common.Driver.Drivers; -using AcceptanceTests.Common.Driver.Enums; -using AdminWebsite.AcceptanceTests.Helpers; -using AdminWebsite.AcceptanceTests.Pages; -using TestApi.Contract.Dtos; -using TechTalk.SpecFlow; - -namespace AdminWebsite.AcceptanceTests.Steps -{ - [Binding] - public class BrowserSteps - { - private readonly TestContext _c; - private readonly Dictionary _browsers; - - public BrowserSteps(TestContext testContext, Dictionary browsers) - { - _c = testContext; - _browsers = browsers; - } - - [Given(@"a new browser is open for (?:user|the|a|an) (.*)")] - [Given(@"(?:the|an|a) (.*) is on the login page")] - public void GivenANewBrowserIsOpenFor(string user) - { - SwitchCurrentUser(user); - - _browsers.Add(_c.CurrentUser, new UserBrowser() - .SetBaseUrl(_c.WebConfig.VhServices.AdminWebUrl) - .SetTargetBrowser(_c.WebConfig.TestConfig.TargetBrowser) - .SetTargetDevice(_c.WebConfig.TestConfig.TargetDevice) - .SetDriver(_c.Driver)); - - _browsers[_c.CurrentUser].LaunchBrowser(); - _browsers[_c.CurrentUser].NavigateToPage(); - - if (_c.WebConfig.TestConfig.TargetBrowser != TargetBrowser.Ie11) - _browsers[_c.CurrentUser].PageUrl(_c.Test.CommonData.CommonUris.LoginUri); - } - - [Given(@"in (.*)'s browser")] - [When(@"in (.*)'s browser")] - [Then(@"in (.*)'s browser")] - public void GivenInTheUsersBrowser(string user) - { - SwitchCurrentUser(user); - - _browsers[_c.CurrentUser].Driver.SwitchTo().Window(_browsers[_c.CurrentUser].LastWindowName); - } - - private void SwitchCurrentUser(string user) - { - if (_c.CurrentUser != null) - _browsers[_c.CurrentUser].LastWindowName = _browsers[_c.CurrentUser].Driver.WrappedDriver.WindowHandles.Last(); - - if (user.Contains("the")) - { - var number = user.Split(" ")[1].Trim(); - _c.CurrentUser = Users.GetUser(_c.Users, number, user); - } - else - { - _c.CurrentUser = UserIsParticipant(user) ? GetDefaultParticipant() : GetMatchingDisplayName(user); - } - - if (_c.CurrentUser == null) - throw new ArgumentOutOfRangeException($"There are no users configured called '{user}'"); - } - - private static bool UserIsParticipant(string user) - { - return user.ToLower().Equals("participant"); - } - - private UserDto GetDefaultParticipant() - { - return Users.GetDefaultParticipantUser(_c.Users); - } - - private UserDto GetMatchingDisplayName(string user) - { - return Users.GetUserFromDisplayName(_c.Users, user); - } - - [When(@"switches to the (.*) tab")] - public void WhenSwitchesToTheNewTab(string url) - { - _browsers[_c.CurrentUser].LastWindowName = _browsers[_c.CurrentUser].SwitchTab(url); - } - - [When(@"the user is on the (.*) page")] - [Then(@"the user is on the (.*) page")] - [Then(@"they should be on the (.*) page")] - public void ThenTheUserIsOnThePage(string page) - { - _browsers[_c.CurrentUser].PageUrl(Page.FromString(page).Url); - } - - [Then(@"the user is not on the (.*) page")] - public void ThenTheUserIsNotOnThePage(string page) - { - _browsers[_c.CurrentUser].PageUrl(page); - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/ChangePasswordSteps.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/ChangePasswordSteps.cs deleted file mode 100644 index c87d538e5..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/ChangePasswordSteps.cs +++ /dev/null @@ -1,67 +0,0 @@ -using System.Collections.Generic; -using AcceptanceTests.Common.Driver.Drivers; -using AcceptanceTests.Common.Driver.Helpers; -using AcceptanceTests.Common.PageObject.Pages; -using AcceptanceTests.Common.Test.Steps; -using AdminWebsite.AcceptanceTests.Helpers; -using AdminWebsite.AcceptanceTests.Pages; -using TestApi.Contract.Dtos; -using FluentAssertions; -using TechTalk.SpecFlow; - -namespace AdminWebsite.AcceptanceTests.Steps -{ - [Binding] - public class ChangePasswordSteps - { - private readonly TestContext _c; - private readonly Dictionary _browsers; - private readonly BrowserSteps _browserSteps; - private LoginSharedSteps _loginSteps; - - private UserDto _participant; - - public ChangePasswordSteps(TestContext c, Dictionary browsers, BrowserSteps browserSteps) - { - _c = c; - _browsers = browsers; - _browserSteps = browserSteps; - } - - [When(@"the user resets the participants password")] - public void WhenTheUserResetsTheParticipantsPassword() - { - _participant = Users.GetIndividualUser(_c.Users); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(ChangePasswordPage.UsernameTextfield).SendKeys(_participant.Username); - _browsers[_c.CurrentUser].Click(ChangePasswordPage.UpdateButton); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(ChangePasswordPage.PasswordHasBeenChangedMessage).Displayed.Should().BeTrue(); - } - - [When(@"the participant accesses the application using the reset password")] - public void WhenTheParticipantAccessesTheApplicationUsingTheResetPassword() - { - _browserSteps.GivenANewBrowserIsOpenFor(_participant.LastName); - _loginSteps = new LoginSharedSteps(_browsers[_c.CurrentUser], _c.CurrentUser.Username, _c.WebConfig.AzureAdConfiguration.TemporaryPassword); - _loginSteps.ProgressToNextPage(); - } - - [Then(@"the user is prompted to change their password")] - public void ThenTheUserIsPromptedToChangeTheirPassword() - { - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(LoginPage.CurrentPassword).Displayed.Should().BeTrue(); - } - - [Then(@"the changed password message can be dismissed")] - public void ThenTheChangedPasswordMessageCanBeDismissed() - { - _browsers[_c.CurrentUser].Click(ChangePasswordPage.OkButton); - _browsers[_c.CurrentUser].Driver.WaitUntilElementNotVisible(ChangePasswordPage.PasswordHasBeenChangedMessage); - } - - [When(@"the user changes their password")] - public void WhenTheUserChangesTheirPassword() - { - _loginSteps.ChangeThePassword(_c.WebConfig.AzureAdConfiguration.TemporaryPassword, _c.WebConfig.TestConfig.TestUserPassword); - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/CommonSteps.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/CommonSteps.cs deleted file mode 100644 index b55e1e60a..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/CommonSteps.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.Collections.Generic; -using AcceptanceTests.Common.Driver.Drivers; -using AdminWebsite.AcceptanceTests.Helpers; -using AdminWebsite.AcceptanceTests.Pages; -using TestApi.Contract.Dtos; -using TechTalk.SpecFlow; - -namespace AdminWebsite.AcceptanceTests.Steps -{ - [Binding] - public sealed class CommonSteps - { - private readonly TestContext _c; - private readonly Dictionary _browsers; - public CommonSteps(TestContext testContext, Dictionary browsers) - { - _c = testContext; - _browsers = browsers; - } - - [Then(@"they can navigate to the Open Government licence")] - public void ThenTheyCanNavigateToTheOpenGovernmentLicence() - { - _browsers[_c.CurrentUser].ScrollTo(CommonAdminWebPage.OpenGovernmentLicenceLink); - _browsers[_c.CurrentUser].ClickLink(CommonAdminWebPage.OpenGovernmentLicenceLink); - _browsers[_c.CurrentUser].NavigateBack(); - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/DashboardSteps.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/DashboardSteps.cs deleted file mode 100644 index fb20bd531..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/DashboardSteps.cs +++ /dev/null @@ -1,110 +0,0 @@ -using System.Collections.Generic; -using AcceptanceTests.Common.Driver.Drivers; -using AcceptanceTests.Common.Driver.Helpers; -using AcceptanceTests.Common.Test.Steps; -using AdminWebsite.AcceptanceTests.Helpers; -using AdminWebsite.AcceptanceTests.Pages; -using TestApi.Contract.Dtos; -using FluentAssertions; -using TechTalk.SpecFlow; -using TestApi.Contract.Enums; - -namespace AdminWebsite.AcceptanceTests.Steps -{ - [Binding] - public class DashboardSteps : ISteps - { - private readonly TestContext _c; - private readonly Dictionary _browsers; - public DashboardSteps(TestContext testContext, Dictionary browsers) - { - _c = testContext; - _browsers = browsers; - } - - public void ProgressToNextPage() - { - if (_c.Route.Equals(Page.HearingDetails)) - { - _browsers[_c.CurrentUser].Click(DashboardPage.BookVideoHearingPanel); - } - else if (_c.Route.Equals(Page.Questionnaire)) - { - _browsers[_c.CurrentUser].Click(DashboardPage.QuestionnaireResultsPanel); - } - else if (_c.Route.Equals(Page.ChangePassword)) - { - _browsers[_c.CurrentUser].Click(DashboardPage.ChangePasswordPanel); - } - else if (_c.Route.Equals(Page.GetAudioFile)) - { - _browsers[_c.CurrentUser].Click(DashboardPage.GetAudioFilePanel); - } - else if (_c.Route.Equals(Page.DeleteUser)) - { - _browsers[_c.CurrentUser].Click(DashboardPage.DeleteUserPanel); - } - else if (_c.Route.Equals(Page.EditParticipantName)) - { - _browsers[_c.CurrentUser].Click(DashboardPage.EditParticipantName); - } - else - { - _browsers[_c.CurrentUser].Click(DashboardPage.BookVideoHearingPanel); - } - } - - [When(@"the user navigates to the Bookings List page")] - public void WhenTheUserNavigatesToTheBookingsList() - { - _browsers[_c.CurrentUser].Click(CommonAdminWebPage.BookingsListLink); - } - - [Then(@"there are various dashboard options available")] - public void ThenThereAreVariousDashboardOptionsAvailable() - { - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(DashboardPage.BookVideoHearingPanel).Displayed.Should().BeTrue(); - OnlyVhosCanSeeTheQuestionnaireResults(); - OnlyVhosCanSeeThePasswordReset(); - OnlyVhosCanSeeTheGetAudioFile(); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(CommonAdminWebPage.DashboardLink).Displayed.Should().BeTrue(); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(CommonAdminWebPage.BookingsListLink).Displayed.Should().BeTrue(); - } - - private void OnlyVhosCanSeeTheQuestionnaireResults() - { - if (_c.CurrentUser.UserType == UserType.VideoHearingsOfficer) - { - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(DashboardPage.QuestionnaireResultsPanel).Displayed.Should().BeTrue(); - } - else - { - _browsers[_c.CurrentUser].Driver.WaitUntilElementNotVisible(DashboardPage.QuestionnaireResultsPanel).Should().BeTrue(); - } - } - - private void OnlyVhosCanSeeThePasswordReset() - { - if (_c.CurrentUser.UserType == UserType.VideoHearingsOfficer) - { - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(DashboardPage.ChangePasswordPanel).Displayed.Should().BeTrue(); - } - else - { - _browsers[_c.CurrentUser].Driver.WaitUntilElementNotVisible(DashboardPage.ChangePasswordPanel).Should().BeTrue(); - } - } - - private void OnlyVhosCanSeeTheGetAudioFile() - { - if (_c.CurrentUser.UserType == UserType.VideoHearingsOfficer) - { - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(DashboardPage.GetAudioFilePanel).Displayed.Should().BeTrue(); - } - else - { - _browsers[_c.CurrentUser].Driver.WaitUntilElementNotVisible(DashboardPage.GetAudioFilePanel).Should().BeTrue(); - } - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/EditParticipantNameSteps.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/EditParticipantNameSteps.cs deleted file mode 100644 index a4c90580a..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/EditParticipantNameSteps.cs +++ /dev/null @@ -1,87 +0,0 @@ -using AcceptanceTests.Common.Driver.Drivers; -using AcceptanceTests.Common.Driver.Helpers; -using AdminWebsite.AcceptanceTests.Helpers; -using AdminWebsite.AcceptanceTests.Pages; -using TestApi.Contract.Dtos; -using FluentAssertions; -using System.Collections.Generic; -using TechTalk.SpecFlow; - -namespace AdminWebsite.AcceptanceTests.Steps -{ - [Binding] - public class EditParticipantNameSteps - { - private readonly TestContext _c; - private readonly Dictionary _browsers; - private UserDto _participant; - - public EditParticipantNameSteps(TestContext c, Dictionary browsers) - { - _c = c; - _browsers = browsers; - } - - [When(@"I search for '(.*)' by contact email")] - public void WhenISearchForTheParticipantByContactEmail(string userType) - { - SearchParticipantBy(userType); - } - - [When(@"then update First and Last Name")] - public void WhenThenUpdateFirstAndLastName() - { - var emailLink = EditParticipantNamePage.ContactEmailLink(_participant.ContactEmail); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(emailLink); - _browsers[_c.CurrentUser].Click(emailLink); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(EditParticipantNamePage.FirstNameField).Clear(); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(EditParticipantNamePage.FirstNameField).SendKeys(_participant.FirstName); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(EditParticipantNamePage.LastNameField).Clear(); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(EditParticipantNamePage.LastNameField).SendKeys(_participant.LastName); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(EditParticipantNamePage.SaveButton); - _browsers[_c.CurrentUser].Click(EditParticipantNamePage.SaveButton); - } - - [Then(@"the participant's details are updated")] - public void ThenTheParticipantSDetailsAreUpdated() - { - _browsers[_c.CurrentUser].TextOf(EditParticipantNamePage.CompleteSignField).ToLower().Should().Be(EditParticipantNamePage.CompleteSignText); - } - - [Then(@"the user does not exists message is displayed")] - public void ThenTheUserDoesNotExistsMessageIsDisplayed() - { - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(EditParticipantNamePage.UserNotFounMessage).Displayed.Should().BeTrue(); - } - - [Then(@"the user is not allowed to be edited message is displayed")] - public void ThenTheUserIsNotAllowedToBeEditedMessageIsDisplayed() - { - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(EditParticipantNamePage.JudgeNotAllowedToBeEditedMessage).Displayed.Should().BeTrue(); - } - - private void SearchParticipantBy(string userType) - { - var contactEmail = GetParticipantEmail(userType); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(EditParticipantNamePage.ContactEmailTextField).SendKeys(contactEmail); - _browsers[_c.CurrentUser].Driver.WaitUntilElementClickable(EditParticipantNamePage.SubmitButton); - _browsers[_c.CurrentUser].Click(EditParticipantNamePage.SubmitButton); - - } - - private string GetParticipantEmail(string userType) - { - _participant = userType switch - { - "Individual" => Users.GetIndividualUser(_c.Users), - "Representative" => Users.GetRepresentativeUser(_c.Users), - "PanelMember" => Users.GetPanelMemberUser(_c.Users), - "Judge" => Users.GetJudgeUser(_c.Users), - _ => null - }; - - return _participant == null ? "user@hmcts.net": _participant.ContactEmail; - } - - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/ErrorSteps.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/ErrorSteps.cs deleted file mode 100644 index d9169b1d8..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/ErrorSteps.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System.Collections.Generic; -using AcceptanceTests.Common.Driver.Drivers; -using AcceptanceTests.Common.Driver.Helpers; -using AdminWebsite.AcceptanceTests.Helpers; -using AdminWebsite.AcceptanceTests.Pages; -using TestApi.Contract.Dtos; -using FluentAssertions; -using TechTalk.SpecFlow; - -namespace AdminWebsite.AcceptanceTests.Steps -{ - [Binding] - public class ErrorSteps - { - private readonly TestContext _c; - private readonly Dictionary _browsers; - private readonly LoginSteps _loginSteps; - public ErrorSteps(TestContext testContext, Dictionary browsers, LoginSteps loginSteps) - { - _c = testContext; - _browsers = browsers; - _loginSteps = loginSteps; - } - - [When(@"the user attempts to access the page on their unsupported browser")] - public void WhenTheUserAttemptsToAccessThePageOnTheirUnsupportedBrowser() - { - _loginSteps.ProgressToNextPage(); - } - - [Then(@"the user is on the Unsupported Browser error page with text of how to rectify the problem")] - public void ThenTheUserIsOnTheUnsupportedBrowserErrorPageWithTextOfHowToRectifyTheProblem() - { - _browsers[_c.CurrentUser].Driver.Url.Should().NotContain(Page.Dashboard.Url); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(ErrorPage.UnsupportedBrowserTitle).Displayed.Should().BeTrue(); - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/GetAudioFileSteps.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/GetAudioFileSteps.cs deleted file mode 100644 index b854e90fc..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/GetAudioFileSteps.cs +++ /dev/null @@ -1,116 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using System.Net; -using System.Threading.Tasks; -using AcceptanceTests.Common.Api.Helpers; -using AcceptanceTests.Common.Driver.Drivers; -using AcceptanceTests.Common.Driver.Helpers; -using AdminWebsite.AcceptanceTests.Data; -using AdminWebsite.AcceptanceTests.Helpers; -using AdminWebsite.AcceptanceTests.Pages; -using TestApi.Contract.Dtos; -using FluentAssertions; -using TechTalk.SpecFlow; -using VideoApi.Contract.Responses; -using AcceptanceTests.Common.AudioRecordings; - -namespace AdminWebsite.AcceptanceTests.Steps -{ - [Binding] - public class GetAudioFileSteps - { - private readonly TestContext _c; - private readonly Dictionary _browsers; - - public GetAudioFileSteps(TestContext c, Dictionary browsers) - { - _c = c; - _browsers = browsers; - } - - [Given(@"I have an audio recording for the closed conference")] - public async Task GivenIHaveAnAudioRecordingForMainHearing() - { - var result = await _c.AzureStorage.First().VerifyAudioFileExistsInStorage(); - result.Should().BeTrue("Audio file successfully uploaded to Azure Storage"); - var response = _c.Api.GetConferenceByConferenceId(_c.Test.ConferenceResponse.Id); - response.StatusCode.Should().Be(HttpStatusCode.OK); - var conference = RequestHelper.Deserialise(response.Content); - conference.StartedDateTime.Should().NotBeNull(); - conference.ClosedDateTime.Should().NotBeNull(); - _c.Test.ConferenceResponse = conference; - } - - [Given(@"I have an audio recording for the closed conference with an Interpreter")] - public async Task GivenIHaveAnAudioRecordingForMainHearingAndInterpreter() - { - var fileName = $"{_c.Test.HearingResponse.Id}_interpreter"; - var file = FileManager.CreateNewAudioFile("TestAudioFile.mp4", fileName); - - var asm = new AzureStorageManager() - .SetStorageAccountName(_c.WebConfig.Wowza.StorageAccountName) - .SetStorageAccountKey(_c.WebConfig.Wowza.StorageAccountKey) - .SetStorageContainerName(_c.WebConfig.Wowza.StorageContainerName) - .CreateBlobClient(fileName); - - _c.AzureStorage.Add(asm); - - await asm.UploadAudioFileToStorage(file); - FileManager.RemoveLocalAudioFile(file); - - for (int i = 0; i < _c.AzureStorage.Count(); i++) - { - var result = await _c.AzureStorage[i].VerifyAudioFileExistsInStorage(); - result.Should().BeTrue("Audio file successfully uploaded to Azure Storage"); - } - - var response = _c.Api.GetConferenceByConferenceId(_c.Test.ConferenceResponse.Id); - response.StatusCode.Should().Be(HttpStatusCode.OK); - var conference = RequestHelper.Deserialise(response.Content); - conference.StartedDateTime.Should().NotBeNull(); - conference.ClosedDateTime.Should().NotBeNull(); - _c.Test.ConferenceResponse = conference; - } - - [When(@"I search for the audio recording by case number")] - public void WhenISearchForTheAudioRecordingByCaseNumber() - { - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(GetAudioFilePage.CaseNumberTextField).SendKeys(_c.Test.HearingResponse.Cases.First().Number); - _browsers[_c.CurrentUser].Driver.WaitUntilElementClickable(GetAudioFilePage.SubmitButton); - _browsers[_c.CurrentUser].Click(GetAudioFilePage.SubmitButton); - } - - [Then(@"the audio recording is retrieved")] - public void ThenTheAudioRecordingIsRetrieved() - { - var hearing = _c.Test.HearingResponse; - var caseDetails = hearing.Cases.First(); - var date = _c.TimeZone.Adjust(hearing.ScheduledDateTime).Date.ToString(DateFormats.AudioScheduledDate); - - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(GetAudioFilePage.ResultsCaseNumber(hearing.Id)); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(GetAudioFilePage.ResultsScheduledTime(hearing.Id)); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(GetAudioFilePage.ResultsCaseName(hearing.Id)); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(GetAudioFilePage.ResultsVenue(hearing.Id)); - - _browsers[_c.CurrentUser].TextOf(GetAudioFilePage.ResultsCaseNumber(hearing.Id)).Should().Be(caseDetails.Number); - _browsers[_c.CurrentUser].TextOf(GetAudioFilePage.ResultsScheduledTime(hearing.Id)).Should().Be(date); - _browsers[_c.CurrentUser].TextOf(GetAudioFilePage.ResultsCaseName(hearing.Id)).Should().Be(caseDetails.Name); - _browsers[_c.CurrentUser].TextOf(GetAudioFilePage.ResultsVenue(hearing.Id)).Should().Be($"{hearing.HearingVenueName} {hearing.HearingRoomName}"); - } - - [Then(@"the link can be retrieved")] - [Then(@"the links can be retrieved")] - public void ThenTheLinkCanBeRetrieved() - { - _browsers[_c.CurrentUser].Click(GetAudioFilePage.GetLinkButton); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(GetAudioFilePage.CopyLinkButton(0)).Displayed.Should().BeTrue(); - _browsers[_c.CurrentUser].ScrollTo(GetAudioFilePage.CopyLinkButton(0)); - - for (int i = 0; i < _c.AzureStorage.Count(); i++) - { - _browsers[_c.CurrentUser].Click(GetAudioFilePage.CopyLinkButton(i)); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(GetAudioFilePage.LinkCopiedSuccessMessage(i)).Displayed.Should().BeTrue(); - } - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/HearingDetailsSteps.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/HearingDetailsSteps.cs deleted file mode 100644 index 2d8a163b3..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/HearingDetailsSteps.cs +++ /dev/null @@ -1,90 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Threading; -using AcceptanceTests.Common.Data.Helpers; -using AcceptanceTests.Common.Driver.Drivers; -using AcceptanceTests.Common.Driver.Helpers; -using AcceptanceTests.Common.Model.Case; -using AcceptanceTests.Common.Model.Hearing; -using AcceptanceTests.Common.Test.Steps; -using AdminWebsite.AcceptanceTests.Helpers; -using AdminWebsite.AcceptanceTests.Pages; -using TestApi.Contract.Dtos; -using TechTalk.SpecFlow; - -namespace AdminWebsite.AcceptanceTests.Steps -{ - [Binding] - public class HearingDetailsSteps : ISteps - { - private readonly TestContext _c; - private readonly Dictionary _browsers; - private readonly CommonSharedSteps _commonSharedSteps; - private readonly Random _fromRandomNumber; - - public HearingDetailsSteps(TestContext testContext, Dictionary browsers, CommonSharedSteps commonSharedSteps) - { - _fromRandomNumber = new Random(); - _c = testContext; - _browsers = browsers; - _commonSharedSteps = commonSharedSteps; - } - - [When(@"the user completes the hearing details form")] - public void ProgressToNextPage() - { - SetHearingDetails(); - SetCaseType(); - SetHearingType(); - _c.Test.HearingDetails.DoNotSendQuestionnaires = _c.Test.TestData.HearingDetails.DoNotSendQuestionnaires; - _browsers[_c.CurrentUser].Click(HearingDetailsPage.NextButton); - } - - [When(@"the user elects to send the questionnaires")] - public void WhenTheUserSelectsToSendTheQuestionnaires() - { - SetHearingDetails(); - SetCaseType(); - SetHearingType(); - _c.Test.HearingDetails.DoNotSendQuestionnaires = false; - _browsers[_c.CurrentUser].Click(HearingDetailsPage.NextButton); - } - - public void EditHearingDetails() - { - Thread.Sleep(TimeSpan.FromSeconds(1)); - SetHearingDetails(); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(HearingDetailsPage.NextButton); - _browsers[_c.CurrentUser].Click(HearingDetailsPage.NextButton); - Thread.Sleep(TimeSpan.FromSeconds(1)); - } - - public void SetHearingDetails() - { - _c.Test.HearingDetails.CaseNumber = $"{GenerateRandom.CaseNumber(_fromRandomNumber)}"; - _browsers[_c.CurrentUser].Clear(HearingDetailsPage.CaseNumberTextfield); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(HearingDetailsPage.CaseNumberTextfield).SendKeys(_c.Test.HearingDetails.CaseNumber); - _browsers[_c.CurrentUser].Driver.WaitUntilTextPresent(HearingDetailsPage.CaseNumberTextfield, _c.Test.HearingDetails.CaseNumber); - _c.Test.HearingDetails.CaseName = $"Admin Web Automated Test {GenerateRandom.Letters(_fromRandomNumber)}"; - _browsers[_c.CurrentUser].Clear(HearingDetailsPage.CaseNameTextfield); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(HearingDetailsPage.CaseNameTextfield).SendKeys(_c.Test.HearingDetails.CaseName); - _browsers[_c.CurrentUser].Driver.WaitUntilTextPresent(HearingDetailsPage.CaseNameTextfield, _c.Test.HearingDetails.CaseName); - } - - public void SetCaseType(CaseType caseType = null) - { - caseType ??= CaseType.FromString(_c.Test.TestData.HearingDetails.CaseType); - - _c.Test.HearingDetails.CaseType = CaseType.FromString(_c.Test.TestData.HearingDetails.CaseType); - _commonSharedSteps.WhenTheUserSelectsTheOptionFromTheDropdown(_browsers[_c.CurrentUser].Driver, HearingDetailsPage.CaseTypeDropdown, CaseType.ToString(caseType)); - } - - public void SetHearingType(HearingType hearingType = null) - { - hearingType ??= HearingType.FromString(_c.Test.TestData.HearingDetails.HearingType); - - _c.Test.HearingDetails.HearingType = hearingType; - _commonSharedSteps.WhenTheUserSelectsTheOptionFromTheDropdown(_browsers[_c.CurrentUser].Driver, HearingDetailsPage.HearingTypeDropdown, HearingType.ToString(hearingType)); - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/HearingScheduleSteps.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/HearingScheduleSteps.cs deleted file mode 100644 index a41fd449c..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/HearingScheduleSteps.cs +++ /dev/null @@ -1,190 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using AcceptanceTests.Common.Driver.Drivers; -using AcceptanceTests.Common.Driver.Helpers; -using AcceptanceTests.Common.Test.Steps; -using AdminWebsite.AcceptanceTests.Data; -using AdminWebsite.AcceptanceTests.Helpers; -using AdminWebsite.AcceptanceTests.Pages; -using FluentAssertions; -using TechTalk.SpecFlow; -using TestApi.Contract.Dtos; - -namespace AdminWebsite.AcceptanceTests.Steps -{ - [Binding] - public class HearingScheduleSteps : ISteps - { - private readonly TestContext _c; - private readonly Dictionary _browsers; - private readonly CommonSharedSteps _commonSharedSteps; - - public HearingScheduleSteps(TestContext testContext, Dictionary browsers, CommonSharedSteps commonSharedSteps) - { - _c = testContext; - _browsers = browsers; - _commonSharedSteps = commonSharedSteps; - } - - [When(@"the user completes the hearing schedule form")] - public void ProgressToNextPage() - { - SetHearingScheduleDetails(); - AddHearingDate(); - AddHearingTime(); - AddHearingScheduleDetails(); - ClickNext(); - } - - - [When(@"the user completes the hearing schedule form with multi days")] - public void ProgressToNextPageWithMultiDays() - { - _c.Test.HearingSchedule.MultiDays = true; - ProgressToNextPage(); - } - - public void AddHearingDate() - { - var date = _c.Test.HearingSchedule.ScheduledDate.Date.ToString(DateFormats.LocalDateFormat(_c.WebConfig.SauceLabsConfiguration.RunningOnSauceLabs())); - _browsers[_c.CurrentUser].Clear(HearingSchedulePage.HearingDateTextfield); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(HearingSchedulePage.HearingDateTextfield).SendKeys(date); - if (_c.Test.HearingSchedule.MultiDays) - { - var endDate = _c.Test.HearingSchedule.EndHearingDate.Date.ToString(DateFormats.LocalDateFormat(_c.WebConfig.SauceLabsConfiguration.RunningOnSauceLabs())); - _browsers[_c.CurrentUser].Clear(HearingSchedulePage.HearingEndDateTextField); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(HearingSchedulePage.HearingEndDateTextField).SendKeys(endDate); - } - } - - private void AddHearingTime() - { - _browsers[_c.CurrentUser].Clear(HearingSchedulePage.HearingStartTimeHourTextfield); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(HearingSchedulePage.HearingStartTimeHourTextfield).SendKeys(_c.Test.HearingSchedule.ScheduledDate.Hour.ToString()); - _browsers[_c.CurrentUser].Clear(HearingSchedulePage.HearingStartTimeMinuteTextfield); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(HearingSchedulePage.HearingStartTimeMinuteTextfield).SendKeys(_c.Test.HearingSchedule.ScheduledDate.Minute.ToString()); - } - - private void AddHearingScheduleDetails() - { - if (!_c.Test.HearingSchedule.MultiDays) - { - _browsers[_c.CurrentUser].Clear(HearingSchedulePage.HearingDurationHourTextfield); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(HearingSchedulePage.HearingDurationHourTextfield).SendKeys(_c.Test.HearingSchedule.DurationHours.ToString()); - _browsers[_c.CurrentUser].Clear(HearingSchedulePage.HearingDurationMinuteTextfield); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(HearingSchedulePage.HearingDurationMinuteTextfield).SendKeys(_c.Test.HearingSchedule.DurationMinutes.ToString()); - } - _commonSharedSteps.WhenTheUserSelectsTheOptionFromTheDropdown(_browsers[_c.CurrentUser].Driver, HearingSchedulePage.CourtAddressDropdown, _c.Test.HearingSchedule.HearingVenue); - _browsers[_c.CurrentUser].Clear(HearingSchedulePage.CourtRoomTextfield); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(HearingSchedulePage.CourtRoomTextfield).SendKeys(_c.Test.HearingSchedule.Room); - } - - private void SetHearingScheduleDetails() - { - _c.Test.HearingSchedule.ScheduledDate = _c.Test.HearingSchedule.ScheduledDate == default ? SetDateAsOneMinuteToMidnight() : UpdateDateAsTenMinutesToMidnight(); - _c.Test.HearingSchedule.DurationHours = _c.Test.HearingSchedule.DurationHours == 0 ? _c.Test.TestData.HearingSchedule.DurationHours : 0; - _c.Test.HearingSchedule.DurationMinutes = _c.Test.HearingSchedule.DurationMinutes == 0 ? _c.Test.TestData.HearingSchedule.DurationMinutes : 25; - _c.Test.HearingSchedule.HearingVenue = _c.Test.HearingSchedule.HearingVenue != null ? "Manchester Civil and Family Justice Centre" : _c.Test.TestData.HearingSchedule.HearingVenue; - _c.Test.HearingSchedule.Room = _c.Test.HearingSchedule.Room != null ? "2" : _c.Test.TestData.HearingSchedule.Room; - - if (!_c.Test.HearingSchedule.MultiDays) return; - SelectMultiDaysHearing(); - _c.Test.HearingSchedule.ScheduledDate = DateHelper.GetNextIfDayIfNotAWorkingDay(_c.Test.HearingSchedule.ScheduledDate); - _c.Test.HearingSchedule.EndHearingDate = DateHelper.GetNextWorkingDay(_c.Test.HearingSchedule.ScheduledDate, NotCountingToday()); - _c.Test.HearingSchedule.NumberOfMultiDays = _c.Test.TestData.HearingSchedule.NumberOfMultiDays; - } - - private int NotCountingToday() - { - return _c.Test.TestData.HearingSchedule.NumberOfMultiDays - 1; - } - - private void SelectMultiDaysHearing() - { - var isCheckboxSelected = _browsers[_c.CurrentUser].Driver.WaitUntilElementExists(HearingSchedulePage.MultiDaysCheckBox).Selected; - if (!isCheckboxSelected) { - _browsers[_c.CurrentUser].ClickCheckbox(HearingSchedulePage.MultiDaysCheckBox); - } - - } - - private static DateTime SetDateAsOneMinuteToMidnight() - { - return DateTime.Today.AddDays(AddDayIfCloseToMidnight()).AddMinutes(-1); - } - - private static DateTime UpdateDateAsTenMinutesToMidnight() - { - return DateTime.Today.AddDays(AddDayIfCloseToMidnight()).AddMinutes(-10); - } - - private static int AddDayIfCloseToMidnight() - { - var utcNow = DateTime.UtcNow.ToShortTimeString(); - if (utcNow.Equals("11:58 PM") || - utcNow.Equals("11:59 PM")) - { - return 2; - } - return 1; - } - - public void EditHearingSchedule() - { - Thread.Sleep(TimeSpan.FromSeconds(1)); - SetHearingScheduleDetails(); - AddHearingDate(); - AddHearingTime(); - AddHearingScheduleDetails(); - ClickNext(); - Thread.Sleep(TimeSpan.FromSeconds(1)); - } - - [When(@"the user attempts to set a date in the past")] - public void WhenTheUserAttemptsToSetADateInThePast() - { - SetHearingScheduleDetails(); - _c.Test.HearingSchedule.ScheduledDate = DateTime.MinValue; - AddHearingDate(); - AddHearingTime(); - AddHearingScheduleDetails(); - } - - [Then(@"an error message appears to enter a future date")] - public void ThenAnErrorMessageAppearsToEnterAFutureDate() - { - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(HearingSchedulePage.HearingDateError).Displayed.Should().BeTrue(); - } - - [When(@"the user attempts to set a time in the past")] - public void WhenTheUserAttemptsToSetATimeInThePast() - { - SetHearingScheduleDetails(); - _c.Test.HearingSchedule.ScheduledDate = DateTime.Today; - AddHearingDate(); - AddHearingTime(); - AddHearingScheduleDetails(); - } - - [Then(@"an error message appears to enter a future time")] - public void ThenAnErrorMessageAppearsToEnterAFutureTime() - { - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(HearingSchedulePage.HearingTimeError).Displayed.Should().BeTrue(); - } - - [Then(@"the user cannot proceed to the next page")] - public void ThenTheUserCannotProceedToTheNextPage() - { - ClickNext(); - _browsers[_c.CurrentUser].PageUrl(Page.AssignJudge.Url, true); - } - - private void ClickNext() - { - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(HearingSchedulePage.NextButton); - _browsers[_c.CurrentUser].Click(HearingSchedulePage.NextButton); - } - } -} \ No newline at end of file diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/LoginSteps.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/LoginSteps.cs deleted file mode 100644 index bb89e28b9..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/LoginSteps.cs +++ /dev/null @@ -1,59 +0,0 @@ -using System.Collections.Generic; -using AcceptanceTests.Common.Driver.Drivers; -using AcceptanceTests.Common.PageObject.Pages; -using AcceptanceTests.Common.Test.Steps; -using AdminWebsite.AcceptanceTests.Helpers; -using TestApi.Contract.Dtos; -using FluentAssertions; -using TechTalk.SpecFlow; - -namespace AdminWebsite.AcceptanceTests.Steps -{ - [Binding] - public sealed class LoginSteps : ISteps - { - private LoginSharedSteps _loginSharedSteps; - private readonly Dictionary _browsers; - private readonly TestContext _c; - private const int ReachedThePageRetries = 2; - - public LoginSteps(Dictionary browsers, TestContext testContext) - { - _browsers = browsers; - _c = testContext; - } - - [When(@"they attempt to login with valid credentials")] - public void ProgressToNextPage() - { - _loginSharedSteps = new LoginSharedSteps(_browsers[_c.CurrentUser], _c.CurrentUser.Username, _c.WebConfig.TestConfig.TestUserPassword); - _loginSharedSteps.ProgressToNextPage(); - } - - [Given(@"the user logs out")] - [When(@"the user attempts to logout")] - public void WhenTheUserAttemptsToLogout() - { - _browsers[_c.CurrentUser].ClickLink(CommonPages.SignOutLink); - } - - [Then(@"the sign out link is displayed")] - public void ThenTheSignOutLinkIsDisplayed() - { - _loginSharedSteps.ThenTheSignOutLinkIsDisplayed(); - } - - [Then(@"the user should be navigated to sign in screen")] - public void ThenTheUserShouldBeNavigatedToSignInScreen() - { - _browsers[_c.CurrentUser].Retry(() => _browsers[_c.CurrentUser].Driver.Title.Trim().Should().Be(LoginPage.SignOutTitle), ReachedThePageRetries); - } - - [Then(@"they should be able to logout")] - public void ThenTheyShouldBeAbleToLogout() - { - WhenTheUserAttemptsToLogout(); - ThenTheUserShouldBeNavigatedToSignInScreen(); - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/NotificationSteps.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/NotificationSteps.cs deleted file mode 100644 index 510799bb4..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/NotificationSteps.cs +++ /dev/null @@ -1,41 +0,0 @@ -using AdminWebsite.AcceptanceTests.Helpers; -using FluentAssertions; -using System.Linq; -using System.Threading.Tasks; -using TechTalk.SpecFlow; - -namespace AdminWebsite.AcceptanceTests.Steps -{ - [Binding] - public class NotificationSteps - { - private readonly TestContext _testContext; - - public NotificationSteps(TestContext testContext) - { - _testContext = testContext; - } - - [Then(@"the participant has been notified")] - public async Task ThenTheParticipantDetailsAreUpdated() - { - var allNotifications = await _testContext.NotifyClient.GetNotificationsAsync("email"); - var newUserPrefix = _testContext.Test.TestData.AddParticipant.Participant.NewUserPrefix; - foreach (var participant in _testContext.Test.HearingParticipants) - { - var name = $"{participant.Firstname} {participant.Lastname}"; - var username = participant.Username; - var recentNotification = allNotifications.notifications.LastOrDefault(x => x.body.Contains(name) && x.body.Contains(username)); - if (participant.DisplayName.Contains(newUserPrefix)) - { - recentNotification.Should().NotBeNull(); - } - else - { - recentNotification.Should().BeNull(); - } - } - - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/OtherInformationSteps.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/OtherInformationSteps.cs deleted file mode 100644 index 0474596d3..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/OtherInformationSteps.cs +++ /dev/null @@ -1,74 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Threading; -using AcceptanceTests.Common.Driver.Drivers; -using AcceptanceTests.Common.Driver.Helpers; -using AcceptanceTests.Common.Test.Steps; -using AdminWebsite.AcceptanceTests.Data.TestData; -using AdminWebsite.AcceptanceTests.Helpers; -using AdminWebsite.AcceptanceTests.Pages; -using TestApi.Contract.Dtos; -using TechTalk.SpecFlow; - -namespace AdminWebsite.AcceptanceTests.Steps -{ - [Binding] - public class OtherInformationSteps : ISteps - { - private readonly TestContext _c; - private readonly Dictionary _browsers; - public OtherInformationSteps(TestContext testContext, Dictionary browsers) - { - _c = testContext; - _browsers = browsers; - } - - [When(@"the user completes the other information form")] - [Then(@"the user completes the other information form")] - public void ProgressToNextPage() - { - Thread.Sleep(TimeSpan.FromSeconds(1)); - SetOtherInformation(); - _browsers[_c.CurrentUser].Clear(OtherInformationPage.OtherInformationTextfield); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(OtherInformationPage.OtherInformationTextfield) - .SendKeys(GetOtherInfo(_c.Test.TestData.OtherInformationDetails.OtherInformation)); - - ClickNext(); - } - - [When(@"the user sets audio recording to No")] - public void WhenTheUserSetsAudioRecordingToNo() - { - SetAudioRecording(_c.Test.AssignJudge.AudioRecord); - ProgressToNextPage(); - } - - - private void SetOtherInformation() - { - var otherInformationText = "Updated other information"; - _c.Test.TestData.OtherInformationDetails ??= new OtherInformationDetails() { OtherInformation = otherInformationText }; - _c.Test.TestData.OtherInformationDetails.OtherInformation ??= otherInformationText; - } - - private void ClickNext() - { - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(OtherInformationPage.NextButton); - _browsers[_c.CurrentUser].Click(OtherInformationPage.NextButton); - } - - private void SetAudioRecording(bool audioRecord) - { - _browsers[_c.CurrentUser].ClickRadioButton(audioRecord - ? OtherInformationPage.AudioRecordYesRadioButton - : OtherInformationPage.AudioRecordNoRadioButton); - _c.Test.AssignJudge.AudioRecord = audioRecord; - } - - public static string GetOtherInfo(string otherInformation) - { - string otherInformationKey = "|OtherInformation|"; - return otherInformation.Substring(otherInformation.IndexOf(otherInformationKey) + otherInformationKey.Length); - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/ProgressionSteps.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/ProgressionSteps.cs deleted file mode 100644 index dfd86cdb8..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/ProgressionSteps.cs +++ /dev/null @@ -1,189 +0,0 @@ -using System.Collections.Generic; -using AcceptanceTests.Common.Test.Steps; -using AdminWebsite.AcceptanceTests.Helpers; -using AdminWebsite.AcceptanceTests.Pages; -using AdminWebsite.AcceptanceTests.Pages.Journeys; -using TechTalk.SpecFlow; - -namespace AdminWebsite.AcceptanceTests.Steps -{ - [Binding] - public class ProgressionSteps - { - private readonly TestContext _c; - private readonly AddParticipantSteps _addParticipantSteps; - private readonly AssignJudgeSteps _assignJudgeSteps; - private readonly BookingConfirmationSteps _bookingConfirmationSteps; - private readonly BookingDetailsSteps _bookingDetailsSteps; - private readonly BookingsListSteps _bookingsListSteps; - private readonly BrowserSteps _browsersSteps; - private readonly DashboardSteps _dashboardSteps; - private readonly HearingDetailsSteps _hearingDetailsSteps; - private readonly HearingScheduleSteps _hearingScheduleSteps; - private readonly LoginSteps _loginSteps; - private readonly OtherInformationSteps _otherInformationSteps; - private readonly SummarySteps _summarySteps; - private readonly VideoAccessPointsSteps _videoAccessPointsSteps; - - public ProgressionSteps( - TestContext testContext, - AddParticipantSteps addParticipantSteps, - AssignJudgeSteps assignJudgeSteps, - BookingConfirmationSteps bookingConfirmationSteps, - BookingDetailsSteps bookingDetailsSteps, - BookingsListSteps bookingsListSteps, - BrowserSteps browserSteps, - DashboardSteps dashboardSteps, - HearingDetailsSteps hearingDetailsSteps, - HearingScheduleSteps hearingScheduleSteps, - LoginSteps loginSteps, - OtherInformationSteps otherInformationSteps, - SummarySteps summarySteps, - VideoAccessPointsSteps videoAccessPointsSteps) - { - _c = testContext; - _addParticipantSteps = addParticipantSteps; - _assignJudgeSteps = assignJudgeSteps; - _bookingConfirmationSteps = bookingConfirmationSteps; - _bookingDetailsSteps = bookingDetailsSteps; - _bookingsListSteps = bookingsListSteps; - _browsersSteps = browserSteps; - _dashboardSteps = dashboardSteps; - _hearingDetailsSteps = hearingDetailsSteps; - _hearingScheduleSteps = hearingScheduleSteps; - _loginSteps = loginSteps; - _otherInformationSteps = otherInformationSteps; - _summarySteps = summarySteps; - _videoAccessPointsSteps = videoAccessPointsSteps; - } - - [Given(@"the (.*) user has progressed to the (.*) page")] - public void GivenIAmOnThePage(string user, string page) - { - _browsersSteps.GivenANewBrowserIsOpenFor(user); - Progression(FromString(page), "Login", page); - } - - [When(@"the user has progressed to the (.*) page")] - [Given(@"the user has progressed to the (.*) page")] - public void WhenIHaveContinuedToThePage(string page) - { - Progression(FromString("Video Access Points"), "Video Access Points", page); - } - - [Given(@"the (.*) user has progressed to the (.*) page of a multi days hearing")] - public void GivenIAmOnThePageOfMultiDaysHearing(string user, string page) - { - _c.Test.HearingSchedule.MultiDays = true; - GivenIAmOnThePage(user, page); - } - - [When(@"progresses from the (.*) page to the (.*) page")] - public void WhenProgressesFromPageToAnotherPage(string from, string to) - { - Progression(FromString(to), from, to); - } - - private static Journey FromString(string page) - { - if (page.ToLower().Equals(Page.BookingsList.Name.ToLower())) - { - return Journey.BookingsList; - } - - if (page.ToLower().Equals(Page.BookingDetails.Name.ToLower())) - { - return Journey.BookingDetails; - } - - if (page.ToLower().Equals(Page.Questionnaire.Name.ToLower())) - { - return Journey.Questionnaire; - } - - if (page.ToLower().Equals(Page.ChangePassword.Name.ToLower())) - { - return Journey.ChangePassword; - } - - if (page.ToLower().Equals(Page.GetAudioFile.Name.ToLower())) - { - return Journey.GetAudioFile; - } - - if (page.ToLower().Equals(Page.EditParticipantName.Name.ToLower())) - { - return Journey.EditParticipantName; - } - - return Journey.BookingConfirmation; - } - - private void Progression(Journey userJourney, string startPageAsString, string endPageAsString) - { - var startPage = Page.FromString(startPageAsString); - var startPageReached = false; - var endPage = Page.FromString(endPageAsString); - var journeys = new Dictionary - { - {Journey.BookingConfirmation, new BookingsConfirmationJourney()}, - {Journey.BookingDetails, new BookingDetailsJourney()}, - {Journey.BookingsList, new BookingListJourney()}, - {Journey.ChangePassword, new ChangePasswordJourney()}, - {Journey.GetAudioFile, new GetAudioFileJourney()}, - {Journey.Questionnaire, new QuestionnaireJourney()}, - {Journey.EditParticipantName, new EditParticipantNameJourney()} - }; - journeys[userJourney].VerifyUserIsApplicableToJourney(_c.CurrentUser.UserType); - journeys[userJourney].VerifyDestinationIsInThatJourney(endPage); - _c.Route = journeys[userJourney].GetNextPage(GetRouteBasedOn(userJourney)); - var journey = journeys[userJourney].Journey(); - var steps = Steps(); - foreach (var page in journey) - { - if (!startPageReached) - { - if (page.Equals(startPage)) - { - startPageReached = true; - } - else - { - continue; - } - } - if (page != Page.Login) _browsersSteps.ThenTheUserIsOnThePage(page.Name); - if (page.Equals(endPage)) break; - steps[page].ProgressToNextPage(); - } - } - - private static Page GetRouteBasedOn(Journey userJourney) - { - if (userJourney == Journey.BookingDetails || userJourney == Journey.BookingsList) - { - return Page.BookingConfirmation; - } - return Page.Dashboard; - } - - private Dictionary Steps() - { - return new Dictionary - { - {Page.AddParticipants, _addParticipantSteps}, - {Page.AssignJudge, _assignJudgeSteps}, - {Page.BookingConfirmation, _bookingConfirmationSteps}, - {Page.BookingDetails, _bookingDetailsSteps}, - {Page.BookingsList, _bookingsListSteps}, - {Page.Dashboard, _dashboardSteps}, - {Page.HearingDetails, _hearingDetailsSteps}, - {Page.HearingSchedule, _hearingScheduleSteps}, - {Page.Login, _loginSteps}, - {Page.OtherInformation, _otherInformationSteps}, - {Page.Summary, _summarySteps}, - {Page.VideoAccessPoints, _videoAccessPointsSteps} - }; - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/SummarySteps.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/SummarySteps.cs deleted file mode 100644 index 1e1299504..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/SummarySteps.cs +++ /dev/null @@ -1,267 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq; -using AcceptanceTests.Common.Configuration.Users; -using AcceptanceTests.Common.Driver.Drivers; -using AcceptanceTests.Common.Driver.Helpers; -using AcceptanceTests.Common.Test.Steps; -using AdminWebsite.AcceptanceTests.Data; -using AdminWebsite.AcceptanceTests.Helpers; -using AdminWebsite.AcceptanceTests.Pages; -using TestApi.Contract.Dtos; -using FluentAssertions; -using TechTalk.SpecFlow; - -namespace AdminWebsite.AcceptanceTests.Steps -{ - [Binding] - public class SummarySteps : ISteps - { - private const int TIMEOUT = 60; - private readonly TestContext _c; - private readonly Dictionary _browsers; - private readonly BookingDetailsSteps _bookingDetailsSteps; - private readonly HearingDetailsSteps _hearingDetailsSteps; - private readonly HearingScheduleSteps _hearingScheduleSteps; - private readonly AssignJudgeSteps _assignJudgeSteps; - private readonly AddParticipantSteps _addParticipantSteps; - private readonly OtherInformationSteps _otherInformationSteps; - private readonly VideoAccessPointsSteps _videoAccessPointsSteps; - private UserAccount _newUserToEdit; - - public SummarySteps( - TestContext testContext, - Dictionary browsers, - BookingDetailsSteps bookingDetailsSteps, - HearingDetailsSteps hearingDetailsSteps, - HearingScheduleSteps hearingScheduleSteps, - AssignJudgeSteps assignJudgeSteps, - AddParticipantSteps addParticipantSteps, - OtherInformationSteps otherInformationSteps, - VideoAccessPointsSteps videoAccessPointsSteps) - { - _c = testContext; - _browsers = browsers; - _bookingDetailsSteps = bookingDetailsSteps; - _hearingDetailsSteps = hearingDetailsSteps; - _hearingScheduleSteps = hearingScheduleSteps; - _assignJudgeSteps = assignJudgeSteps; - _addParticipantSteps = addParticipantSteps; - _otherInformationSteps = otherInformationSteps; - _videoAccessPointsSteps = videoAccessPointsSteps; - } - - [When(@"the user views the information on the summary form")] - public void ProgressToNextPage() - { - VerifyHearingDetails(); - VerifyHearingSchedule(); - VerifyAudioRecording(); - VerifyVideoAccessPoints(); - VerifyOtherInformation(); - ClickBook(); - } - - [Then(@"the user views the information on the summary form")] - public void ThenTheUserViewsTheInformationOnTheSummaryForm() - { - ClickBook(); - } - - private void ClickBook() - { - _browsers[_c.CurrentUser].Click(SummaryPage.BookButton); - _browsers[_c.CurrentUser].Driver.WaitUntilElementNotVisible(SummaryPage.WaitPopUp, TIMEOUT); - _c.Test.CreatedBy = _c.CurrentUser.Username; - } - - [When(@"the user edits the (.*)")] - public void WhenTheUserEditsTheHearing(string screen) - { - _bookingDetailsSteps.ClickEdit(); - _browsers[_c.CurrentUser].Click(SummaryPage.EditScreenLink(screen)); - - if (screen.Equals("hearing details")) - { - _hearingDetailsSteps.EditHearingDetails(); - } - else if (screen.Equals("hearing schedule")) - { - _hearingScheduleSteps.EditHearingSchedule(); - } - else if (screen.Equals("audio recording")) - { - _assignJudgeSteps.EditAudioRecording(); - } - else if (screen.Equals("other information")) - { - _otherInformationSteps.ProgressToNextPage(); - } - } - - [When(@"the user edits a new participant")] - public void WhenTheUserEditsANewParticipant() - { - _bookingDetailsSteps.ClickEdit(); - _newUserToEdit = UserManager.GetUserFromDisplayName(_c.Test.HearingParticipants, _c.Test.AddParticipant.Participant.NewUserPrefix); - _browsers[_c.CurrentUser].Click(SummaryPage.EditParticipantLink(_newUserToEdit.Firstname)); - _addParticipantSteps.EditANewParticipant(_newUserToEdit.AlternativeEmail); - } - - [When(@"the user edits an Interpreter")] - public void WhenTheUserEditsAnInterpreter() - { - var user = GetParticipantBy("Interpreter"); - _browsers[_c.CurrentUser].Click(SummaryPage.EditParticipantLink(user.Firstname)); - _addParticipantSteps.EditAnInterpreter(user.AlternativeEmail,false); - } - - [When(@"the user edits a saved Interpreter")] - public void WhenTheUserEditsASavedInterpreter() - { - var user = GetParticipantBy("Interpreter"); - _browsers[_c.CurrentUser].Click(SummaryPage.EditParticipantLink(user.Firstname)); - _addParticipantSteps.EditAnInterpreter(user.AlternativeEmail); - } - - - [When(@"the user removes Individual")] - public void WhenTheUserRemovesIndividual() - { - var participant = GetParticipantBy("Litigant in person"); - string nameOnDisplay = $"Mrs {participant.DisplayName}"; - _browsers[_c.CurrentUser].Click(SummaryPage.RemoveParticipantLink(participant.Firstname)); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(SummaryPage.RemoveParticipantMessage(nameOnDisplay)).Displayed.Should().BeTrue(); - _browsers[_c.CurrentUser].Click(SummaryPage.RemoveParticipant); - RemoveParticipant(participant, isParticipantListExpectedToExist: false); - } - - [When(@"the user removes participant")] - public void WhenTheUserRemovesParticipant() - { - var participant = GetParticipantBy("Litigant in person"); - _browsers[_c.CurrentUser].Click(SummaryPage.RemoveParticipantLink(participant.Firstname)); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(SummaryPage.RemoveInterpreterMessage).Displayed.Should().BeTrue(); - _browsers[_c.CurrentUser].Click(SummaryPage.RemoveInterpreter); - RemoveParticipant(participant); - RemoveParticipant(GetParticipantBy("Interpreter")); - } - - [When(@"the user removes Interpreter")] - public void WhenTheUserRemovesInterpreter() - { - var role = "Interpreter"; - _browsers[_c.CurrentUser].Click(SummaryPage.RemoveParticipantLink(GetParticipantBy(role).Firstname)); - _browsers[_c.CurrentUser].Click(SummaryPage.RemoveParticipant); - RemoveParticipant(GetParticipantBy(role)); - } - - private void RemoveParticipant(UserAccount user, bool isParticipantListExpectedToExist = true) - { - _c.Test.HearingParticipants.Remove(user); - - if (isParticipantListExpectedToExist) - ParticipantListContains(user).Should().BeFalse(); - } - - private bool ParticipantListContains(UserAccount interpreter) - { - var participantDetails = _addParticipantSteps.GetAllParticipantsDetails(); - return participantDetails.Any(p => p.Contains(interpreter.Firstname)); - } - - private UserAccount GetParticipantBy(string role) - { - return _c.Test.HearingParticipants.Where(h => h.HearingRoleName == role).FirstOrDefault(); - } - - [When(@"the user edits an endpoint display name")] - public void WhenTheUserEditsAnEndpointDisplayName() - { - _bookingDetailsSteps.ClickEdit(); - _browsers[_c.CurrentUser].Click(SummaryPage.EditScreenLink("video access points")); - _videoAccessPointsSteps.ProgressToNextPage(); - } - - [Then(@"the details are updated")] - public void ThenTheHearingIsUpdated() - { - VerifyHearingDetails(); - VerifyHearingSchedule(); - VerifyAudioRecording(); - VerifyVideoAccessPoints(); - VerifyOtherInformation(); - ClickBook(); - } - - [Then(@"the participant details are updated")] - public void ThenTheParticipantDetailsAreUpdated() - { - ClickBook(); - } - - [Then(@"the questionnaires have been sent")] - public void ThenTheQuestionnairesHaveBeenSent() - { - ProgressToNextPage(); - } - - [Then(@"audio recording is set to No")] - public void ThenAudioRecordingIsSetToNo() - { - VerifyAudioRecording(false); - } - - - private void VerifyHearingDetails() - { - _browsers[_c.CurrentUser].TextOf(SummaryPage.CaseNumber).Should().Be(_c.Test.HearingDetails.CaseNumber); - _browsers[_c.CurrentUser].TextOf(SummaryPage.CaseName).Should().Be(_c.Test.HearingDetails.CaseName); - _browsers[_c.CurrentUser].TextOf(SummaryPage.CaseType).Should().Be(_c.Test.HearingDetails.CaseType.Name); - _browsers[_c.CurrentUser].TextOf(SummaryPage.HearingType).Should().Be(_c.Test.HearingDetails.HearingType.Name); - } - - private void VerifyHearingSchedule() - { - if (!_c.Test.HearingSchedule.MultiDays) - { - var scheduleDate = _c.Test.HearingSchedule.ScheduledDate.ToString(DateFormats.HearingSummaryDate); - _browsers[_c.CurrentUser].TextOf(SummaryPage.HearingDate).ToLower().Should().Be(scheduleDate.ToLower()); - var listedFor = $"listed for {_c.Test.HearingSchedule.DurationMinutes} minutes"; - _browsers[_c.CurrentUser].TextOf(SummaryPage.HearingDuration).Should().Be(listedFor); - } - else - { - var startDate = _c.Test.HearingSchedule.ScheduledDate.ToString(DateFormats.HearingSummaryDateMultiDays); - var endDate = _c.Test.HearingSchedule.EndHearingDate.ToString(DateFormats.HearingSummaryDateMultiDays); - var startTime = _c.Test.HearingSchedule.ScheduledDate.ToString(DateFormats.HearingSummaryTimeMultiDays); - var textDateStart = $"{startDate.ToLower()} -"; - var textDateEnd = $"{endDate.ToLower()}, {startTime.ToLower()}"; - - _browsers[_c.CurrentUser].TextOf(SummaryPage.HearingStartDateMultiDays).ToLower().Should().Be(textDateStart); - _browsers[_c.CurrentUser].TextOf(SummaryPage.HearingEndDateMultiDays).ToLower().Should().Be(textDateEnd); - } - - var courtAddress = $"{_c.Test.HearingSchedule.HearingVenue}, {_c.Test.HearingSchedule.Room}"; - _browsers[_c.CurrentUser].TextOf(SummaryPage.CourtAddress).Should().Be(courtAddress); - } - - private void VerifyAudioRecording(bool audioFlag=true) - { - _browsers[_c.CurrentUser].TextOf(SummaryPage.AudioRecording).Should().Be(audioFlag ? "Yes":"No"); - } - - private void VerifyOtherInformation() - { - var otherInformation = OtherInformationSteps.GetOtherInfo(_c.Test.TestData.OtherInformationDetails.OtherInformation); - _browsers[_c.CurrentUser].TextOf(SummaryPage.OtherInformation).Should().Be(otherInformation); - } - - private void VerifyVideoAccessPoints() - { - var videoAccessPoints = _c.Test.VideoAccessPoints.DisplayName; - _browsers[_c.CurrentUser].TextOf(SummaryPage.VideoAccessPoints(0)).Should().Be(videoAccessPoints); - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/TestHelperSteps.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/TestHelperSteps.cs deleted file mode 100644 index 9c2eba104..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/TestHelperSteps.cs +++ /dev/null @@ -1,17 +0,0 @@ -using AdminWebsite.AcceptanceTests.Helpers; -using FluentAssertions; -using TechTalk.SpecFlow; - -namespace AdminWebsite.AcceptanceTests.Steps -{ - [Binding] - public class TestHelperSteps - { - private readonly TestContext _c; - - public TestHelperSteps(TestContext testContext) - { - _c = testContext; - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/VideoAccessPointsSteps.cs b/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/VideoAccessPointsSteps.cs deleted file mode 100644 index e84c2cf89..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/Steps/VideoAccessPointsSteps.cs +++ /dev/null @@ -1,45 +0,0 @@ -using AcceptanceTests.Common.Driver.Drivers; -using AcceptanceTests.Common.Driver.Helpers; -using AcceptanceTests.Common.Test.Steps; -using AdminWebsite.AcceptanceTests.Helpers; -using AdminWebsite.AcceptanceTests.Pages; -using System.Collections.Generic; -using TestApi.Contract.Dtos; -using TechTalk.SpecFlow; - -namespace AdminWebsite.AcceptanceTests.Steps -{ - [Binding] - public class VideoAccessPointsSteps : ISteps - { - private readonly TestContext _c; - private readonly Dictionary _browsers; - public VideoAccessPointsSteps(TestContext testContext, Dictionary browsers) - { - _c = testContext; - _browsers = browsers; - } - - [When(@"the user completes the Video access points form")] - public void ProgressToNextPage() - { - _browsers[_c.CurrentUser].WaitForPageToLoad(); - SetVideoAccessPoint(); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(VideoAccessPointsPage.DisplayNameField(0)); - _browsers[_c.CurrentUser].Clear(VideoAccessPointsPage.DisplayNameField(0)); - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(VideoAccessPointsPage.DisplayNameField(0)).SendKeys(_c.Test.VideoAccessPoints.DisplayName); - ClickNext(); - } - - private void SetVideoAccessPoint() - { - _c.Test.VideoAccessPoints.DisplayName = _c.Test.VideoAccessPoints.DisplayName != null ? "Test Endpoint 001" : _c.Test.TestData.VideoAccessPoints.DisplayName; - } - - public void ClickNext() - { - _browsers[_c.CurrentUser].Driver.WaitUntilVisible(AssignJudgePage.NextButton); - _browsers[_c.CurrentUser].Click(AssignJudgePage.NextButton); - } - } -} diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/TestAudioFiles/TestAudioFile.mp4 b/AdminWebsite/AdminWebsite.AcceptanceTests/TestAudioFiles/TestAudioFile.mp4 deleted file mode 100644 index 0be381e95..000000000 Binary files a/AdminWebsite/AdminWebsite.AcceptanceTests/TestAudioFiles/TestAudioFile.mp4 and /dev/null differ diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/appsettings.json b/AdminWebsite/AdminWebsite.AcceptanceTests/appsettings.json deleted file mode 100644 index b8116e840..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/appsettings.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Warning" - } - }, - "AllowedHosts": "*", - "AzureAd": { - "Authority": "https://login.microsoftonline.com/", - "GraphApiBaseUri": "https://graph.microsoft.com/", - "RedirectUri": " https://localhost:5400/login", - "PostLogoutRedirectUri": "https://localhost:5400/", - "ResourceId": "resourceID" - }, - "IsLive": false, - "UsingEjud": false, - "SeleniumElementTimeout": 60, - "Saucelabs": { - "Username": "", - "AccessKey": "" - }, - "LocalSaucelabs": { - "Username": "", - "AccessKey": "" - } -} \ No newline at end of file diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/packages.lock.json b/AdminWebsite/AdminWebsite.AcceptanceTests/packages.lock.json deleted file mode 100644 index 61e2b7bb3..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/packages.lock.json +++ /dev/null @@ -1,2704 +0,0 @@ -{ - "version": 1, - "dependencies": { - "net6.0": { - "GovukNotify": { - "type": "Direct", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "HCBh1BsDA4xEGV5pl4cBAJZncADRRk2yQ24MuoCPLGwBTv4fCrto7TX9NPFZhBjSrBbXou9ck/yetxuRbx7/nQ==", - "dependencies": { - "JWT": "[7.1.0, 9.0.0)", - "Newtonsoft.Json": "[10.0.3, 14.0.0)", - "System.Collections.Specialized": "4.3.0", - "System.Reflection": "4.3.0", - "System.Runtime.Extensions": "4.3.0" - } - }, - "NotificationApi.Client": { - "type": "Direct", - "requested": "[1.44.2, )", - "resolved": "1.44.2", - "contentHash": "zZ/reiiXi7niCDE+SObUbeGnq5ON394jHg4YCZX2ZNOM1tz0wnIendQOPOSl4IMuHsLYr/xv6rOB0VqnFdjH/A==", - "dependencies": { - "Microsoft.AspNetCore.Mvc.Core": "2.2.5", - "Newtonsoft.Json": "13.0.1" - } - }, - "NUnit": { - "type": "Direct", - "requested": "[3.13.3, )", - "resolved": "3.13.3", - "contentHash": "KNPDpls6EfHwC3+nnA67fh5wpxeLb3VLFAfLxrug6JMYDLHH6InaQIWR7Sc3y75d/9IKzMksH/gi08W7XWbmnQ==", - "dependencies": { - "NETStandard.Library": "2.0.0" - } - }, - "TestApi.Client": { - "type": "Direct", - "requested": "[1.31.10, )", - "resolved": "1.31.10", - "contentHash": "j36Bl1cnm6ZfjerEJ3/QeRCTJFta41K+dssZ3IvALdqE+yFbTtJgn26fyhIdr10+8tj3zJADzi761/H/NvQ13Q==", - "dependencies": { - "BookingsApi.Client": "1.36.10", - "Microsoft.AspNetCore.Mvc.Core": "2.2.5", - "NUnit": "3.13.2", - "Newtonsoft.Json": "12.0.3", - "UserApi.Client": "1.30.4", - "VideoApi.Client": "1.35.3" - } - }, - "VH.AcceptanceTests.Common": { - "type": "Direct", - "requested": "[1.24.1, )", - "resolved": "1.24.1", - "contentHash": "QhyJpkUzoTHnV6OGf5PSDBU2Qoaeii76OL9FpKxgiiaitILLA1IuygXqnvvAYBdtvNr0FIU1mCkajkCz/6jjVg==", - "dependencies": { - "Appium.WebDriver": "4.4.0", - "Azure.Storage.Blobs": "12.14.1", - "Faker.NETCore": "1.0.2", - "FluentAssertions": "5.10.3", - "Microsoft.AspNetCore.Mvc.Testing": "6.0.11", - "Microsoft.Extensions.Configuration": "7.0.0", - "Microsoft.Extensions.Configuration.Binder": "7.0.0", - "Microsoft.Extensions.Configuration.EnvironmentVariables": "7.0.0", - "Microsoft.Extensions.Configuration.FileExtensions": "7.0.0", - "Microsoft.Extensions.Configuration.Json": "7.0.0", - "Microsoft.Extensions.Configuration.UserSecrets": "7.0.0", - "Microsoft.Extensions.Options": "7.0.0", - "Microsoft.Identity.Client": "4.48.1", - "Microsoft.IdentityModel.Clients.ActiveDirectory": "5.2.8", - "Microsoft.NET.Test.Sdk": "17.4.0", - "Moq": "4.16.0", - "NUnit": "3.13.3", - "NUnit3TestAdapter": "3.17.0", - "Newtonsoft.Json": "13.0.2", - "Polly": "7.2.1", - "Protractor": "1.0.0", - "RestSharp": "106.11.7", - "Selenium.Axe": "4.0.5", - "Selenium.Firefox.WebDriver": "0.27.0", - "Selenium.Support": "4.7.0", - "Selenium.WebDriver": "4.7.0", - "Selenium.WebDriver.ChromeDriver": "111.0.5563.6400", - "Selenium.WebDriver.IEDriver": "4.7.0", - "Selenium.WebDriver.MicrosoftDriver": "17.17134.0", - "SeleniumExtras.WaitHelpers": "1.0.2", - "SpecFlow": "3.9.74", - "SpecFlow.NUnit": "3.9.74", - "SpecFlow.Tools.MsBuild.Generation": "3.9.74", - "System.Configuration.ConfigurationManager": "7.0.0", - "TimeZoneConverter": "6.0.1" - } - }, - "VideoApi.Client": { - "type": "Direct", - "requested": "[1.44.3, )", - "resolved": "1.44.3", - "contentHash": "DeifqS/Lbgy2GhMbZNPZwYB47zwp/rIlHK65J7gE7zLX/l+anfbz8FhyufM9AfjDTcDCEzMlu6XYmp+eDyTYJA==", - "dependencies": { - "Microsoft.AspNetCore.Mvc.Core": "2.2.5" - } - }, - "Appium.WebDriver": { - "type": "Transitive", - "resolved": "4.4.0", - "contentHash": "eMkNgokVlLk7tyZxPp6JoaiwAygG0PBa2WtGdLTZTyRgW8ytfBv7ScLdmlEQkTgVZytedNa+xUVe4XvLfqqHPQ==", - "dependencies": { - "Castle.Core": "4.3.1", - "DotNetSeleniumExtras.PageObjects": "3.11.0", - "Newtonsoft.Json": "13.0.1", - "Selenium.Support": "3.141.0", - "Selenium.WebDriver": "3.141.0", - "System.Drawing.Common": "4.5.1" - } - }, - "AspNetCore.HealthChecks.Uris": { - "type": "Transitive", - "resolved": "6.0.3", - "contentHash": "EY0Vh8s2UrbnyvM/QhbyYuCnbrBw36BKkdh5LqdINxqAGnlPFQXf+/UoNlH/76MTEyg+nvdp2wjr5MqWDkVFaQ==", - "dependencies": { - "Microsoft.Extensions.Diagnostics.HealthChecks": "6.0.0", - "Microsoft.Extensions.Http": "6.0.0" - } - }, - "Azure.Core": { - "type": "Transitive", - "resolved": "1.25.0", - "contentHash": "X8Dd4sAggS84KScWIjEbFAdt2U1KDolQopTPoHVubG2y3CM54f9l6asVrP5Uy384NWXjsspPYaJgz5xHc+KvTA==", - "dependencies": { - "Microsoft.Bcl.AsyncInterfaces": "1.1.1", - "System.Diagnostics.DiagnosticSource": "4.6.0", - "System.Memory.Data": "1.0.2", - "System.Numerics.Vectors": "4.5.0", - "System.Text.Encodings.Web": "4.7.2", - "System.Text.Json": "4.7.2", - "System.Threading.Tasks.Extensions": "4.5.4" - } - }, - "Azure.Storage.Blobs": { - "type": "Transitive", - "resolved": "12.14.1", - "contentHash": "DvRBWUDMB2LjdRbsBNtz/LiVIYk56hqzSooxx4uq4rCdLj2M+7Vvoa1r+W35Dz6ZXL6p+SNcgEae3oZ+CkPfow==", - "dependencies": { - "Azure.Storage.Common": "12.13.0", - "System.Text.Json": "4.7.2" - } - }, - "Azure.Storage.Common": { - "type": "Transitive", - "resolved": "12.13.0", - "contentHash": "jDv8xJWeZY2Er9zA6QO25BiGolxg87rItt9CwAp7L/V9EPJeaz8oJydaNL9Wj0+3ncceoMgdiyEv66OF8YUwWQ==", - "dependencies": { - "Azure.Core": "1.25.0", - "System.IO.Hashing": "6.0.0" - } - }, - "BoDi": { - "type": "Transitive", - "resolved": "1.5.0", - "contentHash": "CzIPzdIAFSd2zuLxI+0K9s48Qv3HQDbWiApn9h96j284rHs2bSPrn/PMca3mi4q3xLSEqOp+GUJ6+mXDD9prKg==" - }, - "BookingsApi.Client": { - "type": "Transitive", - "resolved": "1.47.11", - "contentHash": "9YUrBx5oFEzDKXeaj2CBX8Hm032DD6/OD2jJJtKJ8uAFCQTOg+peWrJQjukMV+jYhAsXOP+UrCXjyAjgrwQM+w==", - "dependencies": { - "Microsoft.AspNetCore.Mvc.Core": "2.2.5" - } - }, - "Castle.Core": { - "type": "Transitive", - "resolved": "4.4.0", - "contentHash": "b5rRL5zeaau1y/5hIbI+6mGw3cwun16YjkHZnV9RRT5UyUIFsgLmNXJ0YnIN9p8Hw7K7AbG1q1UclQVU3DinAQ==", - "dependencies": { - "NETStandard.Library": "1.6.1", - "System.Collections.Specialized": "4.3.0", - "System.ComponentModel": "4.3.0", - "System.ComponentModel.TypeConverter": "4.3.0", - "System.Diagnostics.TraceSource": "4.3.0", - "System.Dynamic.Runtime": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Emit": "4.3.0", - "System.Reflection.TypeExtensions": "4.3.0", - "System.Xml.XmlDocument": "4.3.0" - } - }, - "DotNetSeleniumExtras.PageObjects": { - "type": "Transitive", - "resolved": "3.11.0", - "contentHash": "DJCLQ3beq1fzqpeQ5jTZwDqmzbOD2Xxsb/jCyShYam88CNwGGn5aBBqu4LVSj0sy0Ai76OauQQncYlC48VvQUQ==", - "dependencies": { - "Selenium.WebDriver": "3.10.0" - } - }, - "Faker.NETCore": { - "type": "Transitive", - "resolved": "1.0.2", - "contentHash": "teRWZFwtBSuMRo2jxB4/DfCo3nprjMtjb7tjBfhrnz+BPhQMivW9cVo06kLr4GAJjrCOvCNQ2sJckRwGvMmK0Q==", - "dependencies": { - "NETStandard.Library": "1.6.0" - } - }, - "FluentAssertions": { - "type": "Transitive", - "resolved": "5.10.3", - "contentHash": "gVPEVp1hLVqcv+7Q2wiDf7kqCNn7+bQcQ0jbJ2mcRT6CeRoZl1tNkqvzSIhvekyldDptk77j1b03MXTTRIqqpg==", - "dependencies": { - "System.Configuration.ConfigurationManager": "4.4.0" - } - }, - "FluentValidation": { - "type": "Transitive", - "resolved": "10.4.0", - "contentHash": "rVI1b5L3pq3layrRKIo3N7AT3PWey8ocPZhf6zeHYf6LBBvnP1KzW3bm7KmeazOWW8m1KXMD+shfviIcKSgQ0g==" - }, - "FluentValidation.AspNetCore": { - "type": "Transitive", - "resolved": "10.4.0", - "contentHash": "CF/YkJ+ls/Y76ZTZtQ6Ye9rfRM4TcAL6R8c4q8dDRQzS0/6hL+PG/Vssht3ha/wFMoBd0kiosC7JFxbtWBTccg==", - "dependencies": { - "FluentValidation": "10.4.0", - "FluentValidation.DependencyInjectionExtensions": "10.4.0" - } - }, - "FluentValidation.DependencyInjectionExtensions": { - "type": "Transitive", - "resolved": "10.4.0", - "contentHash": "25LzRDm9Chfyw4aPMsoE+3qkz1x2evb2/537hUcnqkhA9zpREfQYm8y1JF1LCMdcH57q5QAZ27X7dqVOcN6TOA==", - "dependencies": { - "FluentValidation": "10.4.0", - "Microsoft.Extensions.Dependencyinjection.Abstractions": "2.1.0" - } - }, - "Gherkin": { - "type": "Transitive", - "resolved": "19.0.3", - "contentHash": "kq9feqMojMj9aABrHb/ABEPaH2Y4dSclseSahAru6qxCeqVQNLLTgw/6vZMauzI1yBUL2fz03ub5yEd5btLfvg==" - }, - "HtmlAgilityPack": { - "type": "Transitive", - "resolved": "1.11.46", - "contentHash": "dLMn4EVfJBHWmWK4Uh0XGD76FPLHI0qr2Tm0s1m/xmgiHb1JUb9zB8AzO8HtrkBBlMN6JfCUBYddhqC0hZNR+g==" - }, - "JWT": { - "type": "Transitive", - "resolved": "7.1.0", - "contentHash": "z33XjdWSKszw/SRde6fvVsCL2gaKdktZDHJIfpp0RqzNU7RQIaWC4wHUVV2i3RzQSsvQ4bjI3/2kwEAT5S62nA==", - "dependencies": { - "Newtonsoft.Json": "9.0.1", - "System.ComponentModel.Primitives": "4.3.0", - "System.Reflection.TypeExtensions": "4.7.0", - "System.Security.Cryptography.Csp": "4.3.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.0.3", - "contentHash": "zJJZDvqAMlaHO2WEP9lMdxkcrTGes3mBBlUYAzFDNuPuCzNDVFhgrj+uQnitZhLo6BBIcb3UvSuEdJKikPOuWg==", - "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", - "contentHash": "cRp+pFKMjxyw1SfqbRuB1ufr6yUWq5RBmIu0Ff4Kf/DbUZpCAmilXNStjrARQXrJqJCFs55Z+eMhtOFADxvpEw==", - "dependencies": { - "FluentValidation": "[10.0.0, 12.0.0)", - "Swashbuckle.AspNetCore.SwaggerGen": "[6.3.0, 7.0.0)" - } - }, - "Microsoft.ApplicationInsights": { - "type": "Transitive", - "resolved": "2.21.0", - "contentHash": "btZEDWAFNo9CoYliMCriSMTX3ruRGZTtYw4mo2XyyfLlowFicYVM2Xszi5evDG95QRYV7MbbH3D2RqVwfZlJHw==", - "dependencies": { - "System.Diagnostics.DiagnosticSource": "5.0.0" - } - }, - "Microsoft.ApplicationInsights.AspNetCore": { - "type": "Transitive", - "resolved": "2.21.0", - "contentHash": "d+7MB4YdUMc9Mtq2u6C7TritzC0eKfHkhGmlnNckDDQiOQuk9IHMPxUmPBRMm/tn+db8fI/BYno9jGxLhI+SZw==", - "dependencies": { - "Microsoft.ApplicationInsights": "2.21.0", - "Microsoft.ApplicationInsights.DependencyCollector": "2.21.0", - "Microsoft.ApplicationInsights.EventCounterCollector": "2.21.0", - "Microsoft.ApplicationInsights.PerfCounterCollector": "2.21.0", - "Microsoft.ApplicationInsights.WindowsServer": "2.21.0", - "Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel": "2.21.0", - "Microsoft.AspNetCore.Hosting": "2.1.1", - "Microsoft.AspNetCore.Http": "2.1.22", - "Microsoft.Extensions.Configuration.Json": "3.1.0", - "Microsoft.Extensions.Logging.ApplicationInsights": "2.21.0", - "System.Text.Encodings.Web": "4.7.2" - } - }, - "Microsoft.ApplicationInsights.DependencyCollector": { - "type": "Transitive", - "resolved": "2.21.0", - "contentHash": "XArm5tBEUdWs05eDKxnsUUQBduJ45DEQOMnpL7wNWxBpgxn+dbl8nObA2jzExbQhbw6P74lc/1f+RdV4iPaOgg==", - "dependencies": { - "Microsoft.ApplicationInsights": "2.21.0", - "System.Diagnostics.DiagnosticSource": "5.0.0" - } - }, - "Microsoft.ApplicationInsights.EventCounterCollector": { - "type": "Transitive", - "resolved": "2.21.0", - "contentHash": "MfF9IKxx9UhaYHVFQ1VKw0LYvBhkjZtPNUmCTYlGws0N7D2EaupmeIj/EWalqP47sQRedR9+VzARsONcwH8OCA==", - "dependencies": { - "Microsoft.ApplicationInsights": "2.21.0" - } - }, - "Microsoft.ApplicationInsights.PerfCounterCollector": { - "type": "Transitive", - "resolved": "2.21.0", - "contentHash": "RcckSVkfu+NkDie6/HyM6AVLHmTMVZrUrYnDeJdvRByOc2a+DqTM6KXMtsTHW/5+K7DT9QK5ZrZdi0YbBW8PVA==", - "dependencies": { - "Microsoft.ApplicationInsights": "2.21.0", - "Microsoft.Extensions.Caching.Memory": "1.0.0", - "System.Diagnostics.PerformanceCounter": "4.7.0" - } - }, - "Microsoft.ApplicationInsights.WindowsServer": { - "type": "Transitive", - "resolved": "2.21.0", - "contentHash": "Xbhss7dqbKyE5PENm1lRA9oxzhKEouKGMzgNqJ9xTHPZiogDwKVMK02qdbVhvaXKf9zG8RvvIpM5tnGR5o+Onw==", - "dependencies": { - "Microsoft.ApplicationInsights": "2.21.0", - "Microsoft.ApplicationInsights.DependencyCollector": "2.21.0", - "Microsoft.ApplicationInsights.PerfCounterCollector": "2.21.0", - "Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel": "2.21.0", - "System.Diagnostics.DiagnosticSource": "5.0.0" - } - }, - "Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel": { - "type": "Transitive", - "resolved": "2.21.0", - "contentHash": "7D4oq+9YyagEPx+0kNNOXdG6c7IDM/2d+637nAYKFqdWhNN0IqHZEed0DuG28waj7hBSLM9lBO+B8qQqgfE4rw==", - "dependencies": { - "Microsoft.ApplicationInsights": "2.21.0", - "System.IO.FileSystem.AccessControl": "4.7.0" - } - }, - "Microsoft.AspNetCore.Authentication.Abstractions": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "VloMLDJMf3n/9ic5lCBOa42IBYJgyB1JhzLsL68Zqg+2bEPWfGBj/xCJy/LrKTArN0coOcZp3wyVTZlx0y9pHQ==", - "dependencies": { - "Microsoft.AspNetCore.Http.Abstractions": "2.2.0", - "Microsoft.Extensions.Logging.Abstractions": "2.2.0", - "Microsoft.Extensions.Options": "2.2.0" - } - }, - "Microsoft.AspNetCore.Authentication.Core": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "XlVJzJ5wPOYW+Y0J6Q/LVTEyfS4ssLXmt60T0SPP+D8abVhBTl+cgw2gDHlyKYIkcJg7btMVh383NDkMVqD/fg==", - "dependencies": { - "Microsoft.AspNetCore.Authentication.Abstractions": "2.2.0", - "Microsoft.AspNetCore.Http": "2.2.0", - "Microsoft.AspNetCore.Http.Extensions": "2.2.0" - } - }, - "Microsoft.AspNetCore.Authentication.JwtBearer": { - "type": "Transitive", - "resolved": "6.0.9", - "contentHash": "U02ylUPpnb31C8irNFMVZSq6vn00DlCyQHra5ky1mnzWrbwmZ+Er6tms+hsvfp2dVJqTFLXD9+araslWapWY3g==", - "dependencies": { - "Microsoft.IdentityModel.Protocols.OpenIdConnect": "6.10.0" - } - }, - "Microsoft.AspNetCore.Authorization": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "/L0W8H3jMYWyaeA9gBJqS/tSWBegP9aaTM0mjRhxTttBY9z4RVDRYJ2CwPAmAXIuPr3r1sOw+CS8jFVRGHRezQ==", - "dependencies": { - "Microsoft.Extensions.Logging.Abstractions": "2.2.0", - "Microsoft.Extensions.Options": "2.2.0" - } - }, - "Microsoft.AspNetCore.Authorization.Policy": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "aJCo6niDRKuNg2uS2WMEmhJTooQUGARhV2ENQ2tO5443zVHUo19MSgrgGo9FIrfD+4yKPF8Q+FF33WkWfPbyKw==", - "dependencies": { - "Microsoft.AspNetCore.Authentication.Abstractions": "2.2.0", - "Microsoft.AspNetCore.Authorization": "2.2.0" - } - }, - "Microsoft.AspNetCore.Connections.Abstractions": { - "type": "Transitive", - "resolved": "3.1.10", - "contentHash": "+bggAAN8KS7tE5QfK1ZXJSukL+LRUX1t/DrN2iRT3CD3lErUsyww9hHyIaIX+YK1A8UpmqjVukFxgc5w7lvlKg==", - "dependencies": { - "Microsoft.AspNetCore.Http.Features": "3.1.10", - "System.IO.Pipelines": "4.7.3" - } - }, - "Microsoft.AspNetCore.Hosting": { - "type": "Transitive", - "resolved": "2.1.1", - "contentHash": "MqYc0DUxrhAPnb5b4HFspxsoJT+gJlLsliSxIgovf4BsbmpaXQId0/pDiVzLuEbmks2w1/lRfY8w0lQOuK1jQQ==", - "dependencies": { - "Microsoft.AspNetCore.Hosting.Abstractions": "2.1.1", - "Microsoft.AspNetCore.Http": "2.1.1", - "Microsoft.AspNetCore.Http.Extensions": "2.1.1", - "Microsoft.Extensions.Configuration": "2.1.1", - "Microsoft.Extensions.Configuration.EnvironmentVariables": "2.1.1", - "Microsoft.Extensions.Configuration.FileExtensions": "2.1.1", - "Microsoft.Extensions.DependencyInjection": "2.1.1", - "Microsoft.Extensions.FileProviders.Physical": "2.1.1", - "Microsoft.Extensions.Hosting.Abstractions": "2.1.1", - "Microsoft.Extensions.Logging": "2.1.1", - "Microsoft.Extensions.Options": "2.1.1", - "System.Diagnostics.DiagnosticSource": "4.5.0", - "System.Reflection.Metadata": "1.6.0" - } - }, - "Microsoft.AspNetCore.Hosting.Abstractions": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "ubycklv+ZY7Kutdwuy1W4upWcZ6VFR8WUXU7l7B2+mvbDBBPAcfpi+E+Y5GFe+Q157YfA3C49D2GCjAZc7Mobw==", - "dependencies": { - "Microsoft.AspNetCore.Hosting.Server.Abstractions": "2.2.0", - "Microsoft.AspNetCore.Http.Abstractions": "2.2.0", - "Microsoft.Extensions.Hosting.Abstractions": "2.2.0" - } - }, - "Microsoft.AspNetCore.Hosting.Server.Abstractions": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "1PMijw8RMtuQF60SsD/JlKtVfvh4NORAhF4wjysdABhlhTrYmtgssqyncR0Stq5vqtjplZcj6kbT4LRTglt9IQ==", - "dependencies": { - "Microsoft.AspNetCore.Http.Features": "2.2.0", - "Microsoft.Extensions.Configuration.Abstractions": "2.2.0" - } - }, - "Microsoft.AspNetCore.Http": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "YogBSMotWPAS/X5967pZ+yyWPQkThxhmzAwyCHCSSldzYBkW5W5d6oPfBaPqQOnSHYTpSOSOkpZoAce0vwb6+A==", - "dependencies": { - "Microsoft.AspNetCore.Http.Abstractions": "2.2.0", - "Microsoft.AspNetCore.WebUtilities": "2.2.0", - "Microsoft.Extensions.ObjectPool": "2.2.0", - "Microsoft.Extensions.Options": "2.2.0", - "Microsoft.Net.Http.Headers": "2.2.0" - } - }, - "Microsoft.AspNetCore.Http.Abstractions": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "Nxs7Z1q3f1STfLYKJSVXCs1iBl+Ya6E8o4Oy1bCxJ/rNI44E/0f6tbsrVqAWfB7jlnJfyaAtIalBVxPKUPQb4Q==", - "dependencies": { - "Microsoft.AspNetCore.Http.Features": "2.2.0", - "System.Text.Encodings.Web": "4.5.0" - } - }, - "Microsoft.AspNetCore.Http.Connections.Common": { - "type": "Transitive", - "resolved": "3.1.10", - "contentHash": "D/nIhfWpIqNZTD+5g6q4RXO5OvFdcmLByY9RnrDV+40DHmJ+NPd4n/wC/EbUvv8WL8d7MZqT4kux1bK/I9ETyQ==", - "dependencies": { - "Microsoft.AspNetCore.Connections.Abstractions": "3.1.10" - } - }, - "Microsoft.AspNetCore.Http.Extensions": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "2DgZ9rWrJtuR7RYiew01nGRzuQBDaGHGmK56Rk54vsLLsCdzuFUPqbDTJCS1qJQWTbmbIQ9wGIOjpxA1t0l7/w==", - "dependencies": { - "Microsoft.AspNetCore.Http.Abstractions": "2.2.0", - "Microsoft.Extensions.FileProviders.Abstractions": "2.2.0", - "Microsoft.Net.Http.Headers": "2.2.0", - "System.Buffers": "4.5.0" - } - }, - "Microsoft.AspNetCore.Http.Features": { - "type": "Transitive", - "resolved": "3.1.10", - "contentHash": "/uQT0Wx1QMkrefYCuyPzJw0/CZbC++yUBLqGj1WDL7paqC7OqXxfQVT6o9xU0ni+d9SP2Y76UIaYUayvEMNm1w==", - "dependencies": { - "Microsoft.Extensions.Primitives": "3.1.10", - "System.IO.Pipelines": "4.7.3" - } - }, - "Microsoft.AspNetCore.JsonPatch": { - "type": "Transitive", - "resolved": "6.0.9", - "contentHash": "1d31TnoW0na1vYI0qE/vbrB534CWKo70o3ACGz0N0m/SchcZMKc0D/4WTyI0w0emxx63YiyYKWkkyO+EUbQfeg==", - "dependencies": { - "Microsoft.CSharp": "4.7.0", - "Newtonsoft.Json": "13.0.1" - } - }, - "Microsoft.AspNetCore.Mvc.Abstractions": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "ET6uZpfVbGR1NjCuLaLy197cQ3qZUjzl7EG5SL4GfJH/c9KRE89MMBrQegqWsh0w1iRUB/zQaK0anAjxa/pz4g==", - "dependencies": { - "Microsoft.AspNetCore.Routing.Abstractions": "2.2.0", - "Microsoft.Net.Http.Headers": "2.2.0" - } - }, - "Microsoft.AspNetCore.Mvc.Core": { - "type": "Transitive", - "resolved": "2.2.5", - "contentHash": "/8sr8ixIUD57UFwUntha9bOwex7/AkZfdk1f9oNJG1Ek7p/uuKVa7fuHmYZpQOf35Oxrt+2Ku4WPwMSbNxOuWg==", - "dependencies": { - "Microsoft.AspNetCore.Authentication.Core": "2.2.0", - "Microsoft.AspNetCore.Authorization.Policy": "2.2.0", - "Microsoft.AspNetCore.Hosting.Abstractions": "2.2.0", - "Microsoft.AspNetCore.Http": "2.2.0", - "Microsoft.AspNetCore.Http.Extensions": "2.2.0", - "Microsoft.AspNetCore.Mvc.Abstractions": "2.2.0", - "Microsoft.AspNetCore.ResponseCaching.Abstractions": "2.2.0", - "Microsoft.AspNetCore.Routing": "2.2.0", - "Microsoft.AspNetCore.Routing.Abstractions": "2.2.0", - "Microsoft.Extensions.DependencyInjection": "2.2.0", - "Microsoft.Extensions.DependencyModel": "2.1.0", - "Microsoft.Extensions.FileProviders.Abstractions": "2.2.0", - "Microsoft.Extensions.Logging.Abstractions": "2.2.0", - "System.Diagnostics.DiagnosticSource": "4.5.0", - "System.Threading.Tasks.Extensions": "4.5.1" - } - }, - "Microsoft.AspNetCore.Mvc.NewtonsoftJson": { - "type": "Transitive", - "resolved": "6.0.9", - "contentHash": "8Fpz4d3sxuLSHqe4zby0c4br5kqmFCR7ki1utqvjZo9oK0G+pWqqhgB1f6efSLpseAWGK3xF1aK+7mfvhmcMtA==", - "dependencies": { - "Microsoft.AspNetCore.JsonPatch": "6.0.9", - "Newtonsoft.Json": "13.0.1", - "Newtonsoft.Json.Bson": "1.0.2" - } - }, - "Microsoft.AspNetCore.Mvc.Testing": { - "type": "Transitive", - "resolved": "6.0.11", - "contentHash": "fTGSvaCJD+/G/2y26MmHybFG+OfM0qvCeUM5mGEvYPyKORvaS/vYbcD0y1/DFcZ2OJGQmaeq7jBQKHIKgoQVtQ==", - "dependencies": { - "Microsoft.AspNetCore.TestHost": "6.0.11", - "Microsoft.Extensions.DependencyModel": "6.0.0", - "Microsoft.Extensions.Hosting": "6.0.1" - } - }, - "Microsoft.AspNetCore.NodeServices": { - "type": "Transitive", - "resolved": "3.1.1", - "contentHash": "fRh2FhOK1StN12m79FF5y7k0AgYzQ+pfR36e3SCwlPNDdh1kBy1FrU5NdeVr6CEpFcGBt2Vzrdbwp4Q2nyk9rg==", - "dependencies": { - "Microsoft.Extensions.Logging.Console": "3.1.1", - "Newtonsoft.Json": "12.0.2" - } - }, - "Microsoft.AspNetCore.ResponseCaching.Abstractions": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "CIHWEKrHzZfFp7t57UXsueiSA/raku56TgRYauV/W1+KAQq6vevz60zjEKaazt3BI76zwMz3B4jGWnCwd8kwQw==", - "dependencies": { - "Microsoft.Extensions.Primitives": "2.2.0" - } - }, - "Microsoft.AspNetCore.Routing": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "jAhDBy0wryOnMhhZTtT9z63gJbvCzFuLm8yC6pHzuVu9ZD1dzg0ltxIwT4cfwuNkIL/TixdKsm3vpVOpG8euWQ==", - "dependencies": { - "Microsoft.AspNetCore.Http.Extensions": "2.2.0", - "Microsoft.AspNetCore.Routing.Abstractions": "2.2.0", - "Microsoft.Extensions.Logging.Abstractions": "2.2.0", - "Microsoft.Extensions.ObjectPool": "2.2.0", - "Microsoft.Extensions.Options": "2.2.0" - } - }, - "Microsoft.AspNetCore.Routing.Abstractions": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "lRRaPN7jDlUCVCp9i0W+PB0trFaKB0bgMJD7hEJS9Uo4R9MXaMC8X2tJhPLmeVE3SGDdYI4QNKdVmhNvMJGgPQ==", - "dependencies": { - "Microsoft.AspNetCore.Http.Abstractions": "2.2.0" - } - }, - "Microsoft.AspNetCore.SpaServices": { - "type": "Transitive", - "resolved": "3.1.1", - "contentHash": "Sm9Whq95FmQIpcA1lnAmTgqPehw0MNY6uN4vhNSkPH0ZFUnp5iA+Dz9PGcpE6ZRVEkoTTUO9WUDcNMF07vxV2Q==", - "dependencies": { - "Microsoft.AspNetCore.NodeServices": "3.1.1" - } - }, - "Microsoft.AspNetCore.SpaServices.Extensions": { - "type": "Transitive", - "resolved": "6.0.9", - "contentHash": "9PGjQGdFLOravdgL2Gy39wq4q4InZFd4/fjGYaIE/Y/nYpZPKwVXAmjODcA9ZtkVCDxTxPZB2sbHF9jhXGFW+A==", - "dependencies": { - "Microsoft.Extensions.FileProviders.Physical": "6.0.0" - } - }, - "Microsoft.AspNetCore.TestHost": { - "type": "Transitive", - "resolved": "6.0.11", - "contentHash": "5K6666GD7d1cERuyjI0jPiUUwdi7+wpueujX/6zxA0xJnNJu7tOHjHj7mFlPbc0SsshEJBhaklI8fMh3Ms+CAw==", - "dependencies": { - "System.IO.Pipelines": "6.0.3" - } - }, - "Microsoft.AspNetCore.WebUtilities": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "9ErxAAKaDzxXASB/b5uLEkLgUWv1QbeVxyJYEHQwMaxXOeFFVkQxiq8RyfVcifLU7NR0QY0p3acqx4ZpYfhHDg==", - "dependencies": { - "Microsoft.Net.Http.Headers": "2.2.0", - "System.Text.Encodings.Web": "4.5.0" - } - }, - "Microsoft.Bcl.AsyncInterfaces": { - "type": "Transitive", - "resolved": "1.1.1", - "contentHash": "yuvf07qFWFqtK3P/MRkEKLhn5r2UbSpVueRziSqj0yJQIKFwG1pq9mOayK3zE5qZCTs0CbrwL9M6R8VwqyGy2w==" - }, - "Microsoft.CodeCoverage": { - "type": "Transitive", - "resolved": "17.4.0", - "contentHash": "2oZbSVTC2nAvQ2DnbXLlXS+c25ZyZdWeNd+znWwAxwGaPh9dwQ5NBsYyqQB7sKmJKIUdkKGmN3rzFzjVC81Dtg==" - }, - "Microsoft.CSharp": { - "type": "Transitive", - "resolved": "4.7.0", - "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==" - }, - "Microsoft.DotNet.InternalAbstractions": { - "type": "Transitive", - "resolved": "1.0.0", - "contentHash": "AAguUq7YyKk3yDWPoWA8DrLZvURxB/LrDdTn1h5lmPeznkFUpfC3p459w5mQYQE0qpquf/CkSQZ0etiV5vRHFA==", - "dependencies": { - "System.AppContext": "4.1.0", - "System.Collections": "4.0.11", - "System.IO": "4.1.0", - "System.IO.FileSystem": "4.0.1", - "System.Reflection.TypeExtensions": "4.1.0", - "System.Runtime.Extensions": "4.1.0", - "System.Runtime.InteropServices": "4.1.0", - "System.Runtime.InteropServices.RuntimeInformation": "4.0.0" - } - }, - "Microsoft.Extensions.ApiDescription.Server": { - "type": "Transitive", - "resolved": "6.0.5", - "contentHash": "Ckb5EDBUNJdFWyajfXzUIMRkhf52fHZOQuuZg/oiu8y7zDCVwD0iHhew6MnThjHmevanpxL3f5ci2TtHQEN6bw==" - }, - "Microsoft.Extensions.Caching.Abstractions": { - "type": "Transitive", - "resolved": "1.0.0", - "contentHash": "IxlFDVOchL6tdR05bk7EiJvMtvZrVkZXBhkbXqc3GxOHOrHFGcN+92WoWFPeBpdpy8ot/Px5ZdXzt7k+2n1Bdg==", - "dependencies": { - "Microsoft.Extensions.Primitives": "1.0.0", - "System.Collections": "4.0.11", - "System.Threading": "4.0.11", - "System.Threading.Tasks": "4.0.11" - } - }, - "Microsoft.Extensions.Caching.Memory": { - "type": "Transitive", - "resolved": "1.0.0", - "contentHash": "6+7zTufCnZ+tfrUo7RbIRR3LB0BxwOwxfXuo0IbLyIvgoToGpWuz5wYEDfCYNOvpig9tY8FA0I1uRHYmITMXMQ==", - "dependencies": { - "Microsoft.Extensions.Caching.Abstractions": "1.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "1.0.0", - "Microsoft.Extensions.Options": "1.0.0", - "System.Linq": "4.1.0", - "System.Threading": "4.0.11" - } - }, - "Microsoft.Extensions.Configuration": { - "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "tldQUBWt/xeH2K7/hMPPo5g8zuLc3Ro9I5d4o/XrxvxOCA2EZBtW7bCHHTc49fcBtvB8tLAb/Qsmfrq+2SJ4vA==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", - "Microsoft.Extensions.Primitives": "7.0.0" - } - }, - "Microsoft.Extensions.Configuration.Abstractions": { - "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "f34u2eaqIjNO9YLHBz8rozVZ+TcFiFs0F3r7nUJd7FRkVSxk8u4OpoK226mi49MwexHOR2ibP9MFvRUaLilcQQ==", - "dependencies": { - "Microsoft.Extensions.Primitives": "7.0.0" - } - }, - "Microsoft.Extensions.Configuration.Binder": { - "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "tgU4u7bZsoS9MKVRiotVMAwHtbREHr5/5zSEV+JPhg46+ox47Au84E3D2IacAaB0bk5ePNaNieTlPrfjbbRJkg==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "7.0.0" - } - }, - "Microsoft.Extensions.Configuration.CommandLine": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "3nL1qCkZ1Oxx14ZTzgo4MmlO7tso7F+TtMZAY2jUAtTLyAcDp+EDjk3RqafoKiNaePyPvvlleEcBxh3b2Hzl1g==", - "dependencies": { - "Microsoft.Extensions.Configuration": "6.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "6.0.0" - } - }, - "Microsoft.Extensions.Configuration.EnvironmentVariables": { - "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "RIkfqCkvrAogirjsqSrG1E1FxgrLsOZU2nhRbl07lrajnxzSU2isj2lwQah0CtCbLWo/pOIukQzM1GfneBUnxA==", - "dependencies": { - "Microsoft.Extensions.Configuration": "7.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "7.0.0" - } - }, - "Microsoft.Extensions.Configuration.FileExtensions": { - "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "xk2lRJ1RDuqe57BmgvRPyCt6zyePKUmvT6iuXqiHR+/OIIgWVR8Ff5k2p6DwmqY8a17hx/OnrekEhziEIeQP6Q==", - "dependencies": { - "Microsoft.Extensions.Configuration": "7.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0", - "Microsoft.Extensions.FileProviders.Physical": "7.0.0", - "Microsoft.Extensions.Primitives": "7.0.0" - } - }, - "Microsoft.Extensions.Configuration.Json": { - "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "LDNYe3uw76W35Jci+be4LDf2lkQZe0A7EEYQVChFbc509CpZ4Iupod8li4PUXPBhEUOFI/rlQNf5xkzJRQGvtA==", - "dependencies": { - "Microsoft.Extensions.Configuration": "7.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", - "Microsoft.Extensions.Configuration.FileExtensions": "7.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0", - "System.Text.Json": "7.0.0" - } - }, - "Microsoft.Extensions.Configuration.KeyPerFile": { - "type": "Transitive", - "resolved": "3.1.11", - "contentHash": "u3Y7Hs22o7vtN3hVtiS9/FwhG1BI5Vc24wucLU1wUvWS4jY1Ddx9h6H1srVtdtXA04tZbGrYBUoCbZDHEyddzQ==", - "dependencies": { - "Microsoft.Extensions.Configuration": "3.1.11", - "Microsoft.Extensions.FileProviders.Physical": "3.1.11" - } - }, - "Microsoft.Extensions.Configuration.UserSecrets": { - "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "33HPW1PmB2RS0ietBQyvOxjp4O3wlt+4tIs8KPyMn1kqp04goiZGa7+3mc69NRLv6bphkLDy0YR7Uw3aZyf8Zw==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", - "Microsoft.Extensions.Configuration.Json": "7.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0", - "Microsoft.Extensions.FileProviders.Physical": "7.0.0" - } - }, - "Microsoft.Extensions.DependencyInjection": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "k6PWQMuoBDGGHOQTtyois2u4AwyVcIwL2LaSLlTZQm2CYcJ1pxbt6jfAnpWmzENA/wfrYRI/X9DTLoUkE4AsLw==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "System.Runtime.CompilerServices.Unsafe": "6.0.0" - } - }, - "Microsoft.Extensions.DependencyInjection.Abstractions": { - "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "h3j/QfmFN4S0w4C2A6X7arXij/M/OVw3uQHSOFxnND4DyAzO1F9eMX7Eti7lU/OkSthEE0WzRsfT/Dmx86jzCw==" - }, - "Microsoft.Extensions.DependencyModel": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "TD5QHg98m3+QhgEV1YVoNMl5KtBw/4rjfxLHO0e/YV9bPUBDKntApP4xdrVtGgCeQZHVfC2EXIGsdpRNrr87Pg==", - "dependencies": { - "System.Buffers": "4.5.1", - "System.Memory": "4.5.4", - "System.Runtime.CompilerServices.Unsafe": "6.0.0", - "System.Text.Encodings.Web": "6.0.0", - "System.Text.Json": "6.0.0" - } - }, - "Microsoft.Extensions.Diagnostics.HealthChecks": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "ktOGFY2uJ6QqZbLgLZgYg6qWuOnwKEIYbpgGDR/1QY8E+8NhnL75dJZ+WDl88h7Q4JkIFeTkFBUGF5QmNcfUEg==", - "dependencies": { - "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": "6.0.0", - "Microsoft.Extensions.Hosting.Abstractions": "6.0.0", - "Microsoft.Extensions.Logging.Abstractions": "6.0.0", - "Microsoft.Extensions.Options": "6.0.0" - } - }, - "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "6C9uhsA7GwT1qlXF+1JgOktilrWBSMLNVcwIjg63UvFaDVizg8fYTv826MC58dznvvT9yG31gGwsN1cFfg+yZQ==" - }, - "Microsoft.Extensions.FileProviders.Abstractions": { - "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "NyawiW9ZT/liQb34k9YqBSNPLuuPkrjMgQZ24Y/xXX1RoiBkLUdPMaQTmxhZ5TYu8ZKZ9qayzil75JX95vGQUg==", - "dependencies": { - "Microsoft.Extensions.Primitives": "7.0.0" - } - }, - "Microsoft.Extensions.FileProviders.Physical": { - "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "K8D2MTR+EtzkbZ8z80LrG7Ur64R7ZZdRLt1J5cgpc/pUWl0C6IkAUapPuK28oionHueCPELUqq0oYEvZfalNdg==", - "dependencies": { - "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0", - "Microsoft.Extensions.FileSystemGlobbing": "7.0.0", - "Microsoft.Extensions.Primitives": "7.0.0" - } - }, - "Microsoft.Extensions.FileSystemGlobbing": { - "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "2jONjKHiF+E92ynz2ZFcr9OvxIw+rTGMPEH+UZGeHTEComVav93jQUWGkso8yWwVBcEJGcNcZAaqY01FFJcj7w==" - }, - "Microsoft.Extensions.Hosting": { - "type": "Transitive", - "resolved": "6.0.1", - "contentHash": "hbmizc9KPWOacLU8Z8YMaBG6KWdZFppczYV/KwnPGU/8xebWxQxdDeJmLOgg968prb7g2oQgnp6JVLX6lgby8g==", - "dependencies": { - "Microsoft.Extensions.Configuration": "6.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "6.0.0", - "Microsoft.Extensions.Configuration.Binder": "6.0.0", - "Microsoft.Extensions.Configuration.CommandLine": "6.0.0", - "Microsoft.Extensions.Configuration.EnvironmentVariables": "6.0.1", - "Microsoft.Extensions.Configuration.FileExtensions": "6.0.0", - "Microsoft.Extensions.Configuration.Json": "6.0.0", - "Microsoft.Extensions.Configuration.UserSecrets": "6.0.1", - "Microsoft.Extensions.DependencyInjection": "6.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "6.0.0", - "Microsoft.Extensions.FileProviders.Physical": "6.0.0", - "Microsoft.Extensions.Hosting.Abstractions": "6.0.0", - "Microsoft.Extensions.Logging": "6.0.0", - "Microsoft.Extensions.Logging.Abstractions": "6.0.0", - "Microsoft.Extensions.Logging.Configuration": "6.0.0", - "Microsoft.Extensions.Logging.Console": "6.0.0", - "Microsoft.Extensions.Logging.Debug": "6.0.0", - "Microsoft.Extensions.Logging.EventLog": "6.0.0", - "Microsoft.Extensions.Logging.EventSource": "6.0.0", - "Microsoft.Extensions.Options": "6.0.0" - } - }, - "Microsoft.Extensions.Hosting.Abstractions": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "GcT5l2CYXL6Sa27KCSh0TixsRfADUgth+ojQSD5EkzisZxmGFh7CwzkcYuGwvmXLjr27uWRNrJ2vuuEjMhU05Q==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "6.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "6.0.0" - } - }, - "Microsoft.Extensions.Http": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "15+pa2G0bAMHbHewaQIdr/y6ag2H3yh4rd9hTXavtWDzQBkvpe2RMqFg8BxDpcQWssmjmBApGPcw93QRz6YcMg==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "Microsoft.Extensions.Logging": "6.0.0", - "Microsoft.Extensions.Logging.Abstractions": "6.0.0", - "Microsoft.Extensions.Options": "6.0.0" - } - }, - "Microsoft.Extensions.Logging": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "eIbyj40QDg1NDz0HBW0S5f3wrLVnKWnDJ/JtZ+yJDFnDj90VoPuoPmFkeaXrtu+0cKm5GRAwoDf+dBWXK0TUdg==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection": "6.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "Microsoft.Extensions.Logging.Abstractions": "6.0.0", - "Microsoft.Extensions.Options": "6.0.0", - "System.Diagnostics.DiagnosticSource": "6.0.0" - } - }, - "Microsoft.Extensions.Logging.Abstractions": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "/HggWBbTwy8TgebGSX5DBZ24ndhzi93sHUBDvP1IxbZD7FDokYzdAr6+vbWGjw2XAfR2EJ1sfKUotpjHnFWPxA==" - }, - "Microsoft.Extensions.Logging.ApplicationInsights": { - "type": "Transitive", - "resolved": "2.21.0", - "contentHash": "tjzErt5oaLs1caaThu6AbtJuHH0oIGDG/rYCXDruHVGig3m8MyCDuwDsGQwzimY7g4aFyLOKfHc3unBN2G96gw==", - "dependencies": { - "Microsoft.ApplicationInsights": "2.21.0", - "Microsoft.Extensions.Logging": "2.1.1" - } - }, - "Microsoft.Extensions.Logging.Configuration": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "ZDskjagmBAbv+K8rYW9VhjPplhbOE63xUD0DiuydZJwt15dRyoqicYklLd86zzeintUc7AptDkHn+YhhYkYo8A==", - "dependencies": { - "Microsoft.Extensions.Configuration": "6.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "6.0.0", - "Microsoft.Extensions.Configuration.Binder": "6.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "Microsoft.Extensions.Logging": "6.0.0", - "Microsoft.Extensions.Logging.Abstractions": "6.0.0", - "Microsoft.Extensions.Options": "6.0.0", - "Microsoft.Extensions.Options.ConfigurationExtensions": "6.0.0" - } - }, - "Microsoft.Extensions.Logging.Console": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "gsqKzOEdsvq28QiXFxagmn1oRB9GeI5GgYCkoybZtQA0IUb7QPwf1WmN3AwJeNIsadTvIFQCiVK0OVIgKfOBGg==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "Microsoft.Extensions.Logging": "6.0.0", - "Microsoft.Extensions.Logging.Abstractions": "6.0.0", - "Microsoft.Extensions.Logging.Configuration": "6.0.0", - "Microsoft.Extensions.Options": "6.0.0", - "System.Text.Json": "6.0.0" - } - }, - "Microsoft.Extensions.Logging.Debug": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "M9g/JixseSZATJE9tcMn9uzoD4+DbSglivFqVx8YkRJ7VVPmnvCEbOZ0AAaxsL1EKyI4cz07DXOOJExxNsUOHw==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "Microsoft.Extensions.Logging": "6.0.0", - "Microsoft.Extensions.Logging.Abstractions": "6.0.0" - } - }, - "Microsoft.Extensions.Logging.EventLog": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "rlo0RxlMd0WtLG3CHI0qOTp6fFn7MvQjlrCjucA31RqmiMFCZkF8CHNbe8O7tbBIyyoLGWB1he9CbaA5iyHthg==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "Microsoft.Extensions.Logging": "6.0.0", - "Microsoft.Extensions.Logging.Abstractions": "6.0.0", - "Microsoft.Extensions.Options": "6.0.0", - "System.Diagnostics.EventLog": "6.0.0" - } - }, - "Microsoft.Extensions.Logging.EventSource": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "BeDyyqt7nkm/nr+Gdk+L8n1tUT/u33VkbXAOesgYSNsxDM9hJ1NOBGoZfj9rCbeD2+9myElI6JOVVFmnzgeWQA==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "Microsoft.Extensions.Logging": "6.0.0", - "Microsoft.Extensions.Logging.Abstractions": "6.0.0", - "Microsoft.Extensions.Options": "6.0.0", - "Microsoft.Extensions.Primitives": "6.0.0", - "System.Runtime.CompilerServices.Unsafe": "6.0.0", - "System.Text.Json": "6.0.0" - } - }, - "Microsoft.Extensions.ObjectPool": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "gA8H7uQOnM5gb+L0uTNjViHYr+hRDqCdfugheGo/MxQnuHzmhhzCBTIPm19qL1z1Xe0NEMabfcOBGv9QghlZ8g==" - }, - "Microsoft.Extensions.Options": { - "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "lP1yBnTTU42cKpMozuafbvNtQ7QcBjr/CcK3bYOGEMH55Fjt+iecXjT6chR7vbgCMqy3PG3aNQSZgo/EuY/9qQ==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", - "Microsoft.Extensions.Primitives": "7.0.0" - } - }, - "Microsoft.Extensions.Options.ConfigurationExtensions": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "bXWINbTn0vC0FYc9GaQTISbxhQLAMrvtbuvD9N6JelEaIS/Pr62wUCinrq5bf1WRBGczt1v4wDhxFtVFNcMdUQ==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "6.0.0", - "Microsoft.Extensions.Configuration.Binder": "6.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "Microsoft.Extensions.Options": "6.0.0", - "Microsoft.Extensions.Primitives": "6.0.0" - } - }, - "Microsoft.Extensions.Primitives": { - "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q==", - "dependencies": { - "System.Runtime.CompilerServices.Unsafe": "6.0.0" - } - }, - "Microsoft.Graph": { - "type": "Transitive", - "resolved": "1.21.0", - "contentHash": "p40D0hZ5dQCckbuS2/BONn2OfJA8UnfOB+6d8hL4Os7XThCeGh2TDlifDRmMY2wAgpUWBODwQuiVHP2IK4Gskg==", - "dependencies": { - "Microsoft.Graph.Core": "1.19.0", - "NETStandard.Library": "1.6.1" - } - }, - "Microsoft.Graph.Core": { - "type": "Transitive", - "resolved": "1.19.0", - "contentHash": "t+PooSxwq2vJLJUENDCTOZc8KEC0T1Y5QxlvLp2idqkL/Rv+fvOPAhEvGMexJJIEWWt8yAnRl8PrS9BWR80/cg==", - "dependencies": { - "NETStandard.Library": "1.6.0", - "Newtonsoft.Json": "9.0.1", - "System.Diagnostics.DiagnosticSource": "4.6.0", - "System.Net.Http": "4.3.3", - "System.ValueTuple": "4.3.0" - } - }, - "Microsoft.Identity.Client": { - "type": "Transitive", - "resolved": "4.51.0", - "contentHash": "jdLFkx4cbPbQEf8k6YPoAAzPMWHmMJR5bFR7tqOTxpZb0B4nwm7OeeWTTDmUVMy2Vvfdozu5V7ltjUqB2R67oQ==", - "dependencies": { - "Microsoft.IdentityModel.Abstractions": "6.22.0" - } - }, - "Microsoft.IdentityModel.Abstractions": { - "type": "Transitive", - "resolved": "6.22.0", - "contentHash": "iI+9V+2ciCrbheeLjpmjcqCnhy+r6yCoEcid3nkoFWerHgjVuT6CPM4HODUTtUPe1uwks4wcnAujJ8u+IKogHQ==" - }, - "Microsoft.IdentityModel.Clients.ActiveDirectory": { - "type": "Transitive", - "resolved": "5.2.8", - "contentHash": "VIi6Bzt0UWEeannuEjtRFr/LgUXXw70a9LlIVfoCGorztZhzHgKiof6UJE1ETRYlf/L+kepsUZeekYZwqb6xPg==", - "dependencies": { - "Microsoft.CSharp": "4.3.0", - "NETStandard.Library": "1.6.1", - "System.ComponentModel.TypeConverter": "4.3.0", - "System.Dynamic.Runtime": "4.3.0", - "System.Net.Http": "4.3.4", - "System.Private.Uri": "4.3.2", - "System.Runtime.Serialization.Formatters": "4.3.0", - "System.Runtime.Serialization.Json": "4.3.0", - "System.Runtime.Serialization.Primitives": "4.3.0", - "System.Security.Cryptography.X509Certificates": "4.3.0", - "System.Security.SecureString": "4.3.0", - "System.Xml.XDocument": "4.3.0", - "System.Xml.XmlDocument": "4.3.0" - } - }, - "Microsoft.IdentityModel.JsonWebTokens": { - "type": "Transitive", - "resolved": "6.10.0", - "contentHash": "0qjS31rN1MQTc46tAYbzmMTSRfdV5ndZxSjYxIGqKSidd4wpNJfNII/pdhU5Fx8olarQoKL9lqqYw4yNOIwT0Q==", - "dependencies": { - "Microsoft.IdentityModel.Tokens": "6.10.0" - } - }, - "Microsoft.IdentityModel.Logging": { - "type": "Transitive", - "resolved": "6.10.0", - "contentHash": "zbcwV6esnNzhZZ/VP87dji6VrUBLB5rxnZBkDMqNYpyG+nrBnBsbm4PUYLCBMUflHCM9EMLDG0rLnqqT+l0ldA==" - }, - "Microsoft.IdentityModel.Protocols": { - "type": "Transitive", - "resolved": "6.10.0", - "contentHash": "DFyXD0xylP+DknCT3hzJ7q/Q5qRNu0hO/gCU90O0ATdR0twZmlcuY9RNYaaDofXKVbzcShYNCFCGle2G/o8mkg==", - "dependencies": { - "Microsoft.IdentityModel.Logging": "6.10.0", - "Microsoft.IdentityModel.Tokens": "6.10.0" - } - }, - "Microsoft.IdentityModel.Protocols.OpenIdConnect": { - "type": "Transitive", - "resolved": "6.10.0", - "contentHash": "LVvMXAWPbPeEWTylDrxunlHH2wFyE4Mv0L4gZrJHC4HTESbWHquKZb/y/S8jgiQEDycOP0PDQvbG4RR/tr2TVQ==", - "dependencies": { - "Microsoft.IdentityModel.Protocols": "6.10.0", - "System.IdentityModel.Tokens.Jwt": "6.10.0" - } - }, - "Microsoft.IdentityModel.Tokens": { - "type": "Transitive", - "resolved": "6.10.0", - "contentHash": "qbf1NslutDB4oLrriYTJpy7oB1pbh2ej2lEHd2IPDQH9C74ysOdhU5wAC7KoXblldbo7YsNR2QYFOqQM/b0Rsg==", - "dependencies": { - "Microsoft.CSharp": "4.5.0", - "Microsoft.IdentityModel.Logging": "6.10.0", - "System.Security.Cryptography.Cng": "4.5.0" - } - }, - "Microsoft.Net.Http.Headers": { - "type": "Transitive", - "resolved": "2.2.0", - "contentHash": "iZNkjYqlo8sIOI0bQfpsSoMTmB/kyvmV2h225ihyZT33aTp48ZpF6qYnXxzSXmHt8DpBAwBTX+1s1UFLbYfZKg==", - "dependencies": { - "Microsoft.Extensions.Primitives": "2.2.0", - "System.Buffers": "4.5.0" - } - }, - "Microsoft.NET.Test.Sdk": { - "type": "Transitive", - "resolved": "17.4.0", - "contentHash": "VtNZQ83ntG2aEUjy1gq6B4HNdn96se6FmdY/03At8WiqDReGrApm6OB2fNiSHz9D6IIEtWtNZ2FSH0RJDVXl/w==", - "dependencies": { - "Microsoft.CodeCoverage": "17.4.0", - "Microsoft.TestPlatform.TestHost": "17.4.0" - } - }, - "Microsoft.NETCore.Platforms": { - "type": "Transitive", - "resolved": "3.1.0", - "contentHash": "z7aeg8oHln2CuNulfhiLYxCVMPEwBl3rzicjvIX+4sUuCwvXw5oXQEtbiU2c0z4qYL5L3Kmx0mMA/+t/SbY67w==" - }, - "Microsoft.NETCore.Targets": { - "type": "Transitive", - "resolved": "1.1.3", - "contentHash": "3Wrmi0kJDzClwAC+iBdUBpEKmEle8FQNsCs77fkiOIw/9oYA07bL1EZNX0kQ2OMN3xpwvl0vAtOCYY3ndDNlhQ==" - }, - "Microsoft.OpenApi": { - "type": "Transitive", - "resolved": "1.4.2", - "contentHash": "ce/XRtiC31EqU4wo4erXKZq1qjA4GaKnA2VAZbTeB8KLQGtLeOJ5YQH8DbNPU15CZLh0/bQfd4BJdlCRXyaIuw==" - }, - "Microsoft.TestPlatform.ObjectModel": { - "type": "Transitive", - "resolved": "17.4.0", - "contentHash": "oWe7A0wrZhxagTOcaxJ9r0NXTbgkiBQQuCpCXxnP06NsGV/qOoaY2oaangAJbOUrwEx0eka1do400NwNCjfytw==", - "dependencies": { - "NuGet.Frameworks": "5.11.0", - "System.Reflection.Metadata": "1.6.0" - } - }, - "Microsoft.TestPlatform.TestHost": { - "type": "Transitive", - "resolved": "17.4.0", - "contentHash": "sUx48fu9wgQF1JxzXeSVtzb7KoKpJrdtIzsFamxET3ZYOKXj+Ej13HWZ0U2nuMVZtZVHBmE+KS3Vv5cIdTlycQ==", - "dependencies": { - "Microsoft.TestPlatform.ObjectModel": "17.4.0", - "Newtonsoft.Json": "13.0.1" - } - }, - "Microsoft.VisualStudio.Azure.Containers.Tools.Targets": { - "type": "Transitive", - "resolved": "1.17.0", - "contentHash": "gfDtAL1WhkjbRdbZlt/ZeQYCbgRpNCZCGj+yeqHObsNFRDHjq8qZJOX9AyTxJpSRYMi9SJk7JDyAbbVYRgEhAA==" - }, - "Microsoft.Win32.Primitives": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "9ZQKCWxH7Ijp9BfahvL2Zyf1cJIk8XYLF6Yjzr2yi0b2cOut/HQ31qf1ThHAgCc3WiZMdnWcfJCgN82/0UunxA==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "Microsoft.Win32.Registry": { - "type": "Transitive", - "resolved": "4.7.0", - "contentHash": "KSrRMb5vNi0CWSGG1++id2ZOs/1QhRqROt+qgbEAdQuGjGrFcl4AOl4/exGPUYz2wUnU42nvJqon1T3U0kPXLA==", - "dependencies": { - "System.Security.AccessControl": "4.7.0", - "System.Security.Principal.Windows": "4.7.0" - } - }, - "Microsoft.Win32.SystemEvents": { - "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "2nXPrhdAyAzir0gLl8Yy8S5Mnm/uBSQQA7jEsILOS1MTyS7DbmV1NgViMtvV1sfCD1ebITpNwb1NIinKeJgUVQ==" - }, - "Moq": { - "type": "Transitive", - "resolved": "4.16.0", - "contentHash": "YomI39ySpUBi0wX05+orpdO3pyj+2NykmUJdY1vglhm58I+acV4QaGf9FG2JnZ6DTs1tbnv7vsfeAAkYwiSvYQ==", - "dependencies": { - "Castle.Core": "4.4.0", - "System.Threading.Tasks.Extensions": "4.5.4" - } - }, - "NETStandard.Library": { - "type": "Transitive", - "resolved": "2.0.0", - "contentHash": "7jnbRU+L08FXKMxqUflxEXtVymWvNOrS8yHgu9s6EM8Anr6T/wIX4nZ08j/u3Asz+tCufp3YVwFSEvFTPYmBPA==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0" - } - }, - "Newtonsoft.Json": { - "type": "Transitive", - "resolved": "13.0.2", - "contentHash": "R2pZ3B0UjeyHShm9vG+Tu0EBb2lC8b0dFzV9gVn50ofHXh9Smjk6kTn7A/FdAsC8B5cKib1OnGYOXxRBz5XQDg==" - }, - "Newtonsoft.Json.Bson": { - "type": "Transitive", - "resolved": "1.0.2", - "contentHash": "QYFyxhaABwmq3p/21VrZNYvCg3DaEoN/wUuw5nmfAf0X3HLjgupwhkEWdgfb9nvGAUIv3osmZoD3kKl4jxEmYQ==", - "dependencies": { - "Newtonsoft.Json": "12.0.1" - } - }, - "NuGet.Frameworks": { - "type": "Transitive", - "resolved": "5.11.0", - "contentHash": "eaiXkUjC4NPcquGWzAGMXjuxvLwc6XGKMptSyOGQeT0X70BUZObuybJFZLA0OfTdueLd3US23NBPTBb6iF3V1Q==" - }, - "NUnit3TestAdapter": { - "type": "Transitive", - "resolved": "3.17.0", - "contentHash": "I9MNvK+GM2yXrHPitwZkAZKU9sYI2OO/8wKC+VuBD7V3z+ySQ1pSopX/urr0ooedI8/TIcajYPRO4vGRr7AM8A==", - "dependencies": { - "Microsoft.DotNet.InternalAbstractions": "1.0.0", - "System.ComponentModel.EventBasedAsync": "4.3.0", - "System.ComponentModel.TypeConverter": "4.3.0", - "System.Diagnostics.Process": "4.3.0", - "System.Reflection": "4.3.0", - "System.Runtime.InteropServices.RuntimeInformation": "4.3.0", - "System.Threading.Thread": "4.3.0", - "System.Xml.XPath.XmlDocument": "4.3.0", - "System.Xml.XmlDocument": "4.3.0" - } - }, - "NWebsec.AspNetCore.Core": { - "type": "Transitive", - "resolved": "3.0.0", - "contentHash": "dvrs4Lvc7k98KKaMxKPHeOn0kONEIQpVrzweji9SLl9XEn1+XWVJe5f7mNvXoKPKjjcNuBIwVXr3K+g+DzZHEw==" - }, - "NWebsec.AspNetCore.Middleware": { - "type": "Transitive", - "resolved": "3.0.0", - "contentHash": "sQJUG6zk/96UaAcFaf3fQuzjAS9rsf2fXyks1YlG4E3QOWl0h6nIO9fMzfKoskRA+abs01rV+6Kc5P7xccXlzw==", - "dependencies": { - "NWebsec.AspNetCore.Core": "3.0.0" - } - }, - "Polly": { - "type": "Transitive", - "resolved": "7.2.1", - "contentHash": "Od8SnPlpQr+PuAS0YzY3jgtzaDNknlIuAaldN2VEIyTvm/wCg22C5nUkUV1BEG8rIsub5RFMoV/NEQ0tM/+7Uw==" - }, - "Protractor": { - "type": "Transitive", - "resolved": "1.0.0", - "contentHash": "WYawPNeNoRLAYR6seN/w2P/nZnjCHTRfBpSuwWgJv7jY/qqEOrT6uvgw+97TdolPSwtyTbBHwakCSorXaQkIZA==", - "dependencies": { - "Selenium.WebDriver": "4.1.0" - } - }, - "RestSharp": { - "type": "Transitive", - "resolved": "106.11.7", - "contentHash": "NzndH096CTulvq+ihr7u1mBJ29oukdi9A8bypQJk+kaHxbRzTTrtgsEEQAb04ptTUZmQa7cgo7uF5z7NuEPX1Q==" - }, - "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": { - "type": "Transitive", - "resolved": "4.3.2", - "contentHash": "7VSGO0URRKoMEAq0Sc9cRz8mb6zbyx/BZDEWhgPdzzpmFhkam3fJ1DAGWFXBI4nGlma+uPKpfuMQP5LXRnOH5g==" - }, - "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": { - "type": "Transitive", - "resolved": "4.3.2", - "contentHash": "0oAaTAm6e2oVH+/Zttt0cuhGaePQYKII1dY8iaqP7CvOpVKgLybKRFvQjXR2LtxXOXTVPNv14j0ot8uV+HrUmw==" - }, - "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": { - "type": "Transitive", - "resolved": "4.3.2", - "contentHash": "G24ibsCNi5Kbz0oXWynBoRgtGvsw5ZSVEWjv13/KiCAM8C6wz9zzcCniMeQFIkJ2tasjo2kXlvlBZhplL51kGg==" - }, - "runtime.native.System": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "c/qWt2LieNZIj1jGnVNsE2Kl23Ya2aSTBuXMD6V7k9KWr6l16Tqdwq+hJScEpWER9753NWC8h96PaVNY5Ld7Jw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0" - } - }, - "runtime.native.System.Net.Http": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "ZVuZJqnnegJhd2k/PtAbbIcZ3aZeITq3sj06oKfMBSfphW3HDmk/t4ObvbOk/JA/swGR0LNqMksAh/f7gpTROg==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0" - } - }, - "runtime.native.System.Security.Cryptography.Apple": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "DloMk88juo0OuOWr56QG7MNchmafTLYWvABy36izkrLI5VledI0rq28KGs1i9wbpeT9NPQrx/wTf8U2vazqQ3Q==", - "dependencies": { - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "4.3.0" - } - }, - "runtime.native.System.Security.Cryptography.OpenSsl": { - "type": "Transitive", - "resolved": "4.3.2", - "contentHash": "QR1OwtwehHxSeQvZKXe+iSd+d3XZNkEcuWMFYa2i0aG1l+lR739HPicKMlTbJst3spmeekDVBUS7SeS26s4U/g==", - "dependencies": { - "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2", - "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2", - "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2", - "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2", - "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2", - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2", - "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2", - "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2", - "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2", - "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2" - } - }, - "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": { - "type": "Transitive", - "resolved": "4.3.2", - "contentHash": "I+GNKGg2xCHueRd1m9PzeEW7WLbNNLznmTuEi8/vZX71HudUbx1UTwlGkiwMri7JLl8hGaIAWnA/GONhu+LOyQ==" - }, - "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": { - "type": "Transitive", - "resolved": "4.3.2", - "contentHash": "1Z3TAq1ytS1IBRtPXJvEUZdVsfWfeNEhBkbiOCGEl9wwAfsjP2lz3ZFDx5tq8p60/EqbS0HItG5piHuB71RjoA==" - }, - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "kVXCuMTrTlxq4XOOMAysuNwsXWpYeboGddNGpIgNSZmv1b6r/s/DPk0fYMB7Q5Qo4bY68o48jt4T4y5BVecbCQ==" - }, - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": { - "type": "Transitive", - "resolved": "4.3.2", - "contentHash": "6mU/cVmmHtQiDXhnzUImxIcDL48GbTk+TsptXyJA+MIOG9LRjPoAQC/qBFB7X+UNyK86bmvGwC8t+M66wsYC8w==" - }, - "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": { - "type": "Transitive", - "resolved": "4.3.2", - "contentHash": "vjwG0GGcTW/PPg6KVud8F9GLWYuAV1rrw1BKAqY0oh4jcUqg15oYF1+qkGR2x2ZHM4DQnWKQ7cJgYbfncz/lYg==" - }, - "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": { - "type": "Transitive", - "resolved": "4.3.2", - "contentHash": "7KMFpTkHC/zoExs+PwP8jDCWcrK9H6L7soowT80CUx3e+nxP/AFnq0AQAW5W76z2WYbLAYCRyPfwYFG6zkvQRw==" - }, - "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": { - "type": "Transitive", - "resolved": "4.3.2", - "contentHash": "xrlmRCnKZJLHxyyLIqkZjNXqgxnKdZxfItrPkjI+6pkRo5lHX8YvSZlWrSI5AVwLMi4HbNWP7064hcAWeZKp5w==" - }, - "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": { - "type": "Transitive", - "resolved": "4.3.2", - "contentHash": "leXiwfiIkW7Gmn7cgnNcdtNAU70SjmKW3jxGj1iKHOvdn0zRWsgv/l2OJUO5zdGdiv2VRFnAsxxhDgMzofPdWg==" - }, - "Selenium.Axe": { - "type": "Transitive", - "resolved": "4.0.5", - "contentHash": "8ayoSj9B0JjT/7VueeE2tn7EHRWLHh9Lk58NDJtaauqikVcAucdp6gdqklJrbaTvAbAXTG+wi2O8/EY2OMAkMw==", - "dependencies": { - "HtmlAgilityPack": "1.11.46", - "Newtonsoft.Json": "13.0.1", - "Selenium.WebDriver": "4.6.0" - } - }, - "Selenium.Firefox.WebDriver": { - "type": "Transitive", - "resolved": "0.27.0", - "contentHash": "HwCaTaa+snzkLF7ZVaxKSmdttKm+KXT7HOY8c1q8p9E7x05+WHqw5XaZjUGFytVT1+0FkgUoH/u/I+csPLeJAg==" - }, - "Selenium.Support": { - "type": "Transitive", - "resolved": "4.7.0", - "contentHash": "Fy5AIybjkJhVwe2VY2JSYBQeEV0E+HfG11wmkrC1+ICBBWBkt4Ax/oKH+oQ3kTgFCjDY2wAM4LCvMLDxRXi+ig==", - "dependencies": { - "Selenium.WebDriver": "4.7.0" - } - }, - "Selenium.WebDriver": { - "type": "Transitive", - "resolved": "4.7.0", - "contentHash": "WNGX6JxjBS5f79PQnrB4oO+5U83f8tZfND+rqX2YJVHPdv3xS/zZwljWqGu5UDhluo3kEuuT+DuGEZW8/+9fOA==", - "dependencies": { - "Newtonsoft.Json": "13.0.1" - } - }, - "Selenium.WebDriver.ChromeDriver": { - "type": "Transitive", - "resolved": "111.0.5563.6400", - "contentHash": "qLM1wbhtfyX/7cdqCHsuos8jKG67ojsOgKLvoHReRYCBPVbbSl/niedtAVzOLpnEn9sk9C7FH6jHc/QQIR0G4w==" - }, - "Selenium.WebDriver.IEDriver": { - "type": "Transitive", - "resolved": "4.7.0", - "contentHash": "G9fCMKZZT3aNR3hAmApMEppRLUVcU12ePVa1k2wRhy/akZetJ2RJfJu8fJp+hePadlYbi5LErMkdwT9RaS5YsA==" - }, - "Selenium.WebDriver.MicrosoftDriver": { - "type": "Transitive", - "resolved": "17.17134.0", - "contentHash": "22tIqQPNbFqWx32YO9XNKvWOcBu3Y98a+qb98xo3k37TkV/qPz7AbohsfaHBtizQtAqbQ5GHNM7re30uvF+amw==" - }, - "SeleniumExtras.WaitHelpers": { - "type": "Transitive", - "resolved": "1.0.2", - "contentHash": "de7m30nkZZLkfCncYBdluUpM27AR/Vkk4kiA4HRQbV+fZI3ps4qGIeJCuj8TAMXdMfQik5Rno8xPnFBIod+ebg==", - "dependencies": { - "Selenium.WebDriver": "4.0.0-beta2" - } - }, - "SpecFlow": { - "type": "Transitive", - "resolved": "3.9.74", - "contentHash": "n6kcg9ZeQWxqJFoT23SsFT89U1QQNwvcN9pAX5alB6ZPr6K0p5D5nGIJ1PZsSaFaRFutiwQ+DicmxBCPAZVYIA==", - "dependencies": { - "BoDi": "1.5.0", - "Gherkin": "19.0.3", - "Microsoft.Extensions.DependencyModel": "1.0.3", - "SpecFlow.Internal.Json": "1.0.8", - "System.Configuration.ConfigurationManager": "4.5.0", - "System.Net.Http": "4.3.4", - "System.Runtime.Loader": "4.3.0" - } - }, - "SpecFlow.Internal.Json": { - "type": "Transitive", - "resolved": "1.0.8", - "contentHash": "lVCC/Rie7N5rFoc7YxPS0nneLfsWSTIMMlkndwxhaD8MxBp3Bsv1HeiVjVwXCjWaQeoqZcvIy52fF5Xit00ZLw==" - }, - "SpecFlow.NUnit": { - "type": "Transitive", - "resolved": "3.9.74", - "contentHash": "nMPLztTT5IZDMnvNCUxklqaM+agn4kjuNy/qAcYQQOxau2G1MF73UxhL9OXjJQaEuPuyT8gJvXudOYCFZWztxA==", - "dependencies": { - "NUnit": "3.13.1", - "SpecFlow": "[3.9.74]", - "SpecFlow.Tools.MsBuild.Generation": "[3.9.74]" - } - }, - "SpecFlow.Tools.MsBuild.Generation": { - "type": "Transitive", - "resolved": "3.9.74", - "contentHash": "I/9OvmKOohJqIUNJ0xGYJCWfL6WKDaes8OoOAD/2yhGX+tzC5ofs9yqkP9Cu/xfnIx+11IR3pZs7YhBhGAcgWQ==", - "dependencies": { - "SpecFlow": "[3.9.74]" - } - }, - "Swashbuckle.AspNetCore": { - "type": "Transitive", - "resolved": "6.5.0", - "contentHash": "FK05XokgjgwlCI6wCT+D4/abtQkL1X1/B9Oas6uIwHFmYrIO9WUD5aLC9IzMs9GnHfUXOtXZ2S43gN1mhs5+aA==", - "dependencies": { - "Microsoft.Extensions.ApiDescription.Server": "6.0.5", - "Swashbuckle.AspNetCore.Swagger": "6.5.0", - "Swashbuckle.AspNetCore.SwaggerGen": "6.5.0", - "Swashbuckle.AspNetCore.SwaggerUI": "6.5.0" - } - }, - "Swashbuckle.AspNetCore.Annotations": { - "type": "Transitive", - "resolved": "6.5.0", - "contentHash": "EcHd1z2pEdnpaBMTI9qjVxk6mFVGVMZ1n0ySC3fjrkXCQQ8O9fMdt9TxPJRKyjiTiTjvO9700jKjmyl+hPBinQ==", - "dependencies": { - "Swashbuckle.AspNetCore.SwaggerGen": "6.5.0" - } - }, - "Swashbuckle.AspNetCore.Newtonsoft": { - "type": "Transitive", - "resolved": "6.5.0", - "contentHash": "o1dOWCENDG3ViE8aFR9GpVTq8smsNkCXs3eonVaD3DziJgxAfkcOa0/syHtFSfpluh3bmnJ8isQh3S/T3hpz2Q==", - "dependencies": { - "Microsoft.AspNetCore.Mvc.NewtonsoftJson": "6.0.0-rc.1.21452.15", - "Swashbuckle.AspNetCore.SwaggerGen": "6.5.0" - } - }, - "Swashbuckle.AspNetCore.Swagger": { - "type": "Transitive", - "resolved": "6.5.0", - "contentHash": "XWmCmqyFmoItXKFsQSwQbEAsjDKcxlNf1l+/Ki42hcb6LjKL8m5Db69OTvz5vLonMSRntYO1XLqz0OP+n3vKnA==", - "dependencies": { - "Microsoft.OpenApi": "1.2.3" - } - }, - "Swashbuckle.AspNetCore.SwaggerGen": { - "type": "Transitive", - "resolved": "6.5.0", - "contentHash": "Y/qW8Qdg9OEs7V013tt+94OdPxbRdbhcEbw4NiwGvf4YBcfhL/y7qp/Mjv/cENsQ2L3NqJ2AOu94weBy/h4KvA==", - "dependencies": { - "Swashbuckle.AspNetCore.Swagger": "6.5.0" - } - }, - "Swashbuckle.AspNetCore.SwaggerUI": { - "type": "Transitive", - "resolved": "6.5.0", - "contentHash": "OvbvxX+wL8skxTBttcBsVxdh73Fag4xwqEU2edh4JMn7Ws/xJHnY/JB1e9RoCb6XpDxUF3hD9A0Z1lEUx40Pfw==" - }, - "System.AppContext": { - "type": "Transitive", - "resolved": "4.1.0", - "contentHash": "3QjO4jNV7PdKkmQAVp9atA+usVnKRwI3Kx1nMwJ93T0LcQfx7pKAYk0nKz5wn1oP5iqlhZuy6RXOFdhr7rDwow==", - "dependencies": { - "System.Runtime": "4.1.0" - } - }, - "System.Buffers": { - "type": "Transitive", - "resolved": "4.5.1", - "contentHash": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==" - }, - "System.Collections": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Collections.Concurrent": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "ztl69Xp0Y/UXCL+3v3tEU+lIy+bvjKNUmopn1wep/a291pVPK7dxBd6T7WnlQqRog+d1a/hSsgRsmFnIBKTPLQ==", - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Globalization": "4.3.0", - "System.Reflection": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.Collections.Immutable": { - "type": "Transitive", - "resolved": "1.7.1", - "contentHash": "B43Zsz5EfMwyEbnObwRxW5u85fzJma3lrDeGcSAV1qkhSRTNY5uXAByTn9h9ddNdhM+4/YoLc/CI43umjwIl9Q==" - }, - "System.Collections.NonGeneric": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "prtjIEMhGUnQq6RnPEYLpFt8AtLbp9yq2zxOSrY7KJJZrw25Fi97IzBqY7iqssbM61Ek5b8f3MG/sG1N2sN5KA==", - "dependencies": { - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.Collections.Specialized": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "Epx8PoVZR0iuOnJJDzp7pWvdfMMOAvpUo95pC4ScH2mJuXkKA2Y4aR3cG9qt2klHgSons1WFh4kcGW7cSXvrxg==", - "dependencies": { - "System.Collections.NonGeneric": "4.3.0", - "System.Globalization": "4.3.0", - "System.Globalization.Extensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.ComponentModel": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "VyGn1jGRZVfxnh8EdvDCi71v3bMXrsu8aYJOwoV7SNDLVhiEqwP86pPMyRGsDsxhXAm2b3o9OIqeETfN5qfezw==", - "dependencies": { - "System.Runtime": "4.3.0" - } - }, - "System.ComponentModel.EventBasedAsync": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "fCFl8f0XdwA/BuoNrVBB5D0Y48/hv2J+w4xSDdXQitXZsR6UCSOrDVE7TCUraY802ENwcHUnUCv4En8CupDU1g==", - "dependencies": { - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.ComponentModel.Primitives": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "j8GUkCpM8V4d4vhLIIoBLGey2Z5bCkMVNjEZseyAlm4n5arcsJOeI3zkUP+zvZgzsbLTYh4lYeP/ZD/gdIAPrw==", - "dependencies": { - "System.ComponentModel": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.ComponentModel.TypeConverter": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "16pQ6P+EdhcXzPiEK4kbA953Fu0MNG2ovxTZU81/qsCd1zPRsKc3uif5NgvllCY598k6bI0KUyKW8fanlfaDQg==", - "dependencies": { - "System.Collections": "4.3.0", - "System.Collections.NonGeneric": "4.3.0", - "System.Collections.Specialized": "4.3.0", - "System.ComponentModel": "4.3.0", - "System.ComponentModel.Primitives": "4.3.0", - "System.Globalization": "4.3.0", - "System.Linq": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Reflection.TypeExtensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.Configuration.ConfigurationManager": { - "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "WvRUdlL1lB0dTRZSs5XcQOd5q9MYNk90GkbmRmiCvRHThWiojkpGqWdmEDJdXyHbxG/BhE5hmVbMfRLXW9FJVA==", - "dependencies": { - "System.Security.Cryptography.ProtectedData": "7.0.0", - "System.Security.Permissions": "7.0.0" - } - }, - "System.Diagnostics.Debug": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Diagnostics.DiagnosticSource": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "frQDfv0rl209cKm1lnwTgFPzNigy2EKk1BS3uAvHvlBVKe5cymGyHO+Sj+NLv5VF/AhHsqPIUUwya5oV4CHMUw==", - "dependencies": { - "System.Runtime.CompilerServices.Unsafe": "6.0.0" - } - }, - "System.Diagnostics.EventLog": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "lcyUiXTsETK2ALsZrX+nWuHSIQeazhqPphLfaRxzdGaG93+0kELqpgEHtwWOlQe7+jSFnKwaCAgL4kjeZCQJnw==" - }, - "System.Diagnostics.PerformanceCounter": { - "type": "Transitive", - "resolved": "4.7.0", - "contentHash": "kE9szT4i3TYT9bDE/BPfzg9/BL6enMiZlcUmnUEBrhRtxWvurKoa8qhXkLTRhrxMzBqaDleWlRfIPE02tulU+w==", - "dependencies": { - "Microsoft.NETCore.Platforms": "3.1.0", - "Microsoft.Win32.Registry": "4.7.0", - "System.Configuration.ConfigurationManager": "4.7.0", - "System.Security.Principal.Windows": "4.7.0" - } - }, - "System.Diagnostics.Process": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "J0wOX07+QASQblsfxmIMFc9Iq7KTXYL3zs2G/Xc704Ylv3NpuVdo6gij6V3PGiptTxqsK0K7CdXenRvKUnkA2g==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.Win32.Primitives": "4.3.0", - "Microsoft.Win32.Registry": "4.3.0", - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.IO.FileSystem.Primitives": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Text.Encoding.Extensions": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "System.Threading.Thread": "4.3.0", - "System.Threading.ThreadPool": "4.3.0", - "runtime.native.System": "4.3.0" - } - }, - "System.Diagnostics.Tools": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "UUvkJfSYJMM6x527dJg2VyWPSRqIVB0Z7dbjHst1zmwTXz5CcXSYJFWRpuigfbO1Lf7yfZiIaEUesfnl/g5EyA==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Diagnostics.TraceSource": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "VnYp1NxGx8Ww731y2LJ1vpfb/DKVNKEZ8Jsh5SgQTZREL/YpWRArgh9pI8CDLmgHspZmLL697CaLvH85qQpRiw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0", - "runtime.native.System": "4.3.0" - } - }, - "System.Diagnostics.Tracing": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Drawing.Common": { - "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "KIX+oBU38pxkKPxvLcLfIkOV5Ien8ReN78wro7OF5/erwcmortzeFx+iBswlh2Vz6gVne0khocQudGwaO1Ey6A==", - "dependencies": { - "Microsoft.Win32.SystemEvents": "7.0.0" - } - }, - "System.Dynamic.Runtime": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "SNVi1E/vfWUAs/WYKhE9+qlS6KqK0YVhnlT0HQtr8pMIA8YX3lwy3uPMownDwdYISBdmAF/2holEIldVp85Wag==", - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Linq": "4.3.0", - "System.Linq.Expressions": "4.3.0", - "System.ObjectModel": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Emit": "4.3.0", - "System.Reflection.Emit.ILGeneration": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Reflection.TypeExtensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.Globalization": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Globalization.Calendars": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "GUlBtdOWT4LTV3I+9/PJW+56AnnChTaOqqTLFtdmype/L500M2LIyXgmtd9X2P2VOkmJd5c67H5SaC2QcL1bFA==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Globalization": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Globalization.Extensions": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "FhKmdR6MPG+pxow6wGtNAWdZh7noIOpdD5TwQ3CprzgIE1bBBoim0vbR1+AWsWjQmU7zXHgQo4TWSP6lCeiWcQ==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "System.Globalization": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.InteropServices": "4.3.0" - } - }, - "System.IdentityModel.Tokens.Jwt": { - "type": "Transitive", - "resolved": "6.10.0", - "contentHash": "C+Q5ORsFycRkRuvy/Xd0Pv5xVpmWSAvQYZAGs7VQogmkqlLhvfZXTgBIlHqC3cxkstSoLJAYx6xZB7foQ2y5eg==", - "dependencies": { - "Microsoft.IdentityModel.JsonWebTokens": "6.10.0", - "Microsoft.IdentityModel.Tokens": "6.10.0" - } - }, - "System.IO": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.IO.FileSystem": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.IO": "4.3.0", - "System.IO.FileSystem.Primitives": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.IO.FileSystem.AccessControl": { - "type": "Transitive", - "resolved": "4.7.0", - "contentHash": "vMToiarpU81LR1/KZtnT7VDPvqAZfw9oOS5nY6pPP78nGYz3COLsQH3OfzbR+SjTgltd31R6KmKklz/zDpTmzw==", - "dependencies": { - "System.Security.AccessControl": "4.7.0", - "System.Security.Principal.Windows": "4.7.0" - } - }, - "System.IO.FileSystem.Primitives": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "6QOb2XFLch7bEc4lIcJH49nJN2HV+OC3fHDgsLVsBVBk3Y4hFAnOBGzJ2lUu7CyDDFo9IBWkSsnbkT6IBwwiMw==", - "dependencies": { - "System.Runtime": "4.3.0" - } - }, - "System.IO.Hashing": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "Rfm2jYCaUeGysFEZjDe7j1R4x6Z6BzumS/vUT5a1AA/AWJuGX71PoGB0RmpyX3VmrGqVnAwtfMn39OHR8Y/5+g==" - }, - "System.IO.Pipelines": { - "type": "Transitive", - "resolved": "6.0.3", - "contentHash": "ryTgF+iFkpGZY1vRQhfCzX0xTdlV3pyaTTqRu2ETbEv+HlV7O6y7hyQURnghNIXvctl5DuZ//Dpks6HdL/Txgw==" - }, - "System.Linq": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "5DbqIUpsDp0dFftytzuMmc0oeMdQwjcP/EWxsksIz/w1TcFRkZ3yKKz0PqiYFMmEwPSWw+qNVqD7PJ889JzHbw==", - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0" - } - }, - "System.Linq.Expressions": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "PGKkrd2khG4CnlyJwxwwaWWiSiWFNBGlgXvJpeO0xCXrZ89ODrQ6tjEWS/kOqZ8GwEOUATtKtzp1eRgmYNfclg==", - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Linq": "4.3.0", - "System.ObjectModel": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Emit": "4.3.0", - "System.Reflection.Emit.ILGeneration": "4.3.0", - "System.Reflection.Emit.Lightweight": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Reflection.TypeExtensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.Memory": { - "type": "Transitive", - "resolved": "4.5.4", - "contentHash": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==" - }, - "System.Memory.Data": { - "type": "Transitive", - "resolved": "1.0.2", - "contentHash": "JGkzeqgBsiZwKJZ1IxPNsDFZDhUvuEdX8L8BDC8N3KOj+6zMcNU28CNN59TpZE/VJYy9cP+5M+sbxtWJx3/xtw==", - "dependencies": { - "System.Text.Encodings.Web": "4.7.2", - "System.Text.Json": "4.6.0" - } - }, - "System.Net.Http": { - "type": "Transitive", - "resolved": "4.3.4", - "contentHash": "aOa2d51SEbmM+H+Csw7yJOuNZoHkrP2XnAurye5HWYgGVVU54YZDvsLUYRv6h18X3sPnjNCANmN7ZhIPiqMcjA==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.1", - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.DiagnosticSource": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Globalization": "4.3.0", - "System.Globalization.Extensions": "4.3.0", - "System.IO": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.Net.Primitives": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.OpenSsl": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Security.Cryptography.X509Certificates": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "runtime.native.System": "4.3.0", - "runtime.native.System.Net.Http": "4.3.0", - "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2" - } - }, - "System.Net.Primitives": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "qOu+hDwFwoZPbzPvwut2qATe3ygjeQBDQj91xlsaqGFQUI5i4ZnZb8yyQuLGpDGivEPIt8EJkd1BVzVoP31FXA==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0", - "System.Runtime.Handles": "4.3.0" - } - }, - "System.Numerics.Vectors": { - "type": "Transitive", - "resolved": "4.5.0", - "contentHash": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ==" - }, - "System.ObjectModel": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "bdX+80eKv9bN6K4N+d77OankKHGn6CH711a6fcOpMQu2Fckp/Ft4L/kW9WznHpyR0NRAvJutzOMHNNlBGvxQzQ==", - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.Private.DataContractSerialization": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "yDaJ2x3mMmjdZEDB4IbezSnCsnjQ4BxinKhRAaP6kEgL6Bb6jANWphs5SzyD8imqeC/3FxgsuXT6ykkiH1uUmA==", - "dependencies": { - "System.Collections": "4.3.0", - "System.Collections.Concurrent": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Linq": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Emit.ILGeneration": "4.3.0", - "System.Reflection.Emit.Lightweight": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Reflection.TypeExtensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Serialization.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Text.Encoding.Extensions": "4.3.0", - "System.Text.RegularExpressions": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "System.Xml.ReaderWriter": "4.3.0", - "System.Xml.XDocument": "4.3.0", - "System.Xml.XmlDocument": "4.3.0", - "System.Xml.XmlSerializer": "4.3.0" - } - }, - "System.Private.Uri": { - "type": "Transitive", - "resolved": "4.3.2", - "contentHash": "o1+7RJnu3Ik3PazR7Z7tJhjPdE000Eq2KGLLWhqJJKXj04wrS8lwb1OFtDF9jzXXADhUuZNJZlPc98uwwqmpFA==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.1", - "Microsoft.NETCore.Targets": "1.1.3" - } - }, - "System.Reflection": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.IO": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.Emit": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "228FG0jLcIwTVJyz8CLFKueVqQK36ANazUManGaJHkO0icjiIypKW7YLWLIWahyIkdh5M7mV2dJepllLyA1SKg==", - "dependencies": { - "System.IO": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Emit.ILGeneration": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.Emit.ILGeneration": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "59tBslAk9733NXLrUJrwNZEzbMAcu8k344OYo+wfSVygcgZ9lgBdGIzH/nrg3LYhXceynyvTc8t5/GD4Ri0/ng==", - "dependencies": { - "System.Reflection": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.Emit.Lightweight": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "oadVHGSMsTmZsAF864QYN1t1QzZjIcuKU3l2S9cZOwDdDueNTrqq1yRj7koFfIGEnKpt6NjpL3rOzRhs4ryOgA==", - "dependencies": { - "System.Reflection": "4.3.0", - "System.Reflection.Emit.ILGeneration": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.Extensions": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "rJkrJD3kBI5B712aRu4DpSIiHRtr6QlfZSQsb0hYHrDCZORXCFjQfoipo2LaMUHoT9i1B7j7MnfaEKWDFmFQNQ==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.Metadata": { - "type": "Transitive", - "resolved": "1.6.0", - "contentHash": "COC1aiAJjCoA5GBF+QKL2uLqEBew4JsCkQmoHKbN3TlOZKa2fKLz5CpiRQKDz0RsAOEGsVKqOD5bomsXq/4STQ==" - }, - "System.Reflection.Primitives": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.TypeExtensions": { - "type": "Transitive", - "resolved": "4.7.0", - "contentHash": "VybpaOQQhqE6siHppMktjfGBw1GCwvCqiufqmP8F1nj7fTUNtW35LOEt3UZTEsECfo+ELAl/9o9nJx3U91i7vA==" - }, - "System.Resources.ResourceManager": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Globalization": "4.3.0", - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Runtime": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0" - } - }, - "System.Runtime.CompilerServices.Unsafe": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==" - }, - "System.Runtime.Extensions": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Runtime.Handles": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Runtime.InteropServices": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Reflection": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Handles": "4.3.0" - } - }, - "System.Runtime.InteropServices.RuntimeInformation": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "cbz4YJMqRDR7oLeMRbdYv7mYzc++17lNhScCX0goO2XpGWdvAt60CGN+FHdePUEHCe/Jy9jUlvNAiNdM+7jsOw==", - "dependencies": { - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Threading": "4.3.0", - "runtime.native.System": "4.3.0" - } - }, - "System.Runtime.Loader": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "DHMaRn8D8YCK2GG2pw+UzNxn/OHVfaWx7OTLBD/hPegHZZgcZh3H6seWegrC4BYwsfuGrywIuT+MQs+rPqRLTQ==", - "dependencies": { - "System.IO": "4.3.0", - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Runtime.Numerics": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "yMH+MfdzHjy17l2KESnPiF2dwq7T+xLnSJar7slyimAkUh/gTrS9/UQOtv7xarskJ2/XDSNvfLGOBQPjL7PaHQ==", - "dependencies": { - "System.Globalization": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0" - } - }, - "System.Runtime.Serialization.Formatters": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "KT591AkTNFOTbhZlaeMVvfax3RqhH1EJlcwF50Wm7sfnBLuHiOeZRRKrr1ns3NESkM20KPZ5Ol/ueMq5vg4QoQ==", - "dependencies": { - "System.Collections": "4.3.0", - "System.Reflection": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Serialization.Primitives": "4.3.0" - } - }, - "System.Runtime.Serialization.Json": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "CpVfOH0M/uZ5PH+M9+Gu56K0j9lJw3M+PKRegTkcrY/stOIvRUeonggxNrfBYLA5WOHL2j15KNJuTuld3x4o9w==", - "dependencies": { - "System.IO": "4.3.0", - "System.Private.DataContractSerialization": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Runtime.Serialization.Primitives": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "Wz+0KOukJGAlXjtKr+5Xpuxf8+c8739RI1C+A2BoQZT+wMCCoMDDdO8/4IRHfaVINqL78GO8dW8G2lW/e45Mcw==", - "dependencies": { - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Security.AccessControl": { - "type": "Transitive", - "resolved": "4.7.0", - "contentHash": "JECvTt5aFF3WT3gHpfofL2MNNP6v84sxtXxpqhLBCcDRzqsPBmHhQ6shv4DwwN2tRlzsUxtb3G9M3763rbXKDg==", - "dependencies": { - "Microsoft.NETCore.Platforms": "3.1.0", - "System.Security.Principal.Windows": "4.7.0" - } - }, - "System.Security.Cryptography.Algorithms": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "W1kd2Y8mYSCgc3ULTAZ0hOP2dSdG5YauTb1089T0/kRcN2MpSAW1izOFROrJgxSlMn3ArsgHXagigyi+ibhevg==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "System.Collections": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Runtime.Numerics": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "runtime.native.System.Security.Cryptography.Apple": "4.3.0", - "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - } - }, - "System.Security.Cryptography.Cng": { - "type": "Transitive", - "resolved": "4.5.0", - "contentHash": "WG3r7EyjUe9CMPFSs6bty5doUqT+q9pbI80hlNzo2SkPkZ4VTuZkGWjpp77JB8+uaL4DFPRdBsAY+DX3dBK92A==" - }, - "System.Security.Cryptography.Csp": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "X4s/FCkEUnRGnwR3aSfVIkldBmtURMhmexALNTwpjklzxWU7yjMk7GHLKOZTNkgnWnE0q7+BCf9N2LVRWxewaA==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "System.IO": "4.3.0", - "System.Reflection": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.Security.Cryptography.Encoding": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "System.Collections": "4.3.0", - "System.Collections.Concurrent": "4.3.0", - "System.Linq": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - } - }, - "System.Security.Cryptography.OpenSsl": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "h4CEgOgv5PKVF/HwaHzJRiVboL2THYCou97zpmhjghx5frc7fIvlkY1jL+lnIQyChrJDMNEXS6r7byGif8Cy4w==", - "dependencies": { - "System.Collections": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Runtime.Numerics": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - } - }, - "System.Security.Cryptography.Primitives": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "7bDIyVFNL/xKeFHjhobUAQqSpJq9YTOpbEs6mR233Et01STBMXNAc/V+BM6dwYGc95gVh/Zf+iVXWzj3mE8DWg==", - "dependencies": { - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.Security.Cryptography.ProtectedData": { - "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "xSPiLNlHT6wAHtugASbKAJwV5GVqQK351crnILAucUioFqqieDN79evO1rku1ckt/GfjIn+b17UaSskoY03JuA==" - }, - "System.Security.Cryptography.X509Certificates": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.Globalization.Calendars": "4.3.0", - "System.IO": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.IO.FileSystem.Primitives": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Runtime.Numerics": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Cng": "4.3.0", - "System.Security.Cryptography.Csp": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.OpenSsl": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0", - "runtime.native.System": "4.3.0", - "runtime.native.System.Net.Http": "4.3.0", - "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - } - }, - "System.Security.Permissions": { - "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "Vmp0iRmCEno9BWiskOW5pxJ3d9n+jUqKxvX4GhLwFhnQaySZmBN2FuC0N5gjFHgyFMUjC5sfIJ8KZfoJwkcMmA==", - "dependencies": { - "System.Windows.Extensions": "7.0.0" - } - }, - "System.Security.Principal.Windows": { - "type": "Transitive", - "resolved": "4.7.0", - "contentHash": "ojD0PX0XhneCsUbAZVKdb7h/70vyYMDYs85lwEI+LngEONe/17A0cFaRFqZU+sOEidcVswYWikYOQ9PPfjlbtQ==" - }, - "System.Security.SecureString": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "PnXp38O9q/2Oe4iZHMH60kinScv6QiiL2XH54Pj2t0Y6c2zKPEiAZsM/M3wBOHLNTBDFP0zfy13WN2M0qFz5jg==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.Text.Encoding": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Text.Encoding.Extensions": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "YVMK0Bt/A43RmwizJoZ22ei2nmrhobgeiYwFzC4YAN+nue8RF6djXDMog0UCn+brerQoYVyaS+ghy9P/MUVcmw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0", - "System.Text.Encoding": "4.3.0" - } - }, - "System.Text.Encodings.Web": { - "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "OP6umVGxc0Z0MvZQBVigj4/U31Pw72ITihDWP9WiWDm+q5aoe0GaJivsfYGq53o6dxH7DcXWiCTl7+0o2CGdmg==", - "dependencies": { - "System.Runtime.CompilerServices.Unsafe": "6.0.0" - } - }, - "System.Text.Json": { - "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "DaGSsVqKsn/ia6RG8frjwmJonfos0srquhw09TlT8KRw5I43E+4gs+/bZj4K0vShJ5H9imCuXupb4RmS+dBy3w==", - "dependencies": { - "System.Runtime.CompilerServices.Unsafe": "6.0.0", - "System.Text.Encodings.Web": "7.0.0" - } - }, - "System.Text.RegularExpressions": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "RpT2DA+L660cBt1FssIE9CAGpLFdFPuheB7pLpKpn6ZXNby7jDERe8Ua/Ne2xGiwLVG2JOqziiaVCGDon5sKFA==", - "dependencies": { - "System.Runtime": "4.3.0" - } - }, - "System.Threading": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "VkUS0kOBcUf3Wwm0TSbrevDDZ6BlM+b/HRiapRFWjM5O0NS0LviG0glKmFK+hhPDd1XFeSdU1GmlLhb2CoVpIw==", - "dependencies": { - "System.Runtime": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.Threading.Tasks": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Threading.Tasks.Extensions": { - "type": "Transitive", - "resolved": "4.5.4", - "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==" - }, - "System.Threading.Thread": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "OHmbT+Zz065NKII/ZHcH9XO1dEuLGI1L2k7uYss+9C1jLxTC9kTZZuzUOyXHayRk+dft9CiDf3I/QZ0t8JKyBQ==", - "dependencies": { - "System.Runtime": "4.3.0" - } - }, - "System.Threading.ThreadPool": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "k/+g4b7vjdd4aix83sTgC9VG6oXYKAktSfNIJUNGxPEj7ryEOfzHHhfnmsZvjxawwcD9HyWXKCXmPjX8U4zeSw==", - "dependencies": { - "System.Runtime": "4.3.0", - "System.Runtime.Handles": "4.3.0" - } - }, - "System.ValueTuple": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "cNLEvBX3d6MMQRZe3SMFNukVbitDAEpVZO17qa0/2FHxZ7Y7PpFRpr6m2615XYM/tYYYf0B+WyHNujqIw8Luwg==", - "dependencies": { - "System.Collections": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Windows.Extensions": { - "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "bR4qdCmssMMbo9Fatci49An5B1UaVJZHKNq70PRgzoLYIlitb8Tj7ns/Xt5Pz1CkERiTjcVBDU2y1AVrPBYkaw==", - "dependencies": { - "System.Drawing.Common": "7.0.0" - } - }, - "System.Xml.ReaderWriter": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "GrprA+Z0RUXaR4N7/eW71j1rgMnEnEVlgii49GZyAjTH7uliMnrOU3HNFBr6fEDBCJCIdlVNq9hHbaDR621XBA==", - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.IO.FileSystem.Primitives": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Text.Encoding.Extensions": "4.3.0", - "System.Text.RegularExpressions": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "System.Threading.Tasks.Extensions": "4.3.0" - } - }, - "System.Xml.XDocument": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "5zJ0XDxAIg8iy+t4aMnQAu0MqVbqyvfoUVl1yDV61xdo3Vth45oA2FoY4pPkxYAH5f8ixpmTqXeEIya95x0aCQ==", - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tools": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Reflection": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0", - "System.Xml.ReaderWriter": "4.3.0" - } - }, - "System.Xml.XmlDocument": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "lJ8AxvkX7GQxpC6GFCeBj8ThYVyQczx2+f/cWHJU8tjS7YfI6Cv6bon70jVEgs2CiFbmmM8b9j1oZVx0dSI2Ww==", - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0", - "System.Xml.ReaderWriter": "4.3.0" - } - }, - "System.Xml.XmlSerializer": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "MYoTCP7EZ98RrANESW05J5ZwskKDoN0AuZ06ZflnowE50LTpbR5yRg3tHckTVm5j/m47stuGgCrCHWePyHS70Q==", - "dependencies": { - "System.Collections": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Linq": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Emit": "4.3.0", - "System.Reflection.Emit.ILGeneration": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Reflection.TypeExtensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Text.RegularExpressions": "4.3.0", - "System.Threading": "4.3.0", - "System.Xml.ReaderWriter": "4.3.0", - "System.Xml.XmlDocument": "4.3.0" - } - }, - "System.Xml.XPath": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "v1JQ5SETnQusqmS3RwStF7vwQ3L02imIzl++sewmt23VGygix04pEH+FCj1yWb+z4GDzKiljr1W7Wfvrx0YwgA==", - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0", - "System.Xml.ReaderWriter": "4.3.0" - } - }, - "System.Xml.XPath.XmlDocument": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "A/uxsWi/Ifzkmd4ArTLISMbfFs6XpRPsXZonrIqyTY70xi8t+mDtvSM5Os0RqyRDobjMBwIDHDL4NOIbkDwf7A==", - "dependencies": { - "System.Collections": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0", - "System.Xml.ReaderWriter": "4.3.0", - "System.Xml.XPath": "4.3.0", - "System.Xml.XmlDocument": "4.3.0" - } - }, - "TimeZoneConverter": { - "type": "Transitive", - "resolved": "6.0.1", - "contentHash": "vvhLOgRSOvfq5fBv0/Dd1S3N7K2ibO5wp06B5AkuxUpXkgv2aDHw9jB5ZvPg83y9sy+jF9qE7qWybMK46BXBuw==" - }, - "UserApi.Client": { - "type": "Transitive", - "resolved": "1.44.2", - "contentHash": "sL9YCnF9D1MuXULRgMkz8pbUfuevzX78BLMtIbJcRLgOsv0X+FCIEImQa6ytPmqjQhl5PpuP/s72uC9bSzdxIA==", - "dependencies": { - "Microsoft.AspNetCore.Mvc.Core": "2.2.5" - } - }, - "VH.Core.Configuration": { - "type": "Transitive", - "resolved": "0.1.13", - "contentHash": "fEtq8dy7GbJ8eUDc5kmwg3Ze+6C7JEPSHlmvz22W8UPX/x7ujBTr5MqUdpKNQganaHalt/6DHfHi+gxlPSUjiw==", - "dependencies": { - "Microsoft.AspNetCore.Http.Connections.Common": "3.1.10", - "Microsoft.AspNetCore.Mvc.Core": "2.2.5", - "Microsoft.Extensions.Configuration.KeyPerFile": "3.1.11", - "Microsoft.Extensions.DependencyModel": "3.1.6", - "SonarAnalyzer.CSharp": "8.2.0.14119" - } - }, - "adminwebsite": { - "type": "Project", - "dependencies": { - "AspNetCore.HealthChecks.Uris": "[6.0.3, )", - "BookingsApi.Client": "[1.47.11, )", - "FluentValidation.AspNetCore": "[10.4.0, )", - "LaunchDarkly.ServerSdk": "[7.0.3, )", - "MicroElements.Swashbuckle.FluentValidation": "[5.7.0, )", - "Microsoft.ApplicationInsights": "[2.21.0, )", - "Microsoft.ApplicationInsights.AspNetCore": "[2.21.0, )", - "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.9, )", - "Microsoft.AspNetCore.Mvc.NewtonsoftJson": "[6.0.9, )", - "Microsoft.AspNetCore.SpaServices": "[3.1.1, )", - "Microsoft.AspNetCore.SpaServices.Extensions": "[6.0.9, )", - "Microsoft.Graph": "[1.21.0, )", - "Microsoft.Identity.Client": "[4.51.0, )", - "Microsoft.OpenApi": "[1.4.2, )", - "Microsoft.VisualStudio.Azure.Containers.Tools.Targets": "[1.17.0, )", - "NWebsec.AspNetCore.Middleware": "[3.0.0, )", - "NotificationApi.Client": "[1.44.2, )", - "Polly": "[7.2.1, )", - "Swashbuckle.AspNetCore": "[6.5.0, )", - "Swashbuckle.AspNetCore.Annotations": "[6.5.0, )", - "Swashbuckle.AspNetCore.Newtonsoft": "[6.5.0, )", - "Swashbuckle.AspNetCore.Swagger": "[6.5.0, )", - "TimeZoneConverter": "[6.0.1, )", - "UserApi.Client": "[1.44.2, )", - "VH.Core.Configuration": "[0.1.13, )", - "VideoApi.Client": "[1.44.3, )" - } - }, - "adminwebsite.testing.common": { - "type": "Project" - } - } - } -} \ No newline at end of file diff --git a/AdminWebsite/AdminWebsite.AcceptanceTests/parameters.runsettings b/AdminWebsite/AdminWebsite.AcceptanceTests/parameters.runsettings deleted file mode 100644 index 13d9635de..000000000 --- a/AdminWebsite/AdminWebsite.AcceptanceTests/parameters.runsettings +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/AdminWebsite/AdminWebsite.UnitTests/Controllers/HearingsController/EditHearingTests.cs b/AdminWebsite/AdminWebsite.UnitTests/Controllers/HearingsController/EditHearingTests.cs index d1234c549..bcb7e63a1 100644 --- a/AdminWebsite/AdminWebsite.UnitTests/Controllers/HearingsController/EditHearingTests.cs +++ b/AdminWebsite/AdminWebsite.UnitTests/Controllers/HearingsController/EditHearingTests.cs @@ -42,12 +42,9 @@ namespace AdminWebsite.UnitTests.Controllers.HearingsController public class EditHearingTests { private EditHearingRequest _addEndpointToHearingRequest; - private EditHearingRequest _addEndpointToHearingRequestWithJudge; private EditHearingRequest _editEndpointOnHearingRequestWithJudge; private EditHearingRequest _removeEndpointOnHearingRequest; private EditHearingRequest _addNewParticipantRequest; - private EditHearingRequest _switchJudgeRequest; - private EditHearingRequest _updateJudgeOtherInformationRequest; private Mock _bookingsApiClient; private AdminWebsite.Controllers.HearingsController _controller; @@ -220,37 +217,6 @@ public void Setup() } }; - _addEndpointToHearingRequestWithJudge = new EditHearingRequest - { - Case = new EditCaseRequest { Name = "Case", Number = "123" }, - Participants = new List() - { - new EditParticipantRequest() { - Id = participantId1, - CaseRoleName = "judge", - HearingRoleName = HearingRoleName.Judge, - FirstName = "FirstName", - LastName = "LastName", - ContactEmail = "judge@domain.com", - DisplayName = "FirstName LastName", - LinkedParticipants = new List(), - OrganisationName = "Org1", - Representee = "Rep1", - TelephoneNumber = "+44 123 1234", - Title = "Mr", - MiddleNames = "MiddleNames" - } - }, - Endpoints = new List - { - new EditEndpointRequest { Id = null, DisplayName = "New Endpoint", DefenceAdvocateContactEmail = "username@domain.net" }, - new EditEndpointRequest { Id = endpointGuid1, DisplayName = "data1", DefenceAdvocateContactEmail = defenceAdvocate1 }, - new EditEndpointRequest { Id = endpointGuid2, DisplayName = "data2", DefenceAdvocateContactEmail = defenceAdvocate2 }, - new EditEndpointRequest { Id = endpointGuid3, DisplayName = "data3", DefenceAdvocateContactEmail = defenceAdvocate3 }, - new EditEndpointRequest { Id = endpointGuid4, DisplayName = "data4", DefenceAdvocateContactEmail = defenceAdvocate4 } - } - }; - _editEndpointOnHearingRequestWithJudge = new EditHearingRequest { Case = new EditCaseRequest @@ -343,43 +309,6 @@ public void Setup() CaseTypeName = "Unit Test", ScheduledDateTime = DateTime.UtcNow.AddHours(3) }; - - _switchJudgeRequest = new EditHearingRequest - { - Case = new EditCaseRequest - { - Name = "Case", - Number = "123" - }, - Participants = new List - { - new EditParticipantRequest - { - ContactEmail = "new@domain.net", - FirstName = "Test_FirstName", - LastName = "Test_LastName", - HearingRoleName = HearingRoleName.Judge - } - } - }; - - _updateJudgeOtherInformationRequest = new EditHearingRequest - { - Case = new EditCaseRequest - { - Name = "Case", - Number = "123" - }, - Participants = new List - { - new EditParticipantRequest - { - Id = participantId1, CaseRoleName = "judge", HearingRoleName = HearingRoleName.Judge, - ContactEmail = "judge.user@email.com", FirstName = "Judge" - } - }, - OtherInformation = new OtherInformationDetails { JudgeEmail = "judge@gmail.com", JudgePhone = "0845"}.ToOtherInformationString() // "|JudgeEmail|judge@gmail.com|JudgePhone|0845" - }; _bookingsApiClient.Setup(x => x.GetHearingDetailsByIdAsync(It.IsAny())) .ReturnsAsync(_updatedExistingParticipantHearingOriginal); @@ -442,10 +371,16 @@ public void Setup() public async Task Should_return_bad_request_if_invalid_hearing_id() { var invalidId = Guid.Empty; + var key = "hearingId"; + var errorMessage = "Please provide a valid hearingId"; var result = await _controller.EditHearing(invalidId, _addNewParticipantRequest); - var badRequestResult = (BadRequestObjectResult)result.Result; - var errors = (SerializableError)badRequestResult.Value; - errors["hearingId"].Should().BeEquivalentTo(new[] { "Please provide a valid hearingId" }); + + result.Result.Should().NotBeNull(); + var objectResult = (ObjectResult)result.Result; + var validationProblems = (ValidationProblemDetails)objectResult.Value; + validationProblems.Should().NotBeNull(); + validationProblems!.Errors.ContainsKey(key).Should().BeTrue(); + validationProblems.Errors[key][0].Should().Be(errorMessage); } [Test] @@ -460,9 +395,11 @@ public async Task Should_return_bad_request_if_case_is_not_given() _addNewParticipantRequest.Case = null; var result = await _controller.EditHearing(_validId, _addNewParticipantRequest); - var badRequestResult = (BadRequestObjectResult)result.Result; - var errors = (SerializableError)badRequestResult.Value; - errors["case"].Should().BeEquivalentTo(new[] { "Please provide valid case details" }); + var objectResult = (ObjectResult)result.Result; + var validationProblems = (ValidationProblemDetails)objectResult.Value; + + var errors = validationProblems.Errors; + errors["case"].Should().BeEquivalentTo("Please provide valid case details"); } [Test] @@ -476,132 +413,13 @@ public async Task Should_return_bad_request_if_no_participants_are_given() _addNewParticipantRequest.Participants.Clear(); var result = await _controller.EditHearing(_validId, _addNewParticipantRequest); - var badRequestResult = (BadRequestObjectResult)result.Result; - var errors = (SerializableError)badRequestResult.Value; - errors["participants"].Should().BeEquivalentTo(new[] { "Please provide at least one participant" }); - } - - [Test] - public async Task - Should_return_bad_request_if_edit_confirmed_hearing_except_only_adding_participant_prior_30_minutes_of_it_starting() - { - _updatedExistingParticipantHearingOriginal.ScheduledDateTime = DateTime.UtcNow.AddHours(-1); - _updatedExistingParticipantHearingOriginal.Status = BookingStatus.Created; - _bookingsApiClient.SetupSequence(x => x.GetHearingDetailsByIdAsync(It.IsAny())) - .ReturnsAsync(_updatedExistingParticipantHearingOriginal); - var result = await _controller.EditHearing(_validId, _addNewParticipantRequest); - var badRequestResult = (BadRequestObjectResult)result.Result; - var errors = (SerializableError)badRequestResult.Value; - errors["hearingId"] - .Should() - .BeEquivalentTo(new[] - { - $"You can't edit a confirmed hearing [{_updatedExistingParticipantHearingOriginal.Id}] within 30 minutes of it starting" - }); - } - - [Test] - public async Task Should_allow_switching_judge_prior_30_minutes_of_hearing_starting() - { - _existingHearingWithJudge.ScheduledDateTime = DateTime.UtcNow.AddMinutes(20); - _existingHearingWithJudge.Status = BookingStatus.Created; - _bookingsApiClient.SetupSequence(x => x.GetHearingDetailsByIdAsync(It.IsAny())) - .ReturnsAsync(_existingHearingWithJudge) - .ReturnsAsync(_existingHearingWithJudge); - var result = await _controller.EditHearing(_validId, _switchJudgeRequest); - - ((ObjectResult)result.Result).StatusCode.Should().Be(200); - _bookingsApiClient.Verify( - x => x.UpdateHearingParticipantsAsync(It.IsAny(), It.IsAny()), - Times.Once); - _bookingsApiClient.Verify(x => x.UpdateHearingDetailsAsync(It.IsAny(), - It.Is(u => - !u.Cases.IsNullOrEmpty())), - Times.Once); - } - - [Test] - public async Task Should_allow_updating_judge_other_information_prior_30_minutes_of_hearing_starting() - { - _existingHearingWithJudge.ScheduledDateTime = DateTime.UtcNow.AddMinutes(20); - _existingHearingWithJudge.Status = BookingStatus.Created; - _bookingsApiClient.SetupSequence(x => x.GetHearingDetailsByIdAsync(It.IsAny())) - .ReturnsAsync(_existingHearingWithJudge) - .ReturnsAsync(_existingHearingWithJudge); - var result = await _controller.EditHearing(_validId, _updateJudgeOtherInformationRequest); + var objectResult = (ObjectResult)result.Result; + var validationProblems = (ValidationProblemDetails)objectResult.Value; - ((ObjectResult)result.Result).StatusCode.Should().Be(200); - _bookingsApiClient.Verify(x => x.UpdateHearingParticipantsAsync(It.IsAny(), - It.IsAny()), Times.Once); - _bookingsApiClient.Verify(x => x.UpdateHearingDetailsAsync(It.IsAny(), - It.Is(u => !u.Cases.IsNullOrEmpty())), Times.Once); + var errors = validationProblems.Errors; + errors["participants"].Should().Contain( "Please provide at least one participant"); } - - [Test] - public async Task Should_allow_edit_confirmed_hearing_up_until_30_minutes_before_starting() - { - _updatedExistingParticipantHearingOriginal.ScheduledDateTime = DateTime.UtcNow.AddHours(1); - _addNewParticipantRequest.ScheduledDateTime = _updatedExistingParticipantHearingOriginal.ScheduledDateTime; - _updatedExistingParticipantHearingOriginal.Status = BookingStatus.Booked; - _bookingsApiClient.SetupSequence(x => x.GetHearingDetailsByIdAsync(It.IsAny())) - .ReturnsAsync(_updatedExistingParticipantHearingOriginal) - .ReturnsAsync(_updatedExistingParticipantHearingOriginal) - .ReturnsAsync(_updatedExistingParticipantHearingOriginal); - - var result = await _controller.EditHearing(_validId, _addNewParticipantRequest); - - ((OkObjectResult)result.Result).StatusCode.Should().Be(200); - _bookingsApiClient.Verify( - x - => x.UpdateHearingParticipantsAsync(It.IsAny(), - It.IsAny()), Times.Once); - _bookingsApiClient.Verify(x => x.UpdateHearingDetailsAsync(It.IsAny(), - It.Is(u => !u.Cases.IsNullOrEmpty())), Times.Once); - } - - [Test] - public async Task Should_allow_only_participant_changes_if_hearing_starts_in_less_than_thirty_minutes() - { - _updatedExistingParticipantHearingOriginal.ScheduledDateTime = DateTime.UtcNow.AddHours(-1); - _addNewParticipantRequest = new EditHearingRequest - { - HearingRoomName = _updatedExistingParticipantHearingOriginal.HearingRoomName, - HearingVenueName = _updatedExistingParticipantHearingOriginal.HearingVenueName, - OtherInformation = _updatedExistingParticipantHearingOriginal.OtherInformation, - ScheduledDateTime = _updatedExistingParticipantHearingOriginal.ScheduledDateTime, - ScheduledDuration = _updatedExistingParticipantHearingOriginal.ScheduledDuration, - AudioRecordingRequired = _updatedExistingParticipantHearingOriginal.AudioRecordingRequired, - Case = new EditCaseRequest - { - Name = _updatedExistingParticipantHearingOriginal.Cases[0].Name, - Number = _updatedExistingParticipantHearingOriginal.Cases[0].Number, - }, - Participants = _updatedExistingParticipantHearingOriginal.Participants.Select(EditParticipantRequestMapper.MapFrom).ToList() - }; - - _addNewParticipantRequest.Participants.Add(new EditParticipantRequest - { - ContactEmail = "new2@domain.net", - FirstName = "Test2_FirstName", - LastName = "Test2_LastName" - }); - _bookingsApiClient.SetupSequence(x => x.GetHearingDetailsByIdAsync(It.IsAny())) - .ReturnsAsync(_updatedExistingParticipantHearingOriginal) - .ReturnsAsync(_updatedExistingParticipantHearingOriginal) - .ReturnsAsync(_updatedExistingParticipantHearingOriginal); - - var result = await _controller.EditHearing(_validId, _addNewParticipantRequest); - - ((OkObjectResult)result.Result).StatusCode.Should().Be(200); - _bookingsApiClient.Verify( - x => x.UpdateHearingParticipantsAsync(It.IsAny(), It.IsAny()), - Times.Once); - _bookingsApiClient.Verify(x => x.UpdateHearingDetailsAsync(It.IsAny(), - It.Is(u => - !u.Cases.IsNullOrEmpty())), - Times.Once); - } - + [Test] public async Task Should_return_not_found_if_hearing_is_missing() { @@ -630,8 +448,13 @@ public async Task Should_return_bad_request_if_editing_hearing_fails_with_bad_re _bookingsApiClient.Setup(x => x.GetHearingDetailsByIdAsync(It.IsAny())) .ReturnsAsync(_existingHearingWithLinkedParticipants); + var validationProblemDetails = new ValidationProblemDetails(new Dictionary + { + {"Hearing", new[] {"Cannot remove a participant from hearing that is close to start time"}}, + }); + _bookingsApiClient.Setup(x => x.UpdateHearingParticipantsAsync(It.IsAny(), It.IsAny())) - .Throws(ClientException.ForBookingsAPI(HttpStatusCode.BadRequest)); + .Throws(ClientException.ForBookingsAPIValidation(validationProblemDetails)); //Act var response = await _controller.EditHearing(_validId, _addNewParticipantRequest); @@ -801,7 +624,14 @@ public async Task Should_return_updated_hearingV2() [Test] public async Task Should_pass_on_bad_request_from_bookings_api() { - GivenApiThrowsExceptionOnUpdate(HttpStatusCode.BadRequest); + var validationProblemDetails = new ValidationProblemDetails(new Dictionary + { + {"Hearing", new[] {"Cannot remove a participant from hearing that is close to start time"}}, + }); + + _bookingsApiClient.Setup(x => + x.UpdateHearingDetailsAsync(It.IsAny(), It.IsAny())) + .ThrowsAsync(ClientException.ForBookingsAPIValidation(validationProblemDetails)); var response = await _controller.EditHearing(_validId, _addNewParticipantRequest); response.Result.Should().BeOfType(); @@ -907,32 +737,6 @@ public async Task Should_add_endpoint_if_new_endpoint_is_added_to_endpoint_list( x => x.RemoveEndPointFromHearingAsync(It.IsAny(), It.IsAny()), Times.Never); } - [Test] - public async Task Should_add_endpoint_if_new_endpoint_is_added_to_endpoint_list_prior_30_minutes_of_hearing_starting() - { - _existingHearingWithEndpointsOriginal.ScheduledDateTime = DateTime.UtcNow.AddMinutes(20); - _existingHearingWithEndpointsOriginal.Status = BookingStatus.Created; - - _bookingsApiClient.Setup(x => x.GetHearingDetailsByIdAsync(It.IsAny())) - .ReturnsAsync(_existingHearingWithEndpointsOriginal); - - var result = await _controller.EditHearing(_validId, _addEndpointToHearingRequestWithJudge); - - ((OkObjectResult)result.Result).StatusCode.Should().Be(200); - - _bookingsApiClient.Verify( - x => x.AddEndPointToHearingAsync(It.IsAny(), It.IsAny()), Times.Once); - - _bookingsApiClient.Verify(x => x.UpdateHearingDetailsAsync(It.IsAny(), - It.Is(u => - !u.Cases.IsNullOrEmpty())), Times.Once); - - _bookingsApiClient.Verify(x => x.UpdateDisplayNameForEndpointAsync( - It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); - - _bookingsApiClient.Verify(x => x.RemoveEndPointFromHearingAsync(It.IsAny(), It.IsAny()), Times.Never); - } - [Test] public async Task Should_update_endpoint_if_an_endpoint_is_updates_in_endpoint_list() { @@ -952,34 +756,6 @@ public async Task Should_update_endpoint_if_an_endpoint_is_updates_in_endpoint_l } - [Test] - public async Task Should_update_endpoint_if_an_endpoint_is_updates_in_endpoint_list_prior_30_minutes_of_hearing_starting() - { - _existingHearingWithEndpointsOriginal.ScheduledDateTime = DateTime.UtcNow.AddMinutes(20); - _existingHearingWithEndpointsOriginal.Status = BookingStatus.Created; - - _bookingsApiClient.Setup(x => x.GetHearingDetailsByIdAsync(It.IsAny())) - .ReturnsAsync(_existingHearingWithEndpointsOriginal); - - var result = await _controller.EditHearing(_validId, _editEndpointOnHearingRequestWithJudge); - - ((OkObjectResult)result.Result).StatusCode.Should().Be(200); - - _bookingsApiClient.Verify( - x => x.AddEndPointToHearingAsync(It.IsAny(), It.IsAny()), Times.Never); - - _bookingsApiClient.Verify(x => x.UpdateHearingDetailsAsync(It.IsAny(), - It.Is(u => - !u.Cases.IsNullOrEmpty())), Times.Once); - - _bookingsApiClient.Verify( - x => x.UpdateDisplayNameForEndpointAsync(It.IsAny(), It.IsAny(), - It.IsAny()), Times.Exactly(1)); - - _bookingsApiClient.Verify( - x => x.RemoveEndPointFromHearingAsync(It.IsAny(), It.IsAny()), Times.Never); - } - [Test] public async Task Should_remove_endpoint_if_endpoint_is_removed_from_the_endpoint_list() { @@ -1284,7 +1060,6 @@ public async Task Should_add_a_new_participant_and_link_to_existing_interpreter_ _bookingsApiClient.Verify(x => x.UpdateHearingDetailsAsync(It.IsAny(), It.Is(u => !u.Cases.IsNullOrEmpty())), Times.Once); } - [Test] public async Task Should_create_a_new_judge_and_set_username_to_contact_email() @@ -1503,25 +1278,6 @@ public async Task ((OkObjectResult)result.Result).StatusCode.Should().Be(200); } - [Test] - public async Task Should_not_be_able_to_remove_judge_from_confirmed_hearing() - { - // arrange - var hearingId = _updatedExistingParticipantHearingOriginal.Id; - var updatedHearing = _updatedExistingParticipantHearingOriginal.Duplicate(); - updatedHearing.Status = BookingStatus.Created; - _bookingsApiClient.SetupSequence(x => x.GetHearingDetailsByIdAsync(hearingId)) - .ReturnsAsync(updatedHearing); - _bookingsApiClient.Setup(x => x.GetHearingsByGroupIdAsync(updatedHearing.GroupId.Value)) - .ReturnsAsync(new List { updatedHearing }); - - // act - var result = await _controller.EditHearing(hearingId, It.IsAny()); - - // assert - result.Result.Should().BeOfType(); - } - [Test] public async Task Should_handle_failed_booking_request_on_retry() { @@ -1569,11 +1325,5 @@ private EditHearingRequest FailedHearingRequest() }; } - private void GivenApiThrowsExceptionOnUpdate(HttpStatusCode code) - { - _bookingsApiClient.Setup(x => - x.UpdateHearingDetailsAsync(It.IsAny(), It.IsAny())) - .ThrowsAsync(ClientException.ForBookingsAPI(code)); - } } } \ No newline at end of file diff --git a/AdminWebsite/AdminWebsite.UnitTests/Helper/ClientException.cs b/AdminWebsite/AdminWebsite.UnitTests/Helper/ClientException.cs index 4b4712f8f..38d93c2e4 100644 --- a/AdminWebsite/AdminWebsite.UnitTests/Helper/ClientException.cs +++ b/AdminWebsite/AdminWebsite.UnitTests/Helper/ClientException.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Net; using BookingsApi.Client; +using Microsoft.AspNetCore.Mvc; using UserApi.Client; namespace AdminWebsite.UnitTests.Helper @@ -21,6 +22,13 @@ public static BookingsApiException ForBookingsAPI(HttpStatusCode statusCode) null ); } + + public static BookingsApiException ForBookingsAPIValidation(ValidationProblemDetails validationProblemDetails) + { + return new BookingsApiException("BadRequest", + (int) HttpStatusCode.BadRequest, + "There were errors", null, validationProblemDetails, null); + } public static Exception ForUserService(HttpStatusCode statusCode) { diff --git a/AdminWebsite/AdminWebsite.UnitTests/Services/HearingServiceTests.cs b/AdminWebsite/AdminWebsite.UnitTests/Services/HearingServiceTests.cs index 17f589d42..73dc24b15 100644 --- a/AdminWebsite/AdminWebsite.UnitTests/Services/HearingServiceTests.cs +++ b/AdminWebsite/AdminWebsite.UnitTests/Services/HearingServiceTests.cs @@ -31,12 +31,7 @@ public class HearingServiceTests private HearingDetailsResponse _hearing; private const string ExpectedTeleConferencePhoneNumber = "expected_conference_phone_number"; private const string ExpectedTeleConferenceId = "expected_conference_phone_id"; - - private HearingDetailsResponse _updatedExistingParticipantHearingOriginal; - private Guid _validId; - private EditHearingRequest _editHearingRequest; - List _cases; - + [SetUp] public void Setup() { @@ -69,146 +64,6 @@ public void Setup() .Setup(x => x.BookAndConfirmToggle()).Returns(true); _service = _mocker.Create(); _hearing = InitHearing(); - _validId = Guid.NewGuid(); - - _cases = new List { new CaseResponse { Name = "Case", Number = "123" } }; - - _updatedExistingParticipantHearingOriginal = new HearingDetailsResponse - { - Id = _validId, - GroupId = _validId, - Participants = - new List - { - new ParticipantResponse - { - Id = Guid.NewGuid(), - UserRoleName = "Individual", - ContactEmail = "old@hmcts.net", - Username = "old@hmcts.net" - } - }, - Cases = _cases, - CaseTypeName = "Unit Test", - ScheduledDateTime = DateTime.UtcNow.AddHours(3), - Endpoints = new List - { - new EndpointResponse - { - Id = Guid.NewGuid(), DisplayName = "test", DefenceAdvocateId = Guid.NewGuid(), - } - } - }; - - _editHearingRequest = new EditHearingRequest - { - HearingRoomName = _updatedExistingParticipantHearingOriginal.HearingRoomName, - HearingVenueName = _updatedExistingParticipantHearingOriginal.HearingVenueName, - OtherInformation = _updatedExistingParticipantHearingOriginal.OtherInformation, - ScheduledDateTime = _updatedExistingParticipantHearingOriginal.ScheduledDateTime, - ScheduledDuration = _updatedExistingParticipantHearingOriginal.ScheduledDuration, - AudioRecordingRequired = _updatedExistingParticipantHearingOriginal.AudioRecordingRequired, - Case = new EditCaseRequest - { - Name = _updatedExistingParticipantHearingOriginal.Cases.First().Name, - Number = _updatedExistingParticipantHearingOriginal.Cases.First().Number, - }, - Endpoints = _updatedExistingParticipantHearingOriginal.Endpoints - .Select(EditEndpointRequestMapper.MapFrom) - .ToList(), - Participants = _updatedExistingParticipantHearingOriginal.Participants - .Select(EditParticipantRequestMapper.MapFrom) - .ToList() - }; - } - - [Test] - public void Should_return_false_if_HearingRoomName_is_not_changed() - { - _editHearingRequest.HearingRoomName = "Updated HearingRoomName"; - _editHearingRequest.Participants.Add(new EditParticipantRequest { Id = Guid.NewGuid() }); - Assert.False(_service.IsAddingParticipantOnly(_editHearingRequest, _updatedExistingParticipantHearingOriginal.Map())); - } - - [Test] - public void Should_return_false_if_HearingVenueName_is_changed() - { - _editHearingRequest.HearingRoomName = "Updated HearingVenueName"; - _editHearingRequest.Participants.Add(new EditParticipantRequest { Id = Guid.NewGuid() }); - Assert.False(_service.IsAddingParticipantOnly(_editHearingRequest, _updatedExistingParticipantHearingOriginal.Map())); - } - - [Test] - public void Should_return_false_if_OtherInformation_is_changed() - { - _editHearingRequest.OtherInformation = "Updated OtherInformation"; - _editHearingRequest.Participants.Add(new EditParticipantRequest { Id = Guid.NewGuid() }); - Assert.False(_service.IsAddingParticipantOnly(_editHearingRequest, _updatedExistingParticipantHearingOriginal.Map())); - } - - [Test] - public void Should_return_false_if_ScheduledDuration_is_changed() - { - _editHearingRequest.ScheduledDuration = - _updatedExistingParticipantHearingOriginal.ScheduledDuration + 1; - _editHearingRequest.Participants.Add(new EditParticipantRequest { Id = Guid.NewGuid() }); - Assert.False(_service.IsAddingParticipantOnly(_editHearingRequest, _updatedExistingParticipantHearingOriginal.Map())); - } - - [Test] - public void Should_return_true_when_endpoint_count_is_changed() - { - _editHearingRequest.Endpoints.Add(new EditEndpointRequest - { - Id = Guid.NewGuid(), - DisplayName = "test", - DefenceAdvocateContactEmail = Guid.NewGuid().ToString(), - }); - _editHearingRequest.Participants.Add(new EditParticipantRequest { Id = Guid.NewGuid() }); - - Assert.True(_service.HasEndpointsBeenChanged(_editHearingRequest, _updatedExistingParticipantHearingOriginal.Map())); - } - - [Test] - public void Should_return_true_when_endpoint_displayName_is_changed() - { - _editHearingRequest.Endpoints.First().DisplayName = "test1"; - Assert.True(_service.HasEndpointsBeenChanged(_editHearingRequest, _updatedExistingParticipantHearingOriginal.Map())); - } - - [Test] - public void Should_return_true_when_endpoint_removed() - { - _updatedExistingParticipantHearingOriginal.Endpoints.Add(new EndpointResponse - { - Id = Guid.NewGuid(), - DisplayName = "test", - DefenceAdvocateId = Guid.NewGuid(), - }); - _editHearingRequest.Participants.Add(new EditParticipantRequest { Id = Guid.NewGuid() }); - - Assert.True(_service.HasEndpointsBeenChanged(_editHearingRequest, _updatedExistingParticipantHearingOriginal.Map())); - } - - [Test] - public void Should_return_true_when_endpoint_defenceAdvocateUsername_is_changed() - { - _updatedExistingParticipantHearingOriginal.Endpoints.First().DefenceAdvocateId = Guid.NewGuid(); - Assert.True(_service.HasEndpointsBeenChanged(_editHearingRequest, _updatedExistingParticipantHearingOriginal.Map())); - } - - [Test] - public void Should_return_false_when_participant_removed() - { - _updatedExistingParticipantHearingOriginal.Participants.Add(new ParticipantResponse { Id = Guid.NewGuid() }); - Assert.False(_service.IsAddingParticipantOnly(_editHearingRequest, _updatedExistingParticipantHearingOriginal.Map())); - } - - [Test] - public void Should_return_true_when_participant_added() - { - _editHearingRequest.Participants.Add(new EditParticipantRequest { Id = Guid.NewGuid() }); - Assert.True(_service.IsAddingParticipantOnly(_editHearingRequest, _updatedExistingParticipantHearingOriginal.Map())); } [Test] @@ -250,50 +105,7 @@ public void Should_have_one_added_participant() Assert.AreEqual(1, _service.GetAddedParticipant(originalParticipants, editParticipantRequest).Count); } - - [Test] - public void Should_return_false_if_participant_displayName_changed() - { - _editHearingRequest.Participants.First().DisplayName = "DisplayName changed"; - Assert.False(_service.IsAddingParticipantOnly(_editHearingRequest, _updatedExistingParticipantHearingOriginal.Map())); - } - - [Test] - public void Should_return_false_if_participant_lastName_changed() - { - _editHearingRequest.Participants.First().LastName = "LastName changed"; - Assert.False(_service.IsAddingParticipantOnly(_editHearingRequest, _updatedExistingParticipantHearingOriginal.Map())); - } - - [Test] - public void Should_return_throws_InvalidOperationException() - { - _updatedExistingParticipantHearingOriginal.Cases = new List(); - Assert.Throws(() => _service.IsAddingParticipantOnly(_editHearingRequest, _updatedExistingParticipantHearingOriginal.Map())); - } - - [Test] - public void Should_return_false_if_case_name_is_different() - { - _editHearingRequest.Case.Name = "Updated Case Name"; - Assert.False(_service.IsAddingParticipantOnly(_editHearingRequest, _updatedExistingParticipantHearingOriginal.Map())); - } - - [Test] - public void Should_return_false_if_case_number_is_different() - { - _editHearingRequest.Case.Number = "Updated Number"; - Assert.False(_service.IsAddingParticipantOnly(_editHearingRequest, _updatedExistingParticipantHearingOriginal.Map())); - } - - [Test] - public void Should_return_false_if_ScheduledDateTime_is_different() - { - _editHearingRequest.ScheduledDateTime = DateTime.Now; - - Assert.False(_service.IsAddingParticipantOnly(_editHearingRequest, _updatedExistingParticipantHearingOriginal.Map())); - } - + [Test] public async Task Should_process_participants() { @@ -461,90 +273,6 @@ public async Task Should_process_non_joh_participant() newParticipant.Should().NotBeNull(); newParticipant.Username.Should().NotBe(participant.ContactEmail); } - - [TestCase(false)] - [TestCase(true)] - public void IsUpdatingJudge_Should_return_correct_assertion(bool shouldUpdateJudge) - { - // Arrange - var editHearing = _editHearingRequest; - editHearing.Participants.Add(new EditParticipantRequest - { - ContactEmail = "Judge@court.com", - HearingRoleName = "Judge" - }); - var hearing = InitHearing(); - if(shouldUpdateJudge) - hearing.Participants - .First(x => x.UserRoleName == "Judge") - .ContactEmail = "Different.Judge@court.com"; - //Act - var response = _service.IsUpdatingJudge(editHearing, hearing.Map()); - //Assert - response.Should().Be(shouldUpdateJudge); - } - - [TestCase(false)] - [TestCase(true)] - public void IsUpdatingJudge_should_be_correct_when_comparing_optional_contact_details(bool shouldUpdateJudge) - { - // Arrange - var editHearing = _editHearingRequest; - editHearing.Participants.Add(new EditParticipantRequest - { - ContactEmail = "Judge@court.com", - HearingRoleName = "Judge" - }); - editHearing.OtherInformation = "JudgePhone|loremIpsum"; - var hearing = InitHearing(); - hearing.OtherInformation = "JudgePhone|loremIpsum"; - if(shouldUpdateJudge) - hearing.OtherInformation = "JudgePhone|loremIpsum2"; - //Act - var response = _service.IsUpdatingJudge(editHearing, hearing.Map()); - //Assert - response.Should().Be(shouldUpdateJudge); - } - - [Test] - public void IsUpdatingJudge_should_be_false_when_judge_isempty() - { - // Arrange - var editHearing = _editHearingRequest; - editHearing.Participants.Add(new EditParticipantRequest - { - ContactEmail = "Judge@court.com", - HearingRoleName = "xyz" - }); - editHearing.OtherInformation = "JudgePhone|loremIpsum"; - var hearing = InitHearing(); - hearing.Participants.Remove(hearing.Participants.Single(x => x.HearingRoleName == "Judge")); - hearing.OtherInformation = "JudgePhone|loremIpsum"; - //Act - var response = _service.IsUpdatingJudge(editHearing, hearing.Map()); - //Assert - response.Should().Be(false); - } - - [Test] - public void IsUpdatingJudge_should_be_false_when_other_info_empty() - { - // Arrange - var editHearing = _editHearingRequest; - editHearing.Participants.Add(new EditParticipantRequest - { - ContactEmail = "Judge@court.com", - HearingRoleName = "xyz" - }); - editHearing.OtherInformation = string.Empty; - var hearing = InitHearing(); - hearing.Participants.Remove(hearing.Participants.Single(x => x.HearingRoleName == "Judge")); - hearing.OtherInformation = string.Empty; - //Act - var response = _service.IsUpdatingJudge(editHearing, hearing.Map()); - //Assert - response.Should().Be(false); - } private HearingDetailsResponse InitHearing() { diff --git a/AdminWebsite/AdminWebsite.sln b/AdminWebsite/AdminWebsite.sln index 51c95969e..9392a7503 100644 --- a/AdminWebsite/AdminWebsite.sln +++ b/AdminWebsite/AdminWebsite.sln @@ -19,8 +19,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution", "Solution", "{36 ..\README.md = ..\README.md EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AdminWebsite.AcceptanceTests", "AdminWebsite.AcceptanceTests\AdminWebsite.AcceptanceTests.csproj", "{B0F83938-CBCF-4059-9B42-8961B4D075A1}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AdminWebsite.Testing.Common", "AdminWebsite.Testing.Common\AdminWebsite.Testing.Common.csproj", "{44DA56ED-92B9-4A84-8B13-7B8B66A7717E}" EndProject Global @@ -41,10 +39,6 @@ Global {F1B76C25-C9A2-4A2E-B946-514C44ECF4CD}.Debug|Any CPU.Build.0 = Debug|Any CPU {F1B76C25-C9A2-4A2E-B946-514C44ECF4CD}.Release|Any CPU.ActiveCfg = Release|Any CPU {F1B76C25-C9A2-4A2E-B946-514C44ECF4CD}.Release|Any CPU.Build.0 = Release|Any CPU - {B0F83938-CBCF-4059-9B42-8961B4D075A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B0F83938-CBCF-4059-9B42-8961B4D075A1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B0F83938-CBCF-4059-9B42-8961B4D075A1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B0F83938-CBCF-4059-9B42-8961B4D075A1}.Release|Any CPU.Build.0 = Release|Any CPU {44DA56ED-92B9-4A84-8B13-7B8B66A7717E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {44DA56ED-92B9-4A84-8B13-7B8B66A7717E}.Debug|Any CPU.Build.0 = Debug|Any CPU {44DA56ED-92B9-4A84-8B13-7B8B66A7717E}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -56,7 +50,6 @@ Global GlobalSection(NestedProjects) = preSolution {938CA652-20EC-413A-8D82-7318DBAAB771} = {B1E4EC16-6651-4638-A259-206EECE90BFE} {F1B76C25-C9A2-4A2E-B946-514C44ECF4CD} = {B1E4EC16-6651-4638-A259-206EECE90BFE} - {B0F83938-CBCF-4059-9B42-8961B4D075A1} = {B1E4EC16-6651-4638-A259-206EECE90BFE} {44DA56ED-92B9-4A84-8B13-7B8B66A7717E} = {B1E4EC16-6651-4638-A259-206EECE90BFE} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution diff --git a/AdminWebsite/AdminWebsite/ClientApp/src/app/booking/summary/summary.component.html b/AdminWebsite/AdminWebsite/ClientApp/src/app/booking/summary/summary.component.html index 68399ecba..4497c0a22 100644 --- a/AdminWebsite/AdminWebsite/ClientApp/src/app/booking/summary/summary.component.html +++ b/AdminWebsite/AdminWebsite/ClientApp/src/app/booking/summary/summary.component.html @@ -153,7 +153,8 @@

- + +
{ const existingRequest = initBadHearingRequest(); videoHearingsServiceSpy.getCurrentRequest.and.returnValue(existingRequest); videoHearingsServiceSpy.getHearingTypes.and.returnValue(of(MockValues.HearingTypesList)); - videoHearingsServiceSpy.saveHearing.and.throwError('Fake error'); + + const validationProblem = new ValidationProblemDetails({ + errors: { + FirstName: ['First name is required'], + LastName: ['Last Name is required'], + ContactEmail: ['Contact Email is required'] + }, + type: 'https://tools.ietf.org/html/rfc7231#section-6.5.1', + title: 'One or more validation errors occurred.', + status: 400 + }); + + videoHearingsServiceSpy.saveHearing.and.throwError( + new BookHearingException('Bad Request', 400, 'One or more validation errors occurred.', null, validationProblem) + ); TestBed.configureTestingModule({ providers: [ diff --git a/AdminWebsite/AdminWebsite/ClientApp/src/app/booking/summary/summary.component.ts b/AdminWebsite/AdminWebsite/ClientApp/src/app/booking/summary/summary.component.ts index 2fc4bea99..f5837ff57 100644 --- a/AdminWebsite/AdminWebsite/ClientApp/src/app/booking/summary/summary.component.ts +++ b/AdminWebsite/AdminWebsite/ClientApp/src/app/booking/summary/summary.component.ts @@ -10,7 +10,13 @@ import { FormatShortDuration } from '../../common/formatters/format-short-durati import { HearingModel } from '../../common/model/hearing.model'; import { RemovePopupComponent } from '../../popups/remove-popup/remove-popup.component'; import { BookingService } from '../../services/booking.service'; -import { BookHearingException, BookingStatus, HearingDetailsResponse, MultiHearingRequest } from '../../services/clients/api-client'; +import { + BookHearingException, + BookingStatus, + HearingDetailsResponse, + MultiHearingRequest, + ValidationProblemDetails +} from '../../services/clients/api-client'; import { Logger } from '../../services/logger'; import { RecordingGuardService } from '../../services/recording-guard.service'; import { VideoHearingsService } from '../../services/video-hearings.service'; @@ -67,6 +73,7 @@ export class SummaryComponent implements OnInit, OnDestroy { @ViewChild(RemoveInterpreterPopupComponent) removeInterpreterPopupComponent: RemoveInterpreterPopupComponent; judgeAssigned: boolean; ejudFeatureFlag = false; + saveFailedMessages: string[]; constructor( private hearingService: VideoHearingsService, @@ -346,6 +353,7 @@ export class SummaryComponent implements OnInit, OnDestroy { } updateHearing() { + this.saveFailedMessages = null; this.$subscriptions.push( this.hearingService.updateHearing(this.hearing).subscribe({ next: (hearingDetailsResponse: HearingDetailsResponse) => { @@ -375,12 +383,25 @@ export class SummaryComponent implements OnInit, OnDestroy { } private setError(error: BookHearingException | Error) { + if (BookHearingException.isBookHearingException(error) && error.result instanceof ValidationProblemDetails) { + this.handleValidationProblem(error.result); + } this.showWaitSaving = false; this.showErrorSaving = true; } + private handleValidationProblem(validationErrors: ValidationProblemDetails) { + this.saveFailedMessages = []; + Object.keys(validationErrors.errors).forEach(key => { + const messages = validationErrors.errors[key]; + this.saveFailedMessages.push(...messages); + }); + } + cancel(): void { this.showErrorSaving = false; + this.bookingsSaving = false; + this.saveFailedMessages = null; } tryAgain(): void { diff --git a/AdminWebsite/AdminWebsite/ClientApp/src/app/manage-team/justice-user-form/justice-user-form.component.spec.ts b/AdminWebsite/AdminWebsite/ClientApp/src/app/manage-team/justice-user-form/justice-user-form.component.spec.ts index d9fe61d53..543930a0b 100644 --- a/AdminWebsite/AdminWebsite/ClientApp/src/app/manage-team/justice-user-form/justice-user-form.component.spec.ts +++ b/AdminWebsite/AdminWebsite/ClientApp/src/app/manage-team/justice-user-form/justice-user-form.component.spec.ts @@ -201,7 +201,9 @@ describe('JusticeUserFormComponent', () => { }); justiceUsersServiceSpy.addNewJusticeUser.and.returnValue( - throwError(new BookHearingException('Bad Request', 400, 'One or more validation errors occurred.', null, validationProblem)) + throwError( + () => new BookHearingException('Bad Request', 400, 'One or more validation errors occurred.', null, validationProblem) + ) ); // act diff --git a/AdminWebsite/AdminWebsite/ClientApp/src/app/popups/save-failed-popup/save-failed-popup.component.html b/AdminWebsite/AdminWebsite/ClientApp/src/app/popups/save-failed-popup/save-failed-popup.component.html index a4ecf2953..5fce4c75b 100644 --- a/AdminWebsite/AdminWebsite/ClientApp/src/app/popups/save-failed-popup/save-failed-popup.component.html +++ b/AdminWebsite/AdminWebsite/ClientApp/src/app/popups/save-failed-popup/save-failed-popup.component.html @@ -1,6 +1,7 @@

Your booking could not be saved. Please try again.

+

{{ message }}

diff --git a/AdminWebsite/AdminWebsite/ClientApp/src/app/popups/save-failed-popup/save-failed-popup.component.ts b/AdminWebsite/AdminWebsite/ClientApp/src/app/popups/save-failed-popup/save-failed-popup.component.ts index f15004be4..a3a5370fe 100644 --- a/AdminWebsite/AdminWebsite/ClientApp/src/app/popups/save-failed-popup/save-failed-popup.component.ts +++ b/AdminWebsite/AdminWebsite/ClientApp/src/app/popups/save-failed-popup/save-failed-popup.component.ts @@ -1,4 +1,4 @@ -import { Component, EventEmitter, OnInit, Output } from '@angular/core'; +import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; @Component({ selector: 'app-save-failed-popup', @@ -8,7 +8,8 @@ export class SaveFailedPopupComponent implements OnInit { @Output() tryAgain: EventEmitter = new EventEmitter(); @Output() cancel: EventEmitter = new EventEmitter(); - constructor() {} + @Input() errorMessages: string[]; + ngOnInit() {} trySaveAgain(): void { diff --git a/AdminWebsite/AdminWebsite/ClientApp/src/app/services/clients/api-client.ts b/AdminWebsite/AdminWebsite/ClientApp/src/app/services/clients/api-client.ts index 4234042a9..b4847ee65 100644 --- a/AdminWebsite/AdminWebsite/ClientApp/src/app/services/clients/api-client.ts +++ b/AdminWebsite/AdminWebsite/ClientApp/src/app/services/clients/api-client.ts @@ -778,184 +778,6 @@ export class BHClient extends ApiClientBase { return _observableOf(null as any); } - /** - * Check Service Health - * @return Success - */ - checkServiceHealth(): Observable { - let url_ = this.baseUrl + '/HealthCheck/health'; - url_ = url_.replace(/[?&]$/, ''); - - let options_: any = { - observe: 'response', - responseType: 'blob', - headers: new HttpHeaders({ - Accept: 'application/json' - }) - }; - - return _observableFrom(this.transformOptions(options_)) - .pipe( - _observableMergeMap(transformedOptions_ => { - return this.http.request('get', url_, transformedOptions_); - }) - ) - .pipe( - _observableMergeMap((response_: any) => { - return this.processCheckServiceHealth(response_); - }) - ) - .pipe( - _observableCatch((response_: any) => { - if (response_ instanceof HttpResponseBase) { - try { - return this.processCheckServiceHealth(response_ as any); - } catch (e) { - return _observableThrow(e) as any as Observable; - } - } else return _observableThrow(response_) as any as Observable; - }) - ); - } - - protected processCheckServiceHealth(response: HttpResponseBase): Observable { - const status = response.status; - const responseBlob = - response instanceof HttpResponse - ? response.body - : (response as any).error instanceof Blob - ? (response as any).error - : undefined; - - let _headers: any = {}; - if (response.headers) { - for (let key of response.headers.keys()) { - _headers[key] = response.headers.get(key); - } - } - if (status === 500) { - return blobToText(responseBlob).pipe( - _observableMergeMap((_responseText: string) => { - let result500: any = null; - let resultData500 = _responseText === '' ? null : JSON.parse(_responseText, this.jsonParseReviver); - result500 = HealthCheckResponse.fromJS(resultData500); - return throwException('Server Error', status, _responseText, _headers, result500); - }) - ); - } else if (status === 200) { - return blobToText(responseBlob).pipe( - _observableMergeMap((_responseText: string) => { - let result200: any = null; - let resultData200 = _responseText === '' ? null : JSON.parse(_responseText, this.jsonParseReviver); - result200 = HealthCheckResponse.fromJS(resultData200); - return _observableOf(result200); - }) - ); - } else if (status === 401) { - return blobToText(responseBlob).pipe( - _observableMergeMap((_responseText: string) => { - return throwException('Unauthorized', status, _responseText, _headers); - }) - ); - } else if (status !== 200 && status !== 204) { - return blobToText(responseBlob).pipe( - _observableMergeMap((_responseText: string) => { - return throwException('An unexpected server error occurred.', status, _responseText, _headers); - }) - ); - } - return _observableOf(null as any); - } - - /** - * Check Service Health - * @return Success - */ - checkServiceHealth2(): Observable { - let url_ = this.baseUrl + '/health/liveness'; - url_ = url_.replace(/[?&]$/, ''); - - let options_: any = { - observe: 'response', - responseType: 'blob', - headers: new HttpHeaders({ - Accept: 'application/json' - }) - }; - - return _observableFrom(this.transformOptions(options_)) - .pipe( - _observableMergeMap(transformedOptions_ => { - return this.http.request('get', url_, transformedOptions_); - }) - ) - .pipe( - _observableMergeMap((response_: any) => { - return this.processCheckServiceHealth2(response_); - }) - ) - .pipe( - _observableCatch((response_: any) => { - if (response_ instanceof HttpResponseBase) { - try { - return this.processCheckServiceHealth2(response_ as any); - } catch (e) { - return _observableThrow(e) as any as Observable; - } - } else return _observableThrow(response_) as any as Observable; - }) - ); - } - - protected processCheckServiceHealth2(response: HttpResponseBase): Observable { - const status = response.status; - const responseBlob = - response instanceof HttpResponse - ? response.body - : (response as any).error instanceof Blob - ? (response as any).error - : undefined; - - let _headers: any = {}; - if (response.headers) { - for (let key of response.headers.keys()) { - _headers[key] = response.headers.get(key); - } - } - if (status === 500) { - return blobToText(responseBlob).pipe( - _observableMergeMap((_responseText: string) => { - let result500: any = null; - let resultData500 = _responseText === '' ? null : JSON.parse(_responseText, this.jsonParseReviver); - result500 = HealthCheckResponse.fromJS(resultData500); - return throwException('Server Error', status, _responseText, _headers, result500); - }) - ); - } else if (status === 200) { - return blobToText(responseBlob).pipe( - _observableMergeMap((_responseText: string) => { - let result200: any = null; - let resultData200 = _responseText === '' ? null : JSON.parse(_responseText, this.jsonParseReviver); - result200 = HealthCheckResponse.fromJS(resultData200); - return _observableOf(result200); - }) - ); - } else if (status === 401) { - return blobToText(responseBlob).pipe( - _observableMergeMap((_responseText: string) => { - return throwException('Unauthorized', status, _responseText, _headers); - }) - ); - } else if (status !== 200 && status !== 204) { - return blobToText(responseBlob).pipe( - _observableMergeMap((_responseText: string) => { - return throwException('An unexpected server error occurred.', status, _responseText, _headers); - }) - ); - } - return _observableOf(null as any); - } - /** * @return Success */ @@ -1454,7 +1276,7 @@ export class BHClient extends ApiClientBase { _observableMergeMap((_responseText: string) => { let result400: any = null; let resultData400 = _responseText === '' ? null : JSON.parse(_responseText, this.jsonParseReviver); - result400 = ProblemDetails.fromJS(resultData400); + result400 = ValidationProblemDetails.fromJS(resultData400); return throwException('Bad Request', status, _responseText, _headers, result400); }) ); @@ -7265,45 +7087,6 @@ export interface IUserProfileResponse { is_case_administrator?: boolean; } -export class ApplicationVersion implements IApplicationVersion { - file_version?: string | undefined; - information_version?: string | undefined; - - constructor(data?: IApplicationVersion) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.file_version = _data['file_version']; - this.information_version = _data['information_version']; - } - } - - static fromJS(data: any): ApplicationVersion { - data = typeof data === 'object' ? data : {}; - let result = new ApplicationVersion(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data['file_version'] = this.file_version; - data['information_version'] = this.information_version; - return data; - } -} - -export interface IApplicationVersion { - file_version?: string | undefined; - information_version?: string | undefined; -} - export class CaseAndHearingRolesResponse implements ICaseAndHearingRolesResponse { name?: string | undefined; hearing_roles?: HearingRole[] | undefined; @@ -7821,112 +7604,6 @@ export interface IEditTelephoneParticipantRequest { linked_participants?: LinkedParticipant[] | undefined; } -export class HealthCheck implements IHealthCheck { - successful?: boolean; - error_message?: string | undefined; - data?: { [key: string]: any } | undefined; - - constructor(data?: IHealthCheck) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.successful = _data['successful']; - this.error_message = _data['error_message']; - if (_data['data']) { - this.data = {} as any; - for (let key in _data['data']) { - if (_data['data'].hasOwnProperty(key)) (this.data)![key] = _data['data'][key]; - } - } - } - } - - static fromJS(data: any): HealthCheck { - data = typeof data === 'object' ? data : {}; - let result = new HealthCheck(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data['successful'] = this.successful; - data['error_message'] = this.error_message; - if (this.data) { - data['data'] = {}; - for (let key in this.data) { - if (this.data.hasOwnProperty(key)) (data['data'])[key] = (this.data)[key]; - } - } - return data; - } -} - -export interface IHealthCheck { - successful?: boolean; - error_message?: string | undefined; - data?: { [key: string]: any } | undefined; -} - -export class HealthCheckResponse implements IHealthCheckResponse { - bookings_api_health?: HealthCheck; - user_api_health?: HealthCheck; - video_api_health?: HealthCheck; - notification_api_health?: HealthCheck; - app_version?: ApplicationVersion; - - constructor(data?: IHealthCheckResponse) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.bookings_api_health = _data['bookings_api_health'] ? HealthCheck.fromJS(_data['bookings_api_health']) : undefined; - this.user_api_health = _data['user_api_health'] ? HealthCheck.fromJS(_data['user_api_health']) : undefined; - this.video_api_health = _data['video_api_health'] ? HealthCheck.fromJS(_data['video_api_health']) : undefined; - this.notification_api_health = _data['notification_api_health'] - ? HealthCheck.fromJS(_data['notification_api_health']) - : undefined; - this.app_version = _data['app_version'] ? ApplicationVersion.fromJS(_data['app_version']) : undefined; - } - } - - static fromJS(data: any): HealthCheckResponse { - data = typeof data === 'object' ? data : {}; - let result = new HealthCheckResponse(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data['bookings_api_health'] = this.bookings_api_health ? this.bookings_api_health.toJSON() : undefined; - data['user_api_health'] = this.user_api_health ? this.user_api_health.toJSON() : undefined; - data['video_api_health'] = this.video_api_health ? this.video_api_health.toJSON() : undefined; - data['notification_api_health'] = this.notification_api_health ? this.notification_api_health.toJSON() : undefined; - data['app_version'] = this.app_version ? this.app_version.toJSON() : undefined; - return data; - } -} - -export interface IHealthCheckResponse { - bookings_api_health?: HealthCheck; - user_api_health?: HealthCheck; - video_api_health?: HealthCheck; - notification_api_health?: HealthCheck; - app_version?: ApplicationVersion; -} - export class HearingAudioRecordingResponse implements IHearingAudioRecordingResponse { audio_file_links?: string[] | undefined; diff --git a/AdminWebsite/AdminWebsite/ClientApp/src/assets/images/favicons/manifest.json b/AdminWebsite/AdminWebsite/ClientApp/src/assets/images/favicons/manifest.json index 3b557aab8..987686db1 100644 --- a/AdminWebsite/AdminWebsite/ClientApp/src/assets/images/favicons/manifest.json +++ b/AdminWebsite/AdminWebsite/ClientApp/src/assets/images/favicons/manifest.json @@ -2,37 +2,37 @@ "name": "App", "icons": [ { - "src": "/android-icon-36x36.png", + "src": "/assets/images/favicons/android-icon-36x36.png", "sizes": "36x36", "type": "image/png", "density": "0.75" }, { - "src": "/android-icon-48x48.png", + "src": "/assets/images/favicons/android-icon-48x48.png", "sizes": "48x48", "type": "image/png", "density": "1.0" }, { - "src": "/android-icon-72x72.png", + "src": "/assets/images/favicons/android-icon-72x72.png", "sizes": "72x72", "type": "image/png", "density": "1.5" }, { - "src": "/android-icon-96x96.png", + "src": "/assets/images/favicons/android-icon-96x96.png", "sizes": "96x96", "type": "image/png", "density": "2.0" }, { - "src": "/android-icon-144x144.png", + "src": "/assets/images/favicons/android-icon-144x144.png", "sizes": "144x144", "type": "image/png", "density": "3.0" }, { - "src": "/android-icon-192x192.png", + "src": "/assets/images/favicons/android-icon-192x192.png", "sizes": "192x192", "type": "image/png", "density": "4.0" diff --git a/AdminWebsite/AdminWebsite/Controllers/HearingsController.cs b/AdminWebsite/AdminWebsite/Controllers/HearingsController.cs index c74d3c276..cd5dda99e 100644 --- a/AdminWebsite/AdminWebsite/Controllers/HearingsController.cs +++ b/AdminWebsite/AdminWebsite/Controllers/HearingsController.cs @@ -25,7 +25,6 @@ using VideoApi.Client; using HearingDetailsResponse = AdminWebsite.Contracts.Responses.HearingDetailsResponse; using LinkedParticipantRequest = AdminWebsite.Contracts.Requests.LinkedParticipantRequest; -using LinkedParticipantType = BookingsApi.Contract.V1.Enums.LinkedParticipantType; using ParticipantRequest = BookingsApi.Contract.V1.Requests.ParticipantRequest; namespace AdminWebsite.Controllers @@ -45,7 +44,6 @@ public class HearingsController : ControllerBase private readonly IFeatureToggles _featureToggles; private readonly ILogger _logger; private readonly IUserIdentity _userIdentity; - private const int StartingSoonMinutesThreshold = 30; /// /// Instantiates the controller @@ -208,7 +206,8 @@ public async Task CloneHearing(Guid hearingId, MultiHearingReques var groupedHearings = await _bookingsApiClient.GetHearingsByGroupIdAsync(hearingId); - var conferenceStatusToGet = groupedHearings.Where(x => x.Participants?.Any(x => x.HearingRoleName == RoleNames.Judge) ?? false); + var conferenceStatusToGet = groupedHearings.Where(x => x.Participants? + .Exists(x => x.HearingRoleName == RoleNames.Judge) ?? false); var tasks = conferenceStatusToGet.Select(x => GetHearingConferenceStatus(x.Id)).ToList(); await Task.WhenAll(tasks); @@ -249,7 +248,7 @@ private static List GetDatesForClonedHearings(MultiHearingRequest hear [SwaggerOperation(OperationId = "EditHearing")] [ProducesResponseType(typeof(HearingDetailsResponse), (int)HttpStatusCode.OK)] [ProducesResponseType((int)HttpStatusCode.NotFound)] - [ProducesResponseType((int)HttpStatusCode.BadRequest)] + [ProducesResponseType(typeof(ValidationProblemDetails),(int)HttpStatusCode.BadRequest)] [ProducesResponseType((int)HttpStatusCode.NoContent)] [HearingInputSanitizer] public async Task> EditHearing(Guid hearingId, [FromBody] EditHearingRequest request) @@ -258,7 +257,7 @@ public async Task> EditHearing(Guid hearing { _logger.LogWarning("No hearing id found to edit"); ModelState.AddModelError(nameof(hearingId), $"Please provide a valid {nameof(hearingId)}"); - return BadRequest(ModelState); + return ValidationProblem(ModelState); } _logger.LogDebug("Attempting to edit hearing {Hearing}", hearingId); @@ -267,7 +266,7 @@ public async Task> EditHearing(Guid hearing { _logger.LogWarning("Failed edit hearing validation"); ModelState.AddFluentValidationErrors(result.Errors); - return BadRequest(ModelState); + return ValidationProblem(ModelState); } HearingDetailsResponse originalHearing; @@ -284,26 +283,6 @@ public async Task> EditHearing(Guid hearing } try { - if (IsHearingStartingSoon(originalHearing) && originalHearing.Status == BookingStatus.Created && - !_hearingsService.IsAddingParticipantOnly(request, originalHearing) && - !_hearingsService.IsUpdatingJudge(request, originalHearing) && - !_hearingsService.HasEndpointsBeenChanged(request, originalHearing)) - { - var errorMessage = - $"You can't edit a confirmed hearing [{hearingId}] within {StartingSoonMinutesThreshold} minutes of it starting"; - _logger.LogWarning(errorMessage); - ModelState.AddModelError(nameof(hearingId), errorMessage); - return BadRequest(ModelState); - } - - var judgeExistsInRequest = request?.Participants?.Any(p => p.HearingRoleName == RoleNames.Judge) ?? false; - if (originalHearing.Status == BookingStatus.Created && !judgeExistsInRequest) - { - const string errorMessage = "You can't edit a confirmed hearing if the update removes the judge"; - _logger.LogWarning(errorMessage); - ModelState.AddModelError(nameof(hearingId), errorMessage); - return BadRequest(ModelState); - } var updatedHearing = await MapHearingToUpdate(hearingId); await UpdateHearing(request, hearingId, updatedHearing); @@ -316,7 +295,13 @@ public async Task> EditHearing(Guid hearing { _logger.LogError(e, "Failed to edit hearing {Hearing}. Status Code {StatusCode} - Message {Message}", hearingId, e.StatusCode, e.Response); - if (e.StatusCode == (int)HttpStatusCode.BadRequest) return BadRequest(e.Response); + + if (e.StatusCode is (int)HttpStatusCode.BadRequest) + { + var typedException = e as BookingsApiException; + return ValidationProblem(typedException!.Result); + } + throw; } } @@ -408,7 +393,7 @@ private async Task UpdateParticipantsV2(Guid hearingId, EditHearingRequest reque private static List GetRemovedParticipantIds(EditHearingRequest request, HearingDetailsResponse originalHearing) { - return originalHearing.Participants.Where(p => request.Participants.All(rp => rp.Id != p.Id)) + return originalHearing.Participants.Where(p => request.Participants.TrueForAll(rp => rp.Id != p.Id)) .Select(x => x.Id).ToList(); } @@ -429,11 +414,11 @@ private static List ExtractLinkedParticipants( for (int i = 0; i < participantsWithLinks.Count; i++) { var participantWithLinks = participantsWithLinks[i]; - var linkedParticipantRequest = new LinkedParticipantRequest() + var linkedParticipantRequest = new LinkedParticipantRequest { LinkedParticipantContactEmail = participantWithLinks.LinkedParticipants[0].LinkedParticipantContactEmail, ParticipantContactEmail = participantWithLinks.LinkedParticipants[0].ParticipantContactEmail ?? participantWithLinks.ContactEmail, - Type = (Contracts.Enums.LinkedParticipantType) participantWithLinks.LinkedParticipants[0].Type + Type = participantWithLinks.LinkedParticipants[0].Type }; // If the participant link is not new and already existed, then the ParticipantContactEmail will be null. We find it here and populate it. @@ -469,7 +454,7 @@ private static void ExtractExistingParticipants( EditParticipantRequest participant, List existingParticipants) { - var existingParticipant = originalHearing.Participants.FirstOrDefault(p => p.Id.Equals(participant.Id)); + var existingParticipant = originalHearing.Participants.Find(p => p.Id.Equals(participant.Id)); if (existingParticipant == null || string.IsNullOrEmpty(existingParticipant.UserRoleName)) return; @@ -482,7 +467,7 @@ private static void ExtractExistingParticipantsV2( EditParticipantRequest participant, List existingParticipants) { - var existingParticipant = originalHearing.Participants.FirstOrDefault(p => p.Id.Equals(participant.Id)); + var existingParticipant = originalHearing.Participants.Find(p => p.Id.Equals(participant.Id)); if (existingParticipant == null || string.IsNullOrEmpty(existingParticipant.UserRoleName)) return; @@ -490,12 +475,6 @@ private static void ExtractExistingParticipantsV2( existingParticipants.Add(updateParticipantRequest); } - private static bool IsHearingStartingSoon(HearingDetailsResponse originalHearing) - { - var timeToCheckHearingAgainst = DateTime.UtcNow.AddMinutes(StartingSoonMinutesThreshold); - return originalHearing.ScheduledDateTime < timeToCheckHearingAgainst; - } - /// /// Gets bookings hearing by Id. /// @@ -632,7 +611,7 @@ public async Task UpdateBookingStatus(Guid hearingId, UpdateBooki try { var hearing = await _bookingsApiClient.GetHearingDetailsByIdAsync(hearingId); - var judgeExists = hearing?.Participants?.Any(p => p.HearingRoleName == RoleNames.Judge) ?? false; + var judgeExists = hearing?.Participants?.Exists(p => p.HearingRoleName == RoleNames.Judge) ?? false; if (!judgeExists && updateBookingStatusRequest.Status == BookingsApi.Contract.V1.Requests.Enums.UpdateBookingStatus.Created) return BadRequest("This hearing has no judge"); diff --git a/AdminWebsite/AdminWebsite/Services/HearingsService.cs b/AdminWebsite/AdminWebsite/Services/HearingsService.cs index f7da8d4de..eee57384c 100644 --- a/AdminWebsite/AdminWebsite/Services/HearingsService.cs +++ b/AdminWebsite/AdminWebsite/Services/HearingsService.cs @@ -1,5 +1,4 @@ using AdminWebsite.Contracts.Enums; -using AdminWebsite.Extensions; using AdminWebsite.Mappers; using AdminWebsite.Models; using BookingsApi.Client; @@ -14,7 +13,6 @@ using BookingsApi.Contract.V1.Configuration; using BookingsApi.Contract.V1.Requests; using BookingsApi.Contract.V2.Requests; -using VideoApi.Contract.Consts; namespace AdminWebsite.Services { @@ -26,10 +24,7 @@ public interface IHearingsService Task ProcessNewParticipant(Guid hearingId, EditParticipantRequest participant, List removedParticipantIds, HearingDetailsResponse hearing); Task ProcessNewParticipant(Guid hearingId, EditParticipantRequest participant, IParticipantRequest newParticipant, List removedParticipantIds, HearingDetailsResponse hearing); Task ProcessEndpoints(Guid hearingId, EditHearingRequest request, HearingDetailsResponse hearing, List newParticipantList); - bool IsAddingParticipantOnly(EditHearingRequest editHearingRequest, HearingDetailsResponse hearingDetailsResponse); - bool IsUpdatingJudge(EditHearingRequest editHearingRequest, HearingDetailsResponse hearingDetailsResponse); Task UpdateFailedBookingStatus(Guid hearingId); - bool HasEndpointsBeenChanged(EditHearingRequest editHearingRequest, HearingDetailsResponse hearingDetailsResponse); } public class HearingsService : IHearingsService @@ -55,53 +50,6 @@ public void AssignEndpointDefenceAdvocates(Listx.HearingRoleName != HearingRoleName.StaffMember) - .Select(EditParticipantRequestMapper.MapFrom) - .ToList(); - var requestParticipants = editHearingRequest.Participants.FindAll(x=>x.HearingRoleName != HearingRoleName.StaffMember); - var hearingCase = hearingDetailsResponse.Cases[0]; - - var addedParticipant = GetAddedParticipant(originalParticipants, requestParticipants); - - return addedParticipant.Any() && - editHearingRequest.HearingRoomName == hearingDetailsResponse.HearingRoomName && - editHearingRequest.HearingVenueName == hearingDetailsResponse.HearingVenueName && - editHearingRequest.OtherInformation == hearingDetailsResponse.OtherInformation && - editHearingRequest.ScheduledDateTime == hearingDetailsResponse.ScheduledDateTime && - editHearingRequest.ScheduledDuration == hearingDetailsResponse.ScheduledDuration && - hearingCase.Number == editHearingRequest.Case.Number; - } - - public bool IsUpdatingJudge(EditHearingRequest editHearingRequest, - HearingDetailsResponse hearingDetailsResponse) - { - var existingJudge = - hearingDetailsResponse.Participants.Find( - x => x.HearingRoleName == HearingRoleName.Judge); - var newJudge = - editHearingRequest.Participants.Find(x => x.HearingRoleName == HearingRoleName.Judge); - var existingJudgeOtherInformation = HearingDetailsResponseExtensions.GetJudgeOtherInformationString(hearingDetailsResponse.OtherInformation); - var newJudgeOtherInformation = HearingDetailsResponseExtensions.GetJudgeOtherInformationString(editHearingRequest.OtherInformation); - - return (newJudge?.ContactEmail != existingJudge?.ContactEmail) || - newJudgeOtherInformation != existingJudgeOtherInformation; - } - - public bool HasEndpointsBeenChanged(EditHearingRequest editHearingRequest, HearingDetailsResponse hearingDetailsResponse) - { - var originalEndpoints = hearingDetailsResponse.Endpoints == null - ? new List() - : hearingDetailsResponse.Endpoints.Select(EditEndpointRequestMapper.MapFrom).ToList(); - var requestEndpoints = editHearingRequest.Endpoints ?? new List(); - - var ogEndpoints = originalEndpoints.Except(requestEndpoints, EditEndpointRequest.EditEndpointRequestComparer).ToList(); - var newEndpoints = requestEndpoints.Except(originalEndpoints, EditEndpointRequest.EditEndpointRequestComparer).ToList(); - - return ogEndpoints.Count != 0 || newEndpoints.Count != 0; - } public List GetAddedParticipant(List originalParticipants, List requestParticipants) {