You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
409 lines
18 KiB
C#
409 lines
18 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Threading.Tasks;
|
|
using FluentAssertions;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Moq;
|
|
using Xunit;
|
|
using Haoliang.Api.Controllers;
|
|
using Haoliang.Core.Services;
|
|
using Haoliang.Models.Template;
|
|
using Haoliang.Models.Device;
|
|
|
|
namespace Haoliang.Tests.Controllers
|
|
{
|
|
public class TemplateControllerTests
|
|
{
|
|
private readonly Mock<ITemplateService> _templateService = new Mock<ITemplateService>();
|
|
private readonly Mock<ITagMappingService> _tagMappingService = new Mock<ITagMappingService>();
|
|
private readonly Mock<ITemplateValidationService> _validationService = new Mock<ITemplateValidationService>();
|
|
private readonly Mock<ILoggingService> _loggingService = new Mock<ILoggingService>();
|
|
private readonly TemplateController _controller;
|
|
|
|
public TemplateControllerTests()
|
|
{
|
|
_controller = new TemplateController(
|
|
_templateService.Object,
|
|
_tagMappingService.Object,
|
|
_validationService.Object,
|
|
_loggingService.Object);
|
|
}
|
|
|
|
// 1. GetAllTemplates (2 tests)
|
|
[Fact]
|
|
public async Task GetAllTemplates_WhenSuccess_ReturnsOk()
|
|
{
|
|
_templateService.Setup(s => s.GetAllTemplatesAsync()).ReturnsAsync(new List<CNCBrandTemplate>());
|
|
var result = await _controller.GetAllTemplates();
|
|
result.Should().BeOfType<OkObjectResult>();
|
|
}
|
|
|
|
[Fact]
|
|
public async Task GetAllTemplates_WhenException_Returns500()
|
|
{
|
|
_templateService.Setup(s => s.GetAllTemplatesAsync()).ThrowsAsync(new Exception("t"));
|
|
var result = await _controller.GetAllTemplates();
|
|
result.Should().BeOfType<ObjectResult>().Which.StatusCode.Should().Be(500);
|
|
}
|
|
|
|
// 2. GetTemplate (3 tests: found, not found, exception)
|
|
[Fact]
|
|
public async Task GetTemplate_WhenFound_ReturnsOk()
|
|
{
|
|
_templateService.Setup(s => s.GetTemplateByIdAsync(1)).ReturnsAsync(new CNCBrandTemplate());
|
|
var result = await _controller.GetTemplate(1);
|
|
result.Should().BeOfType<OkObjectResult>();
|
|
}
|
|
|
|
[Fact]
|
|
public async Task GetTemplate_WhenNotFound_Returns404()
|
|
{
|
|
_templateService.Setup(s => s.GetTemplateByIdAsync(1)).ReturnsAsync((CNCBrandTemplate?)null);
|
|
var result = await _controller.GetTemplate(1);
|
|
result.Should().BeOfType<NotFoundObjectResult>();
|
|
}
|
|
|
|
[Fact]
|
|
public async Task GetTemplate_WhenException_Returns500()
|
|
{
|
|
_templateService.Setup(s => s.GetTemplateByIdAsync(It.IsAny<int>())).ThrowsAsync(new Exception("t"));
|
|
var result = await _controller.GetTemplate(1);
|
|
result.Should().BeOfType<ObjectResult>().Which.StatusCode.Should().Be(500);
|
|
}
|
|
|
|
// 3. CreateTemplate (3 tests: success, validation fail, exception)
|
|
[Fact]
|
|
public async Task CreateTemplate_WhenValid_ReturnsOk()
|
|
{
|
|
_templateService.Setup(s => s.ValidateTemplateAsync(It.IsAny<CNCBrandTemplate>())).ReturnsAsync(true);
|
|
_templateService.Setup(s => s.CreateTemplateAsync(It.IsAny<CNCBrandTemplate>())).ReturnsAsync(new CNCBrandTemplate());
|
|
var result = await _controller.CreateTemplate(new CNCBrandTemplate());
|
|
result.Should().BeOfType<OkObjectResult>();
|
|
}
|
|
|
|
[Fact]
|
|
public async Task CreateTemplate_WhenValidationFails_ReturnsBadRequest()
|
|
{
|
|
_templateService.Setup(s => s.ValidateTemplateAsync(It.IsAny<CNCBrandTemplate>())).ReturnsAsync(false);
|
|
var result = await _controller.CreateTemplate(new CNCBrandTemplate());
|
|
result.Should().BeOfType<BadRequestObjectResult>();
|
|
}
|
|
|
|
[Fact]
|
|
public async Task CreateTemplate_WhenException_Returns500()
|
|
{
|
|
_templateService.Setup(s => s.ValidateTemplateAsync(It.IsAny<CNCBrandTemplate>())).ThrowsAsync(new Exception("t"));
|
|
var result = await _controller.CreateTemplate(new CNCBrandTemplate());
|
|
result.Should().BeOfType<ObjectResult>().Which.StatusCode.Should().Be(500);
|
|
}
|
|
|
|
// 4. UpdateTemplate (4 tests: success, validation fail, not found, exception)
|
|
[Fact]
|
|
public async Task UpdateTemplate_WhenValid_ReturnsOk()
|
|
{
|
|
_templateService.Setup(s => s.ValidateTemplateAsync(It.IsAny<CNCBrandTemplate>())).ReturnsAsync(true);
|
|
_templateService.Setup(s => s.UpdateTemplateAsync(1, It.IsAny<CNCBrandTemplate>())).ReturnsAsync(new CNCBrandTemplate());
|
|
var result = await _controller.UpdateTemplate(1, new CNCBrandTemplate());
|
|
result.Should().BeOfType<OkObjectResult>();
|
|
}
|
|
|
|
[Fact]
|
|
public async Task UpdateTemplate_WhenValidationFails_ReturnsBadRequest()
|
|
{
|
|
_templateService.Setup(s => s.ValidateTemplateAsync(It.IsAny<CNCBrandTemplate>())).ReturnsAsync(false);
|
|
var result = await _controller.UpdateTemplate(1, new CNCBrandTemplate());
|
|
result.Should().BeOfType<BadRequestObjectResult>();
|
|
}
|
|
|
|
[Fact]
|
|
public async Task UpdateTemplate_WhenNotFound_Returns404()
|
|
{
|
|
_templateService.Setup(s => s.ValidateTemplateAsync(It.IsAny<CNCBrandTemplate>())).ReturnsAsync(true);
|
|
_templateService.Setup(s => s.UpdateTemplateAsync(1, It.IsAny<CNCBrandTemplate>())).ReturnsAsync((CNCBrandTemplate?)null);
|
|
var result = await _controller.UpdateTemplate(1, new CNCBrandTemplate());
|
|
result.Should().BeOfType<NotFoundObjectResult>();
|
|
}
|
|
|
|
[Fact]
|
|
public async Task UpdateTemplate_WhenException_Returns500()
|
|
{
|
|
_templateService.Setup(s => s.ValidateTemplateAsync(It.IsAny<CNCBrandTemplate>())).ThrowsAsync(new Exception("t"));
|
|
var result = await _controller.UpdateTemplate(1, new CNCBrandTemplate());
|
|
result.Should().BeOfType<ObjectResult>().Which.StatusCode.Should().Be(500);
|
|
}
|
|
|
|
// 5. DeleteTemplate (3 tests: success, not found, exception)
|
|
[Fact]
|
|
public async Task DeleteTemplate_WhenSuccess_ReturnsOk()
|
|
{
|
|
_templateService.Setup(s => s.DeleteTemplateAsync(1)).ReturnsAsync(true);
|
|
var result = await _controller.DeleteTemplate(1);
|
|
result.Should().BeOfType<OkObjectResult>();
|
|
}
|
|
|
|
[Fact]
|
|
public async Task DeleteTemplate_WhenNotFound_Returns404()
|
|
{
|
|
_templateService.Setup(s => s.DeleteTemplateAsync(1)).ReturnsAsync(false);
|
|
var result = await _controller.DeleteTemplate(1);
|
|
result.Should().BeOfType<NotFoundObjectResult>();
|
|
}
|
|
|
|
[Fact]
|
|
public async Task DeleteTemplate_WhenException_Returns500()
|
|
{
|
|
_templateService.Setup(s => s.DeleteTemplateAsync(It.IsAny<int>())).ThrowsAsync(new Exception("t"));
|
|
var result = await _controller.DeleteTemplate(1);
|
|
result.Should().BeOfType<ObjectResult>().Which.StatusCode.Should().Be(500);
|
|
}
|
|
|
|
// 6. EnableTemplate (3 tests)
|
|
[Fact]
|
|
public async Task EnableTemplate_WhenSuccess_ReturnsOk()
|
|
{
|
|
_templateService.Setup(s => s.EnableTemplateAsync(1)).ReturnsAsync(true);
|
|
var result = await _controller.EnableTemplate(1);
|
|
result.Should().BeOfType<OkObjectResult>();
|
|
}
|
|
|
|
[Fact]
|
|
public async Task EnableTemplate_WhenNotFound_Returns404()
|
|
{
|
|
_templateService.Setup(s => s.EnableTemplateAsync(1)).ReturnsAsync(false);
|
|
var result = await _controller.EnableTemplate(1);
|
|
result.Should().BeOfType<NotFoundObjectResult>();
|
|
}
|
|
|
|
[Fact]
|
|
public async Task EnableTemplate_WhenException_Returns500()
|
|
{
|
|
_templateService.Setup(s => s.EnableTemplateAsync(It.IsAny<int>())).ThrowsAsync(new Exception("t"));
|
|
var result = await _controller.EnableTemplate(1);
|
|
result.Should().BeOfType<ObjectResult>().Which.StatusCode.Should().Be(500);
|
|
}
|
|
|
|
// 7. DisableTemplate (3 tests)
|
|
[Fact]
|
|
public async Task DisableTemplate_WhenSuccess_ReturnsOk()
|
|
{
|
|
_templateService.Setup(s => s.DisableTemplateAsync(1)).ReturnsAsync(true);
|
|
var result = await _controller.DisableTemplate(1);
|
|
result.Should().BeOfType<OkObjectResult>();
|
|
}
|
|
|
|
[Fact]
|
|
public async Task DisableTemplate_WhenNotFound_Returns404()
|
|
{
|
|
_templateService.Setup(s => s.DisableTemplateAsync(1)).ReturnsAsync(false);
|
|
var result = await _controller.DisableTemplate(1);
|
|
result.Should().BeOfType<NotFoundObjectResult>();
|
|
}
|
|
|
|
[Fact]
|
|
public async Task DisableTemplate_WhenException_Returns500()
|
|
{
|
|
_templateService.Setup(s => s.DisableTemplateAsync(It.IsAny<int>())).ThrowsAsync(new Exception("t"));
|
|
var result = await _controller.DisableTemplate(1);
|
|
result.Should().BeOfType<ObjectResult>().Which.StatusCode.Should().Be(500);
|
|
}
|
|
|
|
// 8. CloneTemplate (2 tests)
|
|
[Fact]
|
|
public async Task CloneTemplate_WhenSuccess_ReturnsOk()
|
|
{
|
|
_templateService.Setup(s => s.CloneTemplateAsync(1, "new")).ReturnsAsync(new CNCBrandTemplate());
|
|
var result = await _controller.CloneTemplate(1, new CloneTemplateRequest { NewName = "new" });
|
|
result.Should().BeOfType<OkObjectResult>();
|
|
}
|
|
|
|
[Fact]
|
|
public async Task CloneTemplate_WhenException_Returns500()
|
|
{
|
|
_templateService.Setup(s => s.CloneTemplateAsync(It.IsAny<int>(), It.IsAny<string>())).ThrowsAsync(new Exception("t"));
|
|
var result = await _controller.CloneTemplate(1, new CloneTemplateRequest { NewName = "new" });
|
|
result.Should().BeOfType<ObjectResult>().Which.StatusCode.Should().Be(500);
|
|
}
|
|
|
|
// 9. TestTemplate (2 tests)
|
|
[Fact]
|
|
public async Task TestTemplate_WhenSuccess_ReturnsOk()
|
|
{
|
|
_templateService.Setup(s => s.TestTemplateAsync(1)).Returns(Task.CompletedTask);
|
|
var result = await _controller.TestTemplate(1);
|
|
result.Should().BeOfType<OkObjectResult>();
|
|
}
|
|
|
|
[Fact]
|
|
public async Task TestTemplate_WhenException_Returns500()
|
|
{
|
|
_templateService.Setup(s => s.TestTemplateAsync(It.IsAny<int>())).ThrowsAsync(new Exception("t"));
|
|
var result = await _controller.TestTemplate(1);
|
|
result.Should().BeOfType<ObjectResult>().Which.StatusCode.Should().Be(500);
|
|
}
|
|
|
|
// 10. GetTemplatesByBrand (2 tests)
|
|
[Fact]
|
|
public async Task GetTemplatesByBrand_WhenSuccess_ReturnsOk()
|
|
{
|
|
_templateService.Setup(s => s.GetTemplatesByBrandAsync("Fanuc")).ReturnsAsync(new List<CNCBrandTemplate>());
|
|
var result = await _controller.GetTemplatesByBrand("Fanuc");
|
|
result.Should().BeOfType<OkObjectResult>();
|
|
}
|
|
|
|
[Fact]
|
|
public async Task GetTemplatesByBrand_WhenException_Returns500()
|
|
{
|
|
_templateService.Setup(s => s.GetTemplatesByBrandAsync(It.IsAny<string>())).ThrowsAsync(new Exception("t"));
|
|
var result = await _controller.GetTemplatesByBrand("x");
|
|
result.Should().BeOfType<ObjectResult>().Which.StatusCode.Should().Be(500);
|
|
}
|
|
|
|
// 11. GetActiveTemplates (2 tests)
|
|
[Fact]
|
|
public async Task GetActiveTemplates_WhenSuccess_ReturnsOk()
|
|
{
|
|
_templateService.Setup(s => s.GetActiveTemplatesAsync()).ReturnsAsync(new List<CNCBrandTemplate>());
|
|
var result = await _controller.GetActiveTemplates();
|
|
result.Should().BeOfType<OkObjectResult>();
|
|
}
|
|
|
|
[Fact]
|
|
public async Task GetActiveTemplates_WhenException_Returns500()
|
|
{
|
|
_templateService.Setup(s => s.GetActiveTemplatesAsync()).ThrowsAsync(new Exception("t"));
|
|
var result = await _controller.GetActiveTemplates();
|
|
result.Should().BeOfType<ObjectResult>().Which.StatusCode.Should().Be(500);
|
|
}
|
|
|
|
// 12. ValidateTemplate (3 tests: valid, invalid, exception)
|
|
[Fact]
|
|
public async Task ValidateTemplate_WhenValid_ReturnsOk()
|
|
{
|
|
_templateService.Setup(s => s.ValidateTemplateAsync(It.IsAny<CNCBrandTemplate>())).ReturnsAsync(true);
|
|
var result = await _controller.ValidateTemplate(new CNCBrandTemplate());
|
|
result.Should().BeOfType<OkObjectResult>();
|
|
}
|
|
|
|
[Fact]
|
|
public async Task ValidateTemplate_WhenInvalid_ReturnsBadRequest()
|
|
{
|
|
_templateService.Setup(s => s.ValidateTemplateAsync(It.IsAny<CNCBrandTemplate>())).ReturnsAsync(false);
|
|
_validationService.Setup(s => s.ValidateTemplateForDeviceAsync(It.IsAny<int>(), It.IsAny<int>()))
|
|
.ReturnsAsync(new List<string>());
|
|
var result = await _controller.ValidateTemplate(new CNCBrandTemplate());
|
|
result.Should().BeOfType<BadRequestObjectResult>();
|
|
}
|
|
|
|
[Fact]
|
|
public async Task ValidateTemplate_WhenException_Returns500()
|
|
{
|
|
_templateService.Setup(s => s.ValidateTemplateAsync(It.IsAny<CNCBrandTemplate>())).ThrowsAsync(new Exception("t"));
|
|
var result = await _controller.ValidateTemplate(new CNCBrandTemplate());
|
|
result.Should().BeOfType<ObjectResult>().Which.StatusCode.Should().Be(500);
|
|
}
|
|
|
|
// 13. MigrateTemplate (3 tests: can migrate, cannot, exception)
|
|
[Fact]
|
|
public async Task MigrateTemplate_WhenCanMigrate_ReturnsOk()
|
|
{
|
|
_validationService.Setup(s => s.GenerateMigrationReportAsync(It.IsAny<CNCBrandTemplate>(), It.IsAny<string>()))
|
|
.ReturnsAsync(new TemplateMigrationReport { CanMigrate = true });
|
|
var result = await _controller.MigrateTemplate(new TemplateMigrationRequest
|
|
{
|
|
Template = new CNCBrandTemplate(),
|
|
TargetBrand = "Mitsubishi"
|
|
});
|
|
result.Should().BeOfType<OkObjectResult>();
|
|
}
|
|
|
|
[Fact]
|
|
public async Task MigrateTemplate_WhenCannotMigrate_ReturnsBadRequest()
|
|
{
|
|
_validationService.Setup(s => s.GenerateMigrationReportAsync(It.IsAny<CNCBrandTemplate>(), It.IsAny<string>()))
|
|
.ReturnsAsync(new TemplateMigrationReport { CanMigrate = false, Issues = new List<string> { "issue" } });
|
|
var result = await _controller.MigrateTemplate(new TemplateMigrationRequest
|
|
{
|
|
Template = new CNCBrandTemplate(),
|
|
TargetBrand = "Mitsubishi"
|
|
});
|
|
result.Should().BeOfType<BadRequestObjectResult>();
|
|
}
|
|
|
|
[Fact]
|
|
public async Task MigrateTemplate_WhenException_Returns500()
|
|
{
|
|
_validationService.Setup(s => s.GenerateMigrationReportAsync(It.IsAny<CNCBrandTemplate>(), It.IsAny<string>()))
|
|
.ThrowsAsync(new Exception("t"));
|
|
var result = await _controller.MigrateTemplate(new TemplateMigrationRequest
|
|
{
|
|
Template = new CNCBrandTemplate(),
|
|
TargetBrand = "Mitsubishi"
|
|
});
|
|
result.Should().BeOfType<ObjectResult>().Which.StatusCode.Should().Be(500);
|
|
}
|
|
|
|
// 14. GetTagMappings (2 tests)
|
|
[Fact]
|
|
public async Task GetTagMappings_WhenSuccess_ReturnsOk()
|
|
{
|
|
_tagMappingService.Setup(s => s.GetMappingsByTemplateAsync(1))
|
|
.ReturnsAsync(new List<TagMapping>());
|
|
var result = await _controller.GetTagMappings(1);
|
|
result.Should().BeOfType<OkObjectResult>();
|
|
}
|
|
|
|
[Fact]
|
|
public async Task GetTagMappings_WhenException_Returns500()
|
|
{
|
|
_tagMappingService.Setup(s => s.GetMappingsByTemplateAsync(It.IsAny<int>())).ThrowsAsync(new Exception("t"));
|
|
var result = await _controller.GetTagMappings(1);
|
|
result.Should().BeOfType<ObjectResult>().Which.StatusCode.Should().Be(500);
|
|
}
|
|
|
|
// 15. CreateTagMapping (2 tests)
|
|
[Fact]
|
|
public async Task CreateTagMapping_WhenSuccess_ReturnsOk()
|
|
{
|
|
_tagMappingService.Setup(s => s.CreateTagMappingAsync(It.IsAny<TagMapping>()))
|
|
.ReturnsAsync(new TagMapping());
|
|
var result = await _controller.CreateTagMapping(new TagMapping());
|
|
result.Should().BeOfType<OkObjectResult>();
|
|
}
|
|
|
|
[Fact]
|
|
public async Task CreateTagMapping_WhenException_Returns500()
|
|
{
|
|
_tagMappingService.Setup(s => s.CreateTagMappingAsync(It.IsAny<TagMapping>())).ThrowsAsync(new Exception("t"));
|
|
var result = await _controller.CreateTagMapping(new TagMapping());
|
|
result.Should().BeOfType<ObjectResult>().Which.StatusCode.Should().Be(500);
|
|
}
|
|
|
|
// 16. TestTagMapping (2 tests)
|
|
[Fact]
|
|
public async Task TestTagMapping_WhenSuccess_ReturnsOk()
|
|
{
|
|
_tagMappingService.Setup(s => s.MapDeviceTagsAsync(It.IsAny<IEnumerable<TagData>>(), It.IsAny<int>()))
|
|
.ReturnsAsync(new List<TagData>());
|
|
var result = await _controller.TestTagMapping(new TestTagMappingRequest
|
|
{
|
|
DeviceTags = new List<TagData>(),
|
|
TemplateId = 1
|
|
});
|
|
result.Should().BeOfType<OkObjectResult>();
|
|
}
|
|
|
|
[Fact]
|
|
public async Task TestTagMapping_WhenException_Returns500()
|
|
{
|
|
_tagMappingService.Setup(s => s.MapDeviceTagsAsync(It.IsAny<IEnumerable<TagData>>(), It.IsAny<int>()))
|
|
.ThrowsAsync(new Exception("t"));
|
|
var result = await _controller.TestTagMapping(new TestTagMappingRequest
|
|
{
|
|
DeviceTags = new List<TagData>(),
|
|
TemplateId = 1
|
|
});
|
|
result.Should().BeOfType<ObjectResult>().Which.StatusCode.Should().Be(500);
|
|
}
|
|
}
|
|
}
|