public async Task <PagedItems <Organisation> > GetOrganisations(OrganisationQueryOptions queryOptions)
        {
            var query = from organisation in ScopeQuery.GetOrganisationEntityQuery(_context, queryOptions.Scope)
                        select new Organisation()
            {
                Id             = organisation.Id,
                Name           = organisation.Name,
                ApplicationIds = organisation.ApplicationIds,
                Config         = organisation.Config,
            };

            var pagedItems = new PagedItems <Organisation>();

            if (queryOptions.BranchId.HasValue)
            {
                var branch = await _context.Branch.FirstOrDefaultAsync(b => b.Id == queryOptions.BranchId.Value);

                if (branch != null)
                {
                    query = query.Where(o => o.Id == branch.OrganisationId);
                }
            }

            //Get total items
            pagedItems.TotalItems = await query.CountAsync();

            //Ordering
            query = query.OrderBy(queryOptions.SortOptions.Column, queryOptions.SortOptions.Direction);

            //Paging
            pagedItems.Items = await query.TakePage(queryOptions.PageOptions.Number, queryOptions.PageOptions.Size).ToListAsync();

            return(pagedItems);
        }
Example #2
0
        public async Task <IActionResult> Index(string filters = null)
        {
            var scope = AuthenticationService.GetScope(User, User.IsSuperAdmin());

            var queryOptions = new OrganisationQueryOptions(scope, filters);
            var pagedItems   = await OrganisationService.GetOrganisations(queryOptions);

            return(Ok(pagedItems));
        }
        public async Task Index()
        {
            var organisation = new Organisation()
            {
                Id   = Guid.NewGuid(),
                Name = "organisation_1"
            };

            var items = new PagedItems <Organisation>()
            {
                TotalItems = 1,
                Items      = new List <Organisation>()
                {
                    organisation
                }
            };

            var service     = new Mock <IOrganisationService>();
            var authService = TestHelper.MockAuthenticationService(Scope.Branch);

            OrganisationQueryOptions queryOptions = null;

            service.Setup(c => c.GetOrganisations(It.IsAny <OrganisationQueryOptions>()))
            .Callback((OrganisationQueryOptions options) => queryOptions = options)
            .ReturnsAsync(items);

            var controller = new OrganisationsController(authService.Object, service.Object, null);

            controller.ControllerContext = TestHelper.GetControllerContext(new ClaimsPrincipal());

            var result = await controller.Index();

            Assert.Equal(Scope.Branch, queryOptions.Scope.Scope);
            Assert.Equal("Name", queryOptions.SortOptions.Column);
            Assert.Equal(SortDirection.Ascending, queryOptions.SortOptions.Direction);
            Assert.Equal(0, queryOptions.PageOptions.Size);
            Assert.Equal(0, queryOptions.PageOptions.Number);

            var okResult    = Assert.IsType <OkObjectResult>(result);
            var returnValue = Assert.IsType <PagedItems <Organisation> >(okResult.Value);

            Assert.Same(items, returnValue);
        }
        public async Task GetOrganisations_None()
        {
            var options = TestHelper.GetDbContext("GetOrganisations_None");

            //Given
            //Nothing

            using (var context = new DataContext(options))
            {
                var service = new OrganisationService(context);

                //When
                var scope        = TestHelper.GetScopeOptions(Guid.NewGuid());
                var queryOptions = new OrganisationQueryOptions(scope);
                var actual       = await service.GetOrganisations(queryOptions);

                //Then
                Assert.Equal(0, actual.TotalItems);
                Assert.Empty(actual.Items);
            }
        }
        public async Task GetOrganisations_Sort()
        {
            var options = TestHelper.GetDbContext("GetOrganisations_Sort");

            //Given
            var org1 = new OrganisationEntity {
                Id = Guid.NewGuid(), Name = "A Org 1", ApplicationIds = new List <Guid>()
                {
                    Application.CLIENT_ID
                }
            };
            var org2 = new OrganisationEntity {
                Id = Guid.NewGuid(), Name = "B Org 2", ApplicationIds = new List <Guid>()
                {
                    Application.CLIENT_ID, Application.DIRECTORY_ID
                }
            };
            var org3 = new OrganisationEntity {
                Id = Guid.NewGuid(), Name = "C Org 3", ApplicationIds = new List <Guid>()
                {
                    Application.CLIENT_ID
                }
            };
            var org4 = new OrganisationEntity {
                Id = Guid.NewGuid(), Name = "D Org 4", ApplicationIds = new List <Guid>()
                {
                    Application.CLIENT_ID, Application.COMPLIANCE_ID
                }
            };
            var org5 = new OrganisationEntity {
                Id = Guid.NewGuid(), Name = "E Org 5", ApplicationIds = new List <Guid>()
                {
                    Application.CLIENT_ID
                }
            };
            var org6 = new OrganisationEntity {
                Id = Guid.NewGuid(), Name = "F Org 6", ApplicationIds = new List <Guid>()
                {
                    Application.CLIENT_ID
                }
            };

            using (var context = new DataContext(options))
            {
                //Jumbled order
                context.Organisation.Add(org6);
                context.Organisation.Add(org1);
                context.Organisation.Add(org2);
                context.Organisation.Add(org4);
                context.Organisation.Add(org5);
                context.Organisation.Add(org3);

                context.SaveChanges();
            }

            using (var context = new DataContext(options))
            {
                var service = new OrganisationService(context);

                //When
                var scope = TestHelper.GetScopeOptions(Guid.NewGuid());
                scope.IgnoreScope = true;
                var queryOptions = new OrganisationQueryOptions(scope);
                var actual       = await service.GetOrganisations(queryOptions);

                //Then
                Assert.Equal(6, actual.TotalItems);

                var organisations = actual.Items.ToArray();

                Assert.Equal(6, organisations.Count());

                var actual1 = organisations[0];
                Assert.Equal(org1.Id, actual1.Id);
                Assert.Equal(org1.Name, actual1.Name);
                Assert.Equal(org1.ApplicationIds, actual1.ApplicationIds);

                var actual2 = organisations[1];
                Assert.Equal(org2.Id, actual2.Id);
                Assert.Equal(org2.Name, actual2.Name);
                Assert.Equal(org2.ApplicationIds, actual2.ApplicationIds);

                var actual6 = organisations[5];
                Assert.Equal(org6.Id, actual6.Id);
                Assert.Equal(org6.Name, actual6.Name);
                Assert.Equal(org6.ApplicationIds, actual6.ApplicationIds);

                //Scope check
                scope        = TestHelper.GetScopeOptions(org6.Id);
                queryOptions = new OrganisationQueryOptions(scope);
                actual       = await service.GetOrganisations(queryOptions);

                Assert.Equal(1, actual.TotalItems);

                organisations = actual.Items.ToArray();

                actual1 = organisations[0];
                Assert.Equal(org6.Id, actual1.Id);
                Assert.Equal(org6.Name, actual1.Name);
                Assert.Equal(org6.ApplicationIds, actual1.ApplicationIds);
            }
        }