public void FindEntity_EntityNotFoundInDataStore_ThrowsObjectNotFoundException()
        {
            // Arrange
            var repository = new TeamSeasonRepository();

            var dbContext = A.Fake <ProFootballEntities>();
            var teamName  = "Team";
            var seasonID  = 2017;

            TeamSeason teamSeason = null;

            A.CallTo(() => dbContext.TeamSeasons.Find(A <string> .Ignored, A <int> .Ignored)).Returns(teamSeason);

            // Act
            TeamSeason result = null;

            Assert.Throws <ObjectNotFoundException>(() =>
            {
                result = repository.FindEntity(dbContext, teamName, seasonID);
            });

            // Assert
            A.CallTo(() => dbContext.TeamSeasons.Find(teamName, seasonID)).MustHaveHappenedOnceExactly();
            Assert.IsNull(result);
        }
        public void FindEntity_GenericExceptionCaught_LogsAndRethrowsException()
        {
            // Arrange
            var dbContext  = A.Fake <ProFootballEntities>();
            var repository = new TeamSeasonRepository(dbContext);

            var teamName = "Team";
            var seasonID = 2017;

            A.CallTo(() => dbContext.TeamSeasons.Find(A <string> .Ignored, A <int> .Ignored)).Throws <Exception>();

            // Act
            TeamSeason result = null;

            Assert.Throws <Exception>(() => result = repository.FindEntity(teamName, seasonID));

            // Assert
            Assert.IsNull(result);
        }
        public void FindEntity_InvalidOperationExceptionCaught_ThrowsObjectNotFoundException()
        {
            // Arrange
            var dbContext  = A.Fake <ProFootballEntities>();
            var repository = new TeamSeasonRepository(dbContext);

            var teamName = "Team";
            var seasonID = 2017;

            A.CallTo(() => dbContext.TeamSeasons.Find(A <string> .Ignored, A <int> .Ignored)).Throws <InvalidOperationException>();

            // Act
            TeamSeason result = null;

            Assert.Throws <ObjectNotFoundException>(() => { result = repository.FindEntity(teamName, seasonID); });

            // Assert
            Assert.IsNull(result);
        }
        public void FindEntity_EntityFoundInDataStore_ReturnsEntity()
        {
            // Arrange
            var repository = new TeamSeasonRepository();

            var dbContext = A.Fake <ProFootballEntities>();
            var teamName  = "Team";
            var seasonID  = 2017;

            TeamSeason teamSeason = new TeamSeason();

            A.CallTo(() => dbContext.TeamSeasons.Find(A <string> .Ignored, A <int> .Ignored)).Returns(teamSeason);

            // Act
            var result = repository.FindEntity(dbContext, teamName, seasonID);

            // Assert
            A.CallTo(() => dbContext.TeamSeasons.Find(teamName, seasonID)).MustHaveHappenedOnceExactly();
            Assert.AreSame(teamSeason, result);
        }