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>());
        }
Exemple #2
0
        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;
            });
        }
Exemple #6
0
        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));
        }
Exemple #7
0
        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;
            });
        }
Exemple #16
0
        /// <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>());
        }
Exemple #18
0
 /// <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));
 }
Exemple #19
0
        /// <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);
        }