コード例 #1
0
        public async Task DeleteAsync_CallsDelete(OrganizationConnection connection,
                                                  SutProvider <DeleteOrganizationConnectionCommand> sutProvider)
        {
            await sutProvider.Sut.DeleteAsync(connection);

            await sutProvider.GetDependency <IOrganizationConnectionRepository>().Received(1)
            .DeleteAsync(connection);
        }
コード例 #2
0
        public OrganizationConnectionResponseModel(OrganizationConnection connection, Type configType)
        {
            if (connection == null)
            {
                return;
            }

            Id             = connection.Id;
            Type           = connection.Type;
            OrganizationId = connection.OrganizationId;
            Enabled        = connection.Enabled;
            Config         = JsonDocument.Parse(connection.Config);
        }
コード例 #3
0
        public OrganizationConnection ToEntity()
        {
            var result = new OrganizationConnection()
            {
                Type           = Type,
                OrganizationId = OrganizationId,
                Enabled        = Enabled,
            };

            result.SetConfig(Config);

            if (Id.HasValue)
            {
                result.Id = Id.Value;
            }

            return(result);
        }
コード例 #4
0
        public async Task SyncOrganization_BillingSyncKeyDisabled_ThrowsBadRequest(
            Guid cloudOrganizationId, OrganizationConnection billingSyncConnection)
        {
            var sutProvider = GetSutProvider();

            billingSyncConnection.Enabled = false;
            billingSyncConnection.SetConfig(new BillingSyncConfig
            {
                BillingSyncKey = "okslkcslkjf"
            });

            var exception = await Assert.ThrowsAsync <BadRequestException>(() =>
                                                                           sutProvider.Sut.SyncOrganization(billingSyncConnection.OrganizationId, cloudOrganizationId, billingSyncConnection));

            Assert.Contains($"Billing Sync Key disabled", exception.Message);

            await sutProvider.GetDependency <IOrganizationSponsorshipRepository>()
            .DidNotReceiveWithAnyArgs()
            .DeleteManyAsync(default);
コード例 #5
0
        public async Task SyncOrganization(Guid organizationId, Guid cloudOrganizationId, OrganizationConnection billingSyncConnection)
        {
            if (!_globalSettings.EnableCloudCommunication)
            {
                throw new BadRequestException("Failed to sync instance with cloud - Cloud communication is disabled in global settings");
            }
            if (!billingSyncConnection.Enabled)
            {
                throw new BadRequestException($"Billing Sync Key disabled for organization {organizationId}");
            }
            if (string.IsNullOrWhiteSpace(billingSyncConnection.Config))
            {
                throw new BadRequestException($"No Billing Sync Key known for organization {organizationId}");
            }
            var billingSyncConfig = billingSyncConnection.GetConfig <BillingSyncConfig>();

            if (billingSyncConfig == null || string.IsNullOrWhiteSpace(billingSyncConfig.BillingSyncKey))
            {
                throw new BadRequestException($"Failed to get Billing Sync Key for organization {organizationId}");
            }

            var organizationSponsorshipsDict = (await _organizationSponsorshipRepository.GetManyBySponsoringOrganizationAsync(organizationId))
                                               .ToDictionary(i => i.SponsoringOrganizationUserId);

            if (!organizationSponsorshipsDict.Any())
            {
                _logger.LogInformation($"No existing sponsorships to sync for organization {organizationId}");
                return;
            }
            var syncedSponsorships = new List <OrganizationSponsorshipData>();

            foreach (var orgSponsorshipsBatch in CoreHelpers.Batch(organizationSponsorshipsDict.Values, 1000))
            {
                var response = await SendAsync <OrganizationSponsorshipSyncRequestModel, OrganizationSponsorshipSyncResponseModel>(HttpMethod.Post, "organization/sponsorship/sync", new OrganizationSponsorshipSyncRequestModel
                {
                    BillingSyncKey = billingSyncConfig.BillingSyncKey,
                    SponsoringOrganizationCloudId = cloudOrganizationId,
                    SponsorshipsBatch             = orgSponsorshipsBatch.Select(s => new OrganizationSponsorshipRequestModel(s))
                });

                if (response == null)
                {
                    _logger.LogDebug("Organization sync failed for '{OrgId}'", organizationId);
                    throw new BadRequestException("Organization sync failed");
                }

                syncedSponsorships.AddRange(response.ToOrganizationSponsorshipSync().SponsorshipsBatch);
            }

            var sponsorshipsToDelete = syncedSponsorships.Where(s => s.CloudSponsorshipRemoved).Select(i => organizationSponsorshipsDict[i.SponsoringOrganizationUserId].Id);
            var sponsorshipsToUpsert = syncedSponsorships.Where(s => !s.CloudSponsorshipRemoved).Select(i =>
            {
                var existingSponsorship = organizationSponsorshipsDict[i.SponsoringOrganizationUserId];
                if (existingSponsorship != null)
                {
                    existingSponsorship.LastSyncDate = i.LastSyncDate;
                    existingSponsorship.ValidUntil   = i.ValidUntil;
                    existingSponsorship.ToDelete     = i.ToDelete;
                }
                else
                {
                    // shouldn't occur, added in case self hosted loses a sponsorship
                    existingSponsorship = new OrganizationSponsorship
                    {
                        SponsoringOrganizationId     = organizationId,
                        SponsoringOrganizationUserId = i.SponsoringOrganizationUserId,
                        FriendlyName        = i.FriendlyName,
                        OfferedToEmail      = i.OfferedToEmail,
                        PlanSponsorshipType = i.PlanSponsorshipType,
                        LastSyncDate        = i.LastSyncDate,
                        ValidUntil          = i.ValidUntil,
                        ToDelete            = i.ToDelete
                    };
                }
                return(existingSponsorship);
            });

            if (sponsorshipsToDelete.Any())
            {
                await _organizationSponsorshipRepository.DeleteManyAsync(sponsorshipsToDelete);
            }
            if (sponsorshipsToUpsert.Any())
            {
                await _organizationSponsorshipRepository.UpsertManyAsync(sponsorshipsToUpsert);
            }
        }
コード例 #6
0
 public async Task DeleteAsync(OrganizationConnection connection)
 {
     await _organizationConnectionRepository.DeleteAsync(connection);
 }