using AutoMapper; using CleanArchitecture.Application.Common.Mappings; using CleanArchitecture.Application.TodoLists.Queries.GetTodos; using CleanArchitecture.Domain.Entities; using NUnit.Framework; using System; using System.Runtime.Serialization; using CleanArchitecture.Application.TodoItems.Queries.GetTodoItemsWithPagination; namespace CleanArchitecture.Application.UnitTests.Common.Mappings { public class MappingTests { private readonly IConfigurationProvider _configuration; private readonly IMapper _mapper; public MappingTests() { _configuration = new MapperConfiguration(cfg => { cfg.AddProfile<MappingProfile>(); }); _mapper = _configuration.CreateMapper(); } [Test] public void ShouldHaveValidConfiguration() { _configuration.AssertConfigurationIsValid(); } [Test] [TestCase(typeof(TodoList), typeof(TodoListDto))] [TestCase(typeof(TodoItem), typeof(TodoItemDto))] public void ShouldSupportMappingFromSourceToDestination(Type source, Type destination) { var instance = GetInstanceOf(source); _mapper.Map(instance, source, destination); } private object GetInstanceOf(Type type) { if (type.GetConstructor(Type.EmptyTypes) != null) return Activator.CreateInstance(type); // Type without parameterless constructor return FormatterServices.GetUninitializedObject(type); } } }