public static async Task Can_Query_BrowserStack_Automate_Api() { // Arrange BrowserStackAutomateClient target = CreateAuthenticatedClient(); int? limit; string status; // Act ICollection <Browser> browsers = await target.GetBrowsersAsync(); // Assert browsers.Should().NotBeNullOrEmpty(); browsers.Should().NotContainNulls(); browsers.All((p) => !string.IsNullOrEmpty(p.BrowserVersion)); browsers.All((p) => !string.IsNullOrEmpty(p.Device)); foreach (var browser in browsers) { browser.Should().NotBeNull(); browser.BrowserName.Should().NotBeNullOrEmpty(); browser.BrowserName.Should().NotBeNullOrEmpty(); browser.OSName.Should().NotBeNullOrEmpty(); browser.OSVersion.Should().NotBeNullOrEmpty(); } // Act ICollection <Build> builds = await target.GetBuildsAsync(); // Assert builds.Should().NotBeNull(); builds.Should().NotContainNulls(); foreach (var build in builds) { build.Should().NotBeNull(); build.Duration.Should().BeGreaterOrEqualTo(1); build.HashedId.Should().NotBeNullOrEmpty(); build.Name.Should().NotBeNullOrEmpty(); build.Status.Should().NotBeNullOrEmpty(); } // Arrange foreach (var build in builds) { // Act ICollection <Session> sessions = await target.GetSessionsAsync(build.HashedId); // Assert sessions.Should().NotBeNull(); sessions.Should().NotContainNulls(); sessions.All((p) => !string.IsNullOrEmpty(p.BrowserName)); sessions.All((p) => !string.IsNullOrEmpty(p.BrowserVersion)); // Limit the sessions for performance foreach (var session in sessions.Take(1)) { AssertSession(session, build.Name); // Act var sessionDetail = await target.GetSessionAsync(session.HashedId); // Assert sessionDetail.Should().NotBeNull(); sessionDetail.BrowserUri.Should().NotBeNull(); sessionDetail.PublicUri.Should().NotBeNull(); sessionDetail.VideoUri.Should().NotBeNull(); sessionDetail.BrowserName.Should().Be(session.BrowserName); sessionDetail.BrowserVersion.Should().Be(session.BrowserVersion); sessionDetail.BuildName.Should().Be(session.BuildName); sessionDetail.Duration.Should().Be(session.Duration); sessionDetail.HashedId.Should().Be(session.HashedId); sessionDetail.LogsUri.Should().Be(session.LogsUri); sessionDetail.Name.Should().Be(session.Name); sessionDetail.OSName.Should().Be(session.OSName); sessionDetail.OSVersion.Should().Be(session.OSVersion); sessionDetail.ProjectName.Should().Be(session.ProjectName); sessionDetail.Reason.Should().Be(session.Reason); sessionDetail.Status.Should().Be(session.Status); // Act Session updatedSession = await target.SetSessionCompletedAsync(session.HashedId, string.Empty); // Assert updatedSession.Should().NotBeNull(); updatedSession.HashedId.Should().Be(session.HashedId); } // Arrange limit = 5; status = null; // Act sessions = await target.GetSessionsAsync(build.HashedId, limit, status); // Assert sessions.Should().NotBeNull(); sessions.Should().NotContainNulls(); sessions.Count.Should().BeLessOrEqualTo(limit.Value); foreach (var session in sessions) { AssertSession(session, build.Name); } // Arrange limit = null; status = SessionStatuses.Done; // Act sessions = await target.GetSessionsAsync(build.HashedId, limit, status); // Assert sessions.Should().NotBeNull(); sessions.Should().NotContainNulls(); foreach (var session in sessions) { AssertSession(session, build.Name); } // Arrange limit = 5; status = SessionStatuses.Done; // Act sessions = await target.GetSessionsAsync(build.HashedId, limit, status); // Assert sessions.Should().NotBeNull(); sessions.Should().NotContainNulls(); sessions.Count.Should().BeLessOrEqualTo(limit.Value); foreach (var session in sessions) { AssertSession(session, build.Name); // Act (no Assert) await target.GetSessionLogsAsync(build.HashedId, session.HashedId); } } // Arrange limit = 5; status = null; // Act builds = await target.GetBuildsAsync(limit, status); // Assert builds.Should().NotBeNull(); builds.Should().NotContainNulls(); builds.Count.Should().BeLessOrEqualTo(limit.Value); foreach (var build in builds) { AssertBuild(build); } // Arrange limit = null; status = BuildStatuses.Done; // Act builds = await target.GetBuildsAsync(limit, status); // Assert builds.Should().NotBeNull(); builds.Should().NotContainNulls(); foreach (var build in builds) { AssertBuild(build, status); } // Act ICollection <Project> projects = await target.GetProjectsAsync(); // Assert projects.Should().NotBeNullOrEmpty(); projects.Should().NotContainNulls(); DateTime minimumDate = new DateTime(2011, 1, 1, 0, 0, 0); foreach (var project in projects) { project.Should().NotBeNull(); project.GroupId.Should().BeGreaterThan(0); project.Id.Should().BeGreaterThan(0); project.CreatedAt.Should().BeAfter(minimumDate); project.UpdatedAt.Should().BeAfter(minimumDate); project.Name.Should().NotBeNullOrEmpty(); if (project.UserId.HasValue) { project.UserId.Should().BeGreaterThan(0); } } // Arrange foreach (int projectId in projects.Select((p) => p.Id)) { // Act ProjectDetailItem projectItem = await target.GetProjectAsync(projectId); // Assert projectItem.Should().NotBeNull(); projectItem.Project.Should().NotBeNull(); var project = projectItem.Project; project.GroupId.Should().BeGreaterThan(0); project.Id.Should().BeGreaterThan(0); project.CreatedAt.Should().BeAfter(minimumDate); project.UpdatedAt.Should().BeAfter(minimumDate); project.Name.Should().NotBeNullOrEmpty(); project.Builds.Should().NotBeNull(); project.Builds.Should().NotContainNulls(); foreach (var build in project.Builds) { build.Should().NotBeNull(); build.Should().NotBeNull(); build.CreatedAt.Should().BeOnOrAfter(project.CreatedAt); build.Duration.Should().BeGreaterOrEqualTo(1); build.Id.Should().BeGreaterThan(0); build.HashedId.Should().NotBeNullOrEmpty(); build.Name.Should().NotBeNullOrEmpty(); build.Status.Should().NotBeNullOrEmpty(); build.UpdatedAt.Should().BeAfter(project.CreatedAt); build.UpdatedAt.Should().BeAfter(build.CreatedAt); build.GroupId.Should().Be(project.GroupId); build.ProjectId.Should().Be(project.Id); build.UserId.Should().BeGreaterThan(0); } } // Act AutomatePlanStatus plan = await target.GetStatusAsync(); // Assert plan.Should().NotBeNull(); plan.AutomatePlan.Should().NotBeNullOrEmpty(); plan.MaximumAllowedParallelSessions.Should().BeGreaterOrEqualTo(1); plan.MaximumQueuedParallelSessions.Should().BeGreaterOrEqualTo(1); plan.ParallelSessionsRunning.Should().BeGreaterOrEqualTo(0); plan.QueuedParallelSessions.Should().BeGreaterOrEqualTo(0); plan.TeamMaximumAllowedParallelSessions.Should().BeGreaterOrEqualTo(0); }