public async Task <ActionResult <MockupRequest> > Put([FromBody] MockupRequest request)
        {
            var logId = Guid.NewGuid();

            Program.Logger.Info($"[{logId}] Executing RequestController.Put({request})");
            if (request.Id > 0)
            {
                Program.Logger.Error($"[{logId}] The new request definition does not have an empty id.");
                return(StatusCode(409, "The new request definition does not have an empty id."));
            }
            if (DataService.RequestExists(request.HttpMethod, request.Route, request.Query, request.Body, logId))
            {
                Program.Logger.Error($"[{logId}] A request with the given values already exists.");
                return(BadRequest("A request with the given values already exists."));
            }
            if (request.Body == null)
            {
                request.Body = "";
            }
            if (request.Query == null)
            {
                request.Query = "";
            }
            var retVal = DataService.AddRequest(request, logId);

            Program.Logger.Info($"[{logId}] Successfully created request with id #{retVal.Id}.");
            return(Ok(retVal));
        }
        public async Task <ActionResult <MockupRequest> > Patch(int id, [FromBody] MockupRequest request)
        {
            if (request.Id < 1)
            {
                return(StatusCode(409, "The request definition has an empty id."));
            }
            if (!request.Id.Equals(id))
            {
                return(StatusCode(406, "Ids mismatch."));
            }
            if (!DataService.RequestExistsForId(request.Id))
            {
                return(NotFound($"No request definition found with id #{id}."));
            }
            var existingRequest = DataService.GetRequestById(id);

            if (!existingRequest.HttpMethod.Equals(request.HttpMethod, StringComparison.InvariantCultureIgnoreCase))
            {
                DataService.SetRequestMethod(id, request.HttpMethod);
            }
            if (!existingRequest.Query.Equals(request.Query, StringComparison.InvariantCultureIgnoreCase))
            {
                DataService.SetRequestQuery(id, request.Query);
            }
            if (!existingRequest.Body.Equals(request.Body, StringComparison.InvariantCultureIgnoreCase))
            {
                DataService.SetRequestBody(id, request.Body);
            }
            if (existingRequest.ResponseId != request.ResponseId)
            {
                DataService.SetRequestResponseId(id, request.ResponseId);
            }
            return(Ok(request));
        }
Beispiel #3
0
        /// <summary>
        /// Converts a <see cref="MockupRequest"/> to a <see cref="RequestDefinition"/>.
        /// </summary>
        /// <param name="request">The request to convert.</param>
        /// <returns>The converted instance.</returns>
        public static RequestDefinition ToRequestDefinition(this MockupRequest request)
        {
            if (request.HttpMethod.ToMethodEnum() == HttpMethodEnum.Unknown)
            {
                throw new WebApiMockException($"The HTTP method '{request.HttpMethod}' is unknown.", 30);
            }
            if (request.Id == 0)
            {
                return(new RequestDefinition {
                    Id = 0,
                    Method = request.HttpMethod.ToMethodEnum(),
                    Route = request.Route,
                    Body = request.Body,
                    Query = request.Query,
                    MockupResponseId = 0
                });
            }
            using var ctx = new DataContext();
            if (!ctx.Requests.Any(r => r.Id.Equals(request.Id)))
            {
                return(null);
            }
            var retVal = ctx.Requests.Single(r => r.Id.Equals(request.Id));

            return(retVal);
        }
Beispiel #4
0
        /// <summary>
        /// Adds a new request to the database.
        /// </summary>
        /// <param name="request">The request to add. Its id must be 0 (zero).</param>
        /// <param name="transactionId">An (optional) id for logging purpose.</param>
        /// <returns>The added request with an updated id.</returns>
        public static MockupRequest AddRequest(MockupRequest request, Guid?transactionId = null)
        {
            var  logId  = Guid.Empty;
            var  method = request.HttpMethod.ToMethodEnum();
            bool exists;
            RequestDefinition newData;

            if (transactionId.HasValue)
            {
                logId = transactionId.Value;
            }
            if (logId.Equals(Guid.Empty))
            {
                logId = Guid.NewGuid();
            }
            if (method == HttpMethodEnum.Unknown)
            {
                Program.Logger.Error($"Unknown HTTP method '{request.HttpMethod}'.");
                throw new WebApiMockException($"Unknown HTTP method '{request.HttpMethod}'.", 16);
            }
            if (request.ResponseId == 0)
            {
                Program.Logger.Error("No response set for the new request.");
                throw new WebApiMockException("No response set for the new request.", 17);
            }
            exists = ResponseExistsForId(request.ResponseId);
            if (!exists)
            {
                Program.Logger.Error($"No response with id #{request.ResponseId} found.");
                throw new WebApiMockException($"No response with id #{request.ResponseId} found.", 18);
            }
            if (request.Id != 0)
            {
                Program.Logger.Error("The id for a new request must be 0.");
                throw new WebApiMockException("The id for a new request must be 0.", 14);
            }
            if (RequestExists(request.HttpMethod, request.Route, request.Query, request.Body, logId))
            {
                Program.Logger.Error("The request already exists.");
                throw new WebApiMockException("The request already exists.", 15);
            }
            newData = new RequestDefinition {
                Method           = request.HttpMethod.ToMethodEnum(),
                Body             = request.Body,
                Query            = request.Query,
                Route            = request.Route,
                MockupResponseId = request.ResponseId
            };
            using var ctx = new DataContext();
            ctx.Requests.Add(newData);
            ctx.SaveChanges(true);
            Program.Logger.Info($"[{logId}] Successfully created request #{newData.Id} ({request.Route}) [{request.HttpMethod}].");
            return(newData.ToMockupRequest());
        }