public async Task should_save_new_copy_of_original_form() { var id = ObjectId.GenerateNewId(); var model = new LocalizationCopy { ObjectId = ObjectId.GenerateNewId().ToString() }; var cursor = StubCursor(); var localizationModel = new LocalizationModel { Id = id }; cursor.Setup(x => x.Current).Returns(new List <LocalizationModel> { localizationModel }); cursor.SetupSequence(x => x.MoveNext(It.IsAny <CancellationToken>())) .Returns(false) .Returns(true) .Returns(false); _repository.Setup(x => x.SaveAsync ( LocalizationController.CollectionName, It.IsAny <LocalizationModel>() ) ) .ReturnsAsync(localizationModel); var _ = await _controller.Upsert(model); _repository.Verify(x => x.SaveAsync( LocalizationController.CollectionName, It.IsAny <LocalizationModel>())); }
public async Task should_return_existing_draft_copy() { var id = ObjectId.GenerateNewId(); var model = new LocalizationCopy { ObjectId = ObjectId.GenerateNewId().ToString(), ObjectName = ObjectName }; var cursor = StubCursor(); var form = new LocalizationModel { Id = id }; cursor.Setup(x => x.Current).Returns(new List <LocalizationModel> { form }); cursor.SetupSequence(x => x.MoveNext(It.IsAny <CancellationToken>())) .Returns(true) .Returns(true) .Returns(false); var response = await ExecuteEndpoint(_controller.Upsert(model)); _repository.Verify(x => x.SaveAsync( LocalizationController.CollectionName, It.IsAny <LocalizationModel>()), Times.Never); response.Should().Be(form); }
public async Task <ApiResult <LocalizationModel> > Upsert([FromBody] LocalizationCopy localizationCopy) { var existing = await FindExistingLocalization(localizationCopy, localizationCopy.ObjectName); if (existing != null) { return(Ok(existing)); } var model = await FindLocalization(localizationCopy.ObjectId, localizationCopy.ObjectName); if (model == null) { throw new HttpNotFoundException ( new ApiError ( nameof(NotFound), $"Could not find {nameof(LocalizationModel)} by {nameof(LocalizationModel.ObjectId)}({{objectId}}) " + $"and {nameof(LocalizationModel.ObjectName)}({{objectName}})", additionalData: new Dictionary <string, string> { { "objectId", localizationCopy.ObjectId }, { "objectName", localizationCopy.ObjectName } } ) ); } var copy = CopyExistingLocalization(model, localizationCopy.NewObjectId); return(await AddNewItem(copy)); }
public void should_return_not_found_when_no_form_found_by_object_id() { var model = new LocalizationCopy { ObjectId = ObjectId.GenerateNewId().ToString() }; var cursor = StubCursor(); StubNotFoundResult(cursor); _controller.Awaiting(x => x.Upsert(model)) .Should().ThrowExactly <HttpNotFoundException>().And .StatusCode.Should().Be(HttpStatusCode.NotFound); }
private async Task <LocalizationModel> FindExistingLocalization(LocalizationCopy localizationCopy, string objectName) { var results = await _repository.FindAsync <LocalizationModel>(CollectionName, x => x.ObjectId == localizationCopy.NewObjectId && x.ObjectName == objectName); return(results.SingleOrDefault()); }