Example #1
0
        private static void PrintWorkout(FitCoreDbContext ctx)
        {
            var user = ctx.Users.Include(w => w.Workouts).FirstOrDefault();


            int count         = 1;
            int exerciseCount = 1;
            int setCount      = 1;

            foreach (var workout in user.Workouts)
            {
                Console.WriteLine($"Workout {count++}\n");

                foreach (var exercise in workout.Exercises)
                {
                    Console.WriteLine($"Exercise {exerciseCount++}: {exercise.Exercise.Name}\n");

                    foreach (var set in exercise.Sets)
                    {
                        Console.WriteLine($"Set {setCount++}: Reps: {set.Reps}  Weight: {set.Weight}");
                    }
                    Console.WriteLine();
                    setCount = 1;
                }
                Console.WriteLine();
            }
        }
Example #2
0
        static void Main()
        {
            var services = new ServiceCollection();

            services.AddDbContextPool <FitCoreDbContext>(op =>
                                                         op.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=FitCoreDb.Data;Trusted_Connection=True;MultipleActiveResultSets=true"))
            .AddTransient <IRepository, FitCoreRepository>();

            // C# 8.0 feature
            // https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-8.0/using
            using var ctx = new FitCoreDbContext(new DbContextOptions <FitCoreDbContext>());


            ctx.Database.EnsureDeleted();
            ctx.Database.EnsureCreated();

            ctx.Exercises.AddRange(Seed.GetExercises());
            var workout = TestData.Build_Chest_Workout();
            var user    = TestData.Build_Athlete();

            user.AddWorkouts(workout);
            ctx.Users.Add(user);
            ctx.SaveChanges();

            // make a full workout and add it to user...
            TestGraph(ctx);
        }
Example #3
0
        private static void TestGraph(FitCoreDbContext ctx)
        {
            // get user:
            var user = ctx.Users.FirstOrDefault();

            Console.WriteLine($"Athlete: {user.FirstName} {user.LastName} Date of Birth: {user.Birthdate}");
            PrintWorkout(ctx);
            Console.ReadLine();
        }
Example #4
0
        public void User_Can_Add_Workout_To_Their_Account()
        {
            // In-memory database only exists while the connection is open
            var connection = new SqliteConnection("DataSource=:memory:");

            connection.Open();

            try
            {
                var options = new DbContextOptionsBuilder <FitCoreDbContext>()
                              .UseSqlite(connection)
                              .Options;

                // Create the schema in the database
                using (var context = new FitCoreDbContext(options))
                {
                    context.Database.EnsureCreated();
                }

                // Run the test against one instance of the context
                using (var context = new FitCoreDbContext(options))
                {
                    // add exercise...
                    context.Exercises.Add(TestData.Build_Single_Exercise());
                    context.Users.Add(TestData.Build_Athlete());
                    context.SaveChanges();

                    var workout     = TestData.Build_Chest_Workout();
                    var userService = new UserService(context);
                    var user        = context.Users.FirstOrDefault();
                    user.AddWorkouts(workout);
                    context.SaveChanges();
                }

                // Use a separate instance of the context to verify correct data was saved to database
                using (var context = new FitCoreDbContext(options))
                {
                    var user = context.Users.FirstOrDefault();
                    Assert.NotNull(user.FirstName);
                    Assert.Equal(1, context.Workouts.Count());
                }
            }
            finally
            {
                connection.Close();
            }
        }
Example #5
0
        public void Cannot_Add_Workout_To_Repository_Without_A_User()
        {
            // In-memory database only exists while the connection is open
            var connection = new SqliteConnection("DataSource=:memory:");

            connection.Open();

            try
            {
                var options = new DbContextOptionsBuilder <FitCoreDbContext>()
                              .UseSqlite(connection)
                              .Options;

                // Create the schema in the database
                using (var context = new FitCoreDbContext(options))
                {
                    context.Database.EnsureCreated();
                }

                // Run the test against one instance of the context
                using (var context = new FitCoreDbContext(options))
                {
                    // add exercise...
                    //context.Exercises.Add(TestData.Build_Single_Exercise());
                    var workout = TestData.Build_Chest_Workout();
                    context.Workouts.Add(workout);
                    Assert.Throws <DbUpdateException>(() => context.SaveChanges());
                }

                // Use a separate instance of the context to verify correct data was saved to database
                using (var context = new FitCoreDbContext(options))
                {
                    Assert.Equal(0, context.Workouts.Count());
                }
            }
            finally
            {
                connection.Close();
            }
        }