public void cant_nack_without_message_id()
        {
            var frame = new BasicFrame("NACK");
            var client = Substitute.For<IStompClient>();
            var repos = Substitute.For<IQueueRepository>();

            var sut = new NackHandler(repos);
            Action actual = () => sut.Process(client, frame);

            actual.ShouldThrow<BadRequestException>();
        }
        public void cant_nack_if_message_Was_not_found()
        {
            var frame = new BasicFrame("NACK");
            var repos = Substitute.For<IQueueRepository>();
            var client = Substitute.For<IStompClient>();
            frame.Headers["id"] = "aa";
            client.IsFramePending("aa").Returns(false);

            var sut = new NackHandler(repos);
            Action actual = () => sut.Process(client, frame);

            actual.ShouldThrow<BadRequestException>();
        }
        public void nack()
        {
            
            var frame = new BasicFrame("NACK");
            var repos = Substitute.For<IQueueRepository>();
            var client = Substitute.For<IStompClient>();
            var subscription = Substitute.For<Subscription>(client, "aa");
            var queue = Substitute.For<IStompQueue>();
            subscription.Nack("aa").Returns(new IFrame[]{frame});
            subscription.QueueName = "Q";
            repos.Get("Q").Returns(queue);
            frame.Headers["id"] = "aa";
            client.IsFramePending("aa").Returns(true);
            client.GetSubscription("aa").Returns(subscription);

            var sut = new NackHandler(repos);
            sut.Process(client, frame);

            subscription.Received().Nack("aa");
            queue.Received().Enqueue(frame);
        }
        public void enqueue_if_transaction_was_specified()
        {
            var frame = new BasicFrame("NACK");
            var repos = Substitute.For<IQueueRepository>();
            var client = Substitute.For<IStompClient>();
            var subscription = Substitute.For<Subscription>(client, "aa");
            var queue = Substitute.For<IStompQueue>();
            subscription.QueueName = "Q";
            repos.Get("Q").Returns(queue);
            frame.Headers["id"] = "aa";
            frame.Headers["transaction"] = "sdfsd";
            client.IsFramePending("aa").Returns(true);
            client.GetSubscription("aa").Returns(subscription);

            var sut = new NackHandler(repos);
            sut.Process(client, frame);

            client.Received().EnqueueInTransaction("sdfsd", Arg.Any<Action>(), Arg.Any<Action>());
            subscription.DidNotReceive().Nack("aa");
            queue.DidNotReceiveWithAnyArgs().Enqueue(null);
        }