public async Task GetPublishedSchema() { // arrange IMongoCollection <Schema> schemas = _mongoResource.CreateCollection <Schema>(); IMongoCollection <SchemaVersion> versions = _mongoResource.CreateCollection <SchemaVersion>(); IMongoCollection <SchemaPublishReport> publishReports = _mongoResource.CreateCollection <SchemaPublishReport>(); IMongoCollection <PublishedSchema> publishedSchemas = _mongoResource.CreateCollection <PublishedSchema>(); var repository = new SchemaRepository( schemas, versions, publishReports, publishedSchemas); var initial = new PublishedSchema( Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid()); await publishedSchemas.InsertOneAsync(initial); // act await repository.GetPublishedSchemaAsync( initial.SchemaId, initial.EnvironmentId); // assert PublishedSchema retrieved = await publishedSchemas.AsQueryable().FirstOrDefaultAsync(); Assert.NotNull(retrieved); Assert.Equal(initial.Id, retrieved.Id); Assert.Equal(initial.EnvironmentId, retrieved.EnvironmentId); Assert.Equal(initial.SchemaId, retrieved.SchemaId); Assert.Equal(initial.SchemaVersionId, retrieved.SchemaVersionId); }
public async Task SetPublishedSchemaAsync( PublishedSchema publishedSchema, CancellationToken cancellationToken = default) { UpdateResult result = await _publishedSchemas.UpdateOneAsync( Builders <PublishedSchema> .Filter.And( Builders <PublishedSchema> .Filter.Eq( t => t.EnvironmentId, publishedSchema.EnvironmentId), Builders <PublishedSchema> .Filter.Eq( t => t.SchemaId, publishedSchema.SchemaId)), Builders <PublishedSchema> .Update.Combine( Builders <PublishedSchema> .Update.SetOnInsert( t => t.EnvironmentId, publishedSchema.EnvironmentId), Builders <PublishedSchema> .Update.SetOnInsert( t => t.SchemaId, publishedSchema.SchemaId), Builders <PublishedSchema> .Update.SetOnInsert( t => t.Id, publishedSchema.Id), Builders <PublishedSchema> .Update.Set( t => t.SchemaVersionId, publishedSchema.SchemaVersionId)), new UpdateOptions { IsUpsert = true }, cancellationToken) .ConfigureAwait(false); if (!result.IsUpserted(publishedSchema.Id)) { throw new RepositoryException("The published schema was not updated."); } }
public static async Task <ISchema?> TryLoadSchemaAsync( ISchemaRepository repository, IFileStorage storage, Guid schemaId, Guid environmentId, IssueLogger logger, CancellationToken cancellationToken) { try { PublishedSchema publishedSchema = await repository.GetPublishedSchemaAsync( schemaId, environmentId, cancellationToken) .ConfigureAwait(false); IFileContainer container = await storage.GetContainerAsync( publishedSchema.SchemaVersionId.ToString("N", CultureInfo.InvariantCulture), cancellationToken) .ConfigureAwait(false); IEnumerable <IFile> files = await container.GetFilesAsync( cancellationToken) .ConfigureAwait(false); DocumentNode?document = await DocumentHelper.TryParseDocumentAsync( files.Single(), logger, cancellationToken) .ConfigureAwait(false); if (document is { }) { return(await TryCreateSchemaAsync( document, logger, cancellationToken) .ConfigureAwait(false)); } }
public async Task SetPublishedSchemaAsync( PublishedSchema publishedClient, CancellationToken cancellationToken = default) { await _publishedSchemas.UpdateOneAsync( Builders <PublishedSchema> .Filter.And( Builders <PublishedSchema> .Filter.Eq( t => t.EnvironmentId, publishedClient.EnvironmentId), Builders <PublishedSchema> .Filter.Eq( t => t.SchemaId, publishedClient.SchemaId)), Builders <PublishedSchema> .Update.Combine( Builders <PublishedSchema> .Update.SetOnInsert( t => t.EnvironmentId, publishedClient.EnvironmentId), Builders <PublishedSchema> .Update.SetOnInsert( t => t.SchemaId, publishedClient.SchemaId), Builders <PublishedSchema> .Update.Set( t => t.Id, publishedClient.Id), Builders <PublishedSchema> .Update.Set( t => t.SchemaVersionId, publishedClient.SchemaVersionId)), new UpdateOptions { IsUpsert = true }, cancellationToken) .ConfigureAwait(false); }