Пример #1
0
        public async Task <Result> Edit(int smsGatewayId, GatewaySettingRequestDto gatewaySettingRequestDto)
        {
            try
            {
                var gatewaySettingToUpdate = await _nyssContext.GatewaySettings.FindAsync(smsGatewayId);

                if (gatewaySettingToUpdate == null)
                {
                    return(Error(ResultKey.NationalSociety.SmsGateway.SettingDoesNotExist));
                }

                var apiKeyExists = await _nyssContext.GatewaySettings.AnyAsync(gs => gs.ApiKey == gatewaySettingRequestDto.ApiKey && gs.Id != smsGatewayId);

                if (apiKeyExists)
                {
                    return(Error <int>(ResultKey.NationalSociety.SmsGateway.ApiKeyAlreadyExists));
                }

                gatewaySettingToUpdate.Name         = gatewaySettingRequestDto.Name;
                gatewaySettingToUpdate.ApiKey       = gatewaySettingRequestDto.ApiKey;
                gatewaySettingToUpdate.GatewayType  = gatewaySettingRequestDto.GatewayType;
                gatewaySettingToUpdate.EmailAddress = gatewaySettingRequestDto.EmailAddress;

                await _nyssContext.SaveChangesAsync();

                await UpdateAuthorizedApiKeys();

                return(SuccessMessage(ResultKey.NationalSociety.SmsGateway.SuccessfullyUpdated));
            }
            catch (ResultException exception)
            {
                _loggerAdapter.Debug(exception);
                return(exception.Result);
            }
        }
Пример #2
0
        public async Task AddSmsGateway_WhenApiKeyDoesNotExistYet_ShouldReturnSuccess()
        {
            // Arrange
            const int nationalSocietyId = 1;

            var nationalSocieties = new[]
            {
                new NationalSociety
                {
                    Id   = nationalSocietyId,
                    Name = "National Society"
                }
            };

            var nationalSocietiesMockDbSet = nationalSocieties.AsQueryable().BuildMockDbSet();

            _nyssContextMock.NationalSocieties.Returns(nationalSocietiesMockDbSet);

            var gatewaySettings = new[]
            {
                new GatewaySetting
                {
                    Id                = 1,
                    Name              = "Name",
                    ApiKey            = "api-key",
                    NationalSocietyId = nationalSocietyId,
                    GatewayType       = GatewayType.SmsEagle
                }
            };

            var gatewaySettingsMockDbSet = gatewaySettings.AsQueryable().BuildMockDbSet();

            _nyssContextMock.GatewaySettings.Returns(gatewaySettingsMockDbSet);

            var gatewaySettingRequestDto = new GatewaySettingRequestDto
            {
                Name        = "New SMS Gateway",
                ApiKey      = "new-api-key",
                GatewayType = GatewayType.SmsEagle
            };

            // Act
            var result = await _smsGatewayService.Create(nationalSocietyId, gatewaySettingRequestDto);

            // Assert
            await _nyssContextMock.GatewaySettings.Received(1).AddAsync(
                Arg.Is <GatewaySetting>(gs =>
                                        gs.Name == "New SMS Gateway" &&
                                        gs.ApiKey == "new-api-key" &&
                                        gs.GatewayType == GatewayType.SmsEagle));

            await _nyssContextMock.Received(1).SaveChangesAsync();

            var content = Arg.Any <string>();
            await _smsGatewayBlobProviderMock.Received(1).UpdateApiKeys(content);

            result.IsSuccess.ShouldBeTrue();
            result.Message.Key.ShouldBe(ResultKey.NationalSociety.SmsGateway.SuccessfullyAdded);
        }
Пример #3
0
        public async Task UpdateSmsGateway_WhenExceptionIsThrown_ShouldReturnError()
        {
            // Arrange
            const int smsGatewayId = 1;

            var nationalSocieties = new[]
            {
                new NationalSociety
                {
                    Id   = 1,
                    Name = "National Society"
                }
            };

            var nationalSocietiesMockDbSet = nationalSocieties.AsQueryable().BuildMockDbSet();

            _nyssContextMock.NationalSocieties.Returns(nationalSocietiesMockDbSet);

            var gatewaySettings = new[]
            {
                new GatewaySetting
                {
                    Id                = smsGatewayId,
                    Name              = "Name",
                    ApiKey            = "api-key",
                    NationalSocietyId = 1,
                    GatewayType       = GatewayType.SmsEagle
                }
            };

            var gatewaySettingsMockDbSet = gatewaySettings.AsQueryable().BuildMockDbSet();

            _nyssContextMock.GatewaySettings.Returns(gatewaySettingsMockDbSet);
            _nyssContextMock.GatewaySettings.FindAsync(smsGatewayId).Returns(gatewaySettings[0]);

            var gatewaySettingRequestDto = new GatewaySettingRequestDto
            {
                Name        = "Updated SMS Gateway",
                ApiKey      = "updated-api-key",
                GatewayType = GatewayType.SmsEagle
            };

            var content = Arg.Any <string>();

            _smsGatewayBlobProviderMock.UpdateApiKeys(content).ThrowsForAnyArgs(new ResultException(ResultKey.UnexpectedError));

            // Act
            var result = await _smsGatewayService.Edit(smsGatewayId, gatewaySettingRequestDto);

            // Assert
            await _nyssContextMock.Received(1).SaveChangesAsync();

            var content1 = Arg.Any <string>();
            await _smsGatewayBlobProviderMock.Received(1).UpdateApiKeys(content1);

            result.IsSuccess.ShouldBeFalse();
            result.Message.Key.ShouldBe(ResultKey.UnexpectedError);
        }
Пример #4
0
        public async Task UpdateSmsGateway_WhenSmsGatewayDoesNotExist_ShouldReturnError()
        {
            // Arrange
            const int nonExistentSmsGatewayId = 0;

            var nationalSocieties = new[]
            {
                new NationalSociety
                {
                    Id   = 1,
                    Name = "National Society"
                }
            };

            var nationalSocietiesMockDbSet = nationalSocieties.AsQueryable().BuildMockDbSet();

            _nyssContextMock.NationalSocieties.Returns(nationalSocietiesMockDbSet);

            var gatewaySettings = new[]
            {
                new GatewaySetting
                {
                    Id                = 1,
                    Name              = "Name",
                    ApiKey            = "api-key",
                    NationalSocietyId = 1,
                    GatewayType       = GatewayType.SmsEagle
                }
            };

            var gatewaySettingsMockDbSet = gatewaySettings.AsQueryable().BuildMockDbSet();

            _nyssContextMock.GatewaySettings.Returns(gatewaySettingsMockDbSet);
            _nyssContextMock.GatewaySettings.FindAsync(nonExistentSmsGatewayId).ReturnsNull();

            var gatewaySettingRequestDto = new GatewaySettingRequestDto
            {
                Name        = "Updated SMS Gateway",
                ApiKey      = "updated-api-key",
                GatewayType = GatewayType.SmsEagle
            };

            // Act
            var result = await _smsGatewayService.Edit(nonExistentSmsGatewayId, gatewaySettingRequestDto);

            // Assert
            await _nyssContextMock.DidNotReceive().SaveChangesAsync();

            var content = Arg.Any <string>();
            await _smsGatewayBlobProviderMock.DidNotReceive().UpdateApiKeys(content);

            result.IsSuccess.ShouldBeFalse();
            result.Message.Key.ShouldBe(ResultKey.NationalSociety.SmsGateway.SettingDoesNotExist);
        }
Пример #5
0
        public async Task <Result <int> > Create(int nationalSocietyId, GatewaySettingRequestDto gatewaySettingRequestDto)
        {
            try
            {
                var nationalSocietyExists = await _nyssContext.NationalSocieties.AnyAsync(ns => ns.Id == nationalSocietyId);

                if (!nationalSocietyExists)
                {
                    return(Error <int>(ResultKey.NationalSociety.SmsGateway.NationalSocietyDoesNotExist));
                }

                var apiKeyExists = await _nyssContext.GatewaySettings.AnyAsync(gs => gs.ApiKey == gatewaySettingRequestDto.ApiKey);

                if (apiKeyExists)
                {
                    return(Error <int>(ResultKey.NationalSociety.SmsGateway.ApiKeyAlreadyExists));
                }

                var gatewaySettingToAdd = new GatewaySetting
                {
                    Name              = gatewaySettingRequestDto.Name,
                    ApiKey            = gatewaySettingRequestDto.ApiKey,
                    GatewayType       = gatewaySettingRequestDto.GatewayType,
                    EmailAddress      = gatewaySettingRequestDto.EmailAddress,
                    NationalSocietyId = nationalSocietyId
                };

                await _nyssContext.GatewaySettings.AddAsync(gatewaySettingToAdd);

                await _nyssContext.SaveChangesAsync();

                await UpdateAuthorizedApiKeys();

                return(Success(gatewaySettingToAdd.Id, ResultKey.NationalSociety.SmsGateway.SuccessfullyAdded));
            }
            catch (ResultException exception)
            {
                _loggerAdapter.Debug(exception);
                return(exception.GetResult <int>());
            }
        }
Пример #6
0
 public Task <Result> Edit(int smsGatewayId, [FromBody] GatewaySettingRequestDto gatewaySettingRequestDto) =>
 _smsGatewayService.Edit(smsGatewayId, gatewaySettingRequestDto);
Пример #7
0
 public Task <Result <int> > Create(int nationalSocietyId, [FromBody] GatewaySettingRequestDto gatewaySettingRequestDto) =>
 _smsGatewayService.Create(nationalSocietyId, gatewaySettingRequestDto);