Skip to content

Commit

Permalink
Tests for ToValueString util
Browse files Browse the repository at this point in the history
  • Loading branch information
Codex04 committed Jan 20, 2025
1 parent e0fa60d commit 10fc71d
Show file tree
Hide file tree
Showing 6 changed files with 34 additions and 24 deletions.
2 changes: 1 addition & 1 deletion NGitLab.Mock/Clients/ProjectClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -421,7 +421,7 @@ public UploadedProjectFile UploadFile(string id, FormDataContent data)
throw new NotImplementedException();
}

public GitLabCollectionResponse<ProjectTemplate> GetProjectTemplatesAsync(ProjectId projectId, DynamicEnum<ProjectTemplateType> projectTemplateType)
public GitLabCollectionResponse<ProjectTemplate> GetProjectTemplatesAsync(ProjectId projectId, ProjectTemplateType projectTemplateType)
{
throw new NotImplementedException();
}
Expand Down
9 changes: 9 additions & 0 deletions NGitLab.Tests/Impl/UtilsTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,13 @@ public void AddParameter_ConsidersEnumMemberAttribute(EventAction value, string

Assert.That(url, Is.EqualTo($"{basePath}?event_action={expectedQueryParamValue}"));
}

[TestCase(EventAction.PushedTo, "pushed to")]
[TestCase(EventAction.Accepted, "accepted")]
public void ToValueString_ConsidersEnumMemberAttribute(EventAction value, string expectedValueResult)
{
var valueMember = NGitLab.Impl.Utils.ToValueString(value);

Assert.That(valueMember, Is.EqualTo(expectedValueResult));
}
}
2 changes: 1 addition & 1 deletion NGitLab/IProjectClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ public interface IProjectClient
/// <returns>All ancestor groups.</returns>
GitLabCollectionResponse<Group> GetGroupsAsync(ProjectId projectId, ProjectGroupsQuery query);

GitLabCollectionResponse<ProjectTemplate> GetProjectTemplatesAsync(ProjectId projectId, DynamicEnum<ProjectTemplateType> projectTemplateType);
GitLabCollectionResponse<ProjectTemplate> GetProjectTemplatesAsync(ProjectId projectId, ProjectTemplateType projectTemplateType);

Task<ProjectMergeRequestTemplate> GetProjectMergeRequestTemplateAsync(ProjectId projectId, string name, CancellationToken cancellationToken = default);

Expand Down
7 changes: 3 additions & 4 deletions NGitLab/Impl/ProjectClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -178,15 +178,14 @@ public GitLabCollectionResponse<Group> GetGroupsAsync(ProjectId id, ProjectGroup
return _api.Get().GetAllAsync<Group>(url);
}

public GitLabCollectionResponse<ProjectTemplate> GetProjectTemplatesAsync(ProjectId projectId, DynamicEnum<ProjectTemplateType> projectTemplateType)
public GitLabCollectionResponse<ProjectTemplate> GetProjectTemplatesAsync(ProjectId projectId, ProjectTemplateType projectTemplateType)
{
return _api.Get().GetAllAsync<ProjectTemplate>($"{Project.Url}/{projectId.ValueAsUriParameter()}/templates/{projectTemplateType.StringValue}");
return _api.Get().GetAllAsync<ProjectTemplate>($"{Project.Url}/{projectId.ValueAsUriParameter()}/templates/{Utils.ToValueString(projectTemplateType)}");
}

public Task<ProjectMergeRequestTemplate> GetProjectMergeRequestTemplateAsync(ProjectId projectId, string name, CancellationToken cancellationToken = default)
{
var mergeRequestTemplateType = new DynamicEnum<ProjectTemplateType>(ProjectTemplateType.MergeRequests);
return _api.Get().ToAsync<ProjectMergeRequestTemplate>($"{Project.Url}/{projectId.ValueAsUriParameter()}/templates/{mergeRequestTemplateType.StringValue}/{name}", cancellationToken);
return _api.Get().ToAsync<ProjectMergeRequestTemplate>($"{Project.Url}/{projectId.ValueAsUriParameter()}/templates/{Utils.ToValueString(ProjectTemplateType.MergeRequests)}/{name}", cancellationToken);
}

private static string CreateGetGroupsUrl(ProjectId projectId, ProjectGroupsQuery query)
Expand Down
34 changes: 18 additions & 16 deletions NGitLab/Impl/Utils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,27 +9,29 @@ namespace NGitLab.Impl;
internal static class Utils
{
public static string AddParameter<T>(string url, string parameterName, T value)
{
return value is not null ? AddParameterInternal(url, parameterName, ToValueString(value)) : url;
}

public static string ToValueString<T>(T value)
{
if (value is null)
return url;
return string.Empty;

var valueString = value.ToString();
var type = Nullable.GetUnderlyingType(typeof(T)) ?? typeof(T);
if (type.IsEnum)
{
var enumField = type.GetFields().FirstOrDefault(f => string.Equals(f.Name, valueString, StringComparison.Ordinal));
if (enumField is not null)
{
var enumMemberValue = enumField.GetCustomAttributes(typeof(EnumMemberAttribute), inherit: true)
.Cast<EnumMemberAttribute>()
.FirstOrDefault()?
.Value;
if (enumMemberValue is not null)
return AddParameterInternal(url, parameterName, enumMemberValue);
}
}

return AddParameterInternal(url, parameterName, valueString);
if (!type.IsEnum)
return valueString;

var enumField = type.GetFields().FirstOrDefault(f => string.Equals(f.Name, valueString, StringComparison.Ordinal));
if (enumField is null)
return valueString;

var enumMemberValue = enumField.GetCustomAttributes(typeof(EnumMemberAttribute), inherit: true)
.Cast<EnumMemberAttribute>()
.FirstOrDefault()?
.Value;
return enumMemberValue ?? valueString;
}

public static string AddParameter(string url, string parameterName, int? value)
Expand Down
4 changes: 2 additions & 2 deletions NGitLab/PublicAPI.Unshipped.txt
Original file line number Diff line number Diff line change
Expand Up @@ -814,7 +814,7 @@ NGitLab.Impl.ProjectClient.GetForksAsync(string id, NGitLab.Models.ForkedProject
NGitLab.Impl.ProjectClient.GetGroupsAsync(NGitLab.Models.ProjectId id, NGitLab.Models.ProjectGroupsQuery query) -> NGitLab.GitLabCollectionResponse<NGitLab.Models.Group>
NGitLab.Impl.ProjectClient.GetLanguages(string id) -> System.Collections.Generic.Dictionary<string, double>
NGitLab.Impl.ProjectClient.GetProjectMergeRequestTemplateAsync(NGitLab.Models.ProjectId projectId, string name, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task<NGitLab.Models.ProjectMergeRequestTemplate>
NGitLab.Impl.ProjectClient.GetProjectTemplatesAsync(NGitLab.Models.ProjectId projectId, NGitLab.DynamicEnum<NGitLab.Impl.ProjectTemplateType> projectTemplateType) -> NGitLab.GitLabCollectionResponse<NGitLab.Models.ProjectTemplate>
NGitLab.Impl.ProjectClient.GetProjectTemplatesAsync(NGitLab.Models.ProjectId projectId, NGitLab.Impl.ProjectTemplateType projectTemplateType) -> NGitLab.GitLabCollectionResponse<NGitLab.Models.ProjectTemplate>
NGitLab.Impl.ProjectClient.Owned.get -> System.Collections.Generic.IEnumerable<NGitLab.Models.Project>
NGitLab.Impl.ProjectClient.ProjectClient(NGitLab.Impl.API api) -> void
NGitLab.Impl.ProjectClient.this[long id].get -> NGitLab.Models.Project
Expand Down Expand Up @@ -1030,7 +1030,7 @@ NGitLab.IProjectClient.GetForksAsync(string id, NGitLab.Models.ForkedProjectQuer
NGitLab.IProjectClient.GetGroupsAsync(NGitLab.Models.ProjectId projectId, NGitLab.Models.ProjectGroupsQuery query) -> NGitLab.GitLabCollectionResponse<NGitLab.Models.Group>
NGitLab.IProjectClient.GetLanguages(string id) -> System.Collections.Generic.Dictionary<string, double>
NGitLab.IProjectClient.GetProjectMergeRequestTemplateAsync(NGitLab.Models.ProjectId projectId, string name, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task<NGitLab.Models.ProjectMergeRequestTemplate>
NGitLab.IProjectClient.GetProjectTemplatesAsync(NGitLab.Models.ProjectId projectId, NGitLab.DynamicEnum<NGitLab.Impl.ProjectTemplateType> projectTemplateType) -> NGitLab.GitLabCollectionResponse<NGitLab.Models.ProjectTemplate>
NGitLab.IProjectClient.GetProjectTemplatesAsync(NGitLab.Models.ProjectId projectId, NGitLab.Impl.ProjectTemplateType projectTemplateType) -> NGitLab.GitLabCollectionResponse<NGitLab.Models.ProjectTemplate>
NGitLab.IProjectClient.Owned.get -> System.Collections.Generic.IEnumerable<NGitLab.Models.Project>
NGitLab.IProjectClient.this[long id].get -> NGitLab.Models.Project
NGitLab.IProjectClient.this[string fullName].get -> NGitLab.Models.Project
Expand Down

0 comments on commit 10fc71d

Please sign in to comment.