public void CannotSetDefaultConversationTwice()
		{
			IConversation conv1 = MockRepository.GenerateStub<IConversation>();
			IConversation conv2 = MockRepository.GenerateStub<IConversation>();
			IConversationContext cc = new ConversationContext();

			cc.SetDefaultConversation(conv1);
			Assert.Throws<InvalidOperationException>(() => cc.SetDefaultConversation(conv2));
		}
		public void CanSetDefaultConversationAfterAPreviousOneHasEnded()
		{
			IConversation conv1 = MockRepository.GenerateStub<IConversation>();
			IConversation conv2 = MockRepository.GenerateStub<IConversation>();
			IConversationContext cc = new ConversationContext();

			cc.SetDefaultConversation(conv1);
			cc.UnsetDefaultConversation();

			cc.SetDefaultConversation(conv2);
		}
		public void DefaultConversationIsUsedWhenNoScopeIsActive()
		{
			IConversation conv = MockRepository.GenerateStub<IConversation>();
			IConversationContext cc = new ConversationContext();

			cc.SetDefaultConversation(conv);
			Assert.That(cc.CurrentConversation, Is.SameAs(conv));
		}
		public void TwiceEndDefaultConversationThrows()
		{
			IConversation conv = MockRepository.GenerateStub<IConversation>();
			IConversationContext cc = new ConversationContext();

			cc.SetDefaultConversation(conv);

			cc.UnsetDefaultConversation();

			Assert.Throws<InvalidOperationException>(() => cc.UnsetDefaultConversation());
		}
		public void DefaultConversationMustNotBeNull()
		{
			IConversationContext cc = new ConversationContext();
			Assert.Throws<ArgumentNullException>(() => cc.SetDefaultConversation(null));
		}
		public void WhenAScopeIsRegisteredItIsUsedForCurrentConversation()
		{
			var defConv = MockRepository.GenerateMock<IConversation>();
			var conv = MockRepository.GenerateMock<IConversation>();

			var scope = MockRepository.GenerateMock<IScope>();
			scope.Stub(s => s.AssociatedConversation).Return(conv);
			scope.Stub(s => s.IsValid).Return(true);

			var cc = new ConversationContext();
			cc.SetDefaultConversation(defConv);

			Assert.That(cc.CurrentConversation, Is.SameAs(defConv));
			cc.RegisterScope(scope);
			Assert.That(cc.CurrentScope, Is.SameAs(scope));
			Assert.That(cc.CurrentConversation, Is.SameAs(conv));
			cc.ReleaseScope(scope);
			Assert.That(cc.CurrentConversation, Is.SameAs(defConv));
		}