/// <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; }
/// <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)); }
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); }
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); }
/// <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); }