using Moq; using GiecChallenge.Services; using Microsoft.Extensions.Logging; using AutoMapper; using GiecChallenge.Models; using GiecChallenge.Profiles; namespace GiecChallenge.Tests { public class ProductSubGroupServiceTest { private Mock> _logger = null!; private Mock _context = null!; private SubGroupService _service = null!; private List _allGroupsDTO = null!; private string _Group = "FR"; [SetUp] public void Setup() { var config = new MapperConfiguration(cfg => { cfg.AddProfile(new SubGroupProfile()); }); IMapper mapper = config.CreateMapper(); _logger = new Mock>(); _allGroupsDTO = Common.GetGroupsDto("Français", "English"); _context = Common.GetContext(); _context.Setup(g => g.ProductGroups).Returns(Common.GetMockDbSet(Common.GetGroups()).Object); _context.Setup(g => g.ProductSubGroups).Returns(Common.GetMockDbSet(Common.GetSubGroups()).Object); _context.Setup(g => g.ProductSubGroupLanguages).Returns(Common.GetMockDbSet(Common.GetSubGroupLanguage()).Object); _context.Setup(g => g.Languages).Returns(Common.GetMockDbSet(Common.GetLanguages()).Object); _service = new SubGroupService(_logger.Object, mapper, _context.Object); } [Test] public async Task GetAllGroups() { var result = await _service.GetAllSubGroups(); Assert.AreEqual(result.Count, Common.GetGroups().Count); } [Test] [TestCase("Boisson")] [TestCase("hon")] public async Task GetByName(string name) { var result = await _service.GetSubGroups(name, _Group); Assert.AreEqual(result.Any(re => re.names.Any(rer => rer.name.ToLower().Contains(name.ToLower()))), true); } [Test] [TestCase("vian")] [TestCase("poire")] public async Task GetByNameNothing(string name) { var result = await _service.GetSubGroups(name, _Group); Assert.AreEqual(result.Any(), false); } [Test] [TestCase("bf0cc5d3-2b4f-4761-ac4f-5dc25005aa32")] [TestCase("1dda078c-d158-4078-aa8e-981d5ac5cd57")] public async Task GetSubGroup(Guid id) { var result = await _service.GetSubGroup(id); Assert.AreEqual(result!.id, id); } [Test] [TestCase("46c619b1-1859-4665-bc8b-cf51eb30777e")] [TestCase("eca28033-9954-498f-89d4-a911e40f5a33")] public void GetSubGroupNothing(Guid id) { var ex = Assert.ThrowsAsync(async () => await _service.GetSubGroup(id)); Assert.That(ex!.Message, Is.EqualTo(string.Concat("Sub Group does not exist"))); } [Test] [TestCase("Viande", "b21a6403-f428-454f-942d-dbd1fc3fa551", "f3390acd-acf2-4ab9-8d39-25b216182320")] [TestCase("Tablet", "8f46bf6f-6cbf-47ac-8d51-039eabc820c3", "0b1307be-9ffd-4dcd-9431-4fe58b6420f7")] public async Task Create(string name, string groupOfName, string language) { var subGroupDto = Common.GetSubGroupDtoTest(name, groupOfName, language); await _service.Create(subGroupDto); Assert.AreEqual(_context.Object.ProductSubGroups.Any(l => l.names.Any(ln => ln.name == name)), true); } [Test] [TestCase("Boisson", "b21a6403-f428-454f-942d-dbd1fc3fa551", "f3390acd-acf2-4ab9-8d39-25b216182320")] [TestCase("Smartphone", "8f46bf6f-6cbf-47ac-8d51-039eabc820c3", "0b1307be-9ffd-4dcd-9431-4fe58b6420f7")] public void CreateAlreadyExists(string name, string groupOfName, string language) { var subGroupDto = Common.GetSubGroupDtoTest(name, groupOfName, language); var ex = Assert.ThrowsAsync(async () => await _service.Create(subGroupDto)); Assert.That(ex!.Message, Is.EqualTo(string.Concat("Sub Group already exists"))); } [Test] [TestCase("bf0cc5d3-2b4f-4761-ac4f-5dc25005aa32", "Tablet", "8f46bf6f-6cbf-47ac-8d51-039eabc820c3", "f3390acd-acf2-4ab9-8d39-25b216182320")] [TestCase("1dda078c-d158-4078-aa8e-981d5ac5cd57", "Viande", "b21a6403-f428-454f-942d-dbd1fc3fa551", "0b1307be-9ffd-4dcd-9431-4fe58b6420f7")] public async Task Update(Guid id, string name, string groupOfName, string language) { var subGroupDto = Common.GetSubGroupDtoTest(name, groupOfName, language); await _service.Update(id, subGroupDto); Assert.True(_context.Object.ProductSubGroups.Any(l => l.names.Any(ln => ln.name == name))); } [Test] [TestCase("46c619b1-1859-4665-bc8b-cf51eb30777e", "Tablet", "991979cd-b95f-4e9a-85e7-e1f7ce6932fb", "f3390acd-acf2-4ab9-8d39-25b216182320")] [TestCase("eca28033-9954-498f-89d4-a911e40f5a33", "Viande", "3a69d206-7236-11ed-a1eb-0242ac120002", "0b1307be-9ffd-4dcd-9431-4fe58b6420f7")] public void UpdateDoesNotExists(Guid id, string isoCode, string name, string language) { var subGroupDto = Common.GetSubGroupDtoTest(isoCode, name, language); var ex = Assert.ThrowsAsync(async () => await _service.Update(id, subGroupDto)); Assert.That(ex!.Message, Is.EqualTo(string.Concat("Sub Group does not exist"))); } [Test] [TestCase("bf0cc5d3-2b4f-4761-ac4f-5dc25005aa32", "Tablet", "Elec", "FR")] [TestCase("1dda078c-d158-4078-aa8e-981d5ac5cd57", "Viande", "Bouffe", "EN")] public void UpdateWithGroupBadFormat(Guid id, string isoCode, string name, string language) { var subGroupDto = Common.GetSubGroupDtoTest(isoCode, name, language); var ex = Assert.ThrowsAsync(async () => await _service.Update(id, subGroupDto)); Assert.That(ex!.Message, Is.EqualTo(string.Concat(name, " is not valid"))); } [Test] [TestCase("bf0cc5d3-2b4f-4761-ac4f-5dc25005aa32", "Tablet", "bf0cc5d3-2b4f-4761-ac4f-5dc25005aa32", "f3390acd-acf2-4ab9-8d39-25b216182320")] [TestCase("1dda078c-d158-4078-aa8e-981d5ac5cd57", "Viande", "1dda078c-d158-4078-aa8e-981d5ac5cd57", "0b1307be-9ffd-4dcd-9431-4fe58b6420f7")] public void UpdateWithGroupUnknown(Guid id, string isoCode, string name, string language) { var subGroupDto = Common.GetSubGroupDtoTest(isoCode, name, language); var ex = Assert.ThrowsAsync(async () => await _service.Update(id, subGroupDto)); Assert.That(ex!.Message, Is.EqualTo(string.Concat("Group does not exist"))); } [Test] [TestCase("bf0cc5d3-2b4f-4761-ac4f-5dc25005aa32", "Tablet", "991979cd-b95f-4e9a-85e7-e1f7ce6932fb", "IT")] [TestCase("1dda078c-d158-4078-aa8e-981d5ac5cd57", "Viande", "3a69d206-7236-11ed-a1eb-0242ac120002", "ES")] public void UpdateWithLanguageBadValue(Guid id, string isoCode, string name, string language) { var subGroupDto = Common.GetSubGroupDtoTest(isoCode, name, language); var ex = Assert.ThrowsAsync(async () => await _service.Update(id, subGroupDto)); Assert.That(ex!.Message, Is.EqualTo(string.Concat(language, " is not valid"))); } [Test] [TestCase("bf0cc5d3-2b4f-4761-ac4f-5dc25005aa32", "Tablet", "991979cd-b95f-4e9a-85e7-e1f7ce6932fb", "991979cd-b95f-4e9a-85e7-e1f7ce6932fb")] [TestCase("1dda078c-d158-4078-aa8e-981d5ac5cd57", "Viande", "3a69d206-7236-11ed-a1eb-0242ac120002", "3a69d206-7236-11ed-a1eb-0242ac120001")] public void UpdateWithLanguageUnknown(Guid id, string isoCode, string name, string language) { var subGroupDto = Common.GetSubGroupDtoTest(isoCode, name, language); var ex = Assert.ThrowsAsync(async () => await _service.Update(id, subGroupDto)); Assert.That(ex!.Message, Is.EqualTo(string.Concat("Language ", language, " doesn't exist"))); } } }