public void Un_evento_di_partenza_rientrata_con_parametri_corretti_e_correttamente_creato() { var now = DateTime.Now; var evento = new PartenzaRientrata(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); }
/// <summary> /// Nello stato <see cref="InRientro" /> l'evento <see cref="PartenzaRientrata" /> produce /// la transizione nello stato <see cref="InSede" />. /// </summary> /// <param name="partenzaRientrata">Il visitor</param> /// <returns>Lo stato <see cref="InSede" /></returns> public override IStatoMezzo AcceptVisitor(PartenzaRientrata partenzaRientrata) { return(new InSede(partenzaRientrata.Istante)); }
/// <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="partenzaRientrata">Il visitor accettato</param> /// <returns>Niente, poiché solleva un'eccezione</returns> public virtual IStatoMezzo AcceptVisitor(PartenzaRientrata partenzaRientrata) { throw new WorkflowException($"Impossibile transire in seguito all'evento {nameof(partenzaRientrata)}"); }