public void RunBeforeEachTest()
 {
     resource1 = new CkanResource { Name = "1" };
     resource2 = new CkanResource { Name = "2" };
     package = new CkanPackage
     {
         Id = packageId,
         Resources = new List<CkanResource>()
     };
 }
        public CkanResource GetUnsavedResource(string packageId, IndicatorMetadata indicatorMetadata,
            IList<CkanCoreDataSet> dataList)
        {
            IDictionary<string, string> descriptive = indicatorMetadata.Descriptive;
            var indicatorName = descriptive[IndicatorMetadataTextColumnNames.Name];

            // Add metadata resource
            var resource = new CkanResource();
            resource.PackageId = packageId;
            resource.Description = "Data for \"" + indicatorName + "\"";
            resource.Format = "CSV";
            resource.Name = "Data";

            // Add file to resource
            byte[] fileContents = GetCoreDataFileAsBytes(dataList);
            var fileNamer = new CkanFileNamer(indicatorName);
            resource.File = new CkanResourceFile
            {
                FileName = fileNamer.DataFileName,
                FileContents = fileContents
            };

            return resource;
        }
        public CkanResource GetUnsavedResource(string packageId, IndicatorMetadata indicatorMetadata,
            IList<IndicatorMetadataTextProperty> properties)
        {
            var descriptive = indicatorMetadata.Descriptive;
            var indicatorName = descriptive[IndicatorMetadataTextColumnNames.Name];

            // Add metadata resource
            var resource = new CkanResource();
            resource.PackageId = packageId;
            resource.Description = "Metadata for \"" + indicatorName + "\"";
            resource.Format = "CSV";
            resource.Name = "Metadata";

            // Add file to resource
            var fileContents = GetMetadataFileAsBytes(indicatorMetadata, properties, descriptive);
            var fileNamer = new CkanFileNamer(indicatorName);
            resource.File = new CkanResourceFile
            {
                FileName = fileNamer.MetadataFileName,
                FileContents = fileContents
            };

            return resource;
        }
        private CkanResource UploadResource(CkanResource ckanResource)
        {
            try
            {
                return CkanApi.CreateResource(ckanResource);
            }
            catch (Exception ex)
            {
                if (ex is CkanTimeoutException || ex is CkanInternalServerException)
                {
                    if (WaitIfResourceUploadFails)
                    {
                        // Wait 10s before continuing
                        Thread.Sleep(1000*10);
                    }
                }
                else
                {
                    throw;
                }
            }

            return null;
        }
        public void GetCreateResource_Throws_Exception_If_Timeout()
        {
            // Arrange: mock HTTP client
            var mock = new Moq.Mock<ICkanHttpClient>();
            var json = CkanTestHelper.GetExampleResponseFromFile("resource_create_timeout.txt");
            var requestResource = new CkanResource();
            mock.Setup(x => x.UploadResource(ActionNames.ResourceCreate, requestResource))
                .Returns(json);

            // Act: get package
            new CkanApi(mock.Object).CreateResource(requestResource);
        }
        public void GetCreateResource_Returns_Resource()
        {
            // Arrange: mock HTTP client
            var mock = new Moq.Mock<ICkanHttpClient>();
            var json = CkanTestHelper.GetExampleResponseFromFile("resource_create.json");
            var requestResource = new CkanResource();
            mock.Setup(x => x.UploadResource(ActionNames.ResourceCreate, requestResource))
                .Returns(json);

            // Act: get package
            var resource = new CkanApi(mock.Object).CreateResource(requestResource);

            // Assert
            Assert.AreEqual("Metadata", resource.Name);
            Assert.AreEqual(2015, resource.Created.Year);
            Assert.AreEqual("6ff56435-b348-46f3-83fb-c1378cc0c39c", resource.ResourceGroupId);
        }
        public void TestCreateResource()
        {
            var ckan = CkanApi();
            var unsavedResource = new CkanResource();
            unsavedResource.PackageId = PackageName;
            unsavedResource.Description = Description;
            unsavedResource.Format = "CSV";
            unsavedResource.Name = "resource name 6";
            unsavedResource.File = new CkanResourceFile
            {
                FileName = "test.csv",
                FileContents = GetBytes("a,b")
            };
            var savedResource = ckan.CreateResource(unsavedResource);

            // Check package
            Assert.IsNotNull(savedResource);
            Assert.AreEqual(savedResource.Format, "CSV");
        }
        private async Task<string> UploadData(string actionName, CkanResource resource)
        {
            string result = null;
            using (var client = new HttpClient())
            {
                InitHttpClient(client);

                using (var content = new MultipartFormDataContent())
                {
                    var values = new[]
                    {
                        new KeyValuePair<string, string>("package_id", resource.PackageId),
                        new KeyValuePair<string, string>("format", resource.Format),
                        new KeyValuePair<string, string>("name", resource.Name),
                        new KeyValuePair<string, string>("description", resource.Description)
                    };

                    foreach (var keyValuePair in values)
                    {
                        content.Add(new StringContent(keyValuePair.Value), keyValuePair.Key);
                    }

                    var fileContent = new ByteArrayContent(resource.File.FileContents);
                    fileContent.Headers.Add("Content-Type", "application/vnd.ms-excel");
                    content.Add(fileContent, "upload", resource.File.FileName);

                    var requestUrl = ApiResourcePath + actionName;
                    Console.WriteLine("#URL: " + requestUrl);
                    HttpResponseMessage response = await client.PostAsync(requestUrl, content);

                    result = await response.Content.ReadAsStringAsync();
                }
            }

            return result;
        }
 public string UploadResource(string actionName, CkanResource resource)
 {
     Task<string> task = UploadData(actionName, resource);
     string json = task.Result;
     return json;
 }