public void Should_require_the_uow_to_have_begun_if_committing()
        {
            var session       = S <ISession>();
            var sessionSource = new SessionBuilderStub(session);
            var transaction   = S <ITransaction>();

            session.Stub(s => s.Transaction).Return(transaction);
            session.Stub(s => s.BeginTransaction()).Return(transaction);
            var uow = new UnitOfWork(sessionSource);

            typeof(InvalidOperationException).ShouldBeThrownBy(uow.Commit);
        }
        public void Should_start_a_new_transaction_when_begun()
        {
            var session       = S <ISession>();
            var sessionSource = new SessionBuilderStub(session);
            var transaction   = S <ITransaction>();

            session.Stub(s => s.Transaction).Return(transaction);
            session.Stub(s => s.BeginTransaction()).Return(transaction);
            var uow = new UnitOfWork(sessionSource);

            uow.Begin();

            session.AssertWasCalled(s => s.BeginTransaction());
        }
        public void Should_populate_current_session_when_begun()
        {
            var session       = S <ISession>();
            var sessionSource = new SessionBuilderStub(session);

            session.Stub(s => s.Transaction).Return(S <ITransaction>());
            session.Stub(s => s.BeginTransaction()).Return(S <ITransaction>());

            var uow = new UnitOfWork(sessionSource);

            uow.Begin();

            uow.GetSession().ShouldEqual(session);
        }
        public void Should_dispose_twice_without_problems()
        {
            var session       = S <ISession>();
            var sessionSource = new SessionBuilderStub(session);
            var transaction   = S <ITransaction>();

            session.Stub(s => s.Transaction).Return(transaction);
            session.Stub(s => s.BeginTransaction()).Return(transaction);
            var uow = new UnitOfWork(sessionSource);

            uow.Begin();
            uow.Dispose();

            typeof(Exception).ShouldNotBeThrownBy(uow.Dispose);
        }
        public void Should_dispose_transaction_and_session_when_disposing()
        {
            var session       = S <ISession>();
            var sessionSource = new SessionBuilderStub(session);
            var transaction   = S <ITransaction>();

            session.Stub(s => s.Transaction).Return(transaction);
            session.Stub(s => s.BeginTransaction()).Return(transaction);
            var uow = new UnitOfWork(sessionSource);

            uow.Begin();
            uow.Dispose();

            session.AssertWasCalled(s => s.Dispose());
        }
        public void Should_rollback_the_transaction_when_rolling_back()
        {
            var session       = S <ISession>();
            var sessionSource = new SessionBuilderStub(session);
            var transaction   = S <ITransaction>();

            session.Stub(s => s.Transaction).Return(transaction);
            session.Stub(s => s.BeginTransaction()).Return(transaction);
            transaction.Stub(t => t.IsActive).Return(true);
            var uow = new UnitOfWork(sessionSource);

            uow.Begin();
            uow.RollBack();

            transaction.AssertWasCalled(t => t.Rollback());
        }
        public void Should_commit_the_begun_transaction_when_committing()
        {
            var session       = S <ISession>();
            var sessionSource = new SessionBuilderStub(session);
            var transaction   = S <ITransaction>();

            session.Stub(s => s.Transaction).Return(transaction);
            session.Stub(s => s.BeginTransaction()).Return(transaction);
            transaction.Stub(t => t.IsActive).Return(true);
            var uow = new UnitOfWork(sessionSource);

            uow.Begin();
            uow.Commit();

            transaction.AssertWasCalled(t => t.Commit());
        }