using ClosedXML.Excel; using FluentAssertions; using Microsoft.Extensions.Logging; using Moq; using NUnit.Framework; using Strata.ContinuousImprovement.Biz.Configuration; using Strata.ContinuousImprovement.Biz.DbContexts; using Strata.ContinuousImprovement.Biz.Filter; using Strata.ContinuousImprovement.Biz.Generics; using Strata.ContinuousImprovement.Biz.Initiatives; using Strata.ContinuousImprovement.Biz.Pagination; using Strata.ContinuousImprovement.Biz.QualityVariation.Opportunities; using Strata.ContinuousImprovement.Biz.QualityVariation.Opportunities.Filters; using Strata.ContinuousImprovement.Biz.Test.Unit.Utilities; using Strata.ContinuousImprovement.JazzEntityFrameworkStub; using Strata.SqlTools.Configuration.Common.AsyncFactory; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace Strata.ContinuousImprovement.Biz.Test.Unit.QualityVariation.Opportunities { [TestFixture, Category("Unit")] public class QVIOpportunityServiceTest { private Mock _qualityVariationItemOpportunityServiceMock; private Mock> _dbContextFactoryMock; private Mock _jazzDbContextMock; private IInitiativeService _initiativeService; private IUpdateFactOpportunitySavingsService _updateFactOpportunitySavingsService; private IConfigurationService _configurationService; private ILogger _logger; private static readonly ResourceFileExtractor _extractor = new ResourceFileExtractor(".Resource."); [SetUp] public void TestSetUp() { _qualityVariationItemOpportunityServiceMock = new Mock(); _dbContextFactoryMock = new Mock>(); _jazzDbContextMock = new Mock(); _initiativeService = Mock.Of(); _updateFactOpportunitySavingsService = Mock.Of(); _configurationService = Mock.Of(); _logger = Mock.Of>(); Mock.Get(_initiativeService) .Setup(s => s.DeleteAsync(It.IsAny(), It.IsAny())) .Returns(Task.FromResult(true)); Mock.Get(_updateFactOpportunitySavingsService) .Setup(s => s.UpdateFactOpportunitySavings(It.IsAny())); Mock.Get(_configurationService) .Setup(s => s.GetConfigurationAsync(It.IsAny(), It.IsAny())) .ReturnsAsync((Guid guid, CancellationToken ct) => new Biz.Configuration.Configuration { ConfigurationGuid = guid }); } [TestCaseSource(nameof(GetFrameworkWithFilterData))] public async Task TestGetPagedAsyncWithFramework(JazzEntityFrameworkFactory jazzEntityFrameworkFactory, QVIFilters filters, CancellationToken cancellationToken) { // arrange var qualityVariationItemOpportunityService = new QVIOpportunityService(jazzEntityFrameworkFactory, null, null, _initiativeService, _updateFactOpportunitySavingsService, _configurationService, _logger); try { // act var taskResult = await qualityVariationItemOpportunityService .GetPagedAsync(new PagingOptions(), filters, cancellationToken); // assert var result = taskResult.Data; if (string.IsNullOrEmpty(jazzEntityFrameworkFactory.TestName)) { result.Should().BeNullOrEmpty(); return; } result.Should() .NotBeNullOrEmpty() .And.AllBeOfType(); if (filters.BreakdownIds.Any()) result.Should() .Contain(vo => filters.BreakdownIds.Contains(vo.BreakdownId.ToString())); if (filters.ExcludeInitiatives) { result.ToList().ForEach(opportunity => opportunity.HasInitiative.Should().Be(false)); } if (!string.IsNullOrEmpty(filters.OpportunitySearch)) result.Should() .Contain(vo => vo.OpportunityKey.Contains(filters.OpportunitySearch)); } catch (AssertionException) { // Intentionally left empty } catch (Exception e) { e.Should().BeOfType(); } } [Test] public async Task TestFirstPage_Sorted_Asc() { // arrange var qualityVariationItemOpportunityService = new QVIOpportunityService(new JazzEntityFrameworkFactory(), null, null, _initiativeService, _updateFactOpportunitySavingsService, _configurationService, _logger); var filters = new QVIFilters() { QualityVariationEventIds = new List(), IdentifiedSavings = 0, BreakdownIds = new List(), ViewVisible = true, ExcludeInitiatives = false, OpportunitySearch = "", ConfigurationGuid = new Guid("e96abe3e-1526-43ca-815e-ee30c5b34345") }; var pagingOptions = new PagingOptions() { SortField = "QVICases", SortOrder = SortOrder.Asc }; // act var taskResult = await qualityVariationItemOpportunityService .GetPagedAsync(new PagingOptions(), filters, CancellationToken.None); // assert taskResult.Data.Should().NotBeNullOrEmpty() .And.AllBeOfType() .And.HaveCountGreaterThan(1); taskResult.Data.First().QVICases .Should().BeLessThan(taskResult.Data.Last().QVICases); } [Test] public async Task TestFirstPage_Sorted_Desc() { // arrange var qualityVariationItemOpportunityService = new QVIOpportunityService(new JazzEntityFrameworkFactory(), null, null, _initiativeService, _updateFactOpportunitySavingsService, _configurationService, _logger); var filters = new QVIFilters() { QualityVariationEventIds = new List(), IdentifiedSavings = 0, BreakdownIds = new List(), ViewVisible = true, ExcludeInitiatives = false, OpportunitySearch = "", ConfigurationGuid = new Guid("e96abe3e-1526-43ca-815e-ee30c5b34345") }; var pagingOptions = new PagingOptions() { SortField = "QVICases", SortOrder = SortOrder.Desc }; // act var taskResult = await qualityVariationItemOpportunityService .GetPagedAsync(pagingOptions, filters, CancellationToken.None); // assert taskResult.Data.Should().NotBeNullOrEmpty() .And.AllBeOfType() .And.HaveCountGreaterThan(1); taskResult.Data.First().QVICases .Should().BeGreaterThan(taskResult.Data.Last().QVICases); } [TestCaseSource(nameof(GetFilterData))] public void TestValidateFilters(QVIFilters filters) { if (filters == null) return; if (filters.QualityVariationEventIds.Any()) filters.QualityVariationEventIds.Should() .AllBeOfType() .And.NotBeNullOrEmpty(); if (filters.BreakdownIds.Any()) filters.BreakdownIds.Should() .AllBeOfType() .And.NotBeNullOrEmpty(); } [Test] public async Task TestGetExcelWorkbook() { // arrange var framework = new JazzEntityFrameworkFactory(); await framework.CreateDbContextAsync(CancellationToken.None); var filters = new QVIFilters() { ConfigurationGuid = framework.Configurations.First().ConfigurationGuid, BreakdownIds = new[] { framework.QVIOpportunities.First().BreakdownId.ToString() }, QualityVariationEventIds = new[] {framework.QVIOpportunities.First().QualityVariationEventId.ToString()}, }; var service = new QVIOpportunityService(framework, null, null, _initiativeService, _updateFactOpportunitySavingsService, _configurationService, _logger); // act var wb = await service.ExportAsync(new SortOptions(), filters, CancellationToken.None); #pragma warning disable S125 // Sections of code should not be commented out //wb.SaveAs(System.IO.Path.Combine(@"C:\Git\continuousimprovement\tests\Strata.ContinuousImprovement.Biz.Test.Unit\Resource", "ExcelFilter.xlsx")); #pragma warning restore S125 // Sections of code should not be commented out // assert wb.Worksheets.Should().HaveCount(1); var ws = wb.Worksheet(1); ws.Should().NotBeNull(); var expected = @"Examples.QualityVariationItemOpportunity.ExcelFilter.xlsx"; using (var expectedStream = _extractor.ReadFileFromResourceToStream(expected)) using (var actualStream = new MemoryStream()) { wb.SaveAs(actualStream); actualStream.Compare(expectedStream, out var message).Should().BeTrue(message); } } [Test] public async Task TestGetExcelWorkbookNullFilter() { // arrange var framework = new JazzEntityFrameworkFactory(); await framework.CreateDbContextAsync(CancellationToken.None); var service = new QVIOpportunityService(framework, null, null, _initiativeService, _updateFactOpportunitySavingsService, _configurationService, _logger); // act var wb = await service.ExportAsync(null, null, CancellationToken.None); #pragma warning disable S125 // Sections of code should not be commented out //wb.SaveAs(System.IO.Path.Combine(@"C:\Git\continuousimprovement\tests\Strata.ContinuousImprovement.Biz.Test.Unit\Resource", "ExcelNullFilter.xlsx")); #pragma warning restore S125 // Sections of code should not be commented out // assert wb.Worksheets.Should().HaveCount(1); var ws = wb.Worksheet(1); ws.Should().NotBeNull(); var expected = @"Examples.QualityVariationItemOpportunity.ExcelNullFilter.xlsx"; using (var expectedStream = _extractor.ReadFileFromResourceToStream(expected)) using (var actualStream = new MemoryStream()) { wb.SaveAs(actualStream); actualStream.Compare(expectedStream, out var message).Should().BeTrue(message); } } [TestCaseSource(typeof(JazzEntityFrameworkFactory), nameof(JazzEntityFrameworkFactory.GetFrameworksWithCancellation))] public async Task TestGetExcelWorkbookWithFramework(JazzEntityFrameworkFactory jazzEntityFrameworkFactory, CancellationToken cancellationToken) { // arrange var variationOpportunityService = new QVIOpportunityService(jazzEntityFrameworkFactory, null, null, _initiativeService, _updateFactOpportunitySavingsService, _configurationService, _logger); var filters = new QVIFilters { IdentifiedSavings = 0, QVICases = 0, BreakdownIds = new List(), QualityVariationEventIds = new List(), ViewVisible = true, ExcludeInitiatives = false, OpportunitySearch = "", ConfigurationGuid = new Guid("e96abe3e-1526-43ca-815e-ee30c5b34345") }; try { // act var taskResult = await variationOpportunityService.ExportAsync(new SortOptions(), filters, cancellationToken); // assert if (string.IsNullOrEmpty(jazzEntityFrameworkFactory.TestName)) { taskResult.Should().BeNull(); } else { taskResult.Should().NotBeNull() .And.BeOfType(); var wb = taskResult; wb.Worksheets.Should().HaveCountGreaterThan(0); var ws = wb.Worksheet("Sheet1"); ws.ColumnCount().Should().BeGreaterThan(0); ws.RowCount().Should().BeGreaterThan(0); } } catch (TypeInitializationException tie) { tie.Should().BeOfType(); } catch (AssertionException ae) { ae.Should().BeOfType(); } catch (ArgumentNullException arg) { arg.Should().BeOfType(); } catch (Exception e) { e.Should().BeOfType(); } } [Test] public async Task TestSetHidden() { // arrange var framework = new JazzEntityFrameworkFactory(); await framework.CreateDbContextAsync(CancellationToken.None); var opportunities = framework.QVIOpportunities; var opportunity = opportunities.First(vo => !vo.IsHidden); var isHidden = opportunity.IsHidden; var service = new QVIOpportunityService(framework, null, null, _initiativeService, _updateFactOpportunitySavingsService, _configurationService, _logger); // act await service.SetHiddenAsync(opportunity.OpportunityGuid, !isHidden, CancellationToken.None); // assert var result = await service.GetById(opportunity.OpportunityGuid, CancellationToken.None); result.IsHidden.Should().Be(!isHidden); } [TestCaseSource(typeof(JazzEntityFrameworkFactory), nameof(JazzEntityFrameworkFactory.GetFrameworksWithCancellation))] public async Task TestGetFilterOptionsAsync(JazzEntityFrameworkFactory jazzEntityFrameworkFactory, CancellationToken cancellationToken) { // arrange var qualityVariationItemOpportunityService = new QVIOpportunityService(jazzEntityFrameworkFactory, null, null, _initiativeService, _updateFactOpportunitySavingsService, _configurationService, _logger); try { // act var taskResult = await qualityVariationItemOpportunityService .GetFilterOptionsAsync(new Guid("e96abe3e-1526-43ca-815e-ee30c5b34345"), cancellationToken); // assert if (string.IsNullOrEmpty(jazzEntityFrameworkFactory.TestName)) { taskResult.Should().BeNull(); return; } taskResult.Should() .BeOfType() .And.NotBeNull(); taskResult.Breakdowns.Should().AllBeOfType().And.NotBeNullOrEmpty() .And.NotContain(cd => string.IsNullOrEmpty(cd.Id)) .And.NotContain(cd => string.IsNullOrEmpty(cd.Text)); } catch (NotImplementedException nie) { nie.Should().BeOfType(); } catch (Exception e) { e.Should().BeOfType(); } } [TestCaseSource(typeof(JazzEntityFrameworkFactory), nameof(JazzEntityFrameworkFactory.GetFrameworksWithCancellation))] public async Task TestSetHiddenAsync(JazzEntityFrameworkFactory jazzEntityFrameworkFactory, CancellationToken cancellationToken) { // arrange var qualityVariationItemOpportunityService = new QVIOpportunityService(jazzEntityFrameworkFactory, null, null, _initiativeService, _updateFactOpportunitySavingsService, _configurationService, _logger); try { var opportunities = qualityVariationItemOpportunityService.GetAllAsync(cancellationToken).Result; var opportunity = opportunities.FirstOrDefault(o => o.IsHidden); if (opportunity == null) return; var isHidden = opportunity.IsHidden; //act await qualityVariationItemOpportunityService.SetHiddenAsync(opportunity.OpportunityGuid, !isHidden, cancellationToken); if (string.IsNullOrEmpty(jazzEntityFrameworkFactory.TestName)) return; var result = qualityVariationItemOpportunityService.GetById(opportunity.OpportunityGuid, cancellationToken).Result; result.IsHidden.Should().Be(!isHidden); } catch (Exception e) { switch (e.GetType().Name) { case "AggregateException": case "OperationCanceledException": return; } e.Should().NotBeOfType(); } } [TestCaseSource(typeof(JazzEntityFrameworkFactory), nameof(JazzEntityFrameworkFactory.GetFrameworksWithCancellation))] public async Task TestSetHiddenAsync_NoOpportunity(JazzEntityFrameworkFactory jazzEntityFrameworkFactory, CancellationToken cancellationToken) { // arrange var opportunity = jazzEntityFrameworkFactory.QVIOpportunities.FirstOrDefault(o => o.IsHidden); if (opportunity == null) return; var isHidden = opportunity.IsHidden; var qualityVariationItemOpportunityService = new QVIOpportunityService(jazzEntityFrameworkFactory, null, null, _initiativeService, _updateFactOpportunitySavingsService, _configurationService, _logger); try { // act await qualityVariationItemOpportunityService.SetHiddenAsync(Guid.Empty, !isHidden, cancellationToken); } catch (Exception e) { e.Should().BeOfType(); } } [Test] public async Task TestSetNote() { // arrange var framework = new JazzEntityFrameworkFactory(); await framework.CreateDbContextAsync(CancellationToken.None); var opportunities = framework.QVIOpportunities; var opportunity = opportunities.First(vo => string.IsNullOrEmpty(vo.Note)); var note = opportunity.Note; var expected = "Now is the time for all good engineers to write great code!"; var service = new QVIOpportunityService(framework, null, null, _initiativeService, _updateFactOpportunitySavingsService, _configurationService, _logger); // act await service.SetNoteAsync(opportunity.OpportunityGuid, expected, CancellationToken.None); // assert var result = await service.GetById(opportunity.OpportunityGuid, CancellationToken.None); result.Note.Should().NotBeNullOrEmpty() .And.NotBe(note) .And.Be(expected); } [TestCaseSource(typeof(JazzEntityFrameworkFactory), nameof(JazzEntityFrameworkFactory.GetFrameworksWithCancellation))] public async Task TestSetNoteAsync(JazzEntityFrameworkFactory jazzEntityFrameworkFactory, CancellationToken cancellationToken) { // arrange var qualityVariationItemOpportunityService = new QVIOpportunityService(jazzEntityFrameworkFactory, null, null, _initiativeService, _updateFactOpportunitySavingsService, _configurationService, _logger); try { var opportunities = qualityVariationItemOpportunityService.GetAllAsync(cancellationToken).Result; var opportunity = opportunities.FirstOrDefault(o => o.Note == string.Empty); if (opportunity == null) return; var note = "new test note"; // act await qualityVariationItemOpportunityService.SetNoteAsync(opportunity.OpportunityGuid, note, CancellationToken.None); if (string.IsNullOrEmpty(jazzEntityFrameworkFactory.TestName)) return; var result = qualityVariationItemOpportunityService.GetById(opportunity.OpportunityGuid, cancellationToken).Result; result.Note.Should().Be(note); // assert } catch (Exception e) { switch (e.GetType().Name) { case "AggregateException": case "OperationCanceledException": return; } e.Should().NotBeOfType(); } } [TestCaseSource(typeof(JazzEntityFrameworkFactory), nameof(JazzEntityFrameworkFactory.GetFrameworksWithCancellation))] public async Task TestSetNoteAsync_NoOpportunity(JazzEntityFrameworkFactory jazzEntityFrameworkFactory, CancellationToken cancellationToken) { // arrange var opportunity = jazzEntityFrameworkFactory.QVIOpportunities.FirstOrDefault(o => o.Note == string.Empty); if (opportunity == null) return; var note = "new test note"; var qualityVariationItemOpportunityService = new QVIOpportunityService(jazzEntityFrameworkFactory, null, null, _initiativeService, _updateFactOpportunitySavingsService, _configurationService, _logger); try { // act await qualityVariationItemOpportunityService.SetNoteAsync(Guid.Empty, note, cancellationToken); // assert } catch (Exception e) { e.Should().BeOfType(); } } #region JazzDbService Tests [TestCaseSource(typeof(JazzEntityFrameworkFactory), nameof(JazzEntityFrameworkFactory.GetFrameworks))] public async Task TestGetAllAsync(JazzEntityFrameworkFactory jazzEntityFrameworkFactory) { // arrange var qualityVariationItemOpportunityService = new QVIOpportunityService(jazzEntityFrameworkFactory, null, null, _initiativeService, _updateFactOpportunitySavingsService, _configurationService, _logger); // act var taskResult = await qualityVariationItemOpportunityService.GetAllAsync(CancellationToken.None); // assert if (string.IsNullOrEmpty(jazzEntityFrameworkFactory.TestName)) { taskResult.Should().BeNullOrEmpty(); } else { taskResult.Should().NotBeNullOrEmpty(); } } [Test, Ignore("Broken due to removal of Key from VariationCaseType")] public async Task TestGetAllAsync_Filtered() { // arrange var factory = new JazzEntityFrameworkFactory(); var filters = factory.QVIOpportunities; var qualityVariationItemOpportunityService = new QVIOpportunityService(factory, null, null, _initiativeService, _updateFactOpportunitySavingsService, _configurationService, _logger); // act var taskResult = await qualityVariationItemOpportunityService.GetAllAsync(CancellationToken.None); // assert taskResult.Should().NotBeNullOrEmpty() .And.AllBeOfType() .And.HaveCountGreaterThan(0) .And.NotContain(o => string.IsNullOrEmpty(o.ToString())) .And.Contain(o => filters.Select(f => f.OpportunityGuid).Contains(o.OpportunityGuid)) .And.Contain(o => filters.Select(f => f.BreakdownName).Contains(o.BreakdownName)) .And.Contain(o => filters.Select(f => f.ConfigurationGuid).Contains(o.ConfigurationGuid)); } [TestCaseSource(typeof(JazzEntityFrameworkFactory), nameof(JazzEntityFrameworkFactory.GetFrameworks))] public async Task TestGetById(JazzEntityFrameworkFactory jazzEntityFrameworkFactory) { // arrange var qualityVariationItemOpportunityService = new QVIOpportunityService(jazzEntityFrameworkFactory, null, null, _initiativeService, _updateFactOpportunitySavingsService, _configurationService, _logger); // act var tempResult = await qualityVariationItemOpportunityService.GetAllAsync(CancellationToken.None); var taskResult = await qualityVariationItemOpportunityService.GetById(tempResult.FirstOrDefault()?.OpportunityGuid ?? Guid.Empty, CancellationToken.None); // assert if (string.IsNullOrEmpty(jazzEntityFrameworkFactory.TestName)) { taskResult.Should().BeNull(); } else { taskResult.Should().NotBeNull() .And.BeOfType(); } } [TestCaseSource(typeof(JazzEntityFrameworkFactory), nameof(JazzEntityFrameworkFactory.GetFrameworks))] public async Task TestGetByIds(JazzEntityFrameworkFactory jazzEntityFrameworkFactory) { // arrange var qualityVariationItemOpportunityService = new QVIOpportunityService(jazzEntityFrameworkFactory, null, null, _initiativeService, _updateFactOpportunitySavingsService, _configurationService, _logger); // act var tempResult = await qualityVariationItemOpportunityService.GetAllAsync(CancellationToken.None); var ids = tempResult.Select(o => o.OpportunityGuid); var taskResult = await qualityVariationItemOpportunityService.GetByIds(ids, CancellationToken.None); // assert if (string.IsNullOrEmpty(jazzEntityFrameworkFactory.TestName)) { taskResult.Should().BeNullOrEmpty(); } else { taskResult.Should().NotBeNullOrEmpty() .And.AllBeOfType(); } } #endregion [TearDown] public void TestTearDown() { // Method intentionally left empty. } #region TestCaseData public static IEnumerable GetFilterData() { yield return new TestCaseData(new QVIFilters { ConfigurationGuid = new Guid("e96abe3e-1526-43ca-815e-ee30c5b34345") }).SetName("No Filters"); yield return new TestCaseData(new QVIFilters { ViewVisible = true, ConfigurationGuid = new Guid("e96abe3e-1526-43ca-815e-ee30c5b34345") }).SetName("View Visible"); yield return new TestCaseData(new QVIFilters { ViewVisible = false, ConfigurationGuid = new Guid("e96abe3e-1526-43ca-815e-ee30c5b34345") }).SetName("Not View Visible"); yield return new TestCaseData(new QVIFilters { IdentifiedSavings = 1999, ViewVisible = true, ConfigurationGuid = new Guid("e96abe3e-1526-43ca-815e-ee30c5b34345") }).SetName( "By Identified Savings"); yield return new TestCaseData(new QVIFilters { IdentifiedSavings = 999, ViewVisible = false, ConfigurationGuid = new Guid("e96abe3e-1526-43ca-815e-ee30c5b34345") }).SetName( "By Identified Savings Not ViewVisible"); yield return new TestCaseData(new QVIFilters { BreakdownIds = new[] { "1" }, ViewVisible = true, ConfigurationGuid = new Guid("e96abe3e-1526-43ca-815e-ee30c5b34345") }) .SetName("By Breakdown"); yield return new TestCaseData(new QVIFilters { BreakdownIds = new[] { "2" }, ConfigurationGuid = new Guid("e96abe3e-1526-43ca-815e-ee30c5b34345"), ViewVisible = false }) .SetName("By Breakdown Not ViewVisible"); yield return new TestCaseData(new QVIFilters { QualityVariationEventIds = new[] { "1" }, ViewVisible = true, ConfigurationGuid = new Guid("e96abe3e-1526-43ca-815e-ee30c5b34345") }) .SetName("By QualityVariationEvent"); yield return new TestCaseData(new QVIFilters { QualityVariationEventIds = new[] { "2" }, ConfigurationGuid = new Guid("e96abe3e-1526-43ca-815e-ee30c5b34345"), ViewVisible = false }) .SetName("By QualityVariationEvent Not ViewVisible"); yield return new TestCaseData(new QVIFilters { OpportunitySearch = "QV - 123", ConfigurationGuid = new Guid("e96abe3e-1526-43ca-815e-ee30c5b34345") }).SetName("Search By Id"); yield return new TestCaseData(new QVIFilters { ExcludeInitiatives = true, ConfigurationGuid = new Guid("e96abe3e-1526-43ca-815e-ee30c5b34345") }).SetName("Exclude Opportunities with Initiatives"); } public static IEnumerable GetFrameworkWithFilterData() { var testCases = GetFilterData().ToList(); var jeffs = JazzEntityFrameworkFactory.GetFrameworksWithCancellation() .Select(tcd => tcd.Arguments); foreach (var tcd in jeffs) { var jeff = (JazzEntityFrameworkFactory)tcd[0]; var ct = (CancellationToken)tcd[1]; foreach (var testCase in testCases) { yield return new TestCaseData(jeff, testCase.Arguments.GetValue(0), ct) .SetName($"{testCase.TestName} {(string.IsNullOrEmpty(jeff.TestName) ? "w/o Jeff" : "w/Jeff")}") .SetCategory(jeff.TestName); } var serviceLineId = jeff.QVIOpportunities.FirstOrDefault(o => !o.IsHidden)?.BreakdownId ?? 0; if (string.IsNullOrEmpty(jeff.TestName)) { yield return new TestCaseData(jeff, new QVIFilters { BreakdownIds = new[] { serviceLineId.ToString() }, ViewVisible = false }, ct) .SetName("By Service Line Not ViewVisible w/o Jeff"); } else { yield return new TestCaseData(jeff, ct, new QVIFilters { BreakdownIds = new[] { serviceLineId.ToString() }, ViewVisible = false }) .SetName("By Service Line Not ViewVisible w/Jeff") .Ignore("This test is broken"); } } } #endregion } }