public async Task SetPublishedSchema_Update_Version()
        {
            // 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
            Guid schemaVersionId = Guid.NewGuid();

            await repository.SetPublishedSchemaAsync(
                new PublishedSchema(
                    initial.Id,
                    initial.EnvironmentId,
                    initial.SchemaId,
                    schemaVersionId));

            // 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(schemaVersionId, retrieved.SchemaVersionId);
        }
        public async Task AddPublishReport()
        {
            // 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 initial = new Schema("foo", "bar");
            await schemas.InsertOneAsync(initial, options : null, default);

            var initialVersion = new SchemaVersion(
                initial.Id,
                "foo",
                DocumentHash.FromSourceText("bar"),
                Array.Empty <Tag>(),
                DateTime.UtcNow);
            await versions.InsertOneAsync(initialVersion, options : null, default);

            var initialReport = new SchemaPublishReport(
                initialVersion.Id, Guid.NewGuid(), Array.Empty <Issue>(),
                PublishState.Published, DateTime.UtcNow);

            var repository = new SchemaRepository(
                schemas, versions, publishReports, publishedSchemas);

            // act
            await repository.SetPublishReportAsync(initialReport);

            // assert
            IReadOnlyDictionary <Guid, SchemaPublishReport> retrieved =
                await repository.GetPublishReportsAsync(new[] { initialReport.Id });

            Assert.True(retrieved.ContainsKey(initialReport.Id));
        }
Example #3
0
        public async Task GetPublishReportBySchemaVersionIdAndEnvironmentId()
        {
            // 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 initial = new Schema("foo", "bar");
            await schemas.InsertOneAsync(initial, options : null, default);

            var initialVersion = new SchemaVersion(
                initial.Id,
                "foo",
                new DocumentHash("baz", "baz", HashFormat.Hex),
                Array.Empty <Tag>(),
                DateTime.UtcNow);
            await versions.InsertOneAsync(initialVersion, options : null, default);

            var initialReport = new SchemaPublishReport(
                initialVersion.Id, Guid.NewGuid(), Array.Empty <Issue>(),
                PublishState.Published, DateTime.UtcNow);
            await publishReports.InsertOneAsync(initialReport, options : null, default);

            var repository = new SchemaRepository(
                schemas, versions, publishReports, publishedSchemas);

            // act
            SchemaPublishReport retrieved = await repository.GetPublishReportAsync(
                initialReport.SchemaVersionId, initialReport.EnvironmentId);

            // assert
            Assert.Equal(initialReport.Id, retrieved.Id);
        }
Example #4
0
        public async Task GetSchemaVersion_By_ExternalId()
        {
            // arrange
            IMongoCollection <Schema> schemas =
                _mongoResource.CreateCollection <Schema>();
            IMongoCollection <SchemaVersion> versions =
                _mongoResource.CreateCollection <SchemaVersion>();
            IMongoCollection <SchemaPublishReport> publishReports =
                _mongoResource.CreateCollection <SchemaPublishReport>();

            var repository = new SchemaRepository(schemas, versions, publishReports);

            var schema = new Schema("foo", "bar");
            await repository.AddSchemaAsync(schema);

            var schemaVersion = new SchemaVersion(
                schema.Id,
                "bar",
                DocumentHash.FromSourceText("bar"),
                new[]
            {
                new Tag("a", "b", DateTime.UtcNow)
            },
                DateTime.UtcNow);
            await repository.AddSchemaVersionAsync(schemaVersion);

            // act
            SchemaVersion retrieved = await repository.GetSchemaVersionByExternalIdAsync(
                schemaVersion.ExternalId);

            // assert
            Assert.NotNull(retrieved);
            Assert.Equal(schemaVersion.Id, retrieved.Id);
            Assert.Equal(schemaVersion.Published, retrieved.Published, TimeSpan.FromSeconds(1));
            Assert.Equal(schemaVersion.SchemaId, retrieved.SchemaId);
            Assert.Equal(schemaVersion.ExternalId, retrieved.ExternalId);
            Assert.Equal(schemaVersion.Tags.Count, retrieved.Tags.Count);
        }
        public async Task UpdatePublishReport()
        {
            // arrange
            IMongoCollection <Schema> schemas =
                _mongoResource.CreateCollection <Schema>();
            IMongoCollection <SchemaVersion> versions =
                _mongoResource.CreateCollection <SchemaVersion>();
            IMongoCollection <SchemaPublishReport> publishReports =
                _mongoResource.CreateCollection <SchemaPublishReport>();

            var initial = new Schema("foo", "bar");
            await schemas.InsertOneAsync(initial, options : null, default);

            var initialVersion = new SchemaVersion(
                initial.Id, "foo", "bar", Array.Empty <Tag>(),
                DateTime.UtcNow);
            await versions.InsertOneAsync(initialVersion, options : null, default);

            var initialReport = new SchemaPublishReport(
                initialVersion.Id, Guid.NewGuid(), Array.Empty <Issue>(),
                PublishState.Published, DateTime.UtcNow);
            await publishReports.InsertOneAsync(initialReport, options : null, default);

            var repository = new SchemaRepository(schemas, versions, publishReports);

            // act
            await repository.UpdatePublishReportAsync(new SchemaPublishReport(
                                                          initialReport.Id, initialReport.SchemaVersionId,
                                                          initialReport.EnvironmentId, initialReport.Issues,
                                                          PublishState.Rejected, DateTime.UtcNow));

            // assert
            IReadOnlyDictionary <Guid, SchemaPublishReport> retrieved =
                await repository.GetPublishReportsAsync(new[] { initialReport.Id });

            Assert.Equal(PublishState.Rejected, retrieved[initialReport.Id].State);
        }
Example #6
0
        public async Task GetSchemas()
        {
            // arrange
            IMongoCollection <Schema> schemas =
                _mongoResource.CreateCollection <Schema>();
            IMongoCollection <SchemaVersion> versions =
                _mongoResource.CreateCollection <SchemaVersion>();
            IMongoCollection <SchemaPublishReport> publishReports =
                _mongoResource.CreateCollection <SchemaPublishReport>();

            var initial = new Schema("foo", "bar");
            await schemas.InsertOneAsync(initial, options : null, default);

            var repository = new SchemaRepository(schemas, versions, publishReports);

            // act
            Schema retrieved = repository.GetSchemas()
                               .Where(t => t.Id == initial.Id)
                               .FirstOrDefault();

            // assert
            Assert.Equal(initial.Name, retrieved.Name);
            Assert.Equal(initial.Description, retrieved.Description);
        }