public void StartServer()
        {
            var httpEngine = new HttpEngine(_dataManager, _logger);

            var port = GetPortConfig();

            _server.Prefixes.Add($"http://localhost:{port.PortNumber}/"); //URI prefixes
            _server.Start();
            _logger.Information("Start listening on " + port.PortNumber);

            while (true) //TODO: Instead of true. Stop server when requested.
            {
                var context = _server.GetContext();
                _logger.Debug($"{context.Request.HttpMethod} {context.Request.Url}");
                var responseMessage = httpEngine.Process(new HttpListenerRequestWrapper(context.Request));
                httpEngine.Send(responseMessage, context.Response);
            }
            _server.Stop();  // never reached...
        }
        public void It_Should_Return_Correct_ResponseMessage_Given_A_Request(Uri uri, string httpMethod, string body, ResponseMessage expectedResponseMessage)
        {
            //arrange
            var allUsers = Users.CreateTestUsers();

            var loggerStub = new LoggerStub();

            var mockDatabase = new MockDatabase(allUsers);

            var httpEngine = new HttpEngine(new DataManager(mockDatabase), loggerStub);

            var repo            = new MemoryStream(Encoding.UTF8.GetBytes(body));
            var contentEncoding = Encoding.UTF8;

            var request = new HttpListenerRequestStub(uri, httpMethod, repo, contentEncoding);

            //act
            var responseMessage = httpEngine.Process(request);

            //assert
            responseMessage.Should().BeEquivalentTo(expectedResponseMessage);
        }