From 35131dc145285b9f0fbb30faf89c92b2fb495245 Mon Sep 17 00:00:00 2001 From: Juri Solodenko Date: Wed, 5 Apr 2023 17:28:05 +0200 Subject: [PATCH] 2586 parameters not common for all species (#2587) * Added views to DB * DB - adjusted naming of view and columns * Fixes #2586 Provide info which parameters are not common for all species * Fixes #2586 Provide info which parameters are not common for all species * review comments * Add serializer for the new dummy type --------- Co-authored-by: Yuri05 --- src/Db/Diff/PKSimDB_diff.txt | 2 +- src/Db/Dump/PKSimDB_dump.txt | 58 +++++++++++++ src/Db/PKSimDB.sqlite | Bin 30658560 -> 30658560 bytes src/PKSim.Core/CoreConstants.cs | 1 + .../Model/ContainerParameterBySpecies.cs | 9 ++ ...ametersNotCommonForAllSpeciesRepository.cs | 13 +++ ...ntainerParametersNotCommonForAllSpecies.cs | 11 +++ ...ametersNotCommonForAllSpeciesRepository.cs | 78 ++++++++++++++++++ ...ametersNotCommonForAllSpeciesRepository.cs | 19 +++++ .../ContainerParameterBySpeciesSerializer.cs | 14 ++++ ...rsNotCommonForAllSpeciesRepositorySpecs.cs | 68 +++++++++++++++ ...rsNotCommonForAllSpeciesRepositorySpecs.cs | 29 +++++++ 12 files changed, 301 insertions(+), 1 deletion(-) create mode 100644 src/PKSim.Core/Model/ContainerParameterBySpecies.cs create mode 100644 src/PKSim.Core/Repositories/IContainerParametersNotCommonForAllSpeciesRepository.cs create mode 100644 src/PKSim.Infrastructure/ORM/FlatObjects/FlatContainerParametersNotCommonForAllSpecies.cs create mode 100644 src/PKSim.Infrastructure/ORM/Repositories/ContainerParametersNotCommonForAllSpeciesRepository.cs create mode 100644 src/PKSim.Infrastructure/ORM/Repositories/FlatContainerParametersNotCommonForAllSpeciesRepository.cs create mode 100644 src/PKSim.Infrastructure/Serialization/Xml/Serializers/ContainerParameterBySpeciesSerializer.cs create mode 100644 tests/PKSim.Tests/IntegrationTests/ContainerParametersNotCommonForAllSpeciesRepositorySpecs.cs create mode 100644 tests/PKSim.Tests/IntegrationTests/FlatContainerParametersNotCommonForAllSpeciesRepositorySpecs.cs diff --git a/src/Db/Diff/PKSimDB_diff.txt b/src/Db/Diff/PKSimDB_diff.txt index 89183c141..d3f5a12fa 100644 --- a/src/Db/Diff/PKSimDB_diff.txt +++ b/src/Db/Diff/PKSimDB_diff.txt @@ -1 +1 @@ -UPDATE tab_container_parameter_values SET default_value=124000.0 WHERE parameter_value_version='InVitroClearance_PKSim' AND species='Cattle' AND container_id=159 AND container_type='ORGAN' AND container_name='Liver' AND parameter_name='Number of cells/g tissue'; + diff --git a/src/Db/Dump/PKSimDB_dump.txt b/src/Db/Dump/PKSimDB_dump.txt index 6724b0702..f729b58d5 100644 --- a/src/Db/Dump/PKSimDB_dump.txt +++ b/src/Db/Dump/PKSimDB_dump.txt @@ -91937,4 +91937,62 @@ CREATE VIEW VIEW_KNOWN_TRANSPORTER_CONTAINERS AS SELECT t.CONTAINER_NAME AS ContainerName, t.MEMBRANE AS MembraneLocation FROM tab_known_transporters_containers t; +CREATE VIEW [ContainerParameters_Species] +AS +SELECT DISTINCT + [cpc].[container_id], + [cpc].[container_type], + [cpc].[container_name], + [cpc].[parameter_name], + [species] +FROM [tab_container_parameter_curves] AS [cpc], + [tab_container_parameters] AS [cp] +WHERE [cpc].[container_id] = [cp].[container_id] + AND [cpc].[parameter_name] = [cp].[parameter_name] + AND [building_block_type] = "INDIVIDUAL" +UNION +SELECT DISTINCT + [cpv].[container_id], + [cpv].[container_type], + [cpv].[container_name], + [cpv].[parameter_name], + [species] +FROM [tab_container_parameter_values] AS [cpv], + [tab_container_parameters] AS [cp] +WHERE [cpv].[container_id] = [cp].[container_id] + AND [cpv].[parameter_name] = [cp].[parameter_name] + AND [building_block_type] = "INDIVIDUAL" +UNION +SELECT DISTINCT + [cpr].[container_id], + [cpr].[container_type], + [cpr].[container_name], + [cpr].[parameter_name], + [species] +FROM [tab_container_parameter_rates] AS [cpr], + [tab_species_calculation_methods] AS [scm], + [tab_container_parameters] AS [cp] +WHERE [cpr].[calculation_method] = [scm].[calculation_method] + AND [cpr].[container_id] = [cp].[container_id] + AND [cpr].[parameter_name] = [cp].[parameter_name] + AND [building_block_type] = "INDIVIDUAL"; +CREATE VIEW [VIEW_CONTAINER_PARAMETER_NOT_FOR_ALL_SPECIES] +AS +SELECT DISTINCT + [ContainerParameters_Species].[container_id] AS [ContainerId], + [ContainerParameters_Species].[container_type] AS [ContainerType], + [ContainerParameters_Species].[container_name] AS [ContainerName], + [ContainerParameters_Species].[parameter_name] AS [ParameterName], + COUNT ([ContainerParameters_Species].[species]) AS [SpeciesCount] +FROM [ContainerParameters_Species] +GROUP BY + [container_id], + [container_type], + [container_name], + [parameter_name] +HAVING COUNT ([species]) < (SELECT COUNT ([species]) + FROM [tab_species]) +ORDER BY + [container_id], + [parameter_name]; COMMIT; diff --git a/src/Db/PKSimDB.sqlite b/src/Db/PKSimDB.sqlite index c93c3f961a84da00a2e2432593eb18ee87946177..5bd12ff358e9396d019ba921e007e3b903a8f8bd 100644 GIT binary patch delta 4208 zcmcK62~?G39>?+f0s>tHVs+1pZCV7DOQw)r;i9+jUUst^A>uWuSOi4P3dw?QnuuAD zEw8rPj!CuQlDOo=j>S#k#>}-R!y8V98wfxkf-nTZ z2tg>$f)ztC3}Mi|2%L>bL?Ie6h(#QRV+2NG6h>nV#^M}|gAMT*k8^Pz&c_9~5EC#F z7vW+g;1VPv36pRsF2iI@!BkAc<(Q5uFatA@j1*jnS-1*z%tk8G;6OU&U@n}v8rL8L z^WcITnaDyma*&HW4p2rJ#5ij9ov|KEt>0 zZG4XJ;Jf%9zKR;R>mk}m2;GFicN`E#w+J4=PBna7bq7h6O@U{MasoW zf^vzHs3a+qluMP%l*!5zWvVhwxm=m9T%pWRW-7@_igKkgOSww1E3=hUB~5WC>B<~s zuHsa#R<2PplzECvaVwchmXfXHD7i|WlCR8Hu2mK&*C`(5dZj?QK`B%gDn-g7rC3?4 zc$Fo}jmlD`M7c@1S-C|iRmzldr9xSzR4P?UwX$5PQC27`l~u~E%4+2{<#y!`rB+#^ z)G2o=Yn8i{yOnySLAl3h=Xb~m-xd`T;If2H4NeY9j~EfwHtcYKt39sOXG{-hUwz1D zd}Xw!xA_crXncm(~;A;V(nQm_cU!W zVhvB{!qT1v|CWLI8Ki%PxK z-pZ=NoCQxn9vuU%>7?c=r-%6o27uf7MHjn@ITsoA{&nQyed9GaBgn{qM(=n2&uHj7VIBnOcQp=Z@RWtPT zZ1+5_a^Q1tiZJV(Y@-LAsn^-@`MqC? z1pi5N-+eA?{jz#TNNj3qXiKSH@o#w7zG*4jVb68g@|}+P8UJgtgM8_WD~byeo9lKq z#>8|@yz4Jd=gRSYjdA_1n8!Eqn4JA>>U;0~y<(p3;dZ|%W)tU&kLq}p^wIuln)b;) zV{~oT0`JWHxsGfH6YjXc-jBeRqQiZ^t*1N}yDP1GW1k1)-`eMR*XEA*k=@N3bGHwl zm0}z3bfr1-ooRXYjPYUCJeSk$8q|+WaYfC5^VUlL^JZnBd9!q8^Uhj%%Dig^HE(@Z zuiruc(0Uy`ect_Cq<`!Gd)}1;&RZ+}&zqHj=FQTX&wG@)us+EMj_G=tD|@DH^O)s( z8;o($oxjml#ic!Ko!@}r{e1&;p+$8*BQ}&bUz-xm_`D<|ruOt_pbPKynEX$m*U|nr z_IXJDt$mLBHxIGdy1y)uy}vA(^=Zwmh1+dr<3XP>soitHXG9w2qWwO@+y3QVpRqj9 zOyIu~?hVI$#)f0}Vjb4wK5RfEHlhiea6dNV0X&FiwBR9Z!NYh2kK!?y*otj<98cg$ zJcXz647TH0JcsA;0$#*Rcp0tOfmg5-ZFm*0;dQ)$H}MwU#xA^r-Dt-i?8Up-hxf1_ Z2XGMY;}AZ;VSI=q_y|XF3?JhYsZh)!NVqVN$ zOF>b~ZPdzrx4mp%w6Zf0;KsXVEU{pe7gdh}pUlmkE z7^jXu7>{5)a*&G&n21Su6qAvMd_0E7F$GgG z4bw3LGcgOZF$Z%o4+WTy1t`QqEP@A%u>?!849ii3Vw7M7p1?}1!fJT&B%Z?4cm`|m zEY`wCDc0dRtj7jy#3pRU7Hq{fY{&C>0Xwi0Whlok>_!FlU@!LJMZARlIDmsVgv0RR z2#(?yUdAhU6~}P`Cvgg=aRz5`4(D+J7jX%faRsm8b-aN$@fP03J9roG;VRz82lx;l z;bVM)Pw^Q(#}~MU>-Z91;cMK$H~1Fc;d}gmAMq1@#!dW!U-27$#~=6;f8lTZvxM({ z5fnegUvVe_N}%FYf|OvTl2Ta-Q9_klQ>y4uRV7TRrc_t%QfeqQm2f3Osio9bB9$m5 zTB)PNC~l>$Qct;CsjoCp8Y+#H#!3_A9;K-gtK6$JQ<^I+l$J^>rM1#VX{)qT+AAHD zj!GxxKBcn~r`)eRpmb57PlB47*6O@U{ zB;`?MvXZCdD~~CUD^rxI$~0xVGDDfE%u;46bCkKtJf%RHuPjgsm4(V8k?IJel@vo)3VHr@T`vBmJ6IwzKlAhW{8On4LD&1n;TY@h|r44lY^%R$C?`fBLXv=J?V!WoJsFm+HOAa&seG9vL%d)n(@3@dgAt6Ie&aEY<7k02`F(EC~+RMSv zTN4VRHKC))w6A_>nMtt+!zT0(q!f;&CFYjVQvPmK7VON#vOB{lI?9AZs=MUIOeLl!Gb zl%>itWw}zM6e}gl3gro9rLsy{t$39um8X=am1mSS%CpK^#a2p{b;@(fdS!#MQQ4$y zR<^E_<&bh%@hL}?qslSm oW#tv+Rpq#HLOH3NQcf#pl(Wh?<-Br1xu{$+KF7t&=Fflr1q@YPKL7v# diff --git a/src/PKSim.Core/CoreConstants.cs b/src/PKSim.Core/CoreConstants.cs index e81415936..54971207b 100644 --- a/src/PKSim.Core/CoreConstants.cs +++ b/src/PKSim.Core/CoreConstants.cs @@ -776,6 +776,7 @@ public static class ORM public const string VIEW_DISEASE_STATES = "VIEW_DISEASE_STATES"; public const string VIEW_POPULATION_DISEASE_STATES = "VIEW_POPULATION_DISEASE_STATES"; public const string VIEW_CONTAINER_PARAMETER_DESCRIPTOR_CONDITIONS = "VIEW_CONTAINER_PARAMETER_DESCRIPTOR_CONDITIONS"; + public const string VIEW_CONTAINER_PARAMETER_NOT_FOR_ALL_SPECIES = "VIEW_CONTAINER_PARAMETER_NOT_FOR_ALL_SPECIES"; } public static class Organ diff --git a/src/PKSim.Core/Model/ContainerParameterBySpecies.cs b/src/PKSim.Core/Model/ContainerParameterBySpecies.cs new file mode 100644 index 000000000..4d419dcf9 --- /dev/null +++ b/src/PKSim.Core/Model/ContainerParameterBySpecies.cs @@ -0,0 +1,9 @@ +namespace PKSim.Core.Model +{ + public class ContainerParameterBySpecies + { + public string ContainerPath { get; set; } + public string ParameterName { get; set; } + public int SpeciesCount { get; set; } + } +} \ No newline at end of file diff --git a/src/PKSim.Core/Repositories/IContainerParametersNotCommonForAllSpeciesRepository.cs b/src/PKSim.Core/Repositories/IContainerParametersNotCommonForAllSpeciesRepository.cs new file mode 100644 index 000000000..e2c02d6c1 --- /dev/null +++ b/src/PKSim.Core/Repositories/IContainerParametersNotCommonForAllSpeciesRepository.cs @@ -0,0 +1,13 @@ +using System; +using OSPSuite.Utility.Collections; +using PKSim.Core.Model; + +namespace PKSim.Core.Repositories +{ + public interface IContainerParametersNotCommonForAllSpeciesRepository : IStartableRepository + { + bool UsedForAllSpecies(string containerPath, string parameterName); + + bool UsedForAllSpecies(string parameterFullPath); + } +} \ No newline at end of file diff --git a/src/PKSim.Infrastructure/ORM/FlatObjects/FlatContainerParametersNotCommonForAllSpecies.cs b/src/PKSim.Infrastructure/ORM/FlatObjects/FlatContainerParametersNotCommonForAllSpecies.cs new file mode 100644 index 000000000..8da79ec68 --- /dev/null +++ b/src/PKSim.Infrastructure/ORM/FlatObjects/FlatContainerParametersNotCommonForAllSpecies.cs @@ -0,0 +1,11 @@ +namespace PKSim.Infrastructure.ORM.FlatObjects +{ + public class FlatContainerParametersNotCommonForAllSpecies + { + public int ContainerId { get; set; } + public string ContainerType { get; set; } + public string ContainerName { get; set; } + public string ParameterName { get; set; } + public int SpeciesCount { get; set; } + } +} \ No newline at end of file diff --git a/src/PKSim.Infrastructure/ORM/Repositories/ContainerParametersNotCommonForAllSpeciesRepository.cs b/src/PKSim.Infrastructure/ORM/Repositories/ContainerParametersNotCommonForAllSpeciesRepository.cs new file mode 100644 index 000000000..1685b7db9 --- /dev/null +++ b/src/PKSim.Infrastructure/ORM/Repositories/ContainerParametersNotCommonForAllSpeciesRepository.cs @@ -0,0 +1,78 @@ +using System.Collections.Generic; +using System.Linq; +using OSPSuite.Core.Domain; +using OSPSuite.Utility.Collections; +using PKSim.Core.Model; +using PKSim.Core.Repositories; + +namespace PKSim.Infrastructure.ORM.Repositories +{ + public class ContainerParametersNotCommonForAllSpeciesRepository: StartableRepository, IContainerParametersNotCommonForAllSpeciesRepository + { + private readonly IFlatContainerRepository _flatContainerRepository; + private readonly IFlatContainerParametersNotCommonForAllSpeciesRepository _flatContainerParametersNotCommonForAllSpeciesRepository; + + private readonly List _containerParametersNotCommonForAllSpecies; + private readonly ICache> _parametersNotCommonForAllSpeciesByContainer; + private readonly ICache _parametersNotCommonForAllSpeciesByFullPath; + + public ContainerParametersNotCommonForAllSpeciesRepository( + IFlatContainerRepository flatContainerRepository, + IFlatContainerParametersNotCommonForAllSpeciesRepository flatContainerParametersNotCommonForAllSpeciesRepository) + { + _flatContainerRepository = flatContainerRepository; + _flatContainerParametersNotCommonForAllSpeciesRepository = flatContainerParametersNotCommonForAllSpeciesRepository; + + _containerParametersNotCommonForAllSpecies = new List(); + _parametersNotCommonForAllSpeciesByContainer = new Cache>(); + _parametersNotCommonForAllSpeciesByFullPath = new Cache(); + } + + protected override void DoStart() + { + var flatContainerParametersNotCommonForAllSpecies = _flatContainerParametersNotCommonForAllSpeciesRepository.All().ToList(); + + foreach(var containerParameter in flatContainerParametersNotCommonForAllSpecies) + { + var containerPath = _flatContainerRepository.ContainerPathFrom(containerParameter.ContainerId).ToString(); + var containerParameterBySpecies = new ContainerParameterBySpecies() + { + ContainerPath = containerPath, + ParameterName = containerParameter.ParameterName, + SpeciesCount = containerParameter.SpeciesCount + }; + _containerParametersNotCommonForAllSpecies.Add(containerParameterBySpecies); + + //cache by full path + var fullPath = $"{containerPath}{ObjectPath.PATH_DELIMITER}{containerParameter.ParameterName}"; + _parametersNotCommonForAllSpeciesByFullPath.Add(fullPath, fullPath); + } + + //cache the parameters by container path + foreach (var containerParametersInContainer in _containerParametersNotCommonForAllSpecies.GroupBy(x => x.ContainerPath)) + { + _parametersNotCommonForAllSpeciesByContainer.Add(containerParametersInContainer.Key, containerParametersInContainer.Select(cp=>cp.ParameterName).ToList()); + } + } + + public override IEnumerable All() + { + Start(); + return _containerParametersNotCommonForAllSpecies; + } + + public bool UsedForAllSpecies(string containerPath, string parameterName) + { + Start(); + var parametersUsedNotForAllSpeciesInContainer = _parametersNotCommonForAllSpeciesByContainer[containerPath]; + + return parametersUsedNotForAllSpeciesInContainer == null || !parametersUsedNotForAllSpeciesInContainer.Contains(parameterName); + } + + public bool UsedForAllSpecies(string parameterFullPath) + { + Start(); + return !_parametersNotCommonForAllSpeciesByFullPath.Contains(parameterFullPath); + } + } +} \ No newline at end of file diff --git a/src/PKSim.Infrastructure/ORM/Repositories/FlatContainerParametersNotCommonForAllSpeciesRepository.cs b/src/PKSim.Infrastructure/ORM/Repositories/FlatContainerParametersNotCommonForAllSpeciesRepository.cs new file mode 100644 index 000000000..f6889896c --- /dev/null +++ b/src/PKSim.Infrastructure/ORM/Repositories/FlatContainerParametersNotCommonForAllSpeciesRepository.cs @@ -0,0 +1,19 @@ +using PKSim.Core; +using PKSim.Infrastructure.ORM.Core; +using PKSim.Infrastructure.ORM.FlatObjects; +using PKSim.Infrastructure.ORM.Mappers; + +namespace PKSim.Infrastructure.ORM.Repositories +{ + public interface IFlatContainerParametersNotCommonForAllSpeciesRepository : IMetaDataRepository + { + } + + public class FlatContainerParametersNotCommonForAllSpeciesRepository : MetaDataRepository, IFlatContainerParametersNotCommonForAllSpeciesRepository + { + public FlatContainerParametersNotCommonForAllSpeciesRepository(IDbGateway dbGateway, IDataTableToMetaDataMapper mapper) + : base(dbGateway, mapper, CoreConstants.ORM.VIEW_CONTAINER_PARAMETER_NOT_FOR_ALL_SPECIES) + { + } + } +} \ No newline at end of file diff --git a/src/PKSim.Infrastructure/Serialization/Xml/Serializers/ContainerParameterBySpeciesSerializer.cs b/src/PKSim.Infrastructure/Serialization/Xml/Serializers/ContainerParameterBySpeciesSerializer.cs new file mode 100644 index 000000000..9f7ba9f9e --- /dev/null +++ b/src/PKSim.Infrastructure/Serialization/Xml/Serializers/ContainerParameterBySpeciesSerializer.cs @@ -0,0 +1,14 @@ +using PKSim.Core.Model; + +namespace PKSim.Infrastructure.Serialization.Xml.Serializers +{ + public class ContainerParameterBySpeciesSerializer : BaseXmlSerializer + { + public override void PerformMapping() + { + Map(x => x.ContainerPath); + Map(x => x.ParameterName); + Map(x => x.SpeciesCount); + } + } +} \ No newline at end of file diff --git a/tests/PKSim.Tests/IntegrationTests/ContainerParametersNotCommonForAllSpeciesRepositorySpecs.cs b/tests/PKSim.Tests/IntegrationTests/ContainerParametersNotCommonForAllSpeciesRepositorySpecs.cs new file mode 100644 index 000000000..aa37cf1c2 --- /dev/null +++ b/tests/PKSim.Tests/IntegrationTests/ContainerParametersNotCommonForAllSpeciesRepositorySpecs.cs @@ -0,0 +1,68 @@ +using System.Collections.Generic; +using System.Linq; +using FluentNHibernate.Utils; +using OSPSuite.BDDHelper; +using OSPSuite.BDDHelper.Extensions; +using PKSim.Core.Model; +using PKSim.Core.Repositories; + +namespace PKSim.IntegrationTests +{ + public abstract class concern_for_ContainerParametersNotCommonForAllSpeciesRepository : ContextForIntegration + { + } + + public class When_retrieving_parameters_not_common_for_all_species_from_the_repository : concern_for_ContainerParametersNotCommonForAllSpeciesRepository + { + private IEnumerable _result; + + protected override void Because() + { + _result = sut.All(); + } + + [Observation] + public void should_return_at_least_one_parameter() + { + _result.Count().ShouldBeGreaterThan(0); + } + + [Observation] + public void all_parameter_paths_should_start_with_organism_or_neighborhoods() + { + //because we deal here with individual parameters only: only parameters with path "Organism|..." or "Neighborhoods|..." may appear in the list + _result.Each(p=> + { + var containerPath = p.ContainerPath; + (containerPath.StartsWith("Organism")|| containerPath.StartsWith("Neighborhoods")).ShouldBeTrue($"{p.ContainerPath}|{p.ParameterName}"); + }); + } + } + + public class When_testing_if_a_parameter_is_common_for_all_species : concern_for_ContainerParametersNotCommonForAllSpeciesRepository + { + [Observation] + public void age_parameter_should_be_defined_not_for_all_species() + { + sut.UsedForAllSpecies("Organism","Age").ShouldBeFalse(); + } + + [Observation] + public void weight_parameter_should_be_defined_for_all_species() + { + sut.UsedForAllSpecies("Organism", "Weight").ShouldBeTrue(); + } + + [Observation] + public void age_parameter_should_be_defined_not_for_all_species_when_queried_by_full_path() + { + sut.UsedForAllSpecies("Organism|Age").ShouldBeFalse(); + } + + [Observation] + public void weight_parameter_should_be_defined_for_all_species_when_queried_by_full_path() + { + sut.UsedForAllSpecies("Organism|Weight").ShouldBeTrue(); + } + } +} \ No newline at end of file diff --git a/tests/PKSim.Tests/IntegrationTests/FlatContainerParametersNotCommonForAllSpeciesRepositorySpecs.cs b/tests/PKSim.Tests/IntegrationTests/FlatContainerParametersNotCommonForAllSpeciesRepositorySpecs.cs new file mode 100644 index 000000000..2bdd5486d --- /dev/null +++ b/tests/PKSim.Tests/IntegrationTests/FlatContainerParametersNotCommonForAllSpeciesRepositorySpecs.cs @@ -0,0 +1,29 @@ +using System.Collections.Generic; +using System.Linq; +using OSPSuite.BDDHelper; +using OSPSuite.BDDHelper.Extensions; +using PKSim.Infrastructure.ORM.FlatObjects; +using PKSim.Infrastructure.ORM.Repositories; + +namespace PKSim.IntegrationTests +{ + public abstract class concern_for_FlatContainerParametersNotCommonForAllSpeciesRepository : ContextForIntegration + { + } + + public class When_resolving_all_parameters_not_common_for_all_species_as_a_flat_table : concern_for_FlatContainerParametersNotCommonForAllSpeciesRepository + { + private IEnumerable _result; + + protected override void Because() + { + _result = sut.All(); + } + + [Observation] + public void should_retrieve_some_object_from_the_underlying_database() + { + _result.Count().ShouldBeGreaterThan(0); + } + } +} \ No newline at end of file