public async Task Create_InvalidInput_ReturnNull(string characterName, CrewRoles crewRole, int movieID, int personID) { #region Arrange var dbContext = new ApplicationDbContext(_dbContextOptions); await dbContext.Database.EnsureDeletedAsync(); await CreateMovieAndPerson(dbContext); var newCrewMember = new AdminCrewMemberModel { ID = 1, CharacterName = characterName, Role = crewRole, MovieID = movieID, PersonID = personID }; var appCrewMember = new CrewMember(dbContext); #endregion #region Act var actualCrewMember = await appCrewMember.Create(newCrewMember); #endregion #region Assert Assert.Null(actualCrewMember); #endregion }
public async Task Create_ValidInput_ReturnsCorrectData(string characterName, CrewRoles crewRole, int movieID, int personID) { #region Arrange var dbContext = new ApplicationDbContext(_dbContextOptions); await dbContext.Database.EnsureDeletedAsync(); var data = await CreateMovieAndPerson(dbContext); var movie = data[0] as Domain.Movie; var person = data[1] as Domain.Person; var newCrewMember = new AdminCrewMemberModel { CharacterName = characterName, Role = crewRole, MovieID = movieID, PersonID = personID }; var expectedCrewMember = new CrewMemberModel { ID = 1, CharacterName = characterName, Role = crewRole.ToString(), Movie = new MovieModel { ID = movie.ID, Name = movie.Name }, Person = new PersonModel { ID = person.ID, FirstName = person.FirstName, LastName = person.LastName } }; var appCrewMember = new CrewMember(dbContext); #endregion #region Act var actualCrewMember = await appCrewMember.Create(newCrewMember); #endregion #region Assert Assert.Equal(expectedCrewMember.ID, actualCrewMember.ID); Assert.Equal(expectedCrewMember.CharacterName, actualCrewMember.CharacterName); Assert.Equal(expectedCrewMember.Role, actualCrewMember.Role); Assert.Equal(expectedCrewMember.Movie.ID, actualCrewMember.Movie.ID); Assert.Equal(expectedCrewMember.Movie.Name, actualCrewMember.Movie.Name); Assert.Equal(expectedCrewMember.Person.ID, actualCrewMember.Person.ID); Assert.Equal(expectedCrewMember.Person.FirstName, actualCrewMember.Person.FirstName); Assert.Equal(expectedCrewMember.Person.LastName, actualCrewMember.Person.LastName); #endregion }
public static IEnumerable <object[]> Data_Update_InvalidRequest_ReturnsJsonResponseAndNotFoundWithErrors() { int id = 1; string characterName = "New Character Name"; CrewRoles crewRoleActor = CrewRoles.Actor; int movieID = 1; int personID = 1; // MovieID = 2 (does not exist) yield return(new object[] { id, characterName, crewRoleActor, 2, personID, new string[] { "MovieID" }, new string[] { "Does not exist." } }); // PersonID = 2 (does not exist) yield return(new object[] { id, characterName, crewRoleActor, movieID, 2, new string[] { "PersonID" }, new string[] { "Does not exist." } }); // MovieID = 2 (does not exist) // PersonID = 2 (does not exist) yield return(new object[] { id, characterName, crewRoleActor, 2, 2, new string[] { "MovieID", "PersonID" }, new string[] { "Does not exist.", "Does not exist." } }); }
public static IEnumerable <object[]> Data_Create_InvalidInput_ReturnsCrewMemberModelWithErrorID() { string characterName = "Character Name"; CrewRoles crewRoleActor = CrewRoles.Actor; int movieID = 1; int personID = 1; // MovieID = 2 (does not exist) yield return(new object[] { characterName, crewRoleActor, 2, personID, -1 }); // PersonID = 2 (does not exist) yield return(new object[] { characterName, crewRoleActor, movieID, 2, -2 }); // MovieID = 2 (does not exist) // PersonID = 2 (does not exist) yield return(new object[] { characterName, crewRoleActor, 2, 2, -3 }); }
public static IEnumerable <object[]> Data_Create_InvalidInput_ReturnNull() { string characterName = "Character Name"; CrewRoles crewRoleActor = CrewRoles.Actor; CrewRoles crewRoleDirector = CrewRoles.Director; int movieID = 1; int personID = 1; // Actor's character name cannot be null yield return(new object[] { null, crewRoleActor, movieID, personID }); // Actor's character name cannot be empty yield return(new object[] { "", crewRoleActor, movieID, personID }); // Director's character name must be null yield return(new object[] { characterName, crewRoleDirector, movieID, personID }); // Crew role must exist yield return(new object[] { characterName, 100, movieID, personID }); }
public static IEnumerable <object[]> Data_Update_InvalidInput_ReturnsNull() { int id = 1; string characterName = "New Character Name"; CrewRoles crewRoleActor = CrewRoles.Actor; CrewRoles crewRoleWriter = CrewRoles.Writer; int movieID = 1; int personID = 1; // id = 2 (does not exist) yield return(new object[] { 2, characterName, crewRoleWriter, movieID, personID }); // Writer's character name must be null yield return(new object[] { id, characterName, crewRoleWriter, movieID, personID }); // Actor's character name cannot be null yield return(new object[] { id, null, crewRoleActor, movieID, personID }); // Actor's character name cannot be empty yield return(new object[] { id, "", crewRoleActor, movieID, personID }); // Crew role must exist yield return(new object[] { id, characterName, 100, movieID, personID }); }
public async Task Update_InvalidRequest_ReturnsJsonResponseAndNotFoundWithErrors(int id, string characterName, CrewRoles crewRole, int movieID, int personID, IEnumerable <string> expectedErrorNames, IEnumerable <string> expectedErrorValues) { #region Arrange await DeleteDbContent(); var client = GetHttpClient(); var dbContext = GetDbContext(); var data = await CreatePersonAndMovie(); var movie = data[0] as Domain.Movie; var person = data[1] as Domain.Person; dbContext.CrewMembers.Add(new Domain.CrewMember { Role = CrewRoles.Writer, MovieID = movie.ID, PersonID = person.ID }); await dbContext.SaveChangesAsync(); var newCrewMember = new AdminCrewMemberModel { ID = id, CharacterName = characterName, Role = crewRole, MovieID = movieID, PersonID = personID }; #endregion #region Act var response = await client.PutAsJsonAsync($"/api/crewmember/{id}", newCrewMember); var responseBody = await response.Content.ReadAsStreamAsync(); var actualCrewMember = await JsonSerializer.DeserializeAsync <JsonElement>(responseBody); var errorProp = actualCrewMember.GetProperty("errors"); var errors = errorProp.EnumerateObject(); #endregion #region Assert Assert.Equal(HttpStatusCode.NotFound, response.StatusCode); Assert.Equal(expectedErrorNames.Count(), errors.Count()); Assert.All(expectedErrorNames, errorName => Assert.Contains(errorName, errors.Select(prop => prop.Name))); Assert.All(expectedErrorValues, errorValue => Assert.Contains(errorValue, errors.Select(prop => prop.Value[0].ToString()))); #endregion }
public static IEnumerable <object[]> Data_Update_InvalidRequest_ReturnsJsonResponseAndBadRequestWithErrors() { int id = 1; string characterName = "New Character Name"; CrewRoles crewRoleActor = CrewRoles.Actor; CrewRoles crewRoleDirector = CrewRoles.Director; int movieID = 2; int personID = 2; // CharacterName = null yield return(new object[] { id, null, crewRoleActor, movieID, personID, new string[] { "CharacterName" }, new string[] { "This role must have a character name." } }); // CharacterName = empty yield return(new object[] { id, "", crewRoleActor, movieID, personID, new string[] { "CharacterName" }, new string[] { "This role must have a character name." } }); // CharacterName + Director yield return(new object[] { id, characterName, crewRoleDirector, movieID, personID, new string[] { "CharacterName" }, new string[] { "This role cannot have a character name." } }); // Role = 100 yield return(new object[] { id, characterName, 100, movieID, personID, new string[] { "Role" }, new string[] { "Does not exist." } }); // MovieID = 0 yield return(new object[] { id, characterName, crewRoleActor, 0, personID, new string[] { "MovieID" }, new string[] { "Must be above 0." } }); // PersonID = 0 yield return(new object[] { id, characterName, crewRoleActor, movieID, 0, new string[] { "PersonID" }, new string[] { "Must be above 0." } }); // Everything is wrong yield return(new object[] { 0, null, 100, 0, 0, new string[] { "Role", "MovieID", "PersonID" }, new string[] { "Does not exist.", "Must be above 0.", "Must be above 0." } }); }
public async Task Update_ValidRequest_ReturnsJsonResponseAndOk(int id, string characterName, CrewRoles crewRole, int movieID, int personID) { #region Arrange await DeleteDbContent(); var client = GetHttpClient(); var dbContext = GetDbContext(); var data = await CreatePersonAndMovie(); var movie = data[0] as Domain.Movie; var person = data[1] as Domain.Person; var data2 = await CreatePersonAndMovie(); var movie2 = data2[0] as Domain.Movie; var person2 = data2[1] as Domain.Person; dbContext.CrewMembers.Add(new Domain.CrewMember { Role = CrewRoles.Writer, MovieID = movie.ID, PersonID = person.ID }); await dbContext.SaveChangesAsync(); var newCrewMember = new AdminCrewMemberModel { ID = id, CharacterName = characterName, Role = crewRole, MovieID = movieID, PersonID = personID }; var expectedCrewMember = new CrewMemberModel { ID = 1, CharacterName = characterName, Role = crewRole.ToString(), Movie = new MovieModel { ID = movie2.ID, Name = movie2.Name }, Person = new PersonModel { ID = person2.ID, FirstName = person2.FirstName, LastName = person2.LastName } }; #endregion #region Act var response = await client.PutAsJsonAsync($"/api/crewmember/{id}", newCrewMember); var responseBody = await response.Content.ReadAsStreamAsync(); var actualCrewMember = await JsonSerializer.DeserializeAsync <CrewMemberModel>(responseBody); #endregion #region Assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.Equal(expectedCrewMember.ID, actualCrewMember.ID); Assert.Equal(expectedCrewMember.CharacterName, actualCrewMember.CharacterName); Assert.Equal(expectedCrewMember.Role, actualCrewMember.Role); Assert.Equal(expectedCrewMember.Movie.ID, actualCrewMember.Movie.ID); Assert.Equal(expectedCrewMember.Movie.Name, actualCrewMember.Movie.Name); Assert.Equal(expectedCrewMember.Person.ID, actualCrewMember.Person.ID); Assert.Equal(expectedCrewMember.Person.FirstName, actualCrewMember.Person.FirstName); Assert.Equal(expectedCrewMember.Person.LastName, actualCrewMember.Person.LastName); #endregion }
public async Task Create_ValidRequest_ReturnsJsonResponseAndCreated(string characterName, CrewRoles crewRole, int movieID, int personID) { #region Arrange await DeleteDbContent(); var client = GetHttpClient(); var data = await CreatePersonAndMovie(); var movie = data[0] as Domain.Movie; var person = data[1] as Domain.Person; var newCrewMember = new AdminCrewMemberModel { CharacterName = characterName, Role = crewRole, MovieID = movieID, PersonID = personID }; var expectedCrewMember = new CrewMemberModel { ID = 1, CharacterName = characterName, Role = crewRole.ToString(), Movie = new MovieModel { ID = movie.ID, Name = movie.Name }, Person = new PersonModel { ID = person.ID, FirstName = person.FirstName, LastName = person.LastName } }; #endregion #region Act var response = await client.PostAsJsonAsync("/api/crewmember", newCrewMember); var responseBody = await response.Content.ReadAsStreamAsync(); var actualCrewMember = await JsonSerializer.DeserializeAsync <CrewMemberModel>(responseBody); #endregion #region Assert Assert.Equal(HttpStatusCode.Created, response.StatusCode); Assert.Equal(expectedCrewMember.ID, actualCrewMember.ID); Assert.Equal(expectedCrewMember.CharacterName, actualCrewMember.CharacterName); Assert.Equal(expectedCrewMember.Role, actualCrewMember.Role); Assert.Equal(expectedCrewMember.Movie.ID, actualCrewMember.Movie.ID); Assert.Equal(expectedCrewMember.Movie.Name, actualCrewMember.Movie.Name); Assert.Equal(expectedCrewMember.Person.ID, actualCrewMember.Person.ID); Assert.Equal(expectedCrewMember.Person.FirstName, actualCrewMember.Person.FirstName); Assert.Equal(expectedCrewMember.Person.LastName, actualCrewMember.Person.LastName); #endregion }
public async Task Create_InvalidRequest_ReturnsJsonResponseAndNotFoundWithErrors(string characterName, CrewRoles crewRole, int movieID, int personID, IEnumerable <string> expectedErrorNames, IEnumerable <string> expectedErrorValues) { #region Arrange await DeleteDbContent(); var client = GetHttpClient(); await CreatePersonAndMovie(); var newCrewMember = new AdminCrewMemberModel { CharacterName = characterName, Role = crewRole, MovieID = movieID, PersonID = personID }; #endregion #region Act var response = await client.PostAsJsonAsync("/api/crewmember", newCrewMember); var responseBody = await response.Content.ReadAsStreamAsync(); var actualCrewMember = await JsonSerializer.DeserializeAsync <JsonElement>(responseBody); var errorProp = actualCrewMember.GetProperty("errors"); var errors = errorProp.EnumerateObject(); #endregion #region Assert Assert.Equal(HttpStatusCode.NotFound, response.StatusCode); Assert.Equal(expectedErrorNames.Count(), errors.Count()); Assert.All(expectedErrorNames, errorName => Assert.Contains(errorName, errors.Select(prop => prop.Name))); Assert.All(expectedErrorValues, errorValue => Assert.Contains(errorValue, errors.Select(prop => prop.Value[0].ToString()))); #endregion }
public async Task Update_InvalidInput_ReturnsCrewMemberModelWithErrorID(int id, string characterName, CrewRoles crewRole, int movieID, int personID, int expectedCrewMemberID) { #region Arrange var dbContext = new ApplicationDbContext(_dbContextOptions); await dbContext.Database.EnsureDeletedAsync(); var data = await CreateMovieAndPerson(dbContext); var movie = data[0] as Domain.Movie; var person = data[1] as Domain.Person; var crewMember = new Domain.CrewMember { CharacterName = "Character Name", Role = CrewRoles.Actor, MovieID = movie.ID, PersonID = person.ID }; dbContext.CrewMembers.Add(crewMember); await dbContext.SaveChangesAsync(); var newCrewMember = new AdminCrewMemberModel { ID = id, CharacterName = characterName, Role = crewRole, MovieID = movieID, PersonID = personID }; var appCrewMember = new CrewMember(dbContext); #endregion #region Act var actualCrewMember = await appCrewMember.Update(newCrewMember); #endregion #region Assert Assert.Equal(actualCrewMember.ID, expectedCrewMemberID); #endregion }