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"); } }
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); }