private void Crea_Richiesta_R1_Con_M1_e_M2_revocato_e_riassegnato_e_M1_revocato_e_M2_in_viaggio(out IEnumerable <SituazioneMezzo> expected, out IEnumerable <RichiestaAssistenza> richieste) { var richiesta = new RichiestaAssistenza() { Codice = "R1", }; var richiestaSubentrata = new RichiestaAssistenza() { Codice = "R2", }; richieste = new RichiestaAssistenza[] { richiesta, richiestaSubentrata }; var now = DateTime.Now; var componentePartenza1 = new ComponentePartenza("CF1", "M1"); var componentePartenza2 = new ComponentePartenza("CF2", "M2"); var istanteEventoAssegnazione = now.AddMinutes(-10); var eventoComposizione = new ComposizionePartenze(richiesta, istanteEventoAssegnazione, "Fonte", false) { Componenti = new HashSet <ComponentePartenza>() { componentePartenza1, componentePartenza2 } }; var istanteEventoUscitaM1 = now.AddMinutes(-7); var eventoUscitaM1 = new UscitaPartenza(richiesta, "M1", istanteEventoUscitaM1, "Fonte"); var istanteEventoUscitaM2 = now.AddMinutes(-6); var eventoUscitaM2 = new UscitaPartenza(richiesta, "M2", istanteEventoUscitaM2, "Fonte"); var istanteSulPostoM1 = now.AddMinutes(-4); var eventoSulPostoM1 = new ArrivoSulPosto(richiesta, "M1", istanteSulPostoM1, "Fonte"); var istanteSganciatoM1 = now.AddMinutes(-2); var eventoSganciatoM1 = new RevocaPerRiassegnazione(richiesta, richiestaSubentrata, "M1", istanteSganciatoM1, "Fonte"); var istanteRiassegnatoM1 = now.AddMinutes(-1); var eventoComposizione2 = new ComposizionePartenze(richiestaSubentrata, istanteRiassegnatoM1, "Fonte", true) { Componenti = new HashSet <ComponentePartenza>() { componentePartenza1 } }; expected = new SituazioneMezzo[] { new SituazioneMezzo() { Codice = "M1", CodiceStato = new InViaggio(istanteRiassegnatoM1, "R2").Codice, CodiceRichiestaAssistenza = "R2", IstanteAggiornamentoStato = istanteRiassegnatoM1 }, new SituazioneMezzo() { Codice = "M2", CodiceStato = new InViaggio(istanteEventoUscitaM2, "R1").Codice, CodiceRichiestaAssistenza = "R1", IstanteAggiornamentoStato = istanteEventoUscitaM2 }, }; }
public void Un_evento_di_arrivo_sul_posto_con_parametri_corretti_e_correttamente_creato() { var now = DateTime.Now; var evento = new ArrivoSulPosto(this.richiesta, "M1", now, "Fonte"); Assert.That(evento.CodiceMezzo, Is.EqualTo("M1")); Assert.That(evento.Istante, Is.EqualTo(now)); Assert.That(evento.CodiceFonte, Is.EqualTo("Fonte")); }
private RichiestaAssistenza Crea_Richiesta_Con_M3_e_M4_assegnati_e_M4_in_sede_e_M3_in_rientro(out IEnumerable <SituazioneMezzo> expected) { var richiesta = new RichiestaAssistenza() { Codice = "R2", }; var componentePartenza1 = new ComponentePartenza("CF3", "M3"); var componentePartenza2 = new ComponentePartenza("CF4", "M4"); var istanteEventoAssegnazione = DateTime.Now.AddMinutes(-10); var eventoComposizione = new ComposizionePartenze(richiesta, istanteEventoAssegnazione, "Fonte", false) { Componenti = new HashSet <ComponentePartenza>() { componentePartenza1, componentePartenza2 } }; var istanteEventoUscitaM3 = DateTime.Now.AddMinutes(-7); var eventoUscitaM3 = new UscitaPartenza(richiesta, "M3", istanteEventoUscitaM3, "Fonte"); var istanteSulPostoM3 = DateTime.Now.AddMinutes(-4); var eventoSulPostoM3 = new ArrivoSulPosto(richiesta, "M3", istanteSulPostoM3, "Fonte"); var istanteInRientroM3 = DateTime.Now.AddMinutes(-2); var eventoInRientroM3 = new PartenzaInRientro(richiesta, "M3", istanteInRientroM3, "Fonte"); var istanteEventoUscitaM4 = DateTime.Now.AddMinutes(-7); var eventoUscitaM4 = new UscitaPartenza(richiesta, "M4", istanteEventoUscitaM4, "Fonte"); var istanteSulPostoM4 = DateTime.Now.AddMinutes(-4); var eventoSulPostoM4 = new ArrivoSulPosto(richiesta, "M4", istanteSulPostoM4, "Fonte"); var istanteInRientroM4 = DateTime.Now.AddMinutes(-3); var eventoInRientroM4 = new PartenzaInRientro(richiesta, "M4", istanteInRientroM4, "Fonte"); var istanteRientratoM4 = DateTime.Now.AddMinutes(-2); var eventoRientratoM4 = new PartenzaRientrata(richiesta, "M4", istanteRientratoM4, "Fonte"); expected = new SituazioneMezzo[] { new SituazioneMezzo() { Codice = "M3", CodiceStato = new InRientro(istanteInRientroM3, "R2").Codice, CodiceRichiestaAssistenza = "R2", IstanteAggiornamentoStato = istanteSulPostoM3 }, new SituazioneMezzo() { Codice = "M4", CodiceStato = new InSede(istanteRientratoM4).Codice, CodiceRichiestaAssistenza = "R2", IstanteAggiornamentoStato = istanteRientratoM4 }, }; return(richiesta); }
private RichiestaAssistenza Crea_Richiesta_Con_M3_e_M4_assegnati_e_M3_sul_posto_e_in_viaggio(out IEnumerable <SituazioneMezzo> expected) { var richiesta = new RichiestaAssistenza() { Codice = "R2", }; var componentePartenza1 = new ComponentePartenza("CF3", "M3"); var componentePartenza2 = new ComponentePartenza("CF4", "M4"); var istanteEvento1 = DateTime.Now.AddMinutes(-11); var eventoComposizione = new ComposizionePartenze(richiesta, istanteEvento1, "Fonte", false) { Componenti = new HashSet <ComponentePartenza>() { componentePartenza1, componentePartenza2 } }; var istanteEvento2 = DateTime.Now.AddMinutes(-6); var eventoUscita = new UscitaPartenza(richiesta, "M4", istanteEvento2, "Fonte"); var istanteEvento3 = DateTime.Now.AddMinutes(-3); var eventoSulPosto = new ArrivoSulPosto(richiesta, "M4", istanteEvento3, "Fonte"); expected = new SituazioneMezzo[] { new SituazioneMezzo() { Codice = "M4", CodiceStato = new SulPosto(istanteEvento3, "R2").Codice, CodiceRichiestaAssistenza = "R2", IstanteAggiornamentoStato = istanteEvento3 }, new SituazioneMezzo() { Codice = "M3", CodiceStato = new Assegnato(istanteEvento1, "R2").Codice, CodiceRichiestaAssistenza = "R2", IstanteAggiornamentoStato = istanteEvento1 }, }; return(richiesta); }
/// <summary> /// Accetta il visitor e scatena l'implementazione di default che consiste nel sollevare /// una <see cref="WorkflowException" />. Gli stati concreti, implementati nelle classi /// derivate, effettuano l'override dei metodi corrispondenti a transizioni di stato /// ammesse, restituendo lo stato corretto a fronte dell'evento (visitor) di ingresso. /// </summary> /// <param name="arrivoSulPosto">Il visitor accettato</param> /// <returns>Niente, poiché solleva un'eccezione</returns> public virtual IStatoMezzo AcceptVisitor(ArrivoSulPosto arrivoSulPosto) { throw new WorkflowException($"Impossibile transire in seguito all'evento {nameof(arrivoSulPosto)}"); }
/// <summary> /// Nello stato <see cref="InViaggio" /> l'evento <see cref="ArrivoSulPosto" /> produce la /// transizione nello stato <see cref="SulPosto" />. /// </summary> /// <param name="arrivoSulPosto">Il visitor</param> /// <returns>Lo stato <see cref="SulPosto" /></returns> public override IStatoMezzo AcceptVisitor(ArrivoSulPosto arrivoSulPosto) { return(new SulPosto(arrivoSulPosto.Istante, arrivoSulPosto.CodiceRichiesta)); }