public async Task Returns_All_Items()
            {
                var model1 = new ServiceApiDescriptionBuilder().WithServiceId("AllItem1").Build();
                var model2 = new ServiceApiDescriptionBuilder().WithServiceId("AllItem2").Build();

                using (var context = new RepositoryDbContext(DbContextOptions, StoreOptions))
                {
                    context.Apis.RemoveRange(context.Apis.ToArray());
                    context.Apis.Add(model1.ToEntity());
                    context.Apis.Add(model2.ToEntity());
                    context.SaveChanges();
                }

                using (var context = new RepositoryDbContext(DbContextOptions, StoreOptions))
                {
                    var store    = new ApiStore(context, new Mock <ILogger <ApiStore> >().Object);
                    var services = (await store.GetAllAsync()).OrderBy(s => s.ServiceId).ToList();

                    services.Should().HaveCount(2);
                    services[0].ServiceId.Should().Be(model1.ServiceId);
                    services[0].ApiDocument.Info.Title.Should().Be(model1.ApiDocument.Info.Title);

                    services[1].ServiceId.Should().Be(model2.ServiceId);
                    services[1].ApiDocument.Info.Title.Should().Be(model2.ApiDocument.Info.Title);
                }
            }
            public async Task Updates_ApiDocument_On_Existing_Item()
            {
                var model = new ServiceApiDescriptionBuilder().WithServiceId("Updates_DisplayName_On_Existing_Item").Build();

                using (var context = new RepositoryDbContext(DbContextOptions, StoreOptions))
                {
                    context.Apis.Add(model.ToEntity());
                    context.SaveChanges();
                }

                model.ApiDocument.Info.Title = "New title";

                using (var context = new RepositoryDbContext(DbContextOptions, StoreOptions))
                {
                    var store = new ApiStore(context, new Mock <ILogger <ApiStore> >().Object);
                    await store.StoreAsync(model);
                }

                using (var context = new RepositoryDbContext(DbContextOptions, StoreOptions))
                {
                    var item = context.Apis.SingleOrDefault(s => s.ServiceId == model.ServiceId);
                    item.Should().NotBeNull();

                    var document = OpenApiDocumentHelper.ReadFromJson(item.ApiDocument);

                    document.Info.Title.Should().Be(model.ApiDocument.Info.Title);
                }
            }
        public void UpdateEntity_Updates_ServiceId()
        {
            var model  = new ServiceApiDescriptionBuilder().Build();
            var entity = model.ToEntity();

            model.ServiceId = "UpdateEntity_Updates_ServiceId";
            model.UpdateEntity(entity);

            entity.ServiceId.Should().Be(model.ServiceId);
        }
        public void UpdateEntity_Updates_ApiDocument()
        {
            var model  = new ServiceApiDescriptionBuilder().Build();
            var entity = model.ToEntity();

            model.ApiDocument.Info.Title = "UpdateEntity_Updates_ApiDocument";
            model.UpdateEntity(entity);

            var document = OpenApiDocumentHelper.ReadFromJson(entity.ApiDocument);

            document.Info.Title.Should().Be(model.ApiDocument.Info.Title);
        }
        public void Maps_All_Properties()
        {
            var model  = new ServiceApiDescriptionBuilder().Build();
            var entity = model.ToEntity();

            entity.ServiceId.Should().Be(model.ServiceId);

            var document = OpenApiDocumentHelper.ReadFromJson(entity.ApiDocument);

            var newmodel = entity.ToModel();

            newmodel.ApiDocument.Info.Title.Should().Be(model.ApiDocument.Info.Title);
            document.Info.Title.Should().Be(model.ApiDocument.Info.Title);
        }
            public async Task Saves_New_Item()
            {
                var model = new ServiceApiDescriptionBuilder().WithServiceId("Saves_New_Item").Build();

                using (var context = new RepositoryDbContext(DbContextOptions, StoreOptions))
                {
                    var store = new ApiStore(context, new Mock <ILogger <ApiStore> >().Object);
                    await store.StoreAsync(model);
                }

                using (var context = new RepositoryDbContext(DbContextOptions, StoreOptions))
                {
                    var apiDescription = context.Apis.SingleOrDefault(s => s.ServiceId == model.ServiceId);
                    apiDescription.Should().NotBeNull();

                    apiDescription.ServiceId.Should().Be(model.ServiceId);
                    // TODO check api document
                }
            }
            public async Task Returns_Item_With_All_Properties_When_Api_Exists()
            {
                var model = new ServiceApiDescriptionBuilder().Build();

                using (var context = new RepositoryDbContext(DbContextOptions, StoreOptions))
                {
                    context.Apis.Add(model.ToEntity());
                    context.SaveChanges();
                }

                using (var context = new RepositoryDbContext(DbContextOptions, StoreOptions))
                {
                    var store = new ApiStore(context, new Mock <ILogger <ApiStore> >().Object);
                    var item  = await store.FindByServiceIdAsync(model.ServiceId);

                    item.Should().NotBeNull();
                    item.ServiceId.Should().Be(model.ServiceId);

                    // TODO check api document
                }
            }
            public async Task Removes_Existing_Item()
            {
                var model = new ServiceApiDescriptionBuilder().WithServiceId("Removes_Existing_Item").Build();

                using (var context = new RepositoryDbContext(DbContextOptions, StoreOptions))
                {
                    context.Apis.Add(model.ToEntity());
                    context.SaveChanges();
                }

                using (var context = new RepositoryDbContext(DbContextOptions, StoreOptions))
                {
                    var store = new ApiStore(context, new Mock <ILogger <ApiStore> >().Object);
                    await store.RemoveAsync(model.ServiceId);
                }

                using (var context = new RepositoryDbContext(DbContextOptions, StoreOptions))
                {
                    context.Apis.SingleOrDefault(s => s.ServiceId == model.ServiceId).Should().BeNull();
                }
            }