Example #1
0
        public async void If_name_and_parentMatchResponseText_and_grandparentId_are_present_should_create_parent_and_this_group_under_the_grandparent()
        {
            // Set up
            var grandparent = InsertActivityGroup("Grandparent");

            var request = new Messages.ActivityGroupCreateRequest()
            {
                Name = "Child",
                ParentMatchResponseText = "Parent",
                GrandparentId           = grandparent.Id
            };

            // Act
            var reply = await _controller.Create(request);

            // Assert
            reply.Should().BeOfType <NoContentResult>();
            Db.WasSaveChangesCalled.Should().Be(true);
            Db.Mock.ActivityGroups.Added.Should().HaveCount(2);
            var childActivityGroup  = Db.Mock.ActivityGroups.Added.First(a => a.Name == "Child");
            var parentActivityGroup = Db.Mock.ActivityGroups.Added.First(a => a.Name == "Parent");

            childActivityGroup.ParentId.Should().Be(parentActivityGroup.Id);
            childActivityGroup.MatchResponseText.Should().BeNull();

            parentActivityGroup.ParentId.Should().Be(grandparent.Id);
            parentActivityGroup.MatchResponseText.Should().Be("Parent");
        }
Example #2
0
        public async void If_name_is_missing_should_return_bad_request()
        {
            var request  = new Messages.ActivityGroupCreateRequest();
            var rawReply = await _controller.Create(request);

            var reply   = (BadRequestObjectResult)rawReply;
            var message = (string)reply.Value;

            message.Should().Contain("name");
        }
Example #3
0
        public async void If_name_is_too_long_should_return_bad_request()
        {
            // Set up
            var request = new Messages.ActivityGroupCreateRequest()
            {
                Name = new string('a', ActivityGroup.MaxNameLength + 1),
            };

            // Act
            var rawReply = await _controller.Create(request);

            // Assert
            var reply   = (BadRequestObjectResult)rawReply;
            var message = (string)reply.Value;

            message.Should().Contain("name");
        }
Example #4
0
        public async void If_ActivityGroup_with_parentId_does_not_exist_should_return_NotFound()
        {
            // Set up
            var request = new Messages.ActivityGroupCreateRequest()
            {
                Name     = "Thing",
                ParentId = Guid.NewGuid()
            };

            // Act
            var rawReply = await _controller.Create(request);

            // Assert
            var reply   = (NotFoundObjectResult)rawReply;
            var message = (string)reply.Value;

            message.Should().Contain("parent");
        }
Example #5
0
        public async void Should_set_pollId_to_default_poll_Id()
        {
            var request = new Messages.ActivityGroupCreateRequest()
            {
                Name = "Thing",
                ParentMatchResponseText = "Parent"
            };

            // Act
            var reply = await _controller.Create(request);

            // Assert
            var thingActivityGroup  = Db.Mock.ActivityGroups.Added.First(a => a.Name == "Thing");
            var parentActivityGroup = Db.Mock.ActivityGroups.Added.First(a => a.Name == "Parent");

            thingActivityGroup.PollId.Should().Be(DefaultPollId);
            parentActivityGroup.PollId.Should().Be(DefaultPollId);
        }
Example #6
0
        public async void If_parentId_and_parentMatchText_are_both_present_should_return_bad_request()
        {
            // Set up
            var request = new Messages.ActivityGroupCreateRequest
            {
                Name     = "Thing",
                ParentId = Guid.NewGuid(),
                ParentMatchResponseText = "SomeText"
            };

            // Act
            var rawReply = await _controller.Create(request);

            // Assert
            var reply   = (BadRequestObjectResult)rawReply;
            var message = (string)reply.Value;

            message.Should().Contain("parentId");
            message.Should().Contain("parentMatchResponseText");
        }
Example #7
0
        public async void If_ActivityGroup_with_parentMatchResponseText_exists_should_return_bad_request()
        {
            // Set up
            InsertActivityGroup("Parent", matchResponseText: "Some text");

            var request = new Messages.ActivityGroupCreateRequest()
            {
                Name = "Thing",
                ParentMatchResponseText = "Some text"
            };

            // Act
            var rawReply = await _controller.Create(request);

            // Assert
            var reply   = (BadRequestObjectResult)rawReply;
            var message = (string)reply.Value;

            message.Should().Contain("matchResponseText");
            message.Should().Contain("parent");
        }
Example #8
0
        public async void If_only_name_is_present_should_create_top_level_ActivityGroup()
        {
            // Set up
            var request = new Messages.ActivityGroupCreateRequest()
            {
                Name = "Thing",
            };

            // Act
            var reply = await _controller.Create(request);

            // Assert
            reply.Should().BeOfType <NoContentResult>();
            Db.WasSaveChangesCalled.Should().Be(true);
            Db.Mock.ActivityGroups.Added.Should().HaveCount(1);
            var activityGroup = Db.Mock.ActivityGroups.Added.First();

            activityGroup.Name.Should().Be("Thing");
            activityGroup.ParentId.Should().BeNull();
            activityGroup.MatchResponseText.Should().BeNull();
        }
Example #9
0
        public async void If_grandparentId_is_provided_without_parentMatchResponseText_should_return_BadRequest()
        {
            // Set up
            var grapdparent = InsertActivityGroup("Grandparent");

            var request = new Messages.ActivityGroupCreateRequest()
            {
                Name          = "Thing",
                GrandparentId = Guid.NewGuid()
            };

            // Act
            var rawReply = await _controller.Create(request);

            // Assert
            var reply   = (BadRequestObjectResult)rawReply;
            var message = (string)reply.Value;

            message.Should().Contain("parentMatchResponseText");
            message.Should().Contain("grandparentId");
        }
Example #10
0
        public async void If_name_and_parent_are_present_should_create_activity_group_under_the_parent()
        {
            // Set up
            var parent  = InsertActivityGroup("Parent");
            var request = new Messages.ActivityGroupCreateRequest()
            {
                Name     = "Thing",
                ParentId = parent.Id,
            };

            // Act
            var reply = await _controller.Create(request);

            // Assert
            reply.Should().BeOfType <NoContentResult>();
            Db.WasSaveChangesCalled.Should().Be(true);
            Db.Mock.ActivityGroups.Added.Should().HaveCount(1);
            var activityGroup = Db.Mock.ActivityGroups.Added.First();

            activityGroup.Name.Should().Be("Thing");
            activityGroup.ParentId.Should().Be(parent.Id);
            activityGroup.MatchResponseText.Should().BeNull();
        }
Example #11
0
        public async Task <IActionResult> Create([FromBody] Messages.ActivityGroupCreateRequest request)
        {
            // Validate that the user is logged in.
            var account = await GetCurrentAccountAsync();

            if (account == null)
            {
                return(Unauthorized());
            }

            // Basic validation.
            var nameError = ValidateName(request.Name);

            if (nameError != null)
            {
                return(nameError);
            }

            var parentError = ValidateParentDescription(request.ParentId,
                                                        request.ParentMatchResponseText,
                                                        request.GrandparentId,
                                                        "parent");

            if (parentError != null)
            {
                return(parentError);
            }

            // Data validation.
            var poll = await GetDefaultPollAsync();

            var parentExistsError = await ValidateGroupExists(poll,
                                                              request.ParentId,
                                                              request.ParentMatchResponseText,
                                                              request.GrandparentId,
                                                              "parent");

            if (parentExistsError != null)
            {
                return(parentExistsError);
            }

            // User tracking.
            await UserEventsService.RecordEvent(new UserEvent
            {
                Account  = Account,
                Category = "activity_group",
                Name     = "create"
            });

            // Create.
            var newGroup = new ActivityGroup
            {
                Id       = Guid.NewGuid(),
                ParentId = request.ParentId,
                Name     = request.Name,
                PollId   = poll.Id,
                Position = 0,
            };

            if (!string.IsNullOrWhiteSpace(request.ParentMatchResponseText))
            {
                var newParent = new ActivityGroup
                {
                    Id                = Guid.NewGuid(),
                    ParentId          = request.GrandparentId,
                    Name              = request.ParentMatchResponseText,
                    MatchResponseText = request.ParentMatchResponseText,
                    Position          = 0,
                    PollId            = poll.Id
                };

                newGroup.ParentId = newParent.Id;
                Db.ActivityGroups.Add(newParent);
            }

            Db.ActivityGroups.Add(newGroup);
            await Db.SaveChangesAsync();

            return(NoContent());
        }