/// <summary>
        /// Creates or updates client group details in store
        /// </summary>
        /// <param name="clientGroup">Updated Client Group details</param>
        /// <returns>A task that represents the asynchronous update operation.</returns>
        public async Task UpdateClientGroupAsync(ConfigurationClientGroup clientGroup)
        {
            var groups = await GetClientGroupsAsync();

            var clientLookup = groups.ToDictionary(k => k.GroupId);

            clientLookup[clientGroup.GroupId] = clientGroup;
            await SaveGroups(clientLookup.Values);
        }
        public async Task Get_Group_ReturnsNotFoundIfGroupNotFound()
        {
            var group = new ConfigurationClientGroup {
                GroupId = groupId
            };

            configurationClientService.Setup(s => s.GetClientGroupOrDefault(groupId))
            .ReturnsAsync(() => null);
            var context = TestHttpContextBuilder.CreateForPath($"/{groupId}")
                          .WithClaims(readClaim).TestContext;

            await target.Handle(context, options);

            factory.Verify(f => f.BuildNotFoundStatusResponse(context));
        }
        public async Task Post_Returns401IfUserNotAuthenticated()
        {
            var group = new ConfigurationClientGroup {
                GroupId = groupId
            };
            var commandResult = CommandResult.Success();
            var context       = TestHttpContextBuilder.CreateForPath("/")
                                .WithPost()
                                .WithJsonBody(group)
                                .TestContext;
            await target.Handle(context, options);

            commandBus.Verify(f => f.SubmitAsync(It.IsAny <CreateUpdateClientGroupCommand>()), Times.Never);

            factory.Verify(f => f.BuildStatusResponse(context, 401));
        }
        public async Task Post_CallsCommandBus()
        {
            var group = new ConfigurationClientGroup {
                GroupId = groupId
            };

            var context = TestHttpContextBuilder.CreateForPath("/")
                          .WithClaims(writeClaim)
                          .WithPost()
                          .WithJsonBody(group)
                          .TestContext;

            await target.Handle(context, options);

            commandBus.Verify(f => f.SubmitAsync(It.Is <CreateUpdateClientGroupCommand>(c => c.ClientGroup.GroupId == group.GroupId)));
        }
        public async Task Post_BuildsResponseFromCommandResult()
        {
            var group = new ConfigurationClientGroup {
                GroupId = groupId
            };
            var commandResult = CommandResult.Success();
            var context       = TestHttpContextBuilder.CreateForPath("/")
                                .WithClaims(writeClaim)
                                .WithPost()
                                .WithJsonBody(group)
                                .TestContext;

            commandBus.Setup(f => f.SubmitAsync(It.IsAny <CreateUpdateClientGroupCommand>()))
            .ReturnsAsync(() => commandResult);

            await target.Handle(context, options);

            factory.Verify(f => f.BuildResponseFromCommandResult(context, commandResult));
        }
 /// <summary>
 /// Creates or updates client group details in store
 /// </summary>
 /// <param name="clientGroup">Updated Client Group details</param>
 /// <returns>A task that represents the asynchronous update operation.</returns>
 public Task UpdateClientGroupAsync(ConfigurationClientGroup clientGroup)
 {
     clientGroupStore[clientGroup.GroupId] = clientGroup;
     return(Task.FromResult(true));
 }
 public CreateUpdateClientGroupCommand(ConfigurationClientGroup clientGroup)
 {
     ClientGroup = clientGroup;
 }