Exemple #1
0
        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
        }
Exemple #2
0
        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
        }
Exemple #3
0
        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."
                }
            });
        }
Exemple #4
0
        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 });
        }
Exemple #5
0
        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 });
        }
Exemple #6
0
        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 });
        }
Exemple #7
0
        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
        }
Exemple #8
0
        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."
                }
            });
        }
Exemple #9
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
        }
Exemple #10
0
        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
        }
Exemple #11
0
        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
        }
Exemple #12
0
        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
        }