protected async Task <HttpResponseMessage> CreateAndAssertStatusAsync(RegionMembershipCreate create, HttpStatusCode httpStatusCode)
        {
            var response = await GetCreateHttpResponseMessageAsync(create);

            response.AssertStatusCode(httpStatusCode);
            return(response);
        }
Example #2
0
        public static async Task <HttpResponseMessage> CreateRegionMembershipAsync(
            this HttpClient client,
            RegionMembershipCreate create)
        {
            var content = new StringContent(JsonConvert.SerializeObject(create), Encoding.UTF8, "application/json");

            return(await client.PostAsync("/regionmemberships", content));
        }
        protected async Task <RegionMembership> CreateAndAssertCreatedAsync(RegionMembershipCreate create)
        {
            var response = await CreateAndAssertStatusAsync(create, HttpStatusCode.Created);

            var json = await response.Content.ReadAsStringAsync();

            return(JsonConvert.DeserializeObject <RegionMembership>(json));
        }
        public async Task <IActionResult> InvokeAsync(ActionContext context, RegionMembershipCreate create)
        {
            var region = await _regionCache.GetRegionAsync(create.RegionId);

            if (region == null)
            {
                context.ModelState.AddModelError(nameof(RegionMembershipCreate.RegionId), "Region not found");
                return(new BadRequestObjectResult(context.ModelState));
            }

            var canCreate = await _authorizationService.CanCreateMembershipAsync(region, create.RegionRoleId);

            if (!canCreate)
            {
                return(new UnauthorizedResult());
            }

            var membershipExists = await _coreDbContext.RegionMemberships
                                   .Where(r => r.RegionId == region.Id)
                                   .Where(r => r.UserEmail == create.UserEmail)
                                   .AnyAsync();

            if (membershipExists)
            {
                context.ModelState.AddModelError(
                    $"{nameof(RegionMembershipCreate.RegionId)}+{nameof(RegionMembershipCreate.UserEmail)}",
                    "User already has a membership for this region");
                return(new BadRequestObjectResult(context.ModelState));
            }

            var regionRoles = await _coreDbContext.RegionRoles.ToListAsync();

            if (!regionRoles.Any(rr => rr.Id == create.RegionRoleId))
            {
                context.ModelState.AddModelError(
                    nameof(RegionMembershipCreate.RegionRoleId),
                    "Region role does not exist");
                return(new BadRequestObjectResult(context.ModelState));
            }

            var result = await _coreDbContext.RegionMemberships.AddAsync(new RegionMembershipEntity()
            {
                UserEmail    = create.UserEmail,
                RegionId     = region.Id,
                RegionRoleId = create.RegionRoleId
            });

            await _coreDbContext.SaveChangesAsync();

            return(new CreatedResult(
                       $"regionmemberships/{result.Entity.Id}",
                       new RegionMembership()
            {
                Id = result.Entity.Id,
                UserEmail = result.Entity.UserEmail,
                RegionId = create.RegionId,
                RegionRoleId = create.RegionRoleId,
                Permissions = new RegionMembershipAuthorization()
                {
                    CanDelete = _authorizationService.CanDeleteMembershipsAsync(
                        region,
                        create.RegionRoleId,
                        result.Entity.UserEmail).Result
                }
            }));
        }
 public Task <IActionResult> Create([FromBody] RegionMembershipCreate create) =>
 _createRegionMembershipCommand.Value.InvokeAsync(ControllerContext, create);
        protected async Task <Dictionary <string, IEnumerable <string> > > CreateAndAssertBadRequestAsync(RegionMembershipCreate create)
        {
            var response = await CreateAndAssertStatusAsync(create, HttpStatusCode.BadRequest);

            var json = await response.Content.ReadAsStringAsync();

            return(JsonConvert.DeserializeObject <Dictionary <string, IEnumerable <string> > >(json));
        }
 protected Task <HttpResponseMessage> GetCreateHttpResponseMessageAsync(RegionMembershipCreate create)
 => Client.CreateRegionMembershipAsync(create);
 protected Task CreateAndAssertUnauthorizedAsync(RegionMembershipCreate create)
 => CreateAndAssertStatusAsync(create, HttpStatusCode.Unauthorized);
        public async Task AssertInvalidMembershipAsync(string expectedInvalidProperty, RegionMembershipCreate create)
        {
            var badRequestResult = await CreateAndAssertBadRequestAsync(create);

            Assert.Contains(badRequestResult, kvp => kvp.Key == expectedInvalidProperty);
        }