public void TestReport_ReportToQueryConverter_Cached( ) { long reportId = Entity.GetByName("AF_String").First( ).Id; // Mock IReportToQueryConverter and run again Mock <IReportToQueryConverter> mockNonCached = new Mock <IReportToQueryConverter>(MockBehavior.Strict); Mock <IReportToQueryConverter> mockCached = new Mock <IReportToQueryConverter>(MockBehavior.Strict); using (var scope = Factory.Current.BeginLifetimeScope(builder => { builder.Register(ctx => mockNonCached.Object).Keyed <IReportToQueryConverter>(Factory.NonCachedKey); builder.Register(ctx => mockCached.Object).As <IReportToQueryConverter>( ); })) using (Factory.SetCurrentScope(scope)) { var reportInterface = new ReportingInterface( ); IReportToQueryConverter realNonCached = new ReportToQueryConverter( ); IReportToQueryConverter realCached = new CachingReportToQueryConverter(mockNonCached.Object); // Setup mockNonCached .Setup(r2q => r2q.Convert(It.IsAny <Report>( ), It.IsAny <ReportToQueryConverterSettings>( ))) .Returns((Report r, ReportToQueryConverterSettings s) => realNonCached.Convert(r, s)); mockCached .Setup(r2q => r2q.Convert(It.IsAny <Report>( ), It.IsAny <ReportToQueryConverterSettings>( ))) .Returns((Report r, ReportToQueryConverterSettings s) => realCached.Convert(r, s)); // First run ReportResult result = reportInterface.RunReport(reportId, null); Assert.That(result, Is.Not.Null); // Second run result = reportInterface.RunReport(reportId, null); Assert.That(result, Is.Not.Null); // Verify mockNonCached .Verify(r2q => r2q.Convert(It.IsAny <Report>( ), It.IsAny <ReportToQueryConverterSettings>( )), Times.Exactly(1)); mockCached .Verify(r2q => r2q.Convert(It.IsAny <Report>( ), It.IsAny <ReportToQueryConverterSettings>( )), Times.Exactly(2)); } }
public void TestReport_ReportToQueryConverter_WithFauxRelationship_Cached( ) { long reportId = CodeNameResolver.GetInstance("Template", "Report").Id; var type = Entity.GetByName <EntityType>("AA_DogBreeds").First(); long relationshipId = Factory.ScriptNameResolver.GetMemberOfType("AA_All Fields", type.Id, MemberType.Relationship).MemberId; long foreignId1 = CodeNameResolver.GetInstance("Test 01", "AA_All Fields").Id; long foreignId2 = CodeNameResolver.GetInstance("Test 02", "AA_All Fields").Id; ReportSettings settings = new ReportSettings { ReportRelationship = new ReportRelationshipSettings { Direction = ReportRelationshipSettings.ReportRelationshipDirection.Forward, RelationshipId = relationshipId }, ReportOnType = type.Id }; // Mock IReportToQueryConverter and run again Mock <IReportToQueryConverter> mockNonCached = new Mock <IReportToQueryConverter>(MockBehavior.Strict); Mock <IReportToQueryConverter> mockCached = new Mock <IReportToQueryConverter>(MockBehavior.Strict); using (var scope = Factory.Current.BeginLifetimeScope(builder => { builder.Register(ctx => mockNonCached.Object).Keyed <IReportToQueryConverter>(Factory.NonCachedKey); builder.Register(ctx => mockCached.Object).As <IReportToQueryConverter>( ); })) using (Factory.SetCurrentScope(scope)) { var reportInterface = new ReportingInterface( ); IReportToQueryConverter realNonCached = new ReportToQueryConverter( ); IReportToQueryConverter realCached = new CachingReportToQueryConverter(mockNonCached.Object); // Setup mockNonCached .Setup(r2q => r2q.Convert(It.IsAny <Report>( ), It.IsAny <ReportToQueryConverterSettings>( ))) .Returns((Report r, ReportToQueryConverterSettings s) => realNonCached.Convert(r, s)); mockCached .Setup(r2q => r2q.Convert(It.IsAny <Report>( ), It.IsAny <ReportToQueryConverterSettings>( ))) .Returns((Report r, ReportToQueryConverterSettings s) => realCached.Convert(r, s)); // First run settings.ReportRelationship.EntityId = foreignId1; ReportResult result = reportInterface.RunReport(reportId, settings); Assert.That(result, Is.Not.Null); Assert.That(result.GridData [0].Values [0].Value, Is.EqualTo("Afghan Hound")); // Second run settings.ReportRelationship.EntityId = foreignId2; result = reportInterface.RunReport(reportId, settings); Assert.That(result, Is.Not.Null); Assert.That(result.GridData [0].Values [0].Value, Is.EqualTo("Australian Cattle Dog")); // Verify mockNonCached .Verify(r2q => r2q.Convert(It.IsAny <Report>( ), It.IsAny <ReportToQueryConverterSettings>( )), Times.Exactly(1)); mockCached .Verify(r2q => r2q.Convert(It.IsAny <Report>( ), It.IsAny <ReportToQueryConverterSettings>( )), Times.Exactly(2)); } }