private void SetRicevutaPecCombo() { string ricevutaPecType = SenderManager.getSetRicevutaPec(this.cboRegistriRF.SelectedValue, null, null, true, ddl_caselle.SelectedValue); if (ricevutaPecType == null) { ricevutaPecType = string.Empty; } else if (ricevutaPecType.Length > 0) { ricevutaPecType = ricevutaPecType.Substring(0, 1); } else { ricevutaPecType = string.Empty; } switch (ricevutaPecType) { case "B": case "S": case "C": SenderLblTipoRicevuta.Visible = true; cboTipoRicevutaPec.Visible = true; this.cboTipoRicevutaPec.SelectedValue = ricevutaPecType; break; default: SenderLblTipoRicevuta.Visible = false; cboTipoRicevutaPec.Visible = false; break; } }
private void ReadListaReportMonitoring() { DocsPaWR.FiltriReportSpedizioni filters = new FiltriReportSpedizioni(); filters = getFiltersFromGui(); try { List <DocsPaWR.InfoDocumentoSpedito> listSpedizioni = SenderManager.GetReportSpedizioniDocumenti(filters, this.IdDocumentiSelezionatiMonitoring); if (listSpedizioni.Count > 0 && string.IsNullOrEmpty(IdDocumento)) { this.tblEspandiChiudi.Visible = true; this.lblNumDocTrovati.Text = listSpedizioni.Count.ToString(); } else { this.tblEspandiChiudi.Visible = false; } gvlistaDocumenti.DataSource = listSpedizioni; gvlistaDocumenti.DataBind(); UpPnlDest.Update(); gvlistaDocumenti.Visible = true; } catch (Exception ex) { throw ex; } }
static void Main(string[] args) { ILogger log = new Logger(); Logging.Initialize(log); _server = new ServerManager(MulticastHostint, UdpPort, TcpPort); _sender = new SenderManager(MulticastHostint, TcpPort, UdpPort); _messageManager = new MessageManager(MulticastHostint, _myCode, _sender, _server, new[] { _host }); _server.ServerStart(); PropertyInfo propInfo = new PropertyInfo("", true, ProperyType.Int); Properties properties = new Properties(new Dictionary <string, PropertyInfo> { { propName, propInfo } }); Device device = new Device(_myCode, "LALA", "Я ДЕВАЙС", properties); ConnectMessage connect = new ConnectMessage(device, _myCode, DateTime.Now, _host); _messageManager.OnConnectMessage(null, new EventMessageConnectArgs(connect)); while (true) { Task.Delay(3000).Wait(); Telemetry telemetry = new Telemetry(_myCode, new PropertiesValues { { propName, _rnd.Next(10, 20).ToString() } }, DateTime.Now, _host); Console.WriteLine($"{_myCode}: [{telemetry.TimeMarker}] {telemetry.Values[propName]}"); _messageManager.OnTelemetry(null, new EventTelemetryArgs(telemetry)); } }
public MainPageModel() { #region Preparing var log = new Logger(); Logging.Initialize(log); var db = new DataBaseSqlite(); DbControlling.Initialize(db); //TODO убрать тру и пересоздание таблиц вслучае ошибки int res = db.Create(true); if (res != 0) { db.Create(true); } #endregion _subscribers = new ConcurrentBag <RemoteHostInfo>(); _server = new ServerManager(MulticastHostint, UdpPort, TcpPort); _sender = new SenderManager(MulticastHostint, TcpPort, UdpPort); _dbManager = new DbManager(_myCode); _messageManager = new MessageManager(MulticastHostint, _myCode, _sender, _server, _dbManager); _actualizer = new Actualizer(_messageManager, _dbManager, _myCode); _requestManager = new RequestManager(_actualizer, _messageManager, _myCode); _Poped += PopHandler; _Connected += PopHandler; _messageManager.ConnectMessageReceived += (o, args) => _Connected?.Invoke(args.ConnectMessage); _messageManager.TelemetryReceived += (o, args) => _Poped?.Invoke(args.TelemetryInfo); _server.ServerStart(); }
/// <summary> /// /// </summary> /// <param name="infoSpedizione"></param> protected void Spedisci(DocsPaWR.SpedizioneDocumento infoSpedizione) { // Spedizione del documento ai destinatari selezionati DocsPaWR.SchedaDocumento scheda = DocumentManager.getSelectedRecord(); //filtro dagli allegati da spedire quelli associati a notifiche di tipo PEC List <DocsPaWR.Allegato> listAllegati = new List <DocsPaWR.Allegato>(); if (scheda.allegati != null && scheda.allegati.Length > 0) { foreach (DocsPaWR.Allegato a in scheda.allegati) { if (a.versionId != null) { if (!DocumentManager.AllegatoIsPEC(a.versionId).Equals("1")) { listAllegati.Add(a); } } } scheda.allegati = listAllegati.ToArray(); } if (scheda.spedizioneDocumento != null) { scheda.spedizioneDocumento.tipoMessaggio = infoSpedizione.tipoMessaggio; } else { scheda.spedizioneDocumento = infoSpedizione; } infoSpedizione = SenderManager.SpedisciDocumento(scheda, infoSpedizione); //Andrea foreach (string s in infoSpedizione.listaDestinatariNonRaggiungibili) { messError = messError + s + Environment.NewLine; } if (infoSpedizione != null && infoSpedizione.listaDestinatariNonRaggiungibili != null) { infoSpedizione.listaDestinatariNonRaggiungibili = null; } if (messError != "") { Session.Add("MessError", messError); } //End Andrea // Impostazione dei dati di spedizione this.SetSpedizioneDocumento(infoSpedizione); this.FetchData(infoSpedizione); this.SetReturnValue(true); InitializesForm(infoSpedizione, scheda.tipoProto); }
public void SenderManager_BackupRouting() { // Setup var senderManager = new SenderManager(); var senderFactory1Mock = new Mock<ISenderFactory>(); var senderFactory2Mock = new Mock<ISenderFactory>(); var senderFactory3Mock = new Mock<ISenderFactory>(); var senderFactory4Mock = new Mock<ISenderFactory>(); senderManager.Route<DateTime>(senderFactory1Mock.Object, senderFactory2Mock.Object, senderFactory3Mock.Object, senderFactory4Mock.Object); senderFactory1Mock.SetupGet(m => m.Available).Returns(true); senderFactory1Mock.Setup(m => m.Sender()).Returns(new MockSender()); senderFactory2Mock.SetupGet(m => m.Available).Returns(true); senderFactory2Mock.Setup(m => m.Sender()).Returns(new MockSender()); senderFactory3Mock.SetupGet(m => m.Available).Returns(true); senderFactory3Mock.Setup(m => m.Sender()).Returns(new MockSender()); senderFactory4Mock.SetupGet(m => m.Available).Returns(true); senderFactory4Mock.Setup(m => m.Sender()).Returns(new MockSender()); // Run & Assert Assert.IsNotNull(senderManager.ResolveSender<DateTime>()); senderFactory1Mock.Verify(m => m.Sender(), Times.Once); senderFactory2Mock.Verify(m => m.Sender(), Times.Never); senderFactory3Mock.Verify(m => m.Sender(), Times.Never); senderFactory4Mock.Verify(m => m.Sender(), Times.Never); senderFactory1Mock.SetupGet(m => m.Available).Returns(false); Assert.IsNotNull(senderManager.ResolveSender<DateTime>()); senderFactory1Mock.Verify(m => m.Sender(), Times.Once); senderFactory2Mock.Verify(m => m.Sender(), Times.Once); senderFactory3Mock.Verify(m => m.Sender(), Times.Never); senderFactory4Mock.Verify(m => m.Sender(), Times.Never); senderFactory2Mock.SetupGet(m => m.Available).Returns(false); Assert.IsNotNull(senderManager.ResolveSender<DateTime>()); senderFactory1Mock.Verify(m => m.Sender(), Times.Once); senderFactory2Mock.Verify(m => m.Sender(), Times.Once); senderFactory3Mock.Verify(m => m.Sender(), Times.Once); senderFactory4Mock.Verify(m => m.Sender(), Times.Never); senderFactory3Mock.SetupGet(m => m.Available).Returns(false); Assert.IsNotNull(senderManager.ResolveSender<DateTime>()); senderFactory1Mock.Verify(m => m.Sender(), Times.Once); senderFactory2Mock.Verify(m => m.Sender(), Times.Once); senderFactory3Mock.Verify(m => m.Sender(), Times.Once); senderFactory4Mock.Verify(m => m.Sender(), Times.Once); }
static void Main(string[] args) { var log = new Logger(); Logging.Initialize(log); _server = new ServerManager(MulticastHostint, UdpPort, TcpPort); _sender = new SenderManager(MulticastHostint, TcpPort, UdpPort); }
public MainActivityModel() { _sender = new SenderManager(MulticastHostint, TcpPort, UdpPort); _server = new ServerManager(MulticastHostint, UdpPort, TcpPort); _server.ServerStart(); _messageManager = new MessageManager(MulticastHostint, _myCode, _sender, _server, new [] { _host }); _messageManager.RequestReceived += PopHandler; PropNames = new List <string> { /*PropName1, PropName2,*/ PropName3 }; _setProps = new Dictionary <string, PropertiesValues> { //{ _setDevice, new PropertiesValues { { PropName1, "" } } }, { _albom, new PropertiesValues { { PropName3, "" } } } }; }
protected override void Load(ContainerBuilder builder) { //Proxy // var baseFolder = AppDomain.CurrentDomain.BaseDirectory; //var rootTemplates = Path.Combine(baseFolder, "PlantillasCorreo"); string UrlCorreo_Api = Configuration.GetSection("AppSettings:UrlCorreo_Api").Value; //EmailSender.Templates = SenderManager.GetEmailTemplates(rootTemplates, EmailSender.Templates); //builder.RegisterType<EmailSender>().As<IEmailSender>().WithParameter("route", UrlCorreo_Api); var baseFolder = System.IO.Directory.GetCurrentDirectory(); var rootTemplates = System.IO.Path.Combine(baseFolder, "PlantillasCorreo"); EmailSender.Templates = SenderManager.GetEmailTemplates(rootTemplates, EmailSender.Templates); builder.RegisterType <EmailSender>().As <IEmailSender>().WithParameter("route", UrlCorreo_Api); base.Load(builder); }
/// <summary> /// /// </summary> /// <returns></returns> public DocsPaWR.SpedizioneDocumento GetSpedizioneDocumento() { DocsPaWR.SpedizioneDocumento instance = this.ViewState["SpedizioniDocumento"] as DocsPaWR.SpedizioneDocumento; if (instance == null || !instance.IdDocumento.Equals(DocumentManager.getSelectedRecord().docNumber)) { if (DocumentManager.getSelectedRecord().spedizioneDocumento == null) { instance = SenderManager.GetSpedizioneDocumento(DocumentManager.getSelectedRecord()); } else { instance = DocumentManager.getSelectedRecord().spedizioneDocumento; } this.ViewState["SpedizioniDocumento"] = instance; } return(instance); }
async public Task Execute(IJobExecutionContext context) { DbContextOptionsBuilder <ApplicationDbContext> optionbuilder = new DbContextOptionsBuilder <ApplicationDbContext>(); optionbuilder.UseSqlServer("Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=SmsServiceAppDB;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"); ApplicationDbContext db = new ApplicationDbContext(optionbuilder.Options); var senderManager = new SenderManager(db); var messageLogger = new XmlLogger("XmlLog.xml"); var smsSender = new ConsoleSmsSender(); var messages = await senderManager.GetMessagesToSend(); foreach (var message in messages) { await smsSender.Send(message.Sender, message.Reciever, message.Text, ""); messageLogger.Log(message.Sender, message.Reciever, message.Text, DateTime.UtcNow); } var Ids = from i in messages select i.TimeId; await senderManager.SetTimesAsSent(Ids); }
/// <summary> /// Imposta la visibilità sul flag di selezione/deselezione dei destinatari /// </summary> protected bool VisibilitySelectDeselectRecipients(DocsPaWR.SpedizioneDocumento infoSped) { bool select = true; try { DocsPaWR.DocsPaWebService ws = new DocsPaWR.DocsPaWebService(); DocsPaWR.SpedizioneDocumento infoSpedizione = new DocsPaWR.SpedizioneDocumento(); if (infoSped == null) { infoSpedizione = SenderManager.GetSpedizioneDocumento(DocumentManager.getSelectedRecord()); } else { infoSpedizione = infoSped; } if (this.TipoDestinatario == NttDataWA.Utils.CorrespondentTypeEnum.EsternoNonInteroperante) { select = false; } if (this.TipoDestinatario == NttDataWA.Utils.CorrespondentTypeEnum.Esterno && ((infoSpedizione.DestinatariEsterni.Count(d => d.DatiDestinatari[0].tipoIE != null && d.DatiDestinatari[0].tipoIE.Equals("I")) > 0 && (infoSpedizione.DestinatariEsterni.Count(d => d.DatiDestinatari[0].tipoIE != null && d.DatiDestinatari[0].tipoIE.Equals("E")) > 0)))) { select = false; } } catch (Exception ex) { select = false; } return(select); }
protected void SenderBtnSend_Click(object sender, EventArgs e) { try { HttpContext.Current.Session.Remove("DestinatariNonRaggiunti"); if (cboTipoRicevutaPec.Visible == true) { SenderManager.getSetRicevutaPec(cboRegistriRF.SelectedValue, null, cboTipoRicevutaPec.SelectedValue, false, ddl_caselle.SelectedValue); } try { DocsPaWR.ConfigSpedizioneDocumento config = SenderManager.GetConfigSpedizioneDocumento(); DocsPaWR.SpedizioneDocumento infoSpedizione = this.GetSpedizioneDocumento(); // Aggiornamento dati destinatari selezionati per la spedizione this.listaDestinatariInterni.SaveData(infoSpedizione); this.listaDestinatariInteroperanti.SaveData(infoSpedizione); this.listaDestinatatiInteropSempl.SaveData(infoSpedizione); bool almostOne = (this.listaDestinatariInterni.Items > 0 && this.listaDestinatariInterni.AlmostOneChecked); if (!almostOne) { almostOne = (this.listaDestinatariInteroperanti.Items > 0 && this.listaDestinatariInteroperanti.AlmostOneChecked) || (this.listaDestinatatiInteropSempl.Items > 0 && this.listaDestinatatiInteropSempl.AlmostOneChecked); } if (!almostOne) { this.ShowErrorMessage("WarningSenderRecipients"); } /*else if (!this.IsDocumentoAcquisito && config.AvvisaSuSpedizioneDocumento) * { * this.msgSpedisci.Confirm("E' stata richiesta la spedizione senza aver associato alcun documento elettronico.\\nSi vuole eseguire le operazioni di trasmissione e spedizione automatiche?"); * }*///Gestito con nuovo messaggio else { bool destInteropRGSSelected = (from d in infoSpedizione.DestinatariEsterni where d.InteroperanteRGS && d.IncludiInSpedizione select d).FirstOrDefault() != null; DocsPaWR.SchedaDocumento schedaDoc = DocumentManager.getSelectedRecord(); if (destInteropRGSSelected && schedaDoc.template != null && !string.IsNullOrEmpty(schedaDoc.template.ID_CONTESTO_PROCEDURALE)) { List <DocsPaWR.Messaggio> messaggiSuccessivi = SenderManager.GetMessaggiSuccessiviFlussoProcedurale(schedaDoc); //se sono presenti più di uno messaggio lascio scegliere all'utente. if (messaggiSuccessivi != null && messaggiSuccessivi.Count > 1) { this.NextMessages = messaggiSuccessivi; this.InfoSpedizioneSelectMessage = infoSpedizione; ScriptManager.RegisterStartupScript(this, this.GetType(), "SelectNextMessage", "ajaxModalPopupSelectNextMessage();", true); return; } if (messaggiSuccessivi != null && messaggiSuccessivi.Count == 1) { infoSpedizione.tipoMessaggio = messaggiSuccessivi[0]; } } else { infoSpedizione.tipoMessaggio = null; } this.Spedisci(infoSpedizione); } } catch (Exception ex) { throw ex; } if (Session["MessError"] != null) { messError = Session["MessError"].ToString(); string msgDesc = "WarningDocumentCustom"; string errFormt = Server.UrlEncode(messError); ScriptManager.RegisterStartupScript(this, this.GetType(), "ajaxDialogModal", "if (parent.fra_main) {parent.fra_main.ajaxDialogModal('" + utils.FormatJs(msgDesc) + "', 'warning', '', '" + utils.FormatJs(errFormt) + "');} else {parent.ajaxDialogModal('" + utils.FormatJs(msgDesc) + "', 'warning', '', '" + utils.FormatJs(errFormt) + "');}; ", true); Session.Remove("MessError"); messError = string.Empty; } if (listaDestinatariInterni.Items > 0) { UpdateDestinatariInterni.Update(); } if (listaDestinatariInteroperanti.Items > 0) { UpdateDestinatariInteroperanti.Update(); } if (listaDestinatatiInteropSempl.Items > 0) { UpdateDestinatatiInteropSempl.Update(); } if (listaDestinatariNonInteroperanti.Items > 0) { UpdateDestinatariNonInteroperanti.Update(); } ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "function", "<script>reallowOp();</script>", false); NttDataWA.DocsPaWR.SchedaDocumento documentTab = DocumentManager.getSelectedRecord(); //aggiorno l'elenco allegati in sessione(per ricevute PITRE) if (documentTab != null && !string.IsNullOrEmpty(documentTab.docNumber)) { DocumentManager.setSelectedRecord(DocumentManager.getDocumentDetails(this.Page, documentTab.docNumber, documentTab.docNumber)); } if (!string.IsNullOrEmpty(this.DestinatariNonRaggiunti)) { string msgDesc = "WarningSendingRecipients"; string errFormt = this.DestinatariNonRaggiunti; ScriptManager.RegisterStartupScript(this, this.GetType(), "ajaxDialogModal", "if (parent.fra_main) {parent.fra_main.ajaxDialogModal('" + utils.FormatJs(msgDesc) + "', 'warning', '', '" + utils.FormatJs(errFormt) + "');} else {parent.ajaxDialogModal('" + utils.FormatJs(msgDesc) + "', 'warning', '', '" + utils.FormatJs(errFormt) + "');}; ", true); HttpContext.Current.Session.Remove("DestinatariNonRaggiunti"); } } catch (System.Exception ex) { UIManager.AdministrationManager.DiagnosticError(ex); return; } }
/// <summary> /// Effettua dei controlli legati al tipo di mezzo di spedizione scelto per ogni singolo destinatario /// </summary> /// <param name="destinatari"></param> protected void CheckMezzoDiSpedizione(DocsPaWR.DestinatarioEsterno[] destinatari) { DocsPaWR.DocsPaWebService ws = new DocsPaWR.DocsPaWebService(); foreach (DocsPaWR.DestinatarioEsterno dest in destinatari) { //se destinatario diverso da occasionale if (!dest.DatiDestinatari[0].tipoCorrispondente.ToUpper().Equals("O")) { //se il destinatario di default è interoperante ma per la trasmissione corrente, ha scelto un mezzo di trasmissione non interoperante, allora // aggiorno le informazioni sullo stato. if (dest.DatiDestinatari[0].canalePref != null) { if ((!string.IsNullOrEmpty(dest.DatiDestinatari[0].canalePref.descrizione)) && (!dest.DatiDestinatari[0].canalePref.descrizione.ToUpper().Equals("MAIL")) && (!dest.DatiDestinatari[0].canalePref.descrizione.ToUpper().Equals("INTEROPERABILITA")) && (!dest.DatiDestinatari[0].canalePref.descrizione.ToUpper().Equals("PORTALE")) && (!dest.DatiDestinatari[0].canalePref.typeId.Equals(SimplifiedInteroperabilityManager.SimplifiedInteroperabilityId))) //((!string.IsNullOrEmpty(dest.DatiDestinatari[0].canalePref.typeId) && !dest.DatiDestinatari[0].canalePref.typeId.ToUpper().Equals("S")) || //(!string.IsNullOrEmpty(dest.DatiDestinatari[0].canalePref.tipoCanale) && !dest.DatiDestinatari[0].canalePref.tipoCanale.ToUpper().Equals(InteroperabilitaSemplificataManager.SimplifiedInteroperabilityId)))) { // destinatario non interoperante dest.Interoperante = false; dest.StatoSpedizione.Descrizione = "mezzo di spedizione: " + dest.DatiDestinatari[0].canalePref.descrizione; } } //DocsPaWR.Canale canalePref = UserManager.getCorrispondentBySystemID(dest.DatiDestinatari[0].systemId).canalePref; DocsPaWR.Canale canalePref = SenderManager.getDatiCanPref(dest.DatiDestinatari[0]); //se il canale preferenziale non è definito ed il mezzo di spedizione per la trasmissione corrente non è interoperante, //allora aggiorno le informazioni sullo stato ed imposto il corrispondente come non interoperante if (canalePref == null && !dest.DatiDestinatari[0].tipoIE.Equals("I")) { // Ticket Unitn-Apss dopo rilascio reperortori 3.19.x-brach.. impossibile spedire i documenti se un destinatario non ha il mezzo //if ( // !string.IsNullOrEmpty(dest.DatiDestinatari[0].canalePref.descrizione) && // ((dest.DatiDestinatari[0].canalePref.descrizione.ToUpper().Equals("MAIL")) || // (dest.DatiDestinatari[0].canalePref.descrizione.ToUpper().Equals("INTEROPERABILITA")))) //{ dest.Interoperante = false; dest.StatoSpedizione.Descrizione = "Canale preferenziale non definito"; //} } if (canalePref != null && ((!string.IsNullOrEmpty(canalePref.descrizione)) && (!canalePref.descrizione.ToUpper().Equals("MAIL")) && (!canalePref.descrizione.ToUpper().Equals("INTEROPERABILITA")) && (!canalePref.descrizione.ToUpper().Equals("PORTALE"))) && (dest.DatiDestinatari[0].canalePref != null && !dest.DatiDestinatari[0].canalePref.typeId.Equals(SimplifiedInteroperabilityManager.SimplifiedInteroperabilityId))) //((!string.IsNullOrEmpty(dest.DatiDestinatari[0].canalePref.typeId) && !dest.DatiDestinatari[0].canalePref.typeId.ToUpper().Equals("S")) || //(!string.IsNullOrEmpty(dest.DatiDestinatari[0].canalePref.tipoCanale) && !dest.DatiDestinatari[0].canalePref.tipoCanale.ToUpper().Equals(InteroperabilitaSemplificataManager.SimplifiedInteroperabilityId)))) { if ((!string.IsNullOrEmpty(dest.DatiDestinatari[0].canalePref.descrizione)) && ((!dest.DatiDestinatari[0].canalePref.descrizione.ToUpper().Equals("MAIL")) && (!dest.DatiDestinatari[0].canalePref.descrizione.ToUpper().Equals("INTEROPERABILITA")) && (!dest.DatiDestinatari[0].canalePref.descrizione.ToUpper().Equals("PORTALE")) && (!dest.DatiDestinatari[0].canalePref.typeId.Equals(SimplifiedInteroperabilityManager.SimplifiedInteroperabilityId)))) { dest.Interoperante = false; dest.StatoSpedizione.Descrizione = "Canale preferenziale non interoperante.\nmezzo di spedizione: " + dest.DatiDestinatari[0].canalePref.descrizione; } } } } }
public void SenderManager_AlwaysRouting() { // Setup var senderManager = new SenderManager(); var senderFactory1Mock = new Mock<ISenderFactory>(); var senderFactory2Mock = new Mock<ISenderFactory>(); senderManager.Route<DateTime>().Always(senderFactory1Mock.Object).Backup(senderFactory2Mock.Object); senderFactory1Mock.SetupGet(m => m.Available).Returns(true); senderFactory1Mock.Setup(m => m.Sender()).Returns(new MockSender()); senderFactory2Mock.SetupGet(m => m.Available).Returns(true); senderFactory2Mock.Setup(m => m.Sender()).Returns(new MockSender()); // Run & Assert Assert.IsNotNull(senderManager.ResolveSender<DateTime>()); Assert.IsNotNull(senderManager.ResolveSender<DateTime>(DateTime.Now)); }
public void SenderManager_TestConditionalRouting() { // Setup var senderManager = new SenderManager(); var senderFactory1Mock = new Mock<ISenderFactory>(); var senderFactory2Mock = new Mock<ISenderFactory>(); var senderFactory3Mock = new Mock<ISenderFactory>(); var senderFactory4Mock = new Mock<ISenderFactory>(); senderManager.Route<DateTime>().When(dt => dt.Year == 2015, senderFactory1Mock.Object) .When(dt => dt.Year == 2016, senderFactory2Mock.Object) .When(dt => dt.Year == 2017, senderFactory3Mock.Object) .Else(senderFactory4Mock.Object); senderFactory1Mock.SetupGet(m => m.Available).Returns(true); senderFactory1Mock.Setup(m => m.Sender()).Returns(new MockSender()); senderFactory2Mock.SetupGet(m => m.Available).Returns(true); senderFactory2Mock.Setup(m => m.Sender()).Returns(new MockSender()); senderFactory3Mock.SetupGet(m => m.Available).Returns(true); senderFactory3Mock.Setup(m => m.Sender()).Returns(new MockSender()); senderFactory4Mock.SetupGet(m => m.Available).Returns(true); senderFactory4Mock.Setup(m => m.Sender()).Returns(new MockSender()); // Run & Assert Assert.IsNotNull(senderManager.ResolveSender<DateTime>(new DateTime(2015, 02, 02))); senderFactory1Mock.Verify(m => m.Sender(), Times.Once); senderFactory2Mock.Verify(m => m.Sender(), Times.Never); senderFactory3Mock.Verify(m => m.Sender(), Times.Never); senderFactory4Mock.Verify(m => m.Sender(), Times.Never); Assert.IsNotNull(senderManager.ResolveSender<DateTime>(new DateTime(2016, 03, 03))); senderFactory1Mock.Verify(m => m.Sender(), Times.Once); senderFactory2Mock.Verify(m => m.Sender(), Times.Once); senderFactory3Mock.Verify(m => m.Sender(), Times.Never); senderFactory4Mock.Verify(m => m.Sender(), Times.Never); Assert.IsNotNull(senderManager.ResolveSender<DateTime>(new DateTime(2017, 04, 04))); senderFactory1Mock.Verify(m => m.Sender(), Times.Once); senderFactory2Mock.Verify(m => m.Sender(), Times.Once); senderFactory3Mock.Verify(m => m.Sender(), Times.Once); senderFactory4Mock.Verify(m => m.Sender(), Times.Never); Assert.IsNotNull(senderManager.ResolveSender<DateTime>(new DateTime(2014, 01, 01))); senderFactory1Mock.Verify(m => m.Sender(), Times.Once); senderFactory2Mock.Verify(m => m.Sender(), Times.Once); senderFactory3Mock.Verify(m => m.Sender(), Times.Once); senderFactory4Mock.Verify(m => m.Sender(), Times.Once); Assert.IsNotNull(senderManager.ResolveSender<DateTime>(new DateTime(2018, 01, 01))); senderFactory1Mock.Verify(m => m.Sender(), Times.Once); senderFactory2Mock.Verify(m => m.Sender(), Times.Once); senderFactory3Mock.Verify(m => m.Sender(), Times.Once); senderFactory4Mock.Verify(m => m.Sender(), Times.AtLeastOnce); }