Exemplo n.º 1
0
 /// <summary>Initializes a new instance of the <see cref="VirtualBridgeService" /> class.</summary>
 /// <param name="logger">The logger.</param>
 /// <param name="data">The data.</param>
 public VirtualBridgeService(
     ILogger <VirtualBridgeService> logger,
     IVirtualBridgeData data)
 {
     this.logger = logger;
     this.data   = data;
 }
Exemplo n.º 2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="OrganisationService"/> class.
 /// </summary>
 /// <param name="logger">Logger.</param>
 /// <param name="data">Data layer.</param>
 public OrganisationService(
     ILogger <IOrganisationService> logger,
     IVirtualBridgeData data)
 {
     this.logger = logger ?? throw new ArgumentNullException(nameof(logger));
     this.data   = data ?? throw new ArgumentNullException(nameof(data));
 }
Exemplo n.º 3
0
        public async Task Test_Passing_Null_Who_Throws_Exception()
        {
            // ARRANGE
            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);

            IVirtualBridgeData data =
                MockFactory.CreateVirtualBridgeData(
                    dataContext);

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

            // ACT
            await service.CreateAsync(
                who : null !,
                auditEvent : EAuditEvent.OrganisationMaintenance,
                organisation : organisation)
            .ConfigureAwait(false);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        /// <summary>
        /// Creates the organisation asynchronous.
        /// </summary>
        /// <param name="logger">Logger.</param>
        /// <param name="data">Data Layer.</param>
        /// <param name="who">Who details.</param>
        /// <param name="auditEvent">Audit event.</param>
        /// <param name="organisation">Organisation to create.</param>
        /// <returns>NOTHING.</returns>
        internal static async Task CreateOrganisationAsync(
            ILogger <VirtualBridgeService> logger,
            IVirtualBridgeData data,
            IWho who,
            EAuditEvent auditEvent,
            IOrganisation organisation)
        {
            logger.LogTrace(
                "ENTRY {Method}(who, organisation) {@who} {@organisation}",
                nameof(CreateOrganisationAsync),
                who,
                organisation);

            try
            {
                IAuditHeaderWithAuditDetails auditHeader =
                    await data.BeginTransactionAsync(who, auditEvent)
                    .ConfigureAwait(false);

                await data.Organisation.CreateAsync(
                    who : who,
                    auditHeader : auditHeader,
                    organisation : organisation)
                .ConfigureAwait(false);

                await data.CommitTransactionAsync(who, auditHeader)
                .ConfigureAwait(false);
            }
            catch (Exception)
            {
                data.RollbackTransaction(who);
                throw;
            }

            logger.LogTrace(
                "EXIT {Method}(who) {@who}",
                nameof(CreateOrganisationAsync),
                who);
        }