public IActionResult AddElement([FromBody] ElementCreationData elementData) { var userId = _userProvider.GetCurrentUserId(); var collection = _dbContext.Collection .Include(c => c.Elements) .SingleOrDefault(c => c.Id == elementData.CollectionId); if (collection == null) { return(NotFound()); } if (collection.Elements.Count >= _configurationProvider.MaxElementsInCollection) { return(BadRequest("Could not add the element: Maximum number of elements reached")); } var lastSequenceInCollection = collection.Elements.Max(e => e.Sequence); var element = new Element { Link = elementData.Link, Name = elementData.Name, CollectionId = elementData.CollectionId, OwnerId = userId, Sequence = lastSequenceInCollection + 1 ?? 1 }; _dbContext.Add(element); _dbContext.SaveChanges(); return(Ok()); }
public void AddElement_FirstElementInCollection_SequenceEquals1(string elementName, string link) { //Arrange var userId = NewGuid; AddUser(userId); var collection = AddCollection(userId, 0); var elementData = new ElementCreationData { CollectionId = collection.Id, Link = link, Name = elementName }; //Act InTransaction(context => { var controller = new ElementsController(context, GetUserProviderMock(userId), getCollectionConfigurationProviderMock()); controller.AddElement(elementData); }); //Assert InTransaction(context => { var element = context.Element.Single(el => el.Name == elementName); element.Sequence.Should().Be(1); }); }
public void AddElement_100ElementsInserted_SequenceConserved() { //Arrange var userId = NewGuid; AddUser(userId); var collection = AddCollection(userId, 0); //Act InTransaction(context => { var controller = new ElementsController(context, GetUserProviderMock(userId), getCollectionConfigurationProviderMock()); for (var i = 0; i < 100; i++) { var elementData = new ElementCreationData { CollectionId = collection.Id, Link = NewGuid, Name = i.ToString() }; controller.AddElement(elementData); } }); //Assert InTransaction(context => { var elements = context.Collection .Include(c => c.Elements) .Single(c => c.Id == collection.Id) .Elements.OrderBy(el => int.Parse(el.Name)) .ToList(); elements.Should().HaveCount(100); elements.Max(el => el.Sequence).Should().Be(100); elements.Select(el => el.Sequence).Should().BeInAscendingOrder(); }); }
public void AddElement_NewElementData_AllPropertiesInserted(string elementName, string link) { //Arrange var userId = NewGuid; AddUser(userId); var collection = AddCollection(userId, 0); var elementData = new ElementCreationData { CollectionId = collection.Id, Link = link, Name = elementName }; //Act InTransaction(context => { var controller = new ElementsController(context, GetUserProviderMock(userId), getCollectionConfigurationProviderMock()); controller.AddElement(elementData); }); //Assert InTransaction(context => { var element = context.Element.SingleOrDefault(el => el.Name == elementName); element.Should().NotBeNull(); element.Name.Should().Be(elementName); element.Link.Should().Be(link); element.CollectionId.Should().Be(collection.Id); element.OwnerId.Should().Be(userId); }); }