public void GetIfHasNoTimeWithCategory_should_throw_ArugmentNullException_when_given_chipId_is_null()
        {
            var options = new DbContextOptionsBuilder <RunnerDbContext>()
                          .UseInMemoryDatabase(nameof(GetIfHasNoTimeWithCategory_should_throw_ArugmentNullException_when_given_chipId_is_null))
                          .Options;
            var context    = new RunnerDbContext(options);
            var repository = new RunnerRepository(context);

            Assert.Throws <ArgumentNullException>("chipId", () => repository.GetIfHasNoTimeWithCategory(null));
        }
        public async Task GetIfHasNoTimeWithCategory_should_return_runner_with_category_with_given_chipId()
        {
            var databaseName = nameof(GetIfHasNoTimeWithCategory_should_return_runner_with_category_with_given_chipId);
            var options      = new DbContextOptionsBuilder <RunnerDbContext>()
                               .UseSqlServer(string.Format(TestConfiguration.ConnectionString, databaseName))
                               .Options;

            using (var context = new RunnerDbContext(options))
            {
                await context.Database.EnsureDeletedAsync();

                await context.Database.EnsureCreatedAsync();

                await context.Runners.AddAsync(new Runner
                {
                    ChipId            = "4329085723",
                    Firstname         = "Firstname",
                    Lastname          = "Lastname",
                    Gender            = Gender.Mann,
                    YearOfBirth       = 2000,
                    TimeAtDestination = null,
                    Category          = new Category
                    {
                        Name = "The Name of the Category"
                    }
                });

                await context.SaveChangesAsync();
            }

            using (var context = new RunnerDbContext(options))
            {
                var repository = new RunnerRepository(context);
                var result     = repository.GetIfHasNoTimeWithCategory("4329085723");

                Assert.NotNull(result);
                Assert.NotNull(result.Category);
                Assert.Equal("Firstname", result.Firstname);
                Assert.Equal("Lastname", result.Lastname);
                Assert.Equal(Gender.Mann, result.Gender);
                Assert.Equal(Gender.Mann, result.Gender);
                Assert.Equal("The Name of the Category", result.Category.Name);
            }

            using (var context = new RunnerDbContext(options))
                await context.Database.EnsureDeletedAsync();
        }
        public async Task GetIfHasNoTimeWithCategory_should_return_null_for_given_chipId_because_runners_timeAtDestiantion_is_not_null()
        {
            var databaseName = nameof(GetIfHasNoTimeWithCategory_should_return_null_for_given_chipId_because_runners_timeAtDestiantion_is_not_null);
            var options      = new DbContextOptionsBuilder <RunnerDbContext>()
                               .UseSqlServer(string.Format(TestConfiguration.ConnectionString, databaseName))
                               .Options;

            using (var context = new RunnerDbContext(options))
            {
                await context.Database.EnsureDeletedAsync();

                await context.Database.EnsureCreatedAsync();

                await context.Runners.AddAsync(new Runner
                {
                    ChipId            = "4329085723",
                    Firstname         = "Firstname",
                    Lastname          = "Lastname",
                    Gender            = Gender.Mann,
                    YearOfBirth       = 2000,
                    TimeAtDestination = new DateTime(2017, 10, 12, 12, 00, 00),
                    Category          = new Category
                    {
                        Name = "The Name of the Category",
                    }
                });

                await context.SaveChangesAsync();
            }

            using (var context = new RunnerDbContext(options))
            {
                var repository = new RunnerRepository(context);
                var result     = repository.GetIfHasNoTimeWithCategory("4329085723");

                Assert.Null(result);
            }

            using (var context = new RunnerDbContext(options))
                await context.Database.EnsureDeletedAsync();
        }
        public async Task GetIfHasNoTimeWithCategory_should_return_null_if_no_runner_with_given_chipId_is_found()
        {
            var databaseName = nameof(GetIfHasNoTimeWithCategory_should_return_null_if_no_runner_with_given_chipId_is_found);
            var options      = new DbContextOptionsBuilder <RunnerDbContext>()
                               .UseSqlServer(string.Format(TestConfiguration.ConnectionString, databaseName))
                               .Options;

            using (var context = new RunnerDbContext(options))
            {
                var repository = new RunnerRepository(context);

                await context.Database.EnsureDeletedAsync();

                await context.Database.EnsureCreatedAsync();

                var result = repository.GetIfHasNoTimeWithCategory("0123456789");

                await context.Database.EnsureDeletedAsync();

                Assert.Null(result);
            }
        }