public void Save_Mechanic_Only_Tests()
        {
            // Insert
            var commandAggregate = new SaveMechanicCommandAggregate(new SaveMechanicInputDto
            {
                Name = "Sasha"
            });

            commandAggregate.Save();

            var mechanicId = commandAggregate.RootEntity.Id;

            // Read
            var queryAggregate = new MechanicQueryAggregate();

            var mechanicDto = queryAggregate.Get(mechanicId);

            Assert.AreEqual(mechanicId, mechanicDto.MechanicId);

            Assert.AreEqual("Sasha", mechanicDto.Name);

            Assert.AreEqual(0, mechanicDto.Vehicles.Count());

            // Update
            commandAggregate = new SaveMechanicCommandAggregate(new SaveMechanicInputDto
            {
                MechanicId = mechanicId,
                Name       = "Alexander"
            });

            commandAggregate.Save();

            // Read
            queryAggregate = new MechanicQueryAggregate();

            mechanicDto = queryAggregate.Get(mechanicId);

            Assert.AreEqual(mechanicId, mechanicDto.MechanicId);

            Assert.AreEqual("Alexander", mechanicDto.Name);

            Assert.AreEqual(0, mechanicDto.Vehicles.Count());

            // Delete
            //var deleteAggregate = new DeleteMechanicCommandAggregate(new DeleteMechanicInputDto
            //{
            //    Id = mechanicId.Value
            //});

            //deleteAggregate.Save();

            //mechanicDto = queryAggregate.Get(mechanicId);

            //Assert.IsNull(mechanicDto);
        }
        public void Save_Mechanic_With_Vehicles_Tests()
        {
            // Insert
            var commandAggregate = new SaveMechanicCommandAggregate(new SaveMechanicInputDto
            {
                Name     = "Sasha",
                Vehicles = new List <VehicleInputDto>
                {
                    new CarInputDto
                    {
                        Model     = "Honda",
                        Cylinders = new List <CylinderInputDto>
                        {
                            new CylinderInputDto
                            {
                                Diameter = 1
                            },
                            new CylinderInputDto
                            {
                                Diameter = 2
                            },
                            new CylinderInputDto
                            {
                                Diameter = 3
                            },
                            new CylinderInputDto
                            {
                                Diameter = 4
                            }
                        },
                        Doors = new List <DoorInputDto>
                        {
                            new DoorInputDto
                            {
                                Number = 1
                            },
                            new DoorInputDto
                            {
                                Number = 2
                            }
                        },
                        Passengers = 4
                    },
                    new TruckInputDto
                    {
                        Model     = "Chevrolet",
                        Weight    = 4000,
                        Cylinders = new List <CylinderInputDto>
                        {
                            new CylinderInputDto
                            {
                                Diameter = 1
                            },
                            new CylinderInputDto
                            {
                                Diameter = 2
                            },
                            new CylinderInputDto
                            {
                                Diameter = 3
                            },
                            new CylinderInputDto
                            {
                                Diameter = 4
                            },
                            new CylinderInputDto
                            {
                                Diameter = 5
                            },
                            new CylinderInputDto
                            {
                                Diameter = 6
                            }
                        },
                        Inspections = new List <InspectionInputDto>
                        {
                            new InspectionInputDto
                            {
                                Date = new System.DateTime(2012, 1, 18)
                            },
                            new InspectionInputDto
                            {
                                Date = new System.DateTime(2016, 12, 23)
                            },
                            new InspectionInputDto
                            {
                                Date = new System.DateTime(2019, 2, 13)
                            }
                        }
                    },
                    new VehicleInputDto
                    {
                        Model     = "Huyndai",
                        Cylinders = new List <CylinderInputDto>
                        {
                            new CylinderInputDto
                            {
                                Diameter = 5
                            },
                            new CylinderInputDto
                            {
                                Diameter = 6
                            }
                        }
                    }
                }
            });

            commandAggregate.Save();

            var mechanicId = commandAggregate.RootEntity.Id;

            // Read
            var queryAggregate = new MechanicQueryAggregate();

            var mechanicDto = queryAggregate.Get(mechanicId);

            Assert.AreEqual(mechanicId, mechanicDto.MechanicId);

            Assert.AreEqual("Sasha", mechanicDto.Name);

            Assert.AreEqual(3, mechanicDto.Vehicles.Count());

            var vehicleDto = mechanicDto.Vehicles.ElementAt(0);

            Assert.AreEqual("Chevrolet", vehicleDto.Model);

            Assert.AreEqual(6, vehicleDto.Cylinders.Count());

            Assert.AreEqual(3, ((TruckOutputDto)vehicleDto).Inspections.Count());

            Assert.AreEqual(mechanicDto.MechanicId, vehicleDto.MechanicId);

            vehicleDto = mechanicDto.Vehicles.ElementAt(1);

            Assert.AreEqual("Honda", vehicleDto.Model);

            Assert.AreEqual(4, vehicleDto.Cylinders.Count());

            Assert.AreEqual(2, ((CarOutputDto)vehicleDto).Doors.Count());

            Assert.AreEqual(mechanicDto.MechanicId, vehicleDto.MechanicId);

            vehicleDto = mechanicDto.Vehicles.ElementAt(2);

            Assert.AreEqual("Huyndai", vehicleDto.Model);

            Assert.AreEqual(2, vehicleDto.Cylinders.Count());

            Assert.AreEqual(mechanicDto.MechanicId, vehicleDto.MechanicId);

            // Update
            commandAggregate = new SaveMechanicCommandAggregate(new SaveMechanicInputDto
            {
                MechanicId = mechanicId,
                Name       = "Alexander",
                Vehicles   = new List <VehicleInputDto>
                {
                    new VehicleInputDto
                    {
                        Model     = "Toyota",
                        Cylinders = new List <CylinderInputDto>
                        {
                            new CylinderInputDto
                            {
                                Diameter = 4
                            }
                        }
                    },
                    new VehicleInputDto
                    {
                        Model     = "BMW",
                        Cylinders = new List <CylinderInputDto>
                        {
                            new CylinderInputDto
                            {
                                Diameter = 3
                            }
                        }
                    },
                    new VehicleInputDto
                    {
                        Model     = "Ford",
                        Cylinders = new List <CylinderInputDto>
                        {
                            new CylinderInputDto
                            {
                                Diameter = 6
                            }
                        }
                    }
                }
            });

            commandAggregate.Save();

            // Read
            queryAggregate = new MechanicQueryAggregate();

            mechanicDto = queryAggregate.Get(mechanicId);

            Assert.AreEqual(mechanicId, mechanicDto.MechanicId);

            Assert.AreEqual("Alexander", mechanicDto.Name);

            vehicleDto = mechanicDto.Vehicles.ElementAt(0);

            Assert.AreEqual("Toyota", vehicleDto.Model);

            Assert.AreEqual(mechanicDto.MechanicId, vehicleDto.MechanicId);

            vehicleDto = mechanicDto.Vehicles.ElementAt(1);

            Assert.AreEqual("BMW", vehicleDto.Model);

            Assert.AreEqual(mechanicDto.MechanicId, vehicleDto.MechanicId);

            vehicleDto = mechanicDto.Vehicles.ElementAt(2);

            Assert.AreEqual("Ford", vehicleDto.Model);

            Assert.AreEqual(mechanicDto.MechanicId, vehicleDto.MechanicId);

            // Delete
            //var deleteAggregate = new DeleteMechanicCommandAggregate(new DeleteMechanicInputDto
            //{
            //    Id = mechanicId.Value
            //});

            //deleteAggregate.Save();

            //mechanicDto = queryAggregate.Get(mechanicId);

            //Assert.IsNull(mechanicDto);
        }