Example #1
0
 /// <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));
 }
Example #2
0
        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)));
        }
Example #3
0
        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();
        }
Example #4
0
        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();
        }
Example #5
0
        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();
        }
Example #6
0
        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);
        }
Example #8
0
        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> >());
        }