public async Task DeleteAsync_CallsDelete(OrganizationConnection connection, SutProvider <DeleteOrganizationConnectionCommand> sutProvider) { await sutProvider.Sut.DeleteAsync(connection); await sutProvider.GetDependency <IOrganizationConnectionRepository>().Received(1) .DeleteAsync(connection); }
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); }
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); }
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);
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); } }
public async Task DeleteAsync(OrganizationConnection connection) { await _organizationConnectionRepository.DeleteAsync(connection); }