/// <summary> /// Gets the user's tasks that match given request parameters. /// </summary> /// <param name="request">The request parameters.</param> /// <returns>The user's matching tasks.</returns> public Task <IEnumerable <GetTask> > GetUserTasksAsync(GetUserTasksRequest request) { if (request == null) { throw new ArgumentNullException(nameof(request)); } return(GetUserTasksInternalAsync(request)); }
public async Task <IActionResult> GetUserTasks([FromBody] GetUserTasksRequest request) { var result = _requestValidator.Validate(request); if (!result.IsValid) { throw new InvalidValueException(result.Errors.Select(e => e.ErrorMessage).Distinct().ToArray()); } var tasks = await _tasksService.GetTasksByEmail(request.Email); return(Ok(_mapper.Map <List <GetTaskResponse> >(tasks))); }
public void Should_PFail_On_Invalid_Email() { var validator = new GetUserTasksRequestValidator(); var mockRequest = new GetUserTasksRequest() { Email = "test@testtest" }; var result = validator.Validate(mockRequest); result.IsValid.Should().Be(false); result.Errors.FirstOrDefault(e => e.ErrorMessage == "Valid email address shuld be provided.").Should().NotBeNull(); }
public void Should_Fail_On_Email_Roo_Long() { var validator = new GetUserTasksRequestValidator(); var mockRequest = new GetUserTasksRequest() { Email = new string('&', 300) }; var result = validator.Validate(mockRequest); result.IsValid.Should().Be(false); result.Errors.FirstOrDefault(e => e.ErrorMessage == "Email cannot be longer than 255 charcters.").Should().NotBeNull(); }
public void Should_Fail_On_Empty_Email() { var validator = new GetUserTasksRequestValidator(); var mockRequest = new GetUserTasksRequest() { Email = string.Empty }; var result = validator.Validate(mockRequest); result.IsValid.Should().Be(false); result.Errors.FirstOrDefault(e => e.ErrorMessage == "Email cannot be empty.").Should().NotBeNull(); }
public void Should_Pass_On_Correct_Request() { var validator = new GetUserTasksRequestValidator(); var mockRequest = new GetUserTasksRequest() { Email = "*****@*****.**" }; var result = validator.Validate(mockRequest); result.IsValid.Should().Be(true); result.Errors.Count.Should().Be(0); }
public async Task GetUserTasksAsync_Normal_ExecutesRequestProperly() { (var client, var handler) = InstrumentedTaskClient(); const string exampleResponse = "{\"success\":true,\"data\":[{\"_id\":\"8a9d461b-f5eb-4a16-97d3-c03380c422a3\",\r\n\"userId\":\"b0413351-405f-416f-8787-947ec1c85199\",\"text\":\"15 minute break\",\r\n\"type\":\"reward\",\"notes\":\"\",\"tags\":[],\"value\":10,\"priority\":1,\"attribute\":\"str\",\r\n\"challenge\":{},\"group\":{\"assignedUsers\":[],\"approval\":{\"required\":false,\"approved\":false,\r\n\"requested\":false}},\"reminders\":[],\"createdAt\":\"2017-01-07T17:52:09.121Z\",\r\n\"updatedAt\":\"2017-01-11T14:25:32.504Z\",\"id\":\"8a9d461b-f5eb-4a16-97d3-c03380c422a3\"},\r\n,{\"_id\":\"84c2e874-a8c9-4673-bd31-d97a1a42e9a3\",\"userId\":\"b0413351-405f-416f-8787-947ec1c85199\",\r\n\"alias\":\"prac31\",\"text\":\"Practice Task 31\",\"type\":\"daily\",\"notes\":\"\",\"tags\":[],\"value\":1,\r\n\"priority\":1,\"attribute\":\"str\",\"challenge\":{},\"group\":{\"assignedUsers\":[],\r\n\"approval\":{\"required\":false,\"approved\":false,\"requested\":false}},\r\n\"reminders\":[{\"time\":\"2017-01-13T16:21:00.074Z\",\"startDate\":\"2017-01-13T16:20:00.074Z\",\r\n\"id\":\"b8b549c4-8d56-4e49-9b38-b4dcde9763b9\"}],\"createdAt\":\"2017-01-13T16:34:06.632Z\",\r\n\"updatedAt\":\"2017-01-13T16:49:35.762Z\",\"checklist\":[],\"collapseChecklist\":false,\r\n\"completed\":true,\"history\":[],\"streak\":1,\"repeat\":{\"su\":false,\"s\":false,\"f\":true,\r\n\"th\":true,\"w\":true,\"t\":true,\"m\":true},\"startDate\":\"2017-01-13T00:00:00.000Z\",\r\n\"everyX\":1,\"frequency\":\"weekly\",\"id\":\"84c2e874-a8c9-4673-bd31-d97a1a42e9a3\"}],\"notifications\":[]}"; handler.Response = exampleResponse.WrapResponseBody(); var options = new GetUserTasksRequest() { TaskType = Data.Enum.TaskListType.Dailys }; _ = await client.GetUserTasksAsync(options); var request = handler.LastRequest; Assert.Equal("/api/v3/tasks/user", request.RequestUri.AbsolutePath); Assert.Equal($"?type={options.TaskType}", request.RequestUri.Query); Assert.Null(request.Content); }
private async Task <IEnumerable <GetTask> > GetUserTasksInternalAsync(GetUserTasksRequest request) { const string endpoint = "/api/v3/tasks/user"; NameValueCollection queryParameters = new NameValueCollection(); if (request.TaskType.HasValue) { queryParameters.Add("type", request.TaskType.Value.ToString("G")); } if (request.DueDate.HasValue) { queryParameters.Add("dueDate", request.DueDate.Value.ToString("o", DateTimeFormatInfo.InvariantInfo)); } string path = endpoint + queryParameters.ToQueryString(); Uri uri = path.ToUri(); var res = await client.GetAsync(uri).Safe(); return(res.UnwrapHabiticaResponse <IEnumerable <GetTask> >()); }