Skip to content

Exercise 1 Unit Tests

DotNetNuclear edited this page Oct 30, 2020 · 1 revision

MenuControllerTests.cs


[TestMethod]
public void Edit_SavingItemWithSameName_DuplicateNameNotAllowed()
{
	//arrange
	mockStore = _MockStores.ItemRepositoryFake();
	mockStore.Object.CreateItem(new MenuItem { MenuItemId = 1, ModuleId = 1, Name = "Item 1", Desc = "Item 1 Description", AddedByUserId = 0, DateAdded = DateTime.Now.AddDays(-1), ModifiedByUserId = 0, DateModified = DateTime.Now });
	mockStore.Object.CreateItem(new MenuItem { MenuItemId = 2, ModuleId = 1, Name = "Item 2", Desc = "Item 2 Description", AddedByUserId = 0, DateAdded = DateTime.Now.AddDays(-1), ModifiedByUserId = 0, DateModified = DateTime.Now });
	mockStore.Object.CreateItem(new MenuItem { MenuItemId = 3, ModuleId = 1, Name = "Item 3", Desc = "Item 3 Description", AddedByUserId = 0, DateAdded = DateTime.Now.AddDays(-1), ModifiedByUserId = 0, DateModified = DateTime.Now });
	mockStore.Object.CreateItem(new MenuItem { MenuItemId = 4, ModuleId = 1, Name = "Item 4", Desc = "Item 4 Description", AddedByUserId = 0, DateAdded = DateTime.Now.AddDays(-1), ModifiedByUserId = 0, DateModified = DateTime.Now });

	//act
	var model = new MenuItem(mockStore.Object)
	{
		MenuItemId = -1,
		ModuleId = 1,
		Name = "Item 2"
	};

	var validationContext = new ValidationContext(model);
	var results = model.Validate(validationContext);

	//assert
	Assert.AreEqual(results.Count(), 1);
	Assert.AreEqual(results.First().ErrorMessage, "An item with this name already exists.");
}

MenuControllerTests.cs


public class MenuItem : IMenuItem, IValidatableObject

...

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
	if (_menuItemLookupRepo == null)
	{
		_menuItemLookupRepo = new MenuItemRepository();
	}

	var items = _menuItemLookupRepo.GetItems(ModuleId);
	bool nameExistsOnOtherItem = items.Any(i => i.MenuItemId != MenuItemId && 
							i.Name.Equals(Name, StringComparison.CurrentCultureIgnoreCase));
	if (nameExistsOnOtherItem)
	{
		yield return new ValidationResult("An item with this name already exists.", new[] { nameof(Name) });
	}
}

Clone this wiki locally