Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions src/Crowdin.Api/ProjectsGroups/AddProjectRequest.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@


using JetBrains.Annotations;
using Newtonsoft.Json;

#nullable enable

Expand All @@ -8,6 +9,7 @@ namespace Crowdin.Api.ProjectsGroups
[PublicAPI]
public class AddProjectRequest
{

[JsonProperty("tmApprovedSuggestionsOnly")]
public bool? TmApprovedSuggestionsOnly { get; set; }
}
}
4 changes: 3 additions & 1 deletion src/Crowdin.Api/ProjectsGroups/ProjectSettings.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@


using System.Collections.Generic;

using JetBrains.Annotations;
Expand Down Expand Up @@ -115,5 +115,7 @@ public class ProjectSettings : Project
[JsonProperty("tmPenalties")]
[JsonConverter(typeof(EmptyArrayAsObjectConverter))]
public TmPenalties TmPenalties { get; set; }
[JsonProperty("tmApprovedSuggestionsOnly")]
public bool? TmApprovedSuggestionsOnly { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@


using System.Collections.Generic;
using System.Linq;
using System.Net;
Expand Down Expand Up @@ -149,5 +149,80 @@ public async Task AddProject_TestEnumsConversion()

Assert.NotNull(projectResponse);
}

[Fact]
public async Task AddProject_ShouldIncludeTmApprovedSuggestionsOnly_ForStandardProject()
{
// Arrange
var request = new FileBasedProjectForm
{
Name = "Test Standard Project",
SourceLanguageId = "en",
TmApprovedSuggestionsOnly = true
};

JsonSerializerSettings options = TestUtils.CreateJsonSerializerOptions();
string requestJson = JsonConvert.SerializeObject(request, options);

// Assert JSON contains our property
Assert.Contains("\"tmApprovedSuggestionsOnly\":true", requestJson);

Mock<ICrowdinApiClient> mockClient = TestUtils.CreateMockClientWithDefaultParser();

mockClient
.Setup(client => client.SendPostRequest("/projects", request, null))
.ReturnsAsync(new CrowdinApiResult
{
StatusCode = HttpStatusCode.Created,
JsonObject = JObject.Parse(Projects.AddProject_RightResponseJson_ProjectInfo)
});

var executor = new ProjectsGroupsApiExecutor(mockClient.Object);

// Act
var projectResponse = await executor.AddProject<Project>(request);

// Assert
Assert.NotNull(projectResponse);
mockClient.Verify(client => client.SendPostRequest("/projects", request, null), Times.Once);
}

[Fact]
public async Task AddProject_ShouldIncludeTmApprovedSuggestionsOnly_ForEnterpriseProject()
{
// Arrange
var request = new EnterpriseProjectForm
{
Name = "Test Enterprise Project",
SourceLanguageId = "en",
TmApprovedSuggestionsOnly = true
};

JsonSerializerSettings options = TestUtils.CreateJsonSerializerOptions();
string requestJson = JsonConvert.SerializeObject(request, options);

// Assert JSON contains our property
Assert.Contains("\"tmApprovedSuggestionsOnly\":true", requestJson);

Mock<ICrowdinApiClient> mockClient = TestUtils.CreateMockClientWithDefaultParser();

mockClient
.Setup(client => client.SendPostRequest("/projects", request, null))
.ReturnsAsync(new CrowdinApiResult
{
StatusCode = HttpStatusCode.Created,
JsonObject = JObject.Parse(Projects.AddProject_RightResponseJson_ProjectInfo)
});

var executor = new ProjectsGroupsApiExecutor(mockClient.Object);

// Act
var projectResponse = await executor.AddProject<Project>(request);

// Assert
Assert.NotNull(projectResponse);
mockClient.Verify(client => client.SendPostRequest("/projects", request, null), Times.Once);
}

}
}
Loading