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); } }
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); } }
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); } }