Exemple #1
0
        /// <summary>
        /// Creates a data layer.
        /// </summary>
        /// <param name="dataContext">The data context.</param>
        /// <param name="auditHeaderRepository">The audit header repository.</param>
        /// <param name="organisationRepository">The organisation repository.</param>
        /// <returns>Data layer.</returns>
        internal static IVirtualBridgeData CreateVirtualBridgeData(
            DataContext dataContext,
            IAuditHeaderRepository auditHeaderRepository   = null,
            IOrganisationRepository organisationRepository = null)
        {
            Mock <ILogger <VirtualBridgeData> > loggerMock =
                MockFactory.CreateLoggerMock <VirtualBridgeData>();

            if (auditHeaderRepository == null)
            {
                Mock <IAuditHeaderRepository> auditHeaderRepositoryMock =
                    MockFactory.CreateRepositoryMock <IAuditHeaderRepository>();
                auditHeaderRepository = auditHeaderRepositoryMock.Object;
            }

            if (organisationRepository == null)
            {
                Mock <IOrganisationRepository> organisationRepositoryMock =
                    MockFactory.CreateRepositoryMock <IOrganisationRepository>();
                organisationRepository = organisationRepositoryMock.Object;
            }

            return(new VirtualBridgeData(
                       logger: loggerMock.Object,
                       dataContext: dataContext,
                       auditHeaderRepository: auditHeaderRepository,
                       organisationRepository: organisationRepository));
        }
        public async Task Test_Passing_Valid_Values()
        {
            // ARRANGE
            IWho          who          = Create.Who();
            IOrganisation organisation = Create.Organisation();

            Mock <ILogger <IOrganisationService> > loggerMock =
                MockFactory.CreateLoggerMock <IOrganisationService>();

            Mock <IOrganisationRepository> organisationRepositoryMock =
                MockFactory.CreateRepositoryMock <IOrganisationRepository>();

            organisationRepositoryMock.Setup(x =>
                                             x.CreateAsync(
                                                 who,
                                                 It.IsAny <AuditHeaderWithAuditDetails>(),
                                                 organisation))
            .Returns(Task.CompletedTask);

            DbContextOptions <DataContext> dbOptions =
                TestUtils.DbContextOptionsInMemory <CreateAsyncTests>(
                    nameof(this.Test_Passing_Valid_Values));

            await using DataContext dataContext = new DataContext(dbOptions);

            IVirtualBridgeData data =
                MockFactory.CreateVirtualBridgeData(
                    dataContext,
                    organisationRepository: organisationRepositoryMock.Object);

            IOrganisationService service = new OrganisationService(
                loggerMock.Object,
                data);

            // ACT
            await service.CreateAsync(
                who : who,
                auditEvent : EAuditEvent.OrganisationMaintenance,
                organisation : organisation)
            .ConfigureAwait(false);

            // ASSERT
            organisationRepositoryMock.Verify(
                x => x.CreateAsync(
                    who,
                    It.IsAny <IAuditHeaderWithAuditDetails>(),
                    organisation),
                Times.Once);
        }
        public async Task Test_Exception_Triggers_Rollback()
        {
            // ARRANGE
            IWho          who          = Create.Who();
            IOrganisation organisation = Create.Organisation();

            Mock <ILogger <IOrganisationService> > loggerMock =
                MockFactory.CreateLoggerMock <IOrganisationService>();

            DbContextOptions <DataContext> dbOptions =
                TestUtils.DbContextOptionsInMemory <CreateAsyncTests>(
                    nameof(this.Test_Passing_Valid_Values));

            await using DataContext dataContext = new DataContext(dbOptions);

            Mock <IOrganisationRepository> organisationRepositoryMock =
                MockFactory.CreateRepositoryMock <IOrganisationRepository>();

            organisationRepositoryMock.Setup(x =>
                                             x.CreateAsync(
                                                 It.IsAny <IWho>(),
                                                 It.IsAny <AuditHeaderWithAuditDetails>(),
                                                 It.IsAny <IOrganisation>()))
            .Throws <DeliberateException>();

            IVirtualBridgeData data =
                MockFactory.CreateVirtualBridgeData(
                    dataContext,
                    organisationRepository: organisationRepositoryMock.Object);

            IOrganisationService service = new OrganisationService(
                loggerMock.Object,
                data);

            // ACT
            await service.CreateAsync(
                who : who,
                auditEvent : EAuditEvent.OrganisationMaintenance,
                organisation : organisation)
            .ConfigureAwait(false);
        }