public static void DisableSellableItemVariant(string variantName, string productName, string parentName, string catalogName)
        {
            var productId = productName.ToEntityId <SellableItem>();

            EngineExtensions.AssertSellableItemExists(productName, parentName, variantName, catalogName);

            var view = Proxy.GetValue(EngineExtensions.AuthoringContainer.Value.GetEntityView(productId, "Details", "DisableSellableItemVariant", variantName));

            view.Should().NotBeNull();
            view.Policies.Should().BeEmpty();
            view.Properties.Should().NotBeEmpty();
            view.ChildViews.Should().BeEmpty();

            view.Properties = new ObservableCollection <ViewProperty>
            {
                view.Properties.First(p => p.Name.Equals("Version"))
            };

            var result = Proxy.DoCommand(EngineExtensions.AuthoringContainer.Value.DoAction(view));

            result.Messages.Should().NotContainErrors();

            EngineExtensions.AssertSellableItemExists(productName, parentName, variantName, catalogName);

            var variant          = AssertChildViewItemExists(productId, ChildViewNames.SellableItemVariants, variantName);
            var disabledProperty = variant.Properties.FirstOrDefault(p => p.Name.EqualsIgnoreCase("disabled"));

            disabledProperty.Should().NotBeNull($"Variant '{variantName}' property 'disabled' was not found.");
            disabledProperty.Value.Should().Be("true", $"Variant '{variantName}' was not disabled in entity {productId}.");
        }
        public static void DeleteSellableItemVariant(string variantName, string productName, string parentName, string catalogName)
        {
            var productId = productName.ToEntityId <SellableItem>();

            EngineExtensions.AssertSellableItemExists(productName, parentName, variantName, catalogName);

            var view = Proxy.GetValue(EngineExtensions.AuthoringContainer.Value.GetEntityView(productId, "Details", "DeleteSellableItemVariant", variantName));

            view.Should().NotBeNull();
            view.Policies.Should().BeEmpty();
            view.Properties.Should().NotBeEmpty();
            view.ChildViews.Should().BeEmpty();

            view.Properties = new ObservableCollection <ViewProperty>
            {
                view.Properties.First(p => p.Name.Equals("Version"))
            };

            var result = Proxy.DoCommand(EngineExtensions.AuthoringContainer.Value.DoAction(view));

            result.Messages.Should().NotContainErrors();

            EngineExtensions.AssertSellableItemExists(productName, parentName, "", catalogName);
            EngineExtensions.AssertChildViewItemNotExists(productId, ChildViewNames.SellableItemVariants, variantName);
            EngineExtensions.AssertSellableItemNotExists(productName, parentName, variantName, catalogName);
        }
        private static async Task RunImport(string filePath, string mode, string importMethodName, params string[] allowedErrorTerms)
        {
            using (new SampleMethodScope())
            {
                File.Exists(filePath).Should().BeTrue();
                using (var importStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
                    using (var hc = EngineExtensions.CreateHttpClientAuthoring())
                        using (var importContent = new MultipartFormDataContent())
                        {
                            importContent.Add(new StreamContent(importStream), "importFile", filePath);
                            importContent.Add(new StringContent(mode), "mode");
                            importContent.Add(new StringContent("0"), "errorThreshold");

                            var importResponse = await hc.PutAsync($"{Program.ShopsServiceUri}{importMethodName}()", importContent);

                            importResponse.IsSuccessStatusCode.Should().BeTrue();
                            var importResponseText = await importResponse.Content.ReadAsStringAsync();

                            var importCommand = JsonConvert.DeserializeObject <CommerceCommand>(importResponseText);
                            importCommand.WaitUntilCompletion(allowedErrorTerms);
                        }
            }
        }