public async Task Can_Get_TodoItem_ById() { // Arrange var person = new Person(); var todoItem = _todoItemFaker.Generate(); todoItem.Owner = person; _context.TodoItems.Add(todoItem); _context.SaveChanges(); var httpMethod = new HttpMethod("GET"); var route = $"/api/v1/todo-items/{todoItem.Id}"; var description = new RequestProperties("Get TodoItem By Id", new Dictionary <string, string> { { "/todo-items/{id}", "TodoItem Id" } }); // Act var response = await _fixture.MakeRequest <TodoItem>(description, httpMethod, route); var body = await response.Content.ReadAsStringAsync(); var deserializedBody = (TodoItem)JsonApiDeSerializer.Deserialize(body, _jsonApiContext); // Assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.Equal(todoItem.Id, deserializedBody.Id); Assert.Equal(todoItem.Description, deserializedBody.Description); Assert.Equal(todoItem.Ordinal, deserializedBody.Ordinal); }
public async Task Can_Filter_TodoItems() { // Arrange var person = new Person(); var todoItem = _todoItemFaker.Generate(); todoItem.Ordinal = 999999; todoItem.Owner = person; _context.TodoItems.Add(todoItem); _context.SaveChanges(); var httpMethod = new HttpMethod("GET"); var route = $"/api/v1/todo-items?filter[ordinal]={todoItem.Ordinal}"; var description = new RequestProperties("Filter TodoItems By Attribute", new Dictionary <string, string> { { "?filter[...]=", "Filter on attribute" } }); // Act var response = await _fixture.MakeRequest <TodoItem>(description, httpMethod, route); var body = await response.Content.ReadAsStringAsync(); var deserializedBody = _fixture.GetService <IJsonApiDeSerializer>().DeserializeList <TodoItem>(body); // Assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.NotEmpty(deserializedBody); foreach (var todoItemResult in deserializedBody) { Assert.Equal(todoItem.Ordinal, todoItemResult.Ordinal); } }
public async Task Can_Filter_TodoItems_Using_Like_Operator() { // Arrange var todoItem = _todoItemFaker.Generate(); todoItem.Ordinal = 999999; _context.TodoItems.Add(todoItem); _context.SaveChanges(); var substring = todoItem.Description.Substring(1, todoItem.Description.Length - 2); var httpMethod = new HttpMethod("GET"); var route = $"/api/v1/todo-items?filter[description]=like:{substring}"; var description = new RequestProperties("Filter TodoItems Where Attribute Like", new Dictionary <string, string> { { "?filter[...]=", "Filter on attribute" } }); // Act var response = await _fixture.MakeRequest <TodoItem>(description, httpMethod, route); var body = await response.Content.ReadAsStringAsync(); var deserializedBody = _fixture.GetService <IJsonApiDeSerializer>().DeserializeList <TodoItem>(body); // Assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.NotEmpty(deserializedBody); foreach (var todoItemResult in deserializedBody) { Assert.Contains(substring, todoItem.Description); } }
public IRequest BuildRequestFrom(RequestProperties properties) { return(new AddUserRequest { UserName = properties.GetString("user_name") }); }
public async Task Can_Get_TodoItem_WithOwner() { // Arrange var person = new Person(); var todoItem = _todoItemFaker.Generate(); todoItem.Owner = person; _context.TodoItems.Add(todoItem); _context.SaveChanges(); var httpMethod = new HttpMethod("GET"); var route = $"/api/v1/todo-items/{todoItem.Id}?include=owner"; var description = new RequestProperties("Get TodoItem By Id", new Dictionary <string, string> { { "/todo-items/{id}", "TodoItem Id" }, { "?include={relationship}", "Included Relationship" } }); // Act var response = await _fixture.MakeRequest <TodoItem>(description, httpMethod, route); var body = await response.Content.ReadAsStringAsync(); var deserializedBody = (TodoItem)_fixture.GetService <IJsonApiDeSerializer>().Deserialize(body); // Assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.Equal(person.Id, deserializedBody.OwnerId); Assert.Equal(todoItem.Id, deserializedBody.Id); Assert.Equal(todoItem.Description, deserializedBody.Description); Assert.Equal(todoItem.Ordinal, deserializedBody.Ordinal); Assert.Equal(todoItem.CreatedDate.ToString("G"), deserializedBody.CreatedDate.ToString("G")); Assert.Equal(null, deserializedBody.AchievedDate); }
public bool executeCode(string serviceName, string parameters) { request = new RequestEngine(); Console.WriteLine("Service Name: " + serviceName); RequestProperties headers = new RequestProperties(); headers.setMethod("POST"); string endpoint = "/api/v/1/code/" + Util.getSystemKey() + "/" + this.serviceName + ""; headers.setEndpoint(endpoint); headers.setBody(parameters); request.setHeaders(headers); PlatformResponse <string> result = request.executePost(); if (result.getError()) { Util.logger("CBUserTask", "User call failed: " + result.getData(), true); return(false); } else { Console.WriteLine((string)result.getData()); return(true); } }
public async Task Can_Paginate_TodoItems() { // Arrange const int expectedEntitiesPerPage = 2; var person = new Person(); var todoItem = _todoItemFaker.Generate(); todoItem.Owner = person; _context.TodoItems.Add(todoItem); _context.SaveChanges(); var httpMethod = new HttpMethod("GET"); var route = $"/api/v1/todo-items?page[size]={expectedEntitiesPerPage}"; var description = new RequestProperties("Paginate TodoItems", new Dictionary <string, string> { { "?page[size]=", "Number of entities per page" } }); // Act var response = await _fixture.MakeRequest <TodoItem>(description, httpMethod, route); var body = await response.Content.ReadAsStringAsync(); var deserializedBody = _fixture.GetService <IJsonApiDeSerializer>().DeserializeList <TodoItem>(body); // Assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.NotEmpty(deserializedBody); Assert.True(deserializedBody.Count <= expectedEntitiesPerPage); }
public async Task Can_Delete_TodoItem() { // Arrange var person = new Person(); _context.People.Add(person); _context.SaveChanges(); var todoItem = _todoItemFaker.Generate(); todoItem.Owner = person; _context.TodoItems.Add(todoItem); _context.SaveChanges(); var httpMethod = new HttpMethod("DELETE"); var route = $"/api/v1/todo-items/{todoItem.Id}"; var request = new HttpRequestMessage(httpMethod, route); request.Content = new StringContent(string.Empty); request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json"); var description = new RequestProperties("Delete TodoItem"); // Act var response = await _fixture.MakeRequest <TodoItem>(description, request); // Assert Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); Assert.Null(_context.TodoItems.FirstOrDefault(t => t.Id == todoItem.Id)); }
public bool authWithAnonUser(string uri, int timeout) { request = new RequestEngine(); Console.WriteLine("Req URI: " + uri); RequestProperties headers = new RequestProperties(); headers.setMethod("POST"); headers.setEndpoint("/api/v/1/user/anon"); headers.setUri(uri); headers.setTimeout(timeout); request.setHeaders(headers); PlatformResponse <string> result = request.execute(); if (result.getError()) { Util.logger("CBUserTask", "User call failed: " + result.getData(), true); ClearBlade.setInitError(true); return(false); } else { JObject json = JObject.Parse((string)result.getData()); setAuthToken((string)json["user_token"]); return(true); } }
public bool logout(string uri) { request = new RequestEngine(); Console.WriteLine("Req URI: " + uri); RequestProperties headers = new RequestProperties(); headers.setMethod("POST"); headers.setEndpoint("/api/v/1/user/logout"); headers.setUri(uri); request.setHeaders(headers); PlatformResponse <string> result = request.execute(); if (result.getError()) { Util.logger("CBUserTask", "User call failed: " + result.getData(), true); ClearBlade.setInitError(true); return(false); } else { setAuthToken(null); Console.WriteLine("User Logged out"); return(true); } }
public bool authWithCurrentUser(string password, string uri) { //get auth token with current user request = new RequestEngine(); string email = this.getEmail(); string body = "{\"email\":\"" + email + "\",\"password\":\"" + password + "\"}"; RequestProperties headers = new RequestProperties(); headers.setMethod("POST"); headers.setEndpoint("/api/v/1/user/auth"); headers.setUri(uri); headers.setBody(body); request.setHeaders(headers); Console.WriteLine("In Auth with current user"); PlatformResponse <string> result = request.executePost(); if (result.getError()) { Util.logger("CBUserTask", "User call failed: " + result.getData(), true); ClearBlade.setInitError(true); Console.WriteLine("Some error in result"); return(false); } else { JObject json = JObject.Parse((string)result.getData()); setAuthToken((string)json["user_token"]); return(true); } }
private RequestProperties ProcessRequestParams(NamedValueSet requestParams) { var result = new RequestProperties(); //NamedValueSet requestSettings = new NamedValueSet(requestParams); if (requestParams != null) { ICollection <NamedValue> coll = requestParams.ToColl(); foreach (NamedValue nv in coll) { try { switch (nv.Name.ToLower()) { default: Logger.LogDebug( "{0}: Parameter {1}='{2}' ignored", "MdpSimulator", nv.Name, nv.ValueString); break; } } catch (Exception excp) { Logger.Log(excp); } } } return(result); }
public async Task Can_Get_TodoItems() { // Arrange const int expectedEntitiesPerPage = 5; var person = new Person(); var todoItem = _todoItemFaker.Generate(); todoItem.Owner = person; _context.TodoItems.Add(todoItem); _context.SaveChanges(); var httpMethod = new HttpMethod("GET"); var route = "/api/v1/todo-items"; var description = new RequestProperties("Get TodoItems"); // Act var response = await _fixture.MakeRequest <TodoItem>(description, httpMethod, route); var body = await response.Content.ReadAsStringAsync(); var deserializedBody = JsonApiDeSerializer.DeserializeList <TodoItem>(body, _jsonApiContext); // Assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.NotEmpty(deserializedBody); Assert.True(deserializedBody.Count <= expectedEntitiesPerPage); }
private void InvokeWebMethod() { MethodProperty currentMethodProperty = GetCurrentMethodProperty(); if (currentMethodProperty != null) { HttpWebClientProtocol proxy = currentMethodProperty.GetProxyProperty().GetProxy(); RequestProperties properties = new RequestProperties(proxy); try { MethodInfo method = currentMethodProperty.GetMethod(); System.Type declaringType = method.DeclaringType; WSSWebRequest.RequestTrace = properties; object[] parameters = currentMethodProperty.ReadChildren() as object[]; object result = method.Invoke(proxy, BindingFlags.Public, null, parameters, null); treeOutput.Nodes.Clear(); MethodProperty property2 = new MethodProperty(currentMethodProperty.GetProxyProperty(), method, result, parameters); property2.RecreateSubtree(null); treeOutput.Nodes.Add(property2.TreeNode); treeOutput.ExpandAll(); } finally { WSSWebRequest.RequestTrace = null; propRequest.SelectedObject = properties; richRequest.Text = properties.requestPayLoad; richResponse.Text = properties.responsePayLoad; } } }
public void CloneCopiesAllTheProperties() { RequestProperties item = CommonTestHelpers.Factory.CreateRequestProperties(); RequestProperties clone = item.Clone(); Assert.AreEqual(JsonSerializer.Serialize(item), JsonSerializer.Serialize(clone)); }
public void Resquest_properties_should_have_host_type_referrer_url() { _requestProperties = new RequestProperties("GET", "ojas/index.html", @"http://*****:*****@"http://localhost:8080"); _requestProperties.Type.Should().Be("GET"); _requestProperties.Url.Should().Be("ojas/index.html"); _requestProperties.Referer.Should().Be("hello"); }
public async Task Can_Patch_TodoItemWithNullable() { // Arrange var person = new Person(); _context.People.Add(person); _context.SaveChanges(); var todoItem = _todoItemFaker.Generate(); todoItem.AchievedDate = System.DateTime.Now; todoItem.Owner = person; _context.TodoItems.Add(todoItem); _context.SaveChanges(); var newTodoItem = _todoItemFaker.Generate(); newTodoItem.AchievedDate = System.DateTime.Now.AddDays(2); var content = new { data = new { type = "todo-items", attributes = new Dictionary <string, object>() { { "description", newTodoItem.Description }, { "ordinal", newTodoItem.Ordinal }, { "created-date", newTodoItem.CreatedDate }, { "achieved-date", newTodoItem.AchievedDate } } } }; var httpMethod = new HttpMethod("PATCH"); var route = $"/api/v1/todo-items/{todoItem.Id}"; var request = new HttpRequestMessage(httpMethod, route); request.Content = new StringContent(JsonConvert.SerializeObject(content)); request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json"); var description = new RequestProperties("Patch TodoItem"); // Act var response = await _fixture.MakeRequest <TodoItem>(description, request); var body = await response.Content.ReadAsStringAsync(); var deserializedBody = (TodoItem)_fixture.GetService <IJsonApiDeSerializer>().Deserialize(body); // Assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.Equal(newTodoItem.Description, deserializedBody.Description); Assert.Equal(newTodoItem.Ordinal, deserializedBody.Ordinal); Assert.Equal(newTodoItem.CreatedDate.ToString("G"), deserializedBody.CreatedDate.ToString("G")); Assert.Equal(newTodoItem.AchievedDate.GetValueOrDefault().ToString("G"), deserializedBody.AchievedDate.GetValueOrDefault().ToString("G")); }
public void FormDataIsNotNull() { RequestProperties item = new RequestProperties(new RequestProperties.CreateOptions { FormData = null }); Assert.IsNotNull(item.FormData); }
public void ServerVariablesIsNotNull() { RequestProperties item = new RequestProperties(new RequestProperties.CreateOptions { ServerVariables = null }); Assert.IsNotNull(item.ServerVariables); }
public void NullHeaderKeysAreNotCopied() { RequestProperties item = new RequestProperties(new RequestProperties.CreateOptions { Headers = null }); Assert.IsNotNull(item.Headers); }
public void CookiesIsNotNull() { RequestProperties item = new RequestProperties(new RequestProperties.CreateOptions { Cookies = null }); Assert.IsNotNull(item.Cookies); }
public async Task Can_Post_TodoItem() { // Arrange var person = new Person(); _context.People.Add(person); _context.SaveChanges(); var todoItem = _todoItemFaker.Generate(); var content = new { data = new { type = "todo-items", attributes = new Dictionary <string, object>() { { "description", todoItem.Description }, { "ordinal", todoItem.Ordinal }, { "created-date", todoItem.CreatedDate } }, relationships = new { owner = new { data = new { type = "people", id = person.Id.ToString() } } } } }; var httpMethod = new HttpMethod("POST"); var route = $"/api/v1/todo-items"; var request = new HttpRequestMessage(httpMethod, route); request.Content = new StringContent(JsonConvert.SerializeObject(content)); request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json"); var description = new RequestProperties("Post TodoItem"); // Act var response = await _fixture.MakeRequest <TodoItem>(description, request); var body = await response.Content.ReadAsStringAsync(); var deserializedBody = (TodoItem)_fixture.GetService <IJsonApiDeSerializer>().Deserialize(body); // Assert Assert.Equal(HttpStatusCode.Created, response.StatusCode); Assert.Equal(todoItem.Description, deserializedBody.Description); Assert.Equal(todoItem.CreatedDate.ToString("G"), deserializedBody.CreatedDate.ToString("G")); Assert.Equal(null, deserializedBody.AchievedDate); }
public void QueryStringIsNotNull() { RequestProperties item = new RequestProperties(new RequestProperties.CreateOptions { QueryString = null }); Assert.IsNotNull(item.QueryString); }
public void BuildRequest_PassesPropertiesToRegisteredBuilder() { var builder = new TestRequestBuilder(); var propertiesToPass = new RequestProperties(); RequestBuilder.Instance.Register("REQ5", () => builder); RequestBuilder.Instance.BuildRequest("req5", propertiesToPass); propertiesToPass.Should().BeSameAs(builder.PassedProperties); }
/// <summary> /// Create a new HTTP request. /// </summary> /// <param name="properties"> /// The request properties. /// </param> protected HttpRequestBase(ImmutableDictionary <string, object> properties) { if (properties == null) { throw new ArgumentNullException(nameof(properties)); } _properties = properties; EnsurePropertyType <Uri>(nameof(Uri)); EnsurePropertyType <bool>(nameof(IsUriTemplate)); }
public async Task Can_Patch_TodoItem() { // Arrange var person = new Person(); _context.People.Add(person); _context.SaveChanges(); var todoItem = _todoItemFaker.Generate(); todoItem.Owner = person; _context.TodoItems.Add(todoItem); _context.SaveChanges(); var newTodoItem = _todoItemFaker.Generate(); var content = new { data = new { type = "todo-items", attributes = new { description = newTodoItem.Description, ordinal = newTodoItem.Ordinal } } }; var httpMethod = new HttpMethod("PATCH"); var route = $"/api/v1/todo-items/{todoItem.Id}"; var request = new HttpRequestMessage(httpMethod, route); request.Content = new StringContent(JsonConvert.SerializeObject(content)); request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json"); var description = new RequestProperties("Patch TodoItem"); // Act var response = await _fixture.MakeRequest <TodoItem>(description, request); var body = await response.Content.ReadAsStringAsync(); var deserializedBody = (TodoItem)JsonApiDeSerializer.Deserialize(body, _jsonApiContext); // Assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.Equal(newTodoItem.Description, deserializedBody.Description); Assert.Equal(newTodoItem.Ordinal, deserializedBody.Ordinal); }
public static WebRequestProperties Create(HttpRequest request) { WebRequestProperties result = new WebRequestProperties(); if (request == null) { return(result); } result.StartDateTime = DateTime.UtcNow; result.UserAgent = request.UserAgent; result.Url = request.Url; result.HttpMethod = request.HttpMethod; result.HttpReferer = request.UrlReferrer?.AbsolutePath; result.RemoteAddress = request.UserHostAddress; result.MachineName = GetMachineName(request); RequestProperties requestProperties = new RequestProperties(); result.Request = requestProperties; var headers = DataParser.ToDictionary(request.Unvalidated.Headers); headers = FilterHeaders(headers); var queryString = DataParser.ToDictionary(request.Unvalidated.QueryString); var formData = DataParser.ToDictionary(request.Unvalidated.Form); var serverVariables = DataParser.ToDictionary(request.ServerVariables); serverVariables = FilterServerVariables(serverVariables); var cookies = DataParser.ToDictionary(request.Unvalidated.Cookies); requestProperties.Headers = headers; requestProperties.QueryString = queryString; requestProperties.FormData = formData; requestProperties.ServerVariables = serverVariables; requestProperties.Cookies = cookies; string inputStream = null; if (InternalHelpers.ShouldLogInputStream(headers)) { inputStream = ReadInputStream(request); } requestProperties.InputStream = inputStream; return(result); }
public async Task Server_Sends_Correct_ContentType_Header() { // arrange var builder = new WebHostBuilder() .UseStartup <Startup>(); var httpMethod = new HttpMethod("GET"); var route = "/api/v1/todo-items"; var description = new RequestProperties("Server Sends Correct Content Type Header"); var server = new TestServer(builder); var client = server.CreateClient(); var request = new HttpRequestMessage(httpMethod, route); // act var response = await client.SendAsync(request); // assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.Equal("application/vnd.api+json", response.Content.Headers.ContentType.ToString()); }
public async Task Can_Sort_TodoItems_By_Ordinal_Descending() { // Arrange _context.TodoItems.RemoveRange(_context.TodoItems); const int numberOfItems = 5; var person = new Person(); for (var i = 1; i < numberOfItems; i++) { var todoItem = _todoItemFaker.Generate(); todoItem.Ordinal = i; todoItem.Owner = person; _context.TodoItems.Add(todoItem); } _context.SaveChanges(); var httpMethod = new HttpMethod("GET"); var route = $"/api/v1/todo-items?sort=-ordinal"; var description = new RequestProperties("Sort TodoItems Descending", new Dictionary <string, string> { { "?sort=-attr", "Sort on attribute" } }); // Act var response = await _fixture.MakeRequest <TodoItem>(description, httpMethod, route); var body = await response.Content.ReadAsStringAsync(); var deserializedBody = _fixture.GetService <IJsonApiDeSerializer>().DeserializeList <TodoItem>(body); // Assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.NotEmpty(deserializedBody); long priorOrdinal = numberOfItems + 1; foreach (var todoItemResult in deserializedBody) { Assert.True(todoItemResult.Ordinal < priorOrdinal); priorOrdinal = todoItemResult.Ordinal; } }
public void NullKeyValuesAreNotCopied(string keyName) { var options = new RequestProperties.CreateOptions { Headers = CommonTestHelpers.GenerateList(keyName, 2), Cookies = CommonTestHelpers.GenerateList(keyName, 2), QueryString = CommonTestHelpers.GenerateList(keyName, 2), FormData = CommonTestHelpers.GenerateList(keyName, 2), ServerVariables = CommonTestHelpers.GenerateList(keyName, 2), Claims = CommonTestHelpers.GenerateList(keyName, 2) }; RequestProperties item = new RequestProperties(options); Assert.AreEqual(0, item.Headers.Count()); Assert.AreEqual(0, item.Cookies.Count()); Assert.AreEqual(0, item.QueryString.Count()); Assert.AreEqual(0, item.FormData.Count()); Assert.AreEqual(0, item.ServerVariables.Count()); Assert.AreEqual(0, item.Claims.Count()); }
/// <summary> /// Check to see if the request is allowed. /// </summary> /// <param name = "session"> /// The session. /// </param> /// <param name = "rule"> /// The rule that has this action. /// </param> /// <returns> /// True to continue processing, or false if the request should be blocked. /// </returns> public bool BeforeRequest(Session session, Rule rule) { var requestProperties = new RequestProperties(session.fullUrl, session.oRequest.headers["Referer"], session.oRequest.headers["Accept"]); UriPattern matchedPattern; var result = _patternList.Match(requestProperties, out matchedPattern); if (result == UriPatternMatchType.Match) { session.oRequest.FailSession(204, "Blocked By AdBlock", String.Empty); RuleLog.Current.AddRule(rule, session, String.Format("AdBlock ({0})", matchedPattern.Pattern)); return false; } if (result == UriPatternMatchType.Exception) { RuleLog.Current.AddRule(rule, session, String.Format("AdBlock Except({0})", matchedPattern.Pattern)); } return true; }