public async Task CreatePidUriTemplate_Success()
        {
            var baseUrl = Graph.Metadata.Constants.Resource.PidUrlPrefix;
            var pidUriTemplateIdType = TestUtils.GetRandomEnumValue <IdType>();
            var pidUriTemplateSuffix = TestUtils.GetRandomEnumValue <Suffix>();

            // Arrange
            var pidUriTpl = new PidUriTemplateBuilder().GenerateSampleData()
                            .WithBaseUrl(baseUrl)
                            .WithPidUriTemplateIdType(pidUriTemplateIdType)
                            .WithPidUriTemplateSuffix(pidUriTemplateSuffix)
                            .Build();

            HttpContent requestContent = new StringContent(pidUriTpl.ToString(), Encoding.UTF8, MediaTypeNames.Application.Json);

            // Act
            var result = await _client.PostAsync(_apiPath, requestContent);

            result.EnsureSuccessStatusCode();

            // Assert
            var content = await result.Content.ReadAsStringAsync().ConfigureAwait(false);

            var pidUriTplResult = JsonConvert.DeserializeObject <PidUriTemplateWriteResultCTO>(content).Entity;

            Assert.NotNull(pidUriTplResult);
            AssertResultProperties(pidUriTplResult.Properties, baseUrl, "1", pidUriTemplateIdType, pidUriTemplateSuffix);

            // Cleanup
            var deleteResult = await _client.DeleteAsync($"{_apiPath}?id={HttpUtility.UrlEncode(pidUriTplResult.Id)}");

            deleteResult.EnsureSuccessStatusCode();
        }
        public async Task EditPidUriTemplate_Error_NotFound_InvalidUri()
        {
            var         pidUriTpl            = new PidUriTemplateBuilder().GenerateSampleData().Build();
            HttpContent updateRequestContent = new StringContent(pidUriTpl.ToString(), Encoding.UTF8, MediaTypeNames.Application.Json);
            var         editResult           = await _client.PutAsync($"{_apiPath}?id=INVALID_URI", updateRequestContent);

            Assert.Equal(HttpStatusCode.BadRequest, editResult.StatusCode);
        }
        public async Task EditPidUriTemplate_Success()
        {
            var baseUrl = Graph.Metadata.Constants.Resource.PidUrlPrefix;
            var pidUriTemplateIdType = TestUtils.GetRandomEnumValue <IdType>();
            var pidUriTemplateSuffix = TestUtils.GetRandomEnumValue <Suffix>();

            // Create TPL
            var         pidUriTpl            = new PidUriTemplateBuilder().GenerateSampleData().WithBaseUrl(baseUrl).WithPidUriTemplateIdType(pidUriTemplateIdType).WithPidUriTemplateSuffix(pidUriTemplateSuffix).Build();
            HttpContent createRequestContent = new StringContent(pidUriTpl.ToString(), Encoding.UTF8, MediaTypeNames.Application.Json);
            var         createResult         = await _client.PostAsync(_apiPath, createRequestContent);

            createResult.EnsureSuccessStatusCode();
            var createdContent = await createResult.Content.ReadAsStringAsync().ConfigureAwait(false);

            var createdEntity = JsonConvert.DeserializeObject <PidUriTemplateWriteResultCTO>(createdContent);
            var searchUrl     = $"{_apiPath}?id={TestUtils.EncodeIfNecessary(createdEntity.Entity.Id)}";

            // Search TPL
            var searchResult = await _client.GetAsync(searchUrl);

            searchResult.EnsureSuccessStatusCode();

            // Edit TPL
            var         newRoute             = "new-route";
            var         updateTpl            = new PidUriTemplateBuilder().GenerateSampleData().WithRoute(newRoute).WithBaseUrl(baseUrl).WithPidUriTemplateIdType(pidUriTemplateIdType).WithPidUriTemplateSuffix(pidUriTemplateSuffix).Build();
            HttpContent updateRequestContent = new StringContent(updateTpl.ToString(), Encoding.UTF8, MediaTypeNames.Application.Json);
            var         editResult           = await _client.PutAsync(searchUrl, updateRequestContent);

            editResult.EnsureSuccessStatusCode();

            // Search TPL
            var searchResultAfterEdit = await _client.GetAsync(searchUrl);

            searchResultAfterEdit.EnsureSuccessStatusCode();
            var updateContentAfterEdit = await searchResultAfterEdit.Content.ReadAsStringAsync().ConfigureAwait(false);

            var updatedEntity = JsonConvert.DeserializeObject <BaseEntityResultDTO>(updateContentAfterEdit);

            Assert.Equal(new List <string> {
                newRoute
            }, updatedEntity.Properties[COLID.Graph.Metadata.Constants.PidUriTemplate.HasRoute]);

            // Cleanup TPL
            var deleteResult = await _client.DeleteAsync(searchUrl);

            deleteResult.EnsureSuccessStatusCode();
        }
        public async Task DeletePidUriTemplate_Purge_Success()
        {
            // Create Tpl
            var baseUrl = Graph.Metadata.Constants.Resource.PidUrlPrefix;
            var pidUriTemplateIdType = TestUtils.GetRandomEnumValue <IdType>();
            var pidUriTemplateSuffix = TestUtils.GetRandomEnumValue <Suffix>();

            var pidUriTpl = new PidUriTemplateBuilder().GenerateSampleData()
                            .WithBaseUrl(baseUrl)
                            .WithPidUriTemplateIdType(pidUriTemplateIdType)
                            .WithPidUriTemplateSuffix(pidUriTemplateSuffix)
                            .Build();

            HttpContent requestContent = new StringContent(pidUriTpl.ToString(), Encoding.UTF8, MediaTypeNames.Application.Json);
            var         result         = await _client.PostAsync(_apiPath, requestContent);

            result.EnsureSuccessStatusCode();

            var content = await result.Content.ReadAsStringAsync().ConfigureAwait(false);

            var pidUriTplResult = JsonConvert.DeserializeObject <PidUriTemplateWriteResultCTO>(content).Entity;
            var searchUrl       = $"{_apiPath}?id={TestUtils.EncodeIfNecessary(pidUriTplResult.Id)}";

            // Search Template
            var searchResult = await _client.GetAsync(searchUrl);

            searchResult.EnsureSuccessStatusCode();

            // Delete Template
            var deleteResult = await _client.DeleteAsync(searchUrl);

            deleteResult.EnsureSuccessStatusCode();

            // Search Template again
            var searchResultAfterDeletion = await _client.GetAsync(searchUrl);

            Assert.Equal(HttpStatusCode.NotFound, searchResultAfterDeletion.StatusCode);
        }
        public async Task EditPidUriTemplate_Error_BadRequest_SameTemplateExists()
        {
            var baseUrl = Graph.Metadata.Constants.Resource.PidUrlPrefix;
            var pidUriTemplateIdType = IdType.Guid.GetDescription();
            var pidUriTemplateSuffix = Suffix.Empty.GetDescription();

            // Arrange

            // Create TPL
            var         pidUriTpl            = new PidUriTemplateBuilder().GenerateSampleData().WithBaseUrl(baseUrl).WithPidUriTemplateIdType(pidUriTemplateIdType).WithPidUriTemplateSuffix(pidUriTemplateSuffix).Build();
            HttpContent createRequestContent = new StringContent(pidUriTpl.ToString(), Encoding.UTF8, MediaTypeNames.Application.Json);
            var         createResult         = await _client.PostAsync(_apiPath, createRequestContent);

            createResult.EnsureSuccessStatusCode();
            var createdContent = await createResult.Content.ReadAsStringAsync().ConfigureAwait(false);

            var createdEntity = JsonConvert.DeserializeObject <PidUriTemplateWriteResultCTO>(createdContent);
            var searchUrl     = $"{_apiPath}?id={TestUtils.EncodeIfNecessary(createdEntity.Entity.Id)}";

            // Search TPL
            var searchResult = await _client.GetAsync(searchUrl);

            searchResult.EnsureSuccessStatusCode();

            // Edit TPL
            var         newSearchUrl         = $"{_apiPath}?id={TestUtils.EncodeIfNecessary(_validId)}";
            HttpContent updateRequestContent = new StringContent(pidUriTpl.ToString(), Encoding.UTF8, MediaTypeNames.Application.Json);
            var         editResult           = await _client.PutAsync(newSearchUrl, updateRequestContent);

            Assert.Equal(HttpStatusCode.BadRequest, editResult.StatusCode);

            // Cleanup
            var deleteResult = await _client.DeleteAsync(searchUrl);

            deleteResult.EnsureSuccessStatusCode();
        }