public void DashboardHandlerScheduleSave()
{
var record = new ScheduleRecord()
{
ApplicationName = BlueCollarSection.Section.ApplicationName,
Id = 0,
Name = "Nightly",
QueueName = "schedules",
RepeatType = ScheduleRepeatType.Days,
RepeatValue = 1,
StartOn = new DateTime(2011, 1, 1, 0, 0, 0, DateTimeKind.Utc)
};
var transaction = new Mock<IDbTransaction>();
var repository = new Mock<IRepository>();
repository.Setup(r => r.BeginTransaction()).Returns(transaction.Object);
repository.Setup(r => r.UpdateSchedule(It.IsAny<ScheduleRecord>(), It.IsAny<IDbTransaction>())).Returns(record);
repository
.Setup(r => r.CreateSchedule(It.IsAny<ScheduleRecord>(), It.IsAny<IDbTransaction>()))
.Returns(record)
.Callback(() =>
{
record.Id = new Random().Next(1, 1000);
});
var factory = new Mock<IRepositoryFactory>();
factory.Setup(f => f.Create()).Returns(repository.Object);
using (SaveScheduleHandler handler = new SaveScheduleHandler(factory.Object))
{
handler.ApplicationName = BlueCollarSection.Section.ApplicationName;
handler.HandlerRelativeRequestUrl = "~/schedules";
handler.QueryString = new QueryString();
string output;
using (MemoryStream inputStream = new MemoryStream(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(record))))
{
using (MemoryStream outputStream = new MemoryStream())
{
var context = MockHttpContext("POST", "/schedules", inputStream, outputStream);
handler.ProcessRequest(context.Object);
outputStream.Position = 0;
output = Encoding.UTF8.GetString(outputStream.ToArray());
}
}
Assert.IsNotNull(output);
Assert.IsTrue(output.Length > 0);
var outputRecord = JsonConvert.DeserializeAnonymousType(output, new { Id = 0 });
Assert.IsNotNull(outputRecord);
Assert.AreEqual(record.Id, outputRecord.Id);
using (MemoryStream inputStream = new MemoryStream(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(record))))
{
using (MemoryStream outputStream = new MemoryStream())
{
var context = MockHttpContext("PUT", "/schedules", inputStream, outputStream);
handler.ProcessRequest(context.Object);
outputStream.Position = 0;
output = Encoding.UTF8.GetString(outputStream.ToArray());
}
}
Assert.IsNotNull(output);
Assert.IsTrue(output.Length > 0);
outputRecord = JsonConvert.DeserializeAnonymousType(output, new { Id = 0 });
Assert.IsNotNull(outputRecord);
Assert.AreEqual(record.Id, outputRecord.Id);
}
}