public MessagesController
        (
            IMessageLinkBuilder linkBuilder,
            ActionExecutor actionExecutor,
            ListMessagesQuery listMessagesQuery,
            GetMessageQuery getMessageQuery,
            CreateMessageCommand createMessageCommand,
            UpdateMessageCommand updateMessageCommand,
            DeleteMessageCommand deleteMessageCommand
        )
        {
            _linkBuilder = linkBuilder
                           ?? throw new ArgumentNullException(nameof(linkBuilder));

            _actionExecutor = actionExecutor
                              ?? throw new ArgumentNullException(nameof(actionExecutor));

            _listMessagesQuery = listMessagesQuery
                                 ?? throw new ArgumentNullException(nameof(listMessagesQuery));

            _getMessageQuery = getMessageQuery
                               ?? throw new ArgumentNullException(nameof(getMessageQuery));

            _deleteMessageCommand = deleteMessageCommand
                                    ?? throw new ArgumentNullException(nameof(deleteMessageCommand));

            _createMessageCommand = createMessageCommand
                                    ?? throw new ArgumentNullException(nameof(createMessageCommand));

            _updateMessageCommand = updateMessageCommand
                                    ?? throw new ArgumentNullException(nameof(updateMessageCommand));
        }
        public void Setup()
        {
            _linkBuilder = Substitute.For <IMessageLinkBuilder>();

            // simulate link building to verify that the correct arguments are passed to the link builder
            _linkBuilder
            .BuildGetMessageLinkFor(Arg.Any <Guid>())
            .Returns(x =>
            {
                var id = x.Arg <Guid>();

                return($"{id}");
            });

            _linkBuilder
            .BuildListMessagesLinkFor(Arg.Any <IPaginationInstruction>())
            .Returns(x =>
            {
                var instruction = x.Arg <IPaginationInstruction>();

                return($"{instruction.Limit},{instruction.Offset},{instruction.Sort}");
            });

            //
            var cqrsLogger     = Substitute.For <ILogger <IMessageBoard> >();
            var executorLogger = Substitute.For <ILogger <ActionExecutor> >();

            _state = new MessageBoardState();

            var claims = new[]
            {
                new Claim(ClaimTypes.NameIdentifier, "Niklas"),
                new Claim(ClaimTypes.Name, "Niklas")
            };

            var user = new ClaimsPrincipal(new ClaimsIdentity(claims, MessageBoardConstants.AuthenticationScheme));

            _clock = new FakeClock(Instant.FromUtc(2020, 1, 1, 0, 0));

            _controller = new MessagesController
                          (
                _linkBuilder,
                new ActionExecutor(executorLogger),
                new ListMessagesQuery(_state, new MessagePaginator()),
                new GetMessageQuery(_state),
                new CreateMessageCommand(_clock, cqrsLogger, _state),
                new UpdateMessageCommand(_clock, cqrsLogger, _state),
                new DeleteMessageCommand(cqrsLogger, _state)
                          )
            {
                ControllerContext = new ControllerContext
                {
                    HttpContext = new DefaultHttpContext
                    {
                        User = user
                    }
                }
            };
        }
Beispiel #3
0
        public static string BuildListMessagesLinkHeaderFor
        (
            this IMessageLinkBuilder linkBuilder,
            IPagination pagination
        )
        {
            string sort = pagination.Sort;

            int limit  = pagination.Limit;
            int offset = pagination.Offset;
            int total  = pagination.TotalCount;

            int first = 0;
            int last  = (total - 1) / limit * limit;
            int next  = offset + limit;
            int prev  = offset - limit;

            var links =
                from page in new (int Offset, string Rel)[]