public void UnMezzoRientratoEPoiDiNuovoUscitoRestituisceLoStatoInViaggio() { var processoreStato = new ProcessoreStato(); var richiesta1 = new RichiestaAssistenza(); var richiesta2 = new RichiestaAssistenza(); var eventi = new IPartenza[] { new ComposizionePartenze(richiesta1, DateTime.Now, "fonte", false) { Componenti = new HashSet <ComponentePartenza>() { new ComponentePartenza("XXX", "M1") } }, new UscitaPartenza(richiesta1, "M1", DateTime.Now, "fonte"), new ArrivoSulPosto(richiesta1, "M1", DateTime.Now, "fonte"), new PartenzaInRientro(richiesta1, "M1", DateTime.Now, "fonte"), new PartenzaRientrata(richiesta1, "M1", DateTime.Now, "fonte"), new ComposizionePartenze(richiesta2, DateTime.Now, "fonte", false) { Componenti = new HashSet <ComponentePartenza>() { new ComponentePartenza("YYY", "M1") } }, new UscitaPartenza(richiesta2, "M1", DateTime.Now, "fonte") }; var stato = processoreStato.ProcessaEventi(eventi).Stato; Assert.That(stato, Is.InstanceOf <InViaggio>()); }
public void UnaRichiestaConUnMezzoRientratoEPoiDiNuovoUscitoRestituisceUnSoloMezzo() { var richiesta = new RichiestaAssistenza(); var eventi = new IPartenza[] { new ComposizionePartenze(richiesta, DateTime.Now, "fonte", false) { Componenti = new HashSet <ComponentePartenza>() { new ComponentePartenza("XXX", "M1") } }, new UscitaPartenza(richiesta, "M1", DateTime.Now, "fonte"), new ArrivoSulPosto(richiesta, "M1", DateTime.Now, "fonte"), new PartenzaInRientro(richiesta, "M1", DateTime.Now, "fonte"), new PartenzaRientrata(richiesta, "M1", DateTime.Now, "fonte"), new ComposizionePartenze(richiesta, DateTime.Now, "fonte", false) { Componenti = new HashSet <ComponentePartenza>() { new ComponentePartenza("YYY", "M1") } }, new UscitaPartenza(richiesta, "M1", DateTime.Now, "fonte") }; var mezziCoinvolti = richiesta.MezziCoinvolti; Assert.That(mezziCoinvolti, Has.Count.EqualTo(1)); }
public void UnMezzoAssegnatoRestituisceIlCodiceDellaRichiesta() { var processoreStato = new ProcessoreStato(); var richiesta = new RichiestaAssistenza(); richiesta.Codice = "C1234"; var eventi = new IPartenza[] { new ComposizionePartenze(richiesta, DateTime.Now, "fonte", false) { Componenti = new HashSet <ComponentePartenza>() { new ComponentePartenza("XXX", "M1") } } }; var stato = processoreStato.ProcessaEventi(eventi).Stato; Assert.Multiple(() => { Assert.That(stato.AssegnatoARichiesta, Is.True); Assert.That(stato, Is.InstanceOf <IStatoMezzoAssegnatoARichiesta>()); Assert.That(((IStatoMezzoAssegnatoARichiesta)stato).CodiceRichiesta, Is.EqualTo("C1234")); }); }
public void UnMezzoPuoAndareDirettamenteFuoriServizio() { var processoreStato = new ProcessoreStato(); var richiesta = new RichiestaAssistenza(); var eventi = new IPartenza[] { new VaInFuoriServizio(richiesta, "M1", DateTime.Now, "fonte", "test") }; var stato = processoreStato.ProcessaEventi(eventi).Stato; Assert.That(stato, Is.InstanceOf <FuoriServizio>()); }
public void UnMezzoInSedeNonPuoEssereUscitoDallaSede() { var processoreStato = new ProcessoreStato(); var richiesta = new RichiestaAssistenza(); var eventi = new IPartenza[] { new UscitaPartenza(richiesta, "M1", DateTime.Now, "fonte"), }; Assert.Throws <WorkflowException>(() => { var stato = processoreStato.ProcessaEventi(eventi).Stato; }); }
public void UnaRichiestaConDueMezziInUnaComposizioneRestituisceDueStatiMezzo() { var richiesta = new RichiestaAssistenza(); var eventi = new IPartenza[] { new ComposizionePartenze(richiesta, DateTime.Now, "fonte", false) { Componenti = new HashSet <ComponentePartenza>() { new ComponentePartenza("XXX", "M1"), new ComponentePartenza("YYY", "M2"), } } }; var mezziCoinvolti = richiesta.MezziCoinvolti; Assert.That(mezziCoinvolti, Has.Count.EqualTo(2)); }
public void UnaRichiestaConUnMezzoUscitoRestituisceUnMezzoCoinvolto() { var richiesta = new RichiestaAssistenza(); var eventi = new IPartenza[] { new ComposizionePartenze(richiesta, DateTime.Now, "fonte", false) { Componenti = new HashSet <ComponentePartenza>() { new ComponentePartenza("XXX", "M1") } }, new UscitaPartenza(richiesta, "M1", DateTime.Now, "fonte") }; var mezziCoinvolti = richiesta.MezziCoinvolti; Assert.That(mezziCoinvolti, Has.Count.EqualTo(1)); }
public void UnMezzoRevocatoEdAssegnatoAdAltraRichiestaRestituisceIlCodiceDellAltraRichiesta() { var processoreStato = new ProcessoreStato(); var richiesta1 = new RichiestaAssistenza() { Codice = "R1" }; var richiesta2 = new RichiestaAssistenza() { Codice = "R2" }; var eventi = new IPartenza[] { new ComposizionePartenze(richiesta1, DateTime.Now, "fonte", false) { Componenti = new HashSet <ComponentePartenza>() { new ComponentePartenza("XXX", "M1") } }, new UscitaPartenza(richiesta1, "M1", DateTime.Now, "fonte"), new ArrivoSulPosto(richiesta1, "M1", DateTime.Now, "fonte"), new PartenzaInRientro(richiesta1, "M1", DateTime.Now, "fonte"), new PartenzaRientrata(richiesta1, "M1", DateTime.Now, "fonte"), new ComposizionePartenze(richiesta2, DateTime.Now, "fonte", false) { Componenti = new HashSet <ComponentePartenza>() { new ComponentePartenza("YYY", "M1") } }, new UscitaPartenza(richiesta2, "M1", DateTime.Now, "fonte") }; var stato = processoreStato.ProcessaEventi(eventi).Stato; Assert.Multiple(() => { Assert.That(stato, Is.InstanceOf <IStatoMezzoAssegnatoARichiesta>()); Assert.That(((IStatoMezzoAssegnatoARichiesta)stato).CodiceRichiesta, Is.EqualTo("R2")); }); }
public void UnUnicoEventoProvocaUnaTransizioneNellIstanteDellEvento() { var processoreStato = new ProcessoreStato(); var richiesta = new RichiestaAssistenza(); var now = DateTime.Now; var eventi = new IPartenza[] { new ComposizionePartenze(richiesta, now, "fonte", false) { Componenti = new HashSet <ComponentePartenza>() { new ComponentePartenza("XXX", "M1") } } }; var stato = processoreStato.ProcessaEventi(eventi).Stato; Assert.That(stato.IstanteTransizione, Is.EqualTo(now)); }
public void UnMezzoAssegnatoPuoAndareFuoriServizio() { var processoreStato = new ProcessoreStato(); var richiesta = new RichiestaAssistenza(); var eventi = new IPartenza[] { new ComposizionePartenze(richiesta, DateTime.Now, "fonte", false) { Componenti = new HashSet <ComponentePartenza>() { new ComponentePartenza("XXX", "M1") } }, new VaInFuoriServizio(richiesta, "M1", DateTime.Now, "fonte", "test") }; var stato = processoreStato.ProcessaEventi(eventi).Stato; Assert.That(stato, Is.InstanceOf <FuoriServizio>()); }
public void UnEventoDiComposizioneMentreIlMezzoNonEInSedeRestituisceLoStatoLibero() { var processoreStato = new ProcessoreStato(); var richiesta = new RichiestaAssistenza(); var fuoriSede = true; var eventi = new IPartenza[] { new ComposizionePartenze(richiesta, DateTime.Now, "fonte", fuoriSede) { Componenti = new HashSet <ComponentePartenza>() { new ComponentePartenza("XXX", "M1") } } }; var stato = processoreStato.ProcessaEventi(eventi).Stato; Assert.That(stato, Is.InstanceOf <Libero>()); }
public void UnMezzoPartitoRestituisceLoStatoInViaggio() { var processoreStato = new ProcessoreStato(); var richiesta = new RichiestaAssistenza(); var eventi = new IPartenza[] { new ComposizionePartenze(richiesta, DateTime.Now, "fonte", false) { Componenti = new HashSet <ComponentePartenza>() { new ComponentePartenza("XXX", "M1") } }, new UscitaPartenza(richiesta, "M1", DateTime.Now, "fonte") }; var stato = processoreStato.ProcessaEventi(eventi).Stato; Assert.That(stato, Is.InstanceOf <InViaggio>()); }
public void UnMezzoRevocatoDopoLaComposizioneRestituisceLoStatoInSede() { var processoreStato = new ProcessoreStato(); var richiesta = new RichiestaAssistenza(); var richiestaSubentrata = new RichiestaAssistenza(); var eventi = new IPartenza[] { new ComposizionePartenze(richiesta, DateTime.Now, "fonte", false) { Componenti = new HashSet <ComponentePartenza>() { new ComponentePartenza("XXX", "M1") } }, new RevocaPerRiassegnazione(richiesta, richiestaSubentrata, "M1", DateTime.Now, "fonte") }; var stato = processoreStato.ProcessaEventi(eventi).Stato; Assert.That(stato, Is.InstanceOf <InSede>()); }
public void LIstanteTransizioneRiportaLaDataDellUltimoEvento() { var processoreStato = new ProcessoreStato(); var richiesta = new RichiestaAssistenza(); var now = DateTime.Now; var eventi = new IPartenza[] { new ComposizionePartenze(richiesta, now, "fonte", false) { Componenti = new HashSet <ComponentePartenza>() { new ComponentePartenza("XXX", "M1") } }, new UscitaPartenza(richiesta, "M1", now.AddSeconds(1), "fonte"), new ArrivoSulPosto(richiesta, "M1", now.AddSeconds(2), "fonte") }; var stato = processoreStato.ProcessaEventi(eventi).Stato; Assert.That(stato.IstanteTransizione, Is.EqualTo(now.AddSeconds(2))); }
public void UnMezzoInViaggioNonPuoEsserePartitoDalLuogo() { var processoreStato = new ProcessoreStato(); var richiesta = new RichiestaAssistenza(); var eventi = new IPartenza[] { new ComposizionePartenze(richiesta, DateTime.Now, "fonte", false) { Componenti = new HashSet <ComponentePartenza>() { new ComponentePartenza("XXX", "M1") } }, new UscitaPartenza(richiesta, "M1", DateTime.Now, "fonte"), new PartenzaInRientro(richiesta, "M1", DateTime.Now, "fonte"), }; Assert.Throws <WorkflowException>(() => { var stato = processoreStato.ProcessaEventi(eventi).Stato; }); }
/// <summary> /// Esegue le transizioni di stato processando gli eventi dopo averli ordinati in ordine cronologico. /// </summary> /// <param name="eventi">Gli eventi che inducono le transizioni di stato</param> /// <returns>Il processore</returns> public ProcessoreStato ProcessaEventi(IEnumerable <IPartenza> eventi) { // Asserisce che gli eventi siano ordinati in ordine cronologico IPartenza ultimoEvento = null; foreach (var e in eventi) { if (ultimoEvento != null) { Debug.Assert(ultimoEvento.Istante <= e.Istante, "Gli eventi non risultano ordinati in ordine crescente"); } ultimoEvento = e; } foreach (var e in eventi) { this.stato = this.stato.Transisci(e); } return(this); }
public void UnMezzoRiassegnatoPrimaDelRientroRestituisceLoStatoLibero() { var processoreStato = new ProcessoreStato(); var richiesta = new RichiestaAssistenza(); var richiestaSubentrata = new RichiestaAssistenza(); var eventi = new IPartenza[] { new ComposizionePartenze(richiesta, DateTime.Now, "fonte", false) { Componenti = new HashSet <ComponentePartenza>() { new ComponentePartenza("XXX", "M1") } }, new UscitaPartenza(richiesta, "M1", DateTime.Now, "fonte"), new ArrivoSulPosto(richiesta, "M1", DateTime.Now, "fonte"), new PartenzaInRientro(richiesta, "M1", DateTime.Now, "fonte"), new RevocaPerRiassegnazione(richiesta, richiestaSubentrata, "M1", DateTime.Now, "fonte") }; var stato = processoreStato.ProcessaEventi(eventi).Stato; Assert.That(stato, Is.InstanceOf <Libero>()); }
/// <summary> /// Calcola la transizione di stato ottenuta in seguito al verificarsi di un evento /// </summary> /// <param name="evento">L'evento che induce la transizione di stato</param> /// <returns>Il nuovo stato raggiunto a seguito della transizione</returns> public IStatoMezzo Transisci(IPartenza evento) { return(evento.Visit(this)); }
/// <summary> /// Esegue una transizione di stato /// </summary> /// <param name="evento">L'evento che induce la transizione di stato</param> /// <returns>Il processore</returns> public ProcessoreStato ProcessaEvento(IPartenza evento) { this.stato = this.stato.Transisci(evento); return(this); }