/// <summary>
        /// Tests whether the action sets specific <see cref="Microsoft.AspNetCore.Http.ISession"/> entries.
        /// </summary>
        /// <typeparam name="TActionResult">Type of action result type.</typeparam>
        /// <param name="shouldHaveTestBuilder">Instance of <see cref="IShouldHaveTestBuilder{TActionResult}"/> type.</param>
        /// <param name="sessionTestBuilder">Builder for testing specific <see cref="Microsoft.AspNetCore.Http.ISession"/> entries.</param>
        /// <returns>Test builder of <see cref="IAndTestBuilder{TActionResult}"/> type.</returns>
        public static IAndTestBuilder <TActionResult> Session <TActionResult>(
            this IShouldHaveTestBuilder <TActionResult> shouldHaveTestBuilder,
            Action <ISessionTestBuilder> sessionTestBuilder)
        {
            var actualShouldHaveTestBuilder = (ShouldHaveTestBuilder <TActionResult>)shouldHaveTestBuilder;

            sessionTestBuilder(new SessionTestBuilder(actualShouldHaveTestBuilder.TestContext));
            return(actualShouldHaveTestBuilder.NewAndTestBuilder());
        }
Beispiel #2
0
        /// <summary>
        /// Tests whether the action has specific <see cref="Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary"/> errors.
        /// </summary>
        /// <typeparam name="TActionResult">Type of action result type.</typeparam>
        /// <param name="shouldHaveTestBuilder">Instance of <see cref="IShouldHaveTestBuilder{TActionResult}"/> type.</param>
        /// <param name="modelStateTestBuilder">Builder for testing specific <see cref="Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary"/> errors.</param>
        /// <returns>Test builder of <see cref="IAndTestBuilder{TActionResult}"/> type.</returns>
        public static IAndTestBuilder <TActionResult> ModelState <TActionResult>(
            this IShouldHaveTestBuilder <TActionResult> shouldHaveTestBuilder,
            Action <IModelStateTestBuilder> modelStateTestBuilder)
        {
            var actualShouldHaveTestBuilder = (ShouldHaveTestBuilder <TActionResult>)shouldHaveTestBuilder;

            modelStateTestBuilder(new ModelStateTestBuilder(actualShouldHaveTestBuilder.TestContext));

            return(actualShouldHaveTestBuilder.NewAndTestBuilder());
        }
Beispiel #3
0
        /// <summary>
        /// Tests whether the action sets specific entries in the <see cref="Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary"/>.
        /// </summary>
        /// <typeparam name="TActionResult">Type of action result type.</typeparam>
        /// <param name="shouldHaveTestBuilder">Instance of <see cref="IShouldHaveTestBuilder{TActionResult}"/> type.</param>
        /// <param name="tempDataTestBuilder">Builder for testing specific <see cref="Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary"/> entries.</param>
        /// <returns>Test builder of <see cref="IAndTestBuilder{TActionResult}"/> type.</returns>
        public static IAndTestBuilder <TActionResult> TempData <TActionResult>(
            this IShouldHaveTestBuilder <TActionResult> shouldHaveTestBuilder,
            Action <ITempDataTestBuilder> tempDataTestBuilder)
        {
            var actualShouldHaveTestBuilder = (ShouldHaveTestBuilder <TActionResult>)shouldHaveTestBuilder;

            tempDataTestBuilder(new TempDataTestBuilder(actualShouldHaveTestBuilder.TestContext));

            return(actualShouldHaveTestBuilder.NewAndTestBuilder());
        }
        /// <summary>
        /// Tests whether the action sets specific entries in the <see cref="Microsoft.AspNetCore.Mvc.Controller.ViewBag"/>.
        /// </summary>
        /// <typeparam name="TActionResult">Type of action result type.</typeparam>
        /// <param name="shouldHaveTestBuilder">Instance of <see cref="IShouldHaveTestBuilder{TActionResult}"/> type.</param>
        /// <param name="viewBagTestBuilder">Builder for testing specific <see cref="Microsoft.AspNetCore.Mvc.Controller.ViewBag"/> entries.</param>
        /// <returns>Test builder of <see cref="IAndTestBuilder{TActionResult}"/> type.</returns>
        public static IAndTestBuilder <TActionResult> ViewBag <TActionResult>(
            this IShouldHaveTestBuilder <TActionResult> shouldHaveTestBuilder,
            Action <IViewBagTestBuilder> viewBagTestBuilder)
        {
            var actualShouldHaveTestBuilder = (ShouldHaveTestBuilder <TActionResult>)shouldHaveTestBuilder;

            viewBagTestBuilder(new ViewBagTestBuilder(actualShouldHaveTestBuilder.TestContext));

            return(actualShouldHaveTestBuilder.NewAndTestBuilder());
        }
Beispiel #5
0
        /// <summary>
        /// Tests whether the action saves entities in the <see cref="Microsoft.EntityFrameworkCore.DbContext"/>.
        /// </summary>
        /// <typeparam name="TActionResult">Type of action result type.</typeparam>
        /// <param name="shouldHaveTestBuilder">Instance of <see cref="IShouldHaveTestBuilder{TActionResult}"/> type.</param>
        /// <param name="dbContextTestBuilder">Action containing all assertions on the <see cref="Microsoft.EntityFrameworkCore.DbContext"/> entities.</param>
        /// <returns>Test builder of <see cref="IAndTestBuilder{TActionResult}"/> type.</returns>
        public static IAndTestBuilder <TActionResult> DbContext <TActionResult>(
            this IShouldHaveTestBuilder <TActionResult> shouldHaveTestBuilder,
            Action <IDbContextTestBuilder> dbContextTestBuilder)
        {
            var actualShouldHaveTestBuilder = (ShouldHaveTestBuilder <TActionResult>)shouldHaveTestBuilder;

            dbContextTestBuilder(new DbContextTestBuilder(actualShouldHaveTestBuilder.TestContext));

            return(actualShouldHaveTestBuilder.NewAndTestBuilder());
        }
Beispiel #6
0
        /// <summary>
        /// Tests whether the action does not set any <see cref="Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary"/> entries.
        /// </summary>
        /// <typeparam name="TActionResult">Type of action result type.</typeparam>
        /// <param name="shouldHaveTestBuilder">Instance of <see cref="IShouldHaveTestBuilder{TActionResult}"/> type.</param>
        /// <returns>Test builder of <see cref="IAndTestBuilder{TActionResult}"/> type.</returns>
        public static IAndTestBuilder <TActionResult> NoTempData <TActionResult>(this IShouldHaveTestBuilder <TActionResult> shouldHaveTestBuilder)
        {
            var actualShouldHaveTestBuilder = (ShouldHaveTestBuilder <TActionResult>)shouldHaveTestBuilder;

            if (actualShouldHaveTestBuilder.TestContext.GetTempData().Count > 0)
            {
                actualShouldHaveTestBuilder.ThrowNewDataProviderAssertionExceptionWithNoEntries(TempDataTestBuilder.TempDataName);
            }

            return(actualShouldHaveTestBuilder.NewAndTestBuilder());
        }
        /// <summary>
        /// Tests whether the action does not set any <see cref="Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary"/> entries.
        /// </summary>
        /// <typeparam name="TActionResult">Type of action result type.</typeparam>
        /// <param name="shouldHaveTestBuilder">Instance of <see cref="IShouldHaveTestBuilder{TActionResult}"/> type.</param>
        /// <returns>Test builder of <see cref="IAndTestBuilder{TActionResult}"/> type.</returns>
        public static IAndTestBuilder <TActionResult> NoMemoryCache <TActionResult>(this IShouldHaveTestBuilder <TActionResult> shouldHaveTestBuilder)
        {
            var actualShouldHaveTestBuilder = (ShouldHaveTestBuilder <TActionResult>)shouldHaveTestBuilder;

            if (actualShouldHaveTestBuilder.TestContext.GetMockedMemoryCache().Count > 0)
            {
                actualShouldHaveTestBuilder.ThrowNewDataProviderAssertionExceptionWithNoEntries(MemoryCacheTestBuilder.MemoryCacheName);
            }

            return(actualShouldHaveTestBuilder.NewAndTestBuilder());
        }
        /// <summary>
        /// Tests whether the action does not set any <see cref="Microsoft.AspNetCore.Http.ISession"/> entries.
        /// </summary>
        /// <typeparam name="TActionResult">Type of action result type.</typeparam>
        /// <param name="shouldHaveTestBuilder">Instance of <see cref="IShouldHaveTestBuilder{TActionResult}"/> type.</param>
        /// <returns>Test builder of <see cref="IAndTestBuilder{TActionResult}"/> type.</returns>
        public static IAndTestBuilder <TActionResult> NoSession <TActionResult>(this IShouldHaveTestBuilder <TActionResult> shouldHaveTestBuilder)
        {
            var actualShouldHaveTestBuilder = (ShouldHaveTestBuilder <TActionResult>)shouldHaveTestBuilder;

            if (actualShouldHaveTestBuilder.TestContext.Session.Keys.Any())
            {
                actualShouldHaveTestBuilder.ThrowNewDataProviderAssertionExceptionWithNoEntries(SessionTestBuilder.SessionName);
            }

            return(actualShouldHaveTestBuilder.NewAndTestBuilder());
        }
Beispiel #9
0
        /// <summary>
        /// Tests whether the action sets entries in the <see cref="Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary"/>.
        /// </summary>
        /// <typeparam name="TActionResult">Type of action result type.</typeparam>
        /// <param name="shouldHaveTestBuilder">Instance of <see cref="IShouldHaveTestBuilder{TActionResult}"/> type.</param>
        /// <param name="withNumberOfEntries">Expected number of <see cref="Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary"/> entries.
        /// If default null is provided, the test builder checks only if any entries are found.</param>
        /// <returns>Test builder of <see cref="IAndTestBuilder{TActionResult}"/> type.</returns>
        public static IAndTestBuilder <TActionResult> TempData <TActionResult>(
            this IShouldHaveTestBuilder <TActionResult> shouldHaveTestBuilder,
            int?withNumberOfEntries = null)
        {
            var actualShouldHaveTestBuilder = (ShouldHaveTestBuilder <TActionResult>)shouldHaveTestBuilder;

            actualShouldHaveTestBuilder.ValidateDataProviderNumberOfEntries(
                TempDataTestBuilder.TempDataName,
                withNumberOfEntries,
                actualShouldHaveTestBuilder.TestContext.GetTempData().Count);

            return(actualShouldHaveTestBuilder.NewAndTestBuilder());
        }
        /// <summary>
        /// Tests whether the action sets entries in the <see cref="Microsoft.Extensions.Caching.Memory.IMemoryCache"/>.
        /// </summary>
        /// <typeparam name="TActionResult">Type of action result type.</typeparam>
        /// <param name="shouldHaveTestBuilder">Instance of <see cref="IShouldHaveTestBuilder{TActionResult}"/> type.</param>
        /// <param name="withNumberOfEntries">Expected number of <see cref="Microsoft.Extensions.Caching.Memory.IMemoryCache"/> entries.
        /// If default null is provided, the test builder checks only if any entries are found.</param>
        /// <returns>Test builder of <see cref="IAndTestBuilder{TActionResult}"/> type.</returns>
        public static IAndTestBuilder <TActionResult> MemoryCache <TActionResult>(
            this IShouldHaveTestBuilder <TActionResult> shouldHaveTestBuilder,
            int?withNumberOfEntries = null)
        {
            var actualShouldHaveTestBuilder = (ShouldHaveTestBuilder <TActionResult>)shouldHaveTestBuilder;

            actualShouldHaveTestBuilder.ValidateDataProviderNumberOfEntries(
                MemoryCacheTestBuilder.MemoryCacheName,
                withNumberOfEntries,
                actualShouldHaveTestBuilder.TestContext.GetMockedMemoryCache().Count);

            return(actualShouldHaveTestBuilder.NewAndTestBuilder());
        }
        /// <summary>
        /// Tests whether the action sets entries in the <see cref="Microsoft.AspNetCore.Http.ISession"/>.
        /// </summary>
        /// <typeparam name="TActionResult">Type of action result type.</typeparam>
        /// <param name="shouldHaveTestBuilder">Instance of <see cref="IShouldHaveTestBuilder{TActionResult}"/> type.</param>
        /// <param name="withNumberOfEntries">Expected number of <see cref="Microsoft.AspNetCore.Http.ISession"/> entries.
        /// If default null is provided, the test builder checks only if any entries are found.</param>
        /// <returns>Test builder of <see cref="IAndTestBuilder{TActionResult}"/> type.</returns>
        public static IAndTestBuilder <TActionResult> Session <TActionResult>(
            this IShouldHaveTestBuilder <TActionResult> shouldHaveTestBuilder,
            int?withNumberOfEntries = null)
        {
            var actualShouldHaveTestBuilder = (ShouldHaveTestBuilder <TActionResult>)shouldHaveTestBuilder;

            actualShouldHaveTestBuilder.ValidateDataProviderNumberOfEntries(
                SessionTestBuilder.SessionName,
                withNumberOfEntries,
                actualShouldHaveTestBuilder.TestContext.Session.Keys.Count());

            return(actualShouldHaveTestBuilder.NewAndTestBuilder());
        }
Beispiel #12
0
        /// <summary>
        /// Tests whether the action has invalid <see cref="Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary"/>.
        /// </summary>
        /// <typeparam name="TActionResult">Type of action result type.</typeparam>
        /// <param name="shouldHaveTestBuilder">Instance of <see cref="IShouldHaveTestBuilder{TActionResult}"/> type.</param>
        /// <param name="withNumberOfErrors">Expected number of <see cref="Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary"/> errors.
        /// If default null is provided, the test builder checks only if any errors are found.</param>
        /// <returns>Test builder of <see cref="IAndTestBuilder{TActionResult}"/> type.</returns>
        public static IAndTestBuilder <TActionResult> InvalidModelState <TActionResult>(
            this IShouldHaveTestBuilder <TActionResult> shouldHaveTestBuilder,
            int?withNumberOfErrors = null)
        {
            var actualShouldHaveTestBuilder = (ShouldHaveTestBuilder <TActionResult>)shouldHaveTestBuilder;

            var actualModelStateErrors = actualShouldHaveTestBuilder.TestContext.ModelState.Values.SelectMany(c => c.Errors).Count();

            if (actualModelStateErrors == 0 ||
                (withNumberOfErrors != null && actualModelStateErrors != withNumberOfErrors))
            {
                throw new ModelErrorAssertionException(string.Format(
                                                           "When calling {0} action in {1} expected to have invalid model state{2}, {3}.",
                                                           actualShouldHaveTestBuilder.ActionName,
                                                           actualShouldHaveTestBuilder.Controller.GetName(),
                                                           withNumberOfErrors == null ? string.Empty : $" with {withNumberOfErrors} errors",
                                                           withNumberOfErrors == null ? "but was in fact valid" : $"but in fact contained {actualModelStateErrors}"));
            }

            return(actualShouldHaveTestBuilder.NewAndTestBuilder());
        }
Beispiel #13
0
        /// <summary>
        /// Tests whether the action has valid <see cref="Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary"/> with no errors.
        /// </summary>
        /// <typeparam name="TActionResult">Type of action result type.</typeparam>
        /// <param name="shouldHaveTestBuilder">Instance of <see cref="IShouldHaveTestBuilder{TActionResult}"/> type.</param>
        /// <returns>Test builder of <see cref="IAndTestBuilder{TActionResult}"/> type.</returns>
        public static IAndTestBuilder <TActionResult> ValidModelState <TActionResult>(this IShouldHaveTestBuilder <TActionResult> shouldHaveTestBuilder)
        {
            var actualShouldHaveTestBuilder = (ShouldHaveTestBuilder <TActionResult>)shouldHaveTestBuilder;

            actualShouldHaveTestBuilder.CheckValidModelState();

            return(actualShouldHaveTestBuilder.NewAndTestBuilder());
        }