private void TestCreateDeleteApi <TModel>( IReadOnlyApiEndpoint <TModel> api, Func <IReadOnlyApiEndpoint <TModel>, int?> findTestId, Func <TModel, int> getId, Action <TModel> init, Action <TModel> testDeleted, params Expression <Func <TModel, object> >[] propsToTest ) where TModel : class { var createApi = api as IReadCreateApiEndpoint <TModel> ?? throw new ArgumentException("Does not implement Create api."); var deleteApi = api as IReadDeleteApiEndpoint <TModel> ?? throw new ArgumentException("Does not implement Delete api."); RemovePreviousTest(deleteApi, findTestId); var item = TestCreateApi(createApi, getId, init, propsToTest); TestDeleteApi(deleteApi, item, getId, testDeleted); }
private void TestReadOnlyApi <TModel>( IReadOnlyApiEndpoint <TModel> apiEndpoint, Func <TModel, int> getId, Func <TModel[], int> selectIndex = null ) where TModel : class { var itemText = ItemText <TModel>(); var itemsText = itemText + "s"; if (selectIndex == null) { selectIndex = list => (list.Length == 1 ? 0 : 1); } _output.WriteLine($"Enumerating {itemsText}..."); var items = apiEndpoint.ToArray(); Assert.NotNull(items); _output.WriteLine($"Getting count of {itemsText}..."); var itemCount = apiEndpoint.GetCount(); Assert.Equal(items.Length, itemCount); if (itemCount == 0) { _output.WriteLine($"No {itemsText}, cannot continue this test."); return; } var index = selectIndex(items); var itemId = getId(items[index]); _output.WriteLine($"Loading {itemsText} ID={itemId}..."); var item = apiEndpoint.Find(itemId); Assert.NotNull(item); Assert.Equal(itemId, getId(item)); Assert.Equal(items[index], item); Assert.False(ReferenceEquals(items[index], item)); }