public void CanGetDataFactory()
        {
            // Arrange
            PSDataFactory expected = new PSDataFactory() {DataFactoryName = DataFactoryName, ResourceGroupName = ResourceGroupName};
         
            dataFactoriesClientMock.Setup(
                c =>
                    c.FilterPSDataFactories(
                        It.Is<DataFactoryFilterOptions>(
                            options => options.Name == DataFactoryName && options.ResourceGroupName == ResourceGroupName)))
                .CallBase()
                .Verifiable();

            dataFactoriesClientMock.Setup(c => c.GetDataFactory(ResourceGroupName, DataFactoryName))
                .Returns(expected)
                .Verifiable();
            
            // Action
            cmdlet.ResourceGroupName = ResourceGroupName;
            cmdlet.Name = "  ";
            Exception whiteSpace = Assert.Throws<PSArgumentNullException>(() => cmdlet.ExecuteCmdlet());

            cmdlet.Name = "";
            Exception empty = Assert.Throws<PSArgumentNullException>(() => cmdlet.ExecuteCmdlet());

            cmdlet.Name = DataFactoryName;
            cmdlet.ExecuteCmdlet();                      

            // Assert
            dataFactoriesClientMock.VerifyAll();
            Assert.Contains("Value cannot be null", whiteSpace.Message);
            Assert.Contains("Value cannot be null", empty.Message);
            commandRuntimeMock.Verify(f => f.WriteObject(expected), Times.Once());
        }
        private bool CheckDataFactoryExists(string resourceGroupName, string dataFactoryName, out PSDataFactory dataFactory)
        {
            dataFactory = null;
            // ToDo: use HEAD to check if a resource exists or not
            try
            {
                dataFactory = GetDataFactory(resourceGroupName, dataFactoryName);

                return true;
            }
            catch (CloudException e)
            {
                //Get throws NotFound exception if data factory not exists
                if (e.Response.StatusCode == HttpStatusCode.NotFound)
                {
                    return false;
                }

                throw;
            }
        }
        public virtual PSDataFactory CreatePSDataFactory(CreatePSDataFactoryParameters parameters)
        {
            PSDataFactory dataFactory = null;
            Action createDataFactory = () =>
            {
                Dictionary<string, string> tags = new Dictionary<string, string>();
                if (parameters.Tags != null)
                {
                    tags = parameters.Tags.ToDictionary();
                }

                dataFactory =
                    new PSDataFactory(
                        CreateOrUpdateDataFactory(parameters.ResourceGroupName, parameters.DataFactoryName,
                            parameters.Location, tags)) {ResourceGroupName = parameters.ResourceGroupName};
            };

            if (parameters.Force)
            {
                // If user decides to overwrite anyway, then there is no need to check if the data factory exists or not.
                createDataFactory();
            }
            else
            {
                bool dataFactoryExists = CheckDataFactoryExists(parameters.ResourceGroupName, parameters.DataFactoryName);

                parameters.ConfirmAction(
                    !dataFactoryExists,    // prompt only if the data factory exists
                    string.Format(
                        CultureInfo.InvariantCulture,
                        Resources.DataFactoryExists,
                        parameters.DataFactoryName,
                        parameters.ResourceGroupName),
                    string.Format(
                        CultureInfo.InvariantCulture,
                        Resources.DataFactoryCreating,
                        parameters.DataFactoryName,
                        parameters.ResourceGroupName),
                    parameters.DataFactoryName,
                    createDataFactory);
            }

            if (!DataFactoryCommonUtilities.IsSucceededProvisioningState(dataFactory.ProvisioningState))
            {
                string errorMessage = dataFactory.Properties == null
                    ? string.Empty
                    : dataFactory.Properties.ErrorMessage;
                throw new ProvisioningFailedException(errorMessage);
            }

            return dataFactory;
        }
        public virtual PSDataFactory CreatePSDataFactory(CreatePSDataFactoryParameters parameters)
        {
            PSDataFactory dataFactory = null;
            Action createDataFactory = () =>
            {
                Dictionary<string, string> tags = new Dictionary<string, string>();
                if (parameters.Tags != null)
                {
                    tags = parameters.Tags.ToDictionary();
                }

                dataFactory =
                    new PSDataFactory(
                        CreateOrUpdateDataFactory(parameters.ResourceGroupName, parameters.DataFactoryName,
                            parameters.Location, tags))
                    { ResourceGroupName = parameters.ResourceGroupName };
            };

            parameters.ConfirmAction(
                parameters.Force,    // prompt only if the data factory exists
                string.Format(
                    CultureInfo.InvariantCulture,
                    Resources.DataFactoryExists,
                    parameters.DataFactoryName,
                    parameters.ResourceGroupName),
                string.Format(
                    CultureInfo.InvariantCulture,
                    Resources.DataFactoryCreating,
                    parameters.DataFactoryName,
                    parameters.ResourceGroupName),
                parameters.DataFactoryName,
                createDataFactory,
                () => CheckDataFactoryExists(parameters.ResourceGroupName, parameters.DataFactoryName, out dataFactory));

            if (!DataFactoryCommonUtilities.IsSucceededProvisioningState(dataFactory.ProvisioningState))
            {
                string errorMessage = dataFactory.Properties == null
                    ? string.Empty
                    : dataFactory.Properties.ErrorMessage;
                throw new ProvisioningFailedException(errorMessage);
            }

            return dataFactory;
        }