public void Setup()
            {
                EFContextMock            = new Mock <EFContext>();
                DatabaseFacadeMock       = new Mock <DatabaseFacade>(EFContextMock.Object);
                DbContextTransactionMock = new Mock <IDbContextTransaction>();

                DatabaseFacadeMock.Setup(d => d.CurrentTransaction).Returns(DbContextTransactionMock.Object);
                EFContextMock.Setup(ef => ef.Database).Returns(DatabaseFacadeMock.Object);
                EFContextMock.Setup(ef => ef.SaveChangesAsync(It.IsAny <CancellationToken>())).ReturnsAsync(1);

                _appSettingsMock  = new Mock <IOptions <AppSettings> >();
                _eventServiceMock = new Mock <IEventService>();
                _appSettingsMock.SetupGet(e => e.Value).Returns(new AppSettings());

                User = new UserIdentity
                {
                    Email    = "*****@*****.**",
                    AgencyId = Guid.NewGuid(),
                    Id       = Guid.NewGuid(),
                    BuType   = BuType.Pg
                };

                CostStatusResolver   = new Mock <ICostStatusResolver>();
                _costStatusResolvers = new List <Lazy <ICostStatusResolver, PluginMetadata> >
                {
                    new Lazy <ICostStatusResolver, PluginMetadata>(() => CostStatusResolver.Object,
                                                                   new PluginMetadata {
                        BuType = User.BuType
                    })
                };

                var costUser = new CostUser
                {
                    Id       = User.Id,
                    Email    = User.Email,
                    ParentId = User.AgencyId
                };

                _costUserMock = EFContextMock.MockAsyncQueryable(new List <CostUser> {
                    costUser
                }.AsQueryable(), d => d.CostUser);
                _costUserMock.Setup(cu => cu.FindAsync(User.Id)).ReturnsAsync(costUser);

                CostStatusService = new CostStatusService(
                    EFContextMock.Object,
                    _eventServiceMock.Object,
                    _costStatusResolvers
                    );
            }
            public async Task UpdateCostStatus(TestParam param)
            {
                // Arrange
                var cost = MockCost();
                var oldLatestRevision = cost.LatestCostStageRevision;

                // Act
                var response = await CostStatusService.UpdateCostStageRevisionStatus(cost.Id, param.Status, BuType.Pg);

                // Assert
                response.Should().BeTrue();
                cost.Status.Should().Be(param.ExpectedCostStatus);
                cost.LatestCostStageRevision.Status.Should().Be(param.ExpectedLatestRevisionStatus);
                oldLatestRevision.Status.ShouldBeEquivalentTo(param.OldLatestRevisionStatus);
            }
        public void Setup()
        {
            var costStatusResolverMock = new Mock <ICostStatusResolver>();

            IEnumerable <Lazy <ICostStatusResolver, PluginMetadata> > metadata = new List <Lazy <ICostStatusResolver, PluginMetadata> >
            {
                new Lazy <ICostStatusResolver, PluginMetadata>(() => costStatusResolverMock.Object, new PluginMetadata {
                    BuType = BuType.Pg
                })
            };

            _costStatusService = new CostStatusService(_efContext, new Mock <IEventService>().Object, metadata);

            costStatusResolverMock.Setup(s => s.GetNextStatus(It.IsAny <Guid>(), It.IsAny <CostAction>())).ReturnsAsync(CostStageRevisionStatus.Recalled);
        }