Exemplo n.º 1
0
        public void SellAccomodationShouldInformUserWhenAccomodationIsAlreadySold()
        {
            //Init
            var clientModel = new SellAccomodationModel
            {
                AccomodationNumber = AccomodationTest.GetAccomodation().Number,
                PersonId           = "1"
            };

            var person              = PersonTest.GetPersonWithoutId();
            var accomodation        = AccomodationTest.GetAccomodation();
            var personService       = Substitute.For <PersonService>();
            var clientService       = Substitute.For <ClientService>();
            var prospectService     = Substitute.For <ProspectService>();
            var accomodationService = Substitute.For <AccomodationService>();
            var personQuery         = Substitute.For <PersonQueryExtended>();
            var accomodationQuery   = Substitute.For <AccomodationQueryExtended>();
            var controller          = new ControllerImpl(personService, clientService, prospectService,
                                                         accomodationService, personQuery, accomodationQuery);

            clientService
            .When(c => c.SellAccomodation(person, accomodation))
            .Do(c => { throw new AccomodationAlreadySoldException(); });

            //Act
            var message = controller.SellAccomodation(clientModel);

            //Assert
            Check.That(message).IsEqualTo("Accomodation Sold !");
        }
        public static Result Evaluate(this SellAccomodationModel model)
        {
            var idResult     = GetIdResult(model);
            var numberResult = AccomodationNumber.Create(model.AccomodationNumber);

            return(Result.Combine(numberResult, idResult));
        }
        private static Result GetIdResult(SellAccomodationModel model)
        {
            Result idResult;

            if (string.IsNullOrWhiteSpace(model.PersonId))
            {
                idResult = Result.Fail("The person id is mandatory");
            }
            else
            {
                idResult = Result.Ok(model.PersonId);
            }
            return(idResult);
        }
        public string SellAccomodation(SellAccomodationModel model)
        {
            try
            {
                var validationResult = model.Evaluate();
                if (validationResult.IsFailure)
                {
                    return(validationResult.Error);
                }

                var personId = new PersonId(Option.Some(model.PersonId));

                var accomodationNumber = AccomodationNumber.Create(model.AccomodationNumber);
                var accomodationId     = new AccomodationId(accomodationNumber.Value);

                this.clientService.SellAccomodation(personId, accomodationId);

                return("Accomodation Sold !");
            }
            catch (AccomodationAlreadySoldException)
            {
                return("The accomodation is already sold");
            }
            catch (AccomodationDoesNotExistException)
            {
                return("The accomodation does not exist");
            }
            catch (PersonDoesNotExistException)
            {
                return("The person does not exist");
            }
            catch (Exception)
            {
                return("An unknow error was thrown");
            }
        }
Exemplo n.º 5
0
        public static void SellAccomodation()
        {
            var accomodations = _controller.GetAvailableAccomodations();

            if (!accomodations.Any())
            {
                Console.WriteLine("There is no accomodation available, create an accomodation before");
                return;
            }

            var persons = _controller.GetPersons();

            if (!persons.Any())
            {
                Console.WriteLine("There is no person, create an accomodation before");
                return;
            }

            var accomodation = View.DoAChoice(
                title: "Which accomodation do you want to sell ?",
                choices: accomodations);

            var person = View.DoAChoice(
                title: "To who ?",
                choices: persons);

            var model = new SellAccomodationModel
            {
                PersonId           = person.Id,
                AccomodationNumber = accomodation.Number
            };

            var message = _controller.SellAccomodation(model);

            Console.WriteLine(message);
        }