Scenario
I have method in PreviewService.AddPreview. I would like to test it whether it add new Preview or not. I use C# and EntityFremework. How to program test to create id of Preview with autoincrementation? I know that I should have repository or DAO, but I have no permission to refactor it :(.
Code
private DbSet<WebsitePreview> _previewDbSet;
private List<WebsitePreview> _previews;
private IQueryable<WebsitePreview> _previewsAsQueryable => this._previews.AsQueryable();
In Set Up
_previews = new List<WebsitePreview>();
_previewDbSet = A.Fake<DbSet<WebsitePreview>>(cat =>
cat.Implements<IQueryable<WebsitePreview>>());
A.CallTo(() => ((IQueryable<WebsitePreview>)_previewDbSet).Provider)
.Returns(_previewsAsQueryable.Provider);
A.CallTo(() => ((IQueryable<WebsitePreview>)_previewDbSet).GetEnumerator())
.Returns(_previewsAsQueryable.GetEnumerator());
A.CallTo(() => ((IQueryable<WebsitePreview>)_previewDbSet).Expression)
.Returns(_previewsAsQueryable.Expression);
A.CallTo(() => ((IQueryable<WebsitePreview>)_previewDbSet).ElementType)
.Returns(this._previewsAsQueryable.ElementType);
A.CallTo(() => _dbContext.Set<WebsitePreview>()).Returns(_previewDbSet);
Test
//arrange
string newPreviewName = "new";
WebsitePreview existingPreview = GetExistingPreview(); //it has id=1
this._previews.Add(existingPreview);
PreviewItemDto expectedPreviewItemDto = new PreviewItemDto
{
Id = 2,
Name = "new",
Selected = false
};
//act
var result = this._sut.AddNewPreview(newPreviewName);
//assert
//(2, 0)
Assert.AreEqual(expectedPreviewItemDto.Id, result.Id); //result.Id equals 0, expected 2