Exemplo n.º 1
0
        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));
                }
        }
Exemplo n.º 2
0
        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));
                }
        }