public async Task CreateGroup_WithValidPlayers()
        {
            var mayur = await Login();

            var matt = await Login("matt", "matt");

            using (var client = new HttpClient {
                BaseAddress = new Uri(ServerUrl)
            })
            {
                client.AcceptJson().AddSessionHeader(mayur.Id);

                var currentSeed = Guid.NewGuid();
                var form        = new GroupFrom
                {
                    Name    = $"Test.{currentSeed}",
                    Type    = GroupVisibility.Invisible,
                    Players = new List <Guid> {
                        mayur.Player.Id, matt.Player.Id
                    }
                };

                // Create Group with valid Players
                var groupResponse = await client.PostAsJsonAsync($"/api/groups", form);

                Assert.Equal(HttpStatusCode.Created, groupResponse.StatusCode);

                var group = await groupResponse.Content.ReadAsJsonAsync <Group>();

                Assert.IsType(typeof(Group), group);
                Assert.Equal(GroupVisibility.Invisible, group.Type);
                Assert.Equal(mayur.Player.Id, group.AdminId);
                Assert.Equal(2, group.Players.Count);
            }
        }
        public async Task CreateGroup_WithInvalidPlayers()
        {
            var session = await Login();

            using (var client = new HttpClient {
                BaseAddress = new Uri(ServerUrl)
            })
            {
                client.AcceptJson().AddSessionHeader(session.Id);

                var currentSeed   = Guid.NewGuid();
                var invalidPlayer = Guid.NewGuid();
                var form          = new GroupFrom
                {
                    Name    = $"Test.{currentSeed}",
                    Players = new List <Guid> {
                        session.Player.Id, invalidPlayer
                    }
                };

                // Create Group with Invalid Players
                var groupResponse = await client.PostAsJsonAsync($"/api/groups", form);

                Assert.Equal(HttpStatusCode.NotFound, groupResponse.StatusCode);

                var content = await groupResponse.Content.ReadAsJsonAsync <ApiError>();

                Assert.Equal($"No Player with Id {invalidPlayer} exists.", content.Error);
            }
        }
        public async Task CreateGroup_WithNoPlayer()
        {
            var session = await Login();

            using (var client = new HttpClient {
                BaseAddress = new Uri(ServerUrl)
            })
            {
                client.AcceptJson().AddSessionHeader(session.Id);

                var currentSeed = Guid.NewGuid();
                var form        = new GroupFrom {
                    Name = $"Test.{currentSeed}", Players = new List <Guid>()
                };

                // Create Group with No Player
                var groupResponse = await client.PostAsJsonAsync($"/api/groups", form);

                Assert.Equal(HttpStatusCode.BadRequest, groupResponse.StatusCode);

                var content = await groupResponse.Content.ReadAsJsonAsync <ApiError>();

                Assert.Equal("Group requires minimum 1 Player.", content.Error);
            }
        }
Exemplo n.º 4
0
        public async Task <IActionResult> CreateGroup([FromBody] GroupFrom form)
        {
            if (!ModelState.IsValid)
            {
                return(HttpResponseHelper.BadRequest(ModelState));
            }

            if (string.IsNullOrWhiteSpace(form.Name))
            {
                return(HttpResponseHelper.BadRequest("Group name is required."));
            }

            if (await Group.ExistsUsername(_context, form.Name))
            {
                return(HttpResponseHelper.BadRequest("Group with this name already exists."));
            }

            var group = new Group {
                Username = form.Name, Type = form.Type, AdminId = session.Player.Id
            };

            if (form.Players == null || form.Players.Count < 1)
            {
                return(HttpResponseHelper.BadRequest("Group requires minimum 1 Player."));
            }

            IList <Player> players = new List <Player>();

            foreach (var playerId in form.Players)
            {
                var player = await _context.Players.FindAsync(playerId);

                if (player == null)
                {
                    return(HttpResponseHelper.NotFound($"No Player with Id {playerId} exists."));
                }

                players.Add(player);
            }

            group.Players = players;

            _context.Groups.Add(group);

            var error = await SaveChangesAsync();

            if (error != null)
            {
                return(error);
            }

            return(CreatedAtRoute("GetGroupInfo", new { id = group.Id }, group));
        }
        public async Task UpdateGroupPlayer_AddNewPlayer()
        {
            var mayur = await Login();

            var matt = await Login("matt", "matt");

            using (var client = new HttpClient {
                BaseAddress = new Uri(ServerUrl)
            })
            {
                client.AcceptJson().AddSessionHeader(mayur.Id);

                var currentSeed = Guid.NewGuid();
                var form        = new GroupFrom
                {
                    Name    = $"Test.{currentSeed}",
                    Type    = GroupVisibility.Invisible,
                    Players = new List <Guid> {
                        mayur.Player.Id, matt.Player.Id
                    }
                };

                // Create Group with valid Players
                var groupResponse = await client.PostAsJsonAsync($"/api/groups", form);

                Assert.Equal(HttpStatusCode.Created, groupResponse.StatusCode);

                var group = await groupResponse.Content.ReadAsJsonAsync <Group>();

                Assert.IsType(typeof(Group), group);
                Assert.Equal(mayur.Player.Id, group.AdminId);

                var updateForm = new GroupFrom();

                // Update Group Players with Add New Player
                var jack = await Login("jack", "jack");

                groupResponse =
                    await client.PutAsJsonAsync($"/api/groups/{group.Id}/players/{jack.Player.Id}/add", updateForm);

                Assert.Equal(HttpStatusCode.OK, groupResponse.StatusCode);

                var response = await groupResponse.Content.ReadAsJsonAsync <Group>();

                Assert.IsType(typeof(Group), response);
                Assert.Equal(group.Id, response.Id);
                Assert.Equal($"Test.{currentSeed}", response.Username);
                Assert.Equal(3, response.Players.Count);
            }
        }
        public async Task UpdateGroupPlayer_RemoveNonExistingPlayer()
        {
            var mayur = await Login();

            var matt = await Login("matt", "matt");

            using (var client = new HttpClient {
                BaseAddress = new Uri(ServerUrl)
            })
            {
                client.AcceptJson().AddSessionHeader(mayur.Id);

                var currentSeed = Guid.NewGuid();
                var form        = new GroupFrom
                {
                    Name    = $"Test.{currentSeed}",
                    Type    = GroupVisibility.Invisible,
                    Players = new List <Guid> {
                        mayur.Player.Id, matt.Player.Id
                    }
                };

                // Create Group with valid Players
                var groupResponse = await client.PostAsJsonAsync($"/api/groups", form);

                Assert.Equal(HttpStatusCode.Created, groupResponse.StatusCode);

                var group = await groupResponse.Content.ReadAsJsonAsync <Group>();

                Assert.IsType(typeof(Group), group);
                Assert.Equal(mayur.Player.Id, group.AdminId);

                var updateForm = new GroupFrom();

                // Update Group Players with Remove Non-existing Player
                var jack = await Login("jack", "jack");

                groupResponse =
                    await client.PutAsJsonAsync($"/api/groups/{group.Id}/players/{jack.Player.Id}/remove", updateForm);

                Assert.Equal(HttpStatusCode.BadRequest, groupResponse.StatusCode);

                var content = await groupResponse.Content.ReadAsJsonAsync <ApiError>();

                Assert.Equal($"No Player with Id {jack.Player.Id} exists in the Group.", content.Error);
            }
        }
        public async Task UpdateGroup_WithInvalidName()
        {
            var mayur = await Login();

            var matt = await Login("matt", "matt");

            using (var client = new HttpClient {
                BaseAddress = new Uri(ServerUrl)
            })
            {
                client.AcceptJson().AddSessionHeader(mayur.Id);

                var currentSeed = Guid.NewGuid();
                var form        = new GroupFrom
                {
                    Name    = $"Test.{currentSeed}",
                    Type    = GroupVisibility.Invisible,
                    Players = new List <Guid> {
                        mayur.Player.Id, matt.Player.Id
                    }
                };

                // Create Group with valid Players
                var groupResponse = await client.PostAsJsonAsync($"/api/groups", form);

                Assert.Equal(HttpStatusCode.Created, groupResponse.StatusCode);

                var group = await groupResponse.Content.ReadAsJsonAsync <Group>();

                Assert.IsType(typeof(Group), group);
                Assert.Equal(mayur.Player.Id, group.AdminId);

                var updateForm = new GroupFrom {
                    Name = ""
                };

                // Update Group with empty Name
                groupResponse = await client.PutAsJsonAsync($"/api/groups/{group.Id}", updateForm);

                Assert.Equal(HttpStatusCode.BadRequest, groupResponse.StatusCode);

                var content = await groupResponse.Content.ReadAsJsonAsync <ApiError>();

                Assert.Equal("Group name is required.", content.Error);
            }
        }
Exemplo n.º 8
0
        public async Task <IActionResult> UpdateGroup([FromRoute] Guid id, [FromBody] GroupFrom form)
        {
            if (!ModelState.IsValid)
            {
                return(HttpResponseHelper.BadRequest(ModelState));
            }

            var group = await _context.Groups.Where(g => g.Id.Equals(id)).Include(g => g.Players).FirstOrDefaultAsync();

            if (group == null)
            {
                return(HttpResponseHelper.NotFound("No Group found."));
            }

            if (string.IsNullOrWhiteSpace(form.Name))
            {
                return(HttpResponseHelper.BadRequest("Group name is required."));
            }

            _context.Entry(group).State = EntityState.Modified;

            if (form.Name != group.Username)
            {
                if (await Group.ExistsUsername(_context, form.Name))
                {
                    return(HttpResponseHelper.BadRequest("Group with this name already exists."));
                }

                group.Username = form.Name;
            }

            if (form.Type != group.Type)
            {
                group.Type = form.Type;
            }

            var error = await SaveChangesAsync();

            if (error != null)
            {
                return(error);
            }

            return(Ok(group));
        }
        public async Task CreateGroup_WithoutName()
        {
            var session = await Login();

            using (var client = new HttpClient {
                BaseAddress = new Uri(ServerUrl)
            })
            {
                client.AcceptJson().AddSessionHeader(session.Id);

                var form = new GroupFrom();

                // Create Group without Name
                var groupResponse = await client.PostAsJsonAsync($"/api/groups", form);

                Assert.Equal(HttpStatusCode.BadRequest, groupResponse.StatusCode);

                var content = await groupResponse.Content.ReadAsJsonAsync <ApiError>();

                Assert.Equal("Group name is required.", content.Error);
            }
        }
        public async Task UpdateGroupPlayer_WithInvalidGroup()
        {
            var session = await Login();

            using (var client = new HttpClient {
                BaseAddress = new Uri(ServerUrl)
            })
            {
                client.AcceptJson().AddSessionHeader(session.Id);

                var form = new GroupFrom();

                // Update Group Players with Invalid Group Id
                var invalidId     = Guid.NewGuid();
                var groupResponse = await client.PutAsJsonAsync($"/api/groups/{invalidId}/players/{invalidId}", form);

                Assert.Equal(HttpStatusCode.NotFound, groupResponse.StatusCode);

                var content = await groupResponse.Content.ReadAsJsonAsync <ApiError>();

                Assert.Equal("No Group found.", content.Error);
            }
        }