Here is my code:
[TestClass,TestFixture]
public class NotificationInterfaceTestSuite
{
[TestMethod,Test,Isolated]
public void prove_send_message_is_called()
{
MockManager.Init();
MockObject mock_es = MockManager.MockObject<ExchangeService>();
ExchangeService es = (ExchangeService)mock_es.Object;
Mock mock_sender = MockManager.Mock<Sender>();
Sender s = new Sender();
Mock mock_server = MockManager.Mock<Server>();
Server svr = new Server();
Mock mock_user = MockManager.Mock<User>();
User u = new User();
Mock mock_ci = MockManager.Mock<CalendarInterfaceAdapter>();
CalendarInterfaceAdapter ci = new CalendarInterfaceAdapter();
Mock mock_ji = MockManager.Mock<JobInterface>();
Mock mock_qa = MockManager.Mock<QueueAdapter>();
QueueAdapter qa = new QueueAdapter();
JobInterface ji = new JobInterface(qa,s,true);
mock_ji.ExpectCall("SendMessage");
Mock mock_email = MockManager.Mock<EmailMessage>();
EmailMessage email = new EmailMessage(es);
Mock mock_addy = MockManager.Mock<EmailAddress>();
EmailAddress addy = new EmailAddress("foo@bar.com");
//mock_addy.Strict = true;
//mock_email.AssignField("Id", new ItemId("TEST_ID"));
Isolate.WhenCalled(() => email.Id).WillReturn(new ItemId("TEST_ID"));
Isolate.WhenCalled(() => email.From).WillReturn(addy);
Isolate.WhenCalled(() => email.Subject).WillReturn("Your snark is a boojum!");
MockObject mock_eac = MockManager.MockObject(typeof(EmailAddressCollection));
EmailAddressCollection eac = (EmailAddressCollection)mock_eac.Object;
mock_eac.ExpectCall("Add");
mock_email.ExpectGetAlways("ToRecipients",eac);
mock_email.ExpectGetAlways("CcRecipients", eac);
mock_email.ExpectGetAlways("BccRecipients", eac);
mock_email.ExpectGetAlways("ReplyTo", eac);
eac.Add(addy);
Isolate.WhenCalled(() => email.ToRecipients).WillReturnCollectionValuesOf(eac);
Isolate.WhenCalled(() => email.CcRecipients).WillReturnCollectionValuesOf(eac);
Isolate.WhenCalled(() => email.BccRecipients).WillReturnCollectionValuesOf(eac);
Isolate.WhenCalled(() => email.ReplyTo).WillReturnCollectionValuesOf(eac);
NotificationInterface ni = new NotificationInterface(svr, u, ci, es, ji);
ni.SendNotification(EventType.Created, "TEST_ITEM_ID", email as Item);
mock_ji.Verify();
}
And the software under test:
public void SendNotification(EventType eventType, string itemId, Item i = null)
{
NetworkLogging.Instance.Log(">>> SEND NOTIFICATION");
NetworkLogging.Instance.Log("event type: " + eventType.ToString());
NetworkLogging.Instance.Log("item id: " + itemId);
Item item;
if (i != null)
{
item = i;
}
else
{
try
{
item = Item.Bind(service, itemId);
}
catch (ServiceResponseException e)
{
NetworkLogging.Instance.Log("******* ERROR GODDAMIT!");
NetworkLogging.Instance.Log(e.Message);
return;
}
catch (ServiceRequestException e)
{
NetworkLogging.Instance.Log("holy **** what is going on?");
return;
}
}
if (item is EmailMessage) {
NetworkLogging.Instance.Log(">>> item is message");
if (eventType != EventType.Created) {
NetworkLogging.Instance.Log(">>> not new message");
return;
}
EmailMessage message = item as EmailMessage;
Dictionary<string, object> n = new Dictionary<String, object>();
n["server_id"] = server.Id;
n["user_id"] = user.Id;
// We pass the itemId in above, use it if
// the item's Id property is unset
n["item_id&quo