AnswerHow many tests?
Two days ago I asked how many tests this method need:
///<summary> ///Get the latest published webcast ///</summary> public Webcast GetLatest();
Here is what I came up with:
[TestFixture] public class WebcastRepositoryTest : DatabaseTestFixtureBase { private IWebcastRepository webcastRepository; [TestFixtureSetUp] public void TestFixtureSetup() { IntializeNHibernateAndIoC(PersistenceFramework.ActiveRecord, "windsor.boo", MappingInfo.FromAssemblyContaining<Webcast>()); } [SetUp] public void Setup() { CurrentContext.CreateUnitOfWork(); webcastRepository = IoC.Resolve<IWebcastRepository>(); } [TearDown] public void Teardown() { CurrentContext.DisposeUnitOfWork(); } [Test] public void Can_save_webcast() { var webcast = new Webcast { Name = "test", PublishDate = null }; With.Transaction(() => webcastRepository.Save(webcast)); Assert.AreNotEqual(0, webcast.Id); } [Test] public void Can_load_webcast() { var webcast = new Webcast { Name = "test", PublishDate = null }; With.Transaction(() => webcastRepository.Save(webcast)); UnitOfWork.CurrentSession.Evict(webcast); var webcast2 = webcastRepository.Get(webcast.Id); Assert.AreEqual(webcast.Id, webcast2.Id); Assert.AreEqual("test", webcast2.Name); Assert.IsNull(webcast2.PublishDate); } [Test] public void When_asking_for_latest_webcast_will_not_consider_any_that_is_not_published() { var webcast = new Webcast { Name = "test", PublishDate = null }; With.Transaction(() => webcastRepository.Save(webcast)); Assert.IsNull(webcastRepository.GetLatest()); } [Test] public void When_asking_for_latest_webcast_will_get_published_webcast() { var webcast = new Webcast { Name = "test", PublishDate = null }; With.Transaction(() => webcastRepository.Save(webcast)); var webcast2 = new Webcast { Name = "test", PublishDate = DateTime.Now.AddDays(-1) }; With.Transaction(() => webcastRepository.Save(webcast2)); Assert.AreEqual(webcast2.Id, webcastRepository.GetLatest().Id); } [Test] public void When_asking_for_latest_webcast_will_get_the_latest_webcast() { var webcast = new Webcast { Name = "test", PublishDate = DateTime.Now.AddDays(-2) }; With.Transaction(() => webcastRepository.Save(webcast)); var webcast2 = new Webcast { Name = "test", PublishDate = DateTime.Now.AddDays(-1) }; With.Transaction(() => webcastRepository.Save(webcast2)); Assert.AreEqual(webcast2.Id, webcastRepository.GetLatest().Id); } [Test] public void When_asking_for_latest_webcast_will_not_consider_webcasts_published_in_the_future() { var webcast = new Webcast { Name = "test", PublishDate = DateTime.Now.AddDays(-2) }; With.Transaction(() => webcastRepository.Save(webcast)); var webcast2 = new Webcast { Name = "test", PublishDate = DateTime.Now.AddDays(2) }; With.Transaction(() => webcastRepository.Save(webcast2)); Assert.AreEqual(webcast.Id, webcastRepository.GetLatest().Id); } }
And the implementation:
public class WebcastRepository : RepositoryDecorator<Webcast>, IWebcastRepository { public WebcastRepository(IRepository<Webcast> repository) { Inner = repository; } public Webcast GetLatest() { var publishedWebcastsByDateDesc = from webcast in Webcasts where webcast.PublishDate != null && webcast.PublishDate < SystemTime.Now() orderby webcast.PublishDate descending select webcast; return publishedWebcastsByDateDesc.FirstOrDefault(); } private static IOrderedQueryable<Webcast> Webcasts { get { return UnitOfWork.CurrentSession.Linq<Webcast>(); } } }
I think it is pretty sweet.
More posts in "Answer" series:
- (22 Jan 2025) What does this code do?
- (05 Jan 2023) what does this code print?
- (15 Dec 2022) What does this code print?
- (07 Apr 2022) Why is this code broken?
- (20 Jan 2017) What does this code do?
- (16 Aug 2011) Modifying execution approaches
- (30 Apr 2011) Stopping the leaks
- (24 Dec 2010) This code should never hit production
- (21 Dec 2010) Your own ThreadLocal
- (11 Feb 2010) Debugging a resource leak
- (03 Sep 2009) The lazy loaded inheritance many to one association OR/M conundrum
- (04 Sep 2008) Don't stop with the first DSL abstraction
- (12 Jun 2008) How many tests?

Comments
Comment preview