/// <summary>
 /// Initializes a new instance of the <see cref="ActionManagerBusinessService"/> class.
 /// </summary>
 /// <param name="actionManagerDataService"> reference to the ActionManagerDataService</param>
 /// <param name="loggingHelper">reference to the loggingHelper class</param>
 public ActionManagerBusinessService(IActionManagerDataService actionManagerDataService, ILoggingHelper loggingHelper)
 {
     // store injected dependancies.
     this.actionManagerDataService = actionManagerDataService;
     this.loggingHelper            = loggingHelper;
 }
        /// <summary>
        /// Tests setup for methods and data
        /// </summary>
        protected override void OnSetup()
        {
            mockLoggingHelper = CreateMock <ILoggingHelper>();

            // Data Setup
            userUnitInfoDataDTOList = new List <UserUnitInfoDataDTO>()
            {
                new UserUnitInfoDataDTO()
                {
                    UserName   = "******",
                    LocationId = new Guid("FFD741D9-5BBE-4D7F-9C3B-79D3588DC98A")
                },

                new UserUnitInfoDataDTO()
                {
                    UserName   = "******",
                    LocationId = new Guid("FFD741D9-5BBE-4D7F-9C3B-79D3588DC98A")
                }
            };

            List <AccessFunction> accessFunctionList = new List <AccessFunction>()
            {
                new AccessFunction()
                {
                    RoleName     = "manager",
                    LocationID   = new Guid("FFD741D9-5BBE-4D7F-9C3B-79D3588DC98A"),
                    UserName     = "******",
                    FunctionName = "PrintMap",
                    ActionName   = "Print",
                    UserId       = new Guid("5B9C7207-3D20-E711-9F8C-28D244AEF9ED"),
                },

                new AccessFunction()
                {
                    RoleName     = "collection hub",
                    LocationID   = new Guid("FFD741D9-5BBE-4D7F-9C3B-79D3588DC98A"),
                    UserName     = "******",
                    FunctionName = "accesslink",
                    ActionName   = "create",
                    UserId       = new Guid("5B9C7207-3D20-E711-9F8C-28D244AEF9ED"),
                },

                new AccessFunction()
                {
                    RoleName     = "delivery unit",
                    LocationID   = new Guid("FFD741D9-5BBE-4D7F-9C3B-79D3588DC98A"),
                    UserName     = "******",
                    FunctionName = "delivery point",
                    ActionName   = "create",
                    UserId       = new Guid("6B9C7207-3D20-E711-9F8C-28D244AEF9ED"),
                }
            };

            UserRoleLocation userRoleLocation = new UserRoleLocation()
            {
                LocationID = new Guid("FFD741D9-5BBE-4D7F-9C3B-79D3588DC98A"),
                UserID     = new Guid("5B9C7207-3D20-E711-9F8C-28D244AEF9ED")
            };

            User user = new User()
            {
                ID       = new Guid("5B9C7207-3D20-E711-9F8C-28D244AEF9ED"),
                UserName = "******"
            };

            LocationReferenceData locationReferenceData = new LocationReferenceData()
            {
                ReferenceDataID = new Guid("AFD741D9-5BBE-4D7F-9C3B-79D3588DC98A"),
                LocationID      = new Guid("FFD741D9-5BBE-4D7F-9C3B-79D3588DC98A")
            };

            ReferenceData referenceData = new ReferenceData()
            {
                ID = new Guid("AFD741D9-5BBE-4D7F-9C3B-79D3588DC98A"),
                ReferenceDataValue = "Type1"
            };

            PostalAddressIdentifier postalAddressIdentifier = new PostalAddressIdentifier()
            {
                ID = new Guid("FFD741D9-5BBE-4D7F-9C3B-79D3588DC98A"),
                IdentifierTypeGUID = new Guid("AFD741D9-5BBE-4D7F-9C3B-79D3588DC98A"),
                Name = "Unit1"
            };

            //Setup for UserRoleLocation
            mockRMDBContext = CreateMock <ActionDBContext>();
            var mockAsynEnumerable1 = new DbAsyncEnumerable <UserRoleLocation>(new List <UserRoleLocation>()
            {
                userRoleLocation
            });
            var mockUserRoleLocation = MockDbSet(new List <UserRoleLocation>()
            {
                userRoleLocation
            });

            mockUserRoleLocation.As <IQueryable>().Setup(mock => mock.Provider).Returns(mockAsynEnumerable1.AsQueryable().Provider);
            mockUserRoleLocation.As <IQueryable>().Setup(mock => mock.Expression).Returns(mockAsynEnumerable1.AsQueryable().Expression);
            mockUserRoleLocation.As <IQueryable>().Setup(mock => mock.ElementType).Returns(mockAsynEnumerable1.AsQueryable().ElementType);
            mockUserRoleLocation.As <IDbAsyncEnumerable>().Setup(mock => mock.GetAsyncEnumerator()).Returns(((IDbAsyncEnumerable <UserRoleLocation>)mockAsynEnumerable1).GetAsyncEnumerator());

            mockUserRoleLocation.Setup(x => x.AsNoTracking()).Returns(mockUserRoleLocation.Object);

            mockRMDBContext.Setup(x => x.Set <UserRoleLocation>()).Returns(mockUserRoleLocation.Object);
            mockRMDBContext.Setup(x => x.UserRoleLocations).Returns(mockUserRoleLocation.Object);
            mockUserRoleLocation.Setup(x => x.Include(It.IsAny <string>())).Returns(mockUserRoleLocation.Object);

            //Setup for User
            var mockAsynEnumerable2 = new DbAsyncEnumerable <User>(new List <User>()
            {
                user
            });
            var mockUser = MockDbSet(new List <User>()
            {
                user
            });

            mockUser.As <IQueryable>().Setup(mock => mock.Provider).Returns(mockAsynEnumerable2.AsQueryable().Provider);
            mockUser.As <IQueryable>().Setup(mock => mock.Expression).Returns(mockAsynEnumerable2.AsQueryable().Expression);
            mockUser.As <IQueryable>().Setup(mock => mock.ElementType).Returns(mockAsynEnumerable2.AsQueryable().ElementType);
            mockUser.As <IDbAsyncEnumerable>().Setup(mock => mock.GetAsyncEnumerator()).Returns(((IDbAsyncEnumerable <User>)mockAsynEnumerable2).GetAsyncEnumerator());

            mockRMDBContext.Setup(x => x.Set <User>()).Returns(mockUser.Object);
            mockRMDBContext.Setup(x => x.Users).Returns(mockUser.Object);
            mockUser.Setup(x => x.Include(It.IsAny <string>())).Returns(mockUser.Object);

            //Setup for LocationReferenceData
            var mockAsynEnumerable3 = new DbAsyncEnumerable <LocationReferenceData>(new List <LocationReferenceData>()
            {
                locationReferenceData
            });
            var mockLocationReferenceData = MockDbSet(new List <LocationReferenceData>()
            {
                locationReferenceData
            });

            mockLocationReferenceData.As <IQueryable>().Setup(mock => mock.Provider).Returns(mockAsynEnumerable3.AsQueryable().Provider);
            mockLocationReferenceData.As <IQueryable>().Setup(mock => mock.Expression).Returns(mockAsynEnumerable3.AsQueryable().Expression);
            mockLocationReferenceData.As <IQueryable>().Setup(mock => mock.ElementType).Returns(mockAsynEnumerable3.AsQueryable().ElementType);
            mockLocationReferenceData.As <IDbAsyncEnumerable>().Setup(mock => mock.GetAsyncEnumerator()).Returns(((IDbAsyncEnumerable <LocationReferenceData>)mockAsynEnumerable3).GetAsyncEnumerator());

            mockRMDBContext.Setup(x => x.Set <LocationReferenceData>()).Returns(mockLocationReferenceData.Object);
            mockRMDBContext.Setup(x => x.LocationReferenceDatas).Returns(mockLocationReferenceData.Object);
            mockLocationReferenceData.Setup(x => x.Include(It.IsAny <string>())).Returns(mockLocationReferenceData.Object);

            //Setup for LocationReferenceData
            var mockAsynEnumerable4 = new DbAsyncEnumerable <ReferenceData>(new List <ReferenceData>()
            {
                referenceData
            });
            var mockReferenceData = MockDbSet(new List <ReferenceData>()
            {
                referenceData
            });

            mockReferenceData.As <IQueryable>().Setup(mock => mock.Provider).Returns(mockAsynEnumerable4.AsQueryable().Provider);
            mockReferenceData.As <IQueryable>().Setup(mock => mock.Expression).Returns(mockAsynEnumerable4.AsQueryable().Expression);
            mockReferenceData.As <IQueryable>().Setup(mock => mock.ElementType).Returns(mockAsynEnumerable4.AsQueryable().ElementType);
            mockReferenceData.As <IDbAsyncEnumerable>().Setup(mock => mock.GetAsyncEnumerator()).Returns(((IDbAsyncEnumerable <ReferenceData>)mockAsynEnumerable4).GetAsyncEnumerator());

            mockRMDBContext.Setup(x => x.Set <ReferenceData>()).Returns(mockReferenceData.Object);
            mockRMDBContext.Setup(x => x.ReferenceDatas).Returns(mockReferenceData.Object);
            mockReferenceData.Setup(x => x.Include(It.IsAny <string>())).Returns(mockReferenceData.Object);

            //Setup for PostalAddressIdentifier
            var mockAsynEnumerable5 = new DbAsyncEnumerable <PostalAddressIdentifier>(new List <PostalAddressIdentifier>()
            {
                postalAddressIdentifier
            });
            var mockPostalAddressIdentifier = MockDbSet(new List <PostalAddressIdentifier>()
            {
                postalAddressIdentifier
            });

            mockPostalAddressIdentifier.As <IQueryable>().Setup(mock => mock.Provider).Returns(mockAsynEnumerable5.AsQueryable().Provider);
            mockPostalAddressIdentifier.As <IQueryable>().Setup(mock => mock.Expression).Returns(mockAsynEnumerable5.AsQueryable().Expression);
            mockPostalAddressIdentifier.As <IQueryable>().Setup(mock => mock.ElementType).Returns(mockAsynEnumerable5.AsQueryable().ElementType);
            mockPostalAddressIdentifier.As <IDbAsyncEnumerable>().Setup(mock => mock.GetAsyncEnumerator()).Returns(((IDbAsyncEnumerable <PostalAddressIdentifier>)mockAsynEnumerable5).GetAsyncEnumerator());

            mockRMDBContext.Setup(x => x.Set <PostalAddressIdentifier>()).Returns(mockPostalAddressIdentifier.Object);
            mockRMDBContext.Setup(x => x.PostalAddressIdentifiers).Returns(mockPostalAddressIdentifier.Object);
            mockPostalAddressIdentifier.Setup(x => x.Include(It.IsAny <string>())).Returns(mockPostalAddressIdentifier.Object);

            //Setup for AccessFunction
            var mockAsynEnumerable6 = new DbAsyncEnumerable <AccessFunction>(accessFunctionList);
            var mockAccessFunction  = MockDbSet(accessFunctionList);

            mockAccessFunction.As <IQueryable>().Setup(mock => mock.Provider).Returns(mockAsynEnumerable6.AsQueryable().Provider);
            mockAccessFunction.As <IQueryable>().Setup(mock => mock.Expression).Returns(mockAsynEnumerable6.AsQueryable().Expression);
            mockAccessFunction.As <IQueryable>().Setup(mock => mock.ElementType).Returns(mockAsynEnumerable6.AsQueryable().ElementType);
            mockAccessFunction.As <IDbAsyncEnumerable>().Setup(mock => mock.GetAsyncEnumerator()).Returns(((IDbAsyncEnumerable <AccessFunction>)mockAsynEnumerable6).GetAsyncEnumerator());

            mockAccessFunction.Setup(x => x.AsNoTracking()).Returns(mockAccessFunction.Object);

            mockRMDBContext.Setup(x => x.Set <AccessFunction>()).Returns(mockAccessFunction.Object);
            mockRMDBContext.Setup(x => x.AccessFunctions).Returns(mockAccessFunction.Object);
            mockAccessFunction.Setup(x => x.Include(It.IsAny <string>())).Returns(mockAccessFunction.Object);

            //Setup for Logging
            var rmTraceManagerMock = new Mock <IRMTraceManager>();

            rmTraceManagerMock.Setup(x => x.StartTrace(It.IsAny <string>(), It.IsAny <Guid>()));
            mockLoggingHelper.Setup(x => x.RMTraceManager).Returns(rmTraceManagerMock.Object);

            mockDatabaseFactory = CreateMock <IDatabaseFactory <ActionDBContext> >();
            mockDatabaseFactory.Setup(x => x.Get()).Returns(mockRMDBContext.Object);
            testCandidate = new ActionManagerDataService(mockDatabaseFactory.Object, mockLoggingHelper.Object);
        }