public void Test_CtorWithAd_NoTypes()
        {
            // Given
            RealEstateAd ad = new RealEstateAd
            {
                Title = "title",
                City = new City(),
                CreatedBy = new User()
            };

            // When
            RealEstateAdDetailsModel actual = new RealEstateAdDetailsModel(ad);

            // Then
            Assert.AreEqual(ad.Title, actual.Title);
            Assert.AreEqual(String.Empty, actual.Type);
            Assert.AreEqual(String.Empty, actual.District);
            Assert.AreEqual(null, actual.RoomNb);
            Assert.AreEqual(String.Empty, actual.SurfaceArea);
        }
        public void Test_CtorWithAd()
        {
            // Given
            RealEstateAd ad = new RealEstateAd
            {
                Title = "title",
                Type = new Bea.Domain.Reference.RealEstateType { Label = "tyyype" },
                RoomsNumber = 4,
                District = new District { Label = "quartier" },
                SurfaceArea = 80,
                City = new City(),
                CreatedBy = new User()
            };

            // When
            RealEstateAdDetailsModel actual = new RealEstateAdDetailsModel(ad);

            // Then
            Assert.AreEqual(ad.Title, actual.Title);
            Assert.AreEqual(ad.Type.Label, actual.Type);
            Assert.AreEqual(ad.District.Label, actual.District);
            Assert.AreEqual(4, actual.RoomNb);
            Assert.AreEqual("80 m²", actual.SurfaceArea);
        }
        protected AdDetailsModel CreateAdDetailsModelFromAd(AdTypeEnum adType, long adId)
        {
            AdDetailsModel model = null;
            BaseAd ad = null;

            // Get the right Ad based on its type
            switch (adType)
            {
                case AdTypeEnum.Ad:
                    ad = _adRepository.GetAdById<Ad>(adId);
                    model = new AdDetailsModel(ad);
                    break;

                case AdTypeEnum.CarAd:
                    ad = _adRepository.GetAdById<CarAd>(adId);
                    model = new CarAdDetailsModel(ad as CarAd);
                    break;

                case AdTypeEnum.MotoAd:
                    ad = _adRepository.GetAdById<MotoAd>(adId);
                    model = new MotoAdDetailsModel(ad as MotoAd);
                    break;

                case AdTypeEnum.OtherVehiculeAd:
                    ad = _adRepository.GetAdById<OtherVehicleAd>(adId);
                    model = new OtherVehicleAdDetailsModel(ad as OtherVehicleAd);
                    break;

                case AdTypeEnum.SailingBoatAd:
                    ad = _adRepository.GetAdById<SailingBoatAd>(adId);
                    model = new SailingBoatAdDetailsModel(ad as SailingBoatAd, _helperService);
                    break;

                case AdTypeEnum.MotorBoatAd:
                    ad = _adRepository.GetAdById<MotorBoatAd>(adId);
                    model = new MotorBoatAdDetailsModel(ad as MotorBoatAd, _helperService);
                    break;

                case AdTypeEnum.MotorBoatEngineAd:
                    ad = _adRepository.GetAdById<MotorBoatEngineAd>(adId);
                    model = new MotorBoatEngineAdDetailsModel(ad as MotorBoatEngineAd);
                    break;

                case AdTypeEnum.WaterSportAd:
                    ad = _adRepository.GetAdById<WaterSportAd>(adId);
                    model = new WaterSportAdDetailsModel(ad as WaterSportAd);
                    break;

                case AdTypeEnum.RealEstateAd:
                    ad = _adRepository.GetAdById<RealEstateAd>(adId);
                    model = new RealEstateAdDetailsModel(ad as RealEstateAd);
                    break;

                default:
                    return null;
            }

            // Compute whether or not this Ad is new (less than 3 days)
            model.IsNew = ad.CreationDate > _helperService.GetCurrentDateTime().AddHours(-72);

            return model;
        }