private void AssertSecurityPoliciesChecked <T, TEntity>(
            Func <PreReleaseSummaryService, Task <Either <ActionResult, T> > > protectedAction, TEntity protectedEntity,
            params SecurityPolicies[] policies)
            where TEntity : class
        {
            var(persistenceHelper, userService) = Mocks();

            var service = new PreReleaseSummaryService(persistenceHelper.Object, userService.Object);

            PermissionTestUtil.AssertSecurityPoliciesChecked(protectedAction, protectedEntity, userService, service,
                                                             policies);
        }
        public async Task GetPreReleaseSummaryViewModelAsync()
        {
            var contact = new Contact
            {
                Id        = Guid.NewGuid(),
                TeamEmail = "*****@*****.**"
            };

            var publication = new Publication
            {
                Id        = Guid.NewGuid(),
                Slug      = "prerelease-publication",
                Title     = "PreRelease Publication",
                ContactId = contact.Id
            };

            var release = new Release
            {
                Id                 = Guid.NewGuid(),
                ReleaseName        = "2020",
                Slug               = "2020",
                TimePeriodCoverage = TimeIdentifier.AutumnSpringTerm,
                PublicationId      = publication.Id
            };

            await using (var context = InMemoryApplicationDbContext("PreReleaseSummaryViewModel"))
            {
                context.Add(contact);
                context.Add(publication);
                context.Add(release);
                await context.SaveChangesAsync();
            }

            await using (var context = InMemoryApplicationDbContext("PreReleaseSummaryViewModel"))
            {
                var preReleaseSummaryService = new PreReleaseSummaryService(
                    new PersistenceHelper <ContentDbContext>(context),
                    MockUtils.AlwaysTrueUserService().Object);

                var viewModel = (await preReleaseSummaryService.GetPreReleaseSummaryViewModelAsync(release.Id)).Right;
                Assert.Equal(contact.TeamEmail, viewModel.ContactEmail);
                Assert.Equal(publication.Slug, viewModel.PublicationSlug);
                Assert.Equal(publication.Title, viewModel.PublicationTitle);
                Assert.Equal(release.Title, viewModel.ReleaseTitle);
                Assert.Equal(release.Slug, viewModel.ReleaseSlug);
            }
        }