public void TestMyWorkoutsDeleteCompletedMyWorkout()
        {
            user_workout u_workout = new user_workout();

            u_workout.id      = 2;
            u_workout.workout = new workout()
            {
                id = 2
            };
            u_workout.date_finished = Convert.ToDateTime("2015-06-30");
            byte[] timestamp = new byte[8];
            for (var i = 0; i < timestamp.Length; i++)
            {
                timestamp[i] = 0;
            }
            u_workout.timestamp = timestamp;
            db.Setup(c => c.user_workout.Find(u_workout.id)).Returns(u_workout);
            db.Setup(c => c.user_workout.Remove(u_workout)).Returns(u_workout);
            ViewResult result = myWorkoutsCon.DeleteFromMyWorkouts(u_workout) as ViewResult;

            Assert.IsNotNull(result);
            Assert.AreEqual("DetailedError", result.ViewName);
            Assert.IsInstanceOfType(result.Model, typeof(HttpStatusCodeResult));
            var model = result.Model as HttpStatusCodeResult;

            Assert.AreEqual(500, model.StatusCode);
            Assert.AreEqual("The workout has been completed and can't be removed", model.StatusDescription);
        }
示例#2
0
        public ActionResult AddToMyWorkouts(user_workout userWorkout)
        {
            int userID = userAccess.getUserId(User.Identity.Name);

            if (userID == -1)
            {
                return(View());
            }
            userWorkout.user_id = userID;
            userWorkout.number_of_ex_completed = 0;

            if (ModelState.IsValid)
            {
                try
                {
                    db.user_workout.Add(userWorkout);
                    db.SaveChanges();
                    return(RedirectToAction("Details", "MyWorkouts", new { user_workout_id = userWorkout.id }));
                }
                catch (Exception ex)
                {
                    return(View("DetailedError", new HttpStatusCodeResult(HttpStatusCode.InternalServerError, "Failed to add the requested workout to user workouts.")));
                }
            }
            else
            {
                return(View("DetailedError", new HttpStatusCodeResult(HttpStatusCode.BadRequest, "Failed to add the requested workout to user workouts due to an invalid entry.")));
            }
        }
        public void TestMyWorkoutsDeleteMyWorkout()
        {
            user_workout u_workout = new user_workout();

            u_workout.id      = 2;
            u_workout.workout = new workout()
            {
                id = 2
            };
            byte[] timestamp = new byte[8];
            for (var i = 0; i < timestamp.Length; i++)
            {
                timestamp[i] = 0;
            }
            u_workout.timestamp = timestamp;
            db.Setup(c => c.user_workout.Find(u_workout.id)).Returns(u_workout);
            db.Setup(c => c.user_workout.Remove(u_workout)).Returns(u_workout);
            RedirectToRouteResult result   = myWorkoutsCon.DeleteFromMyWorkouts(u_workout) as RedirectToRouteResult;
            RedirectToRouteResult v_result = myWorkoutsCon.Details(2) as RedirectToRouteResult;

            Assert.IsNull(v_result);
            Assert.IsNotNull(result);
            Assert.AreEqual("Index", result.RouteValues["action"], "action was not Index");
            Assert.AreEqual("MyWorkouts", result.RouteValues["controller"], "controller was not MyWorkouts");
        }
        public void Initialize()
        {
            DbContextHelpers contextHelpers = new DbContextHelpers();

            db            = contextHelpers.getDbContext();
            search        = new WorkoutSearch();
            myWorkoutsCon = new MyWorkoutsController(db.Object)
            {
                ControllerContext = MockContext.AuthenticationContext("jjones")
            };
            myWorkoutsCon.pageSize = 10;

            ts       = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 };
            uWorkout = new user_workout()
            {
                id = 1,
                number_of_ex_completed = 0,
                workout_id             = 1,
                user_id   = 2,
                timestamp = ts,
                workout   = new workout()
                {
                    workout_exercise = new List <workout_exercise>
                    {
                        { new workout_exercise() },
                        { new workout_exercise() },
                        { new workout_exercise() },
                        { new workout_exercise() },
                    }
                }
            };
        }
示例#5
0
        public ActionResult Details(int?user_workout_id)
        {
            workout workout;

            if (user_workout_id == null)
            {
                return(View("DetailedError", new HttpStatusCodeResult(HttpStatusCode.BadRequest, "Workout could not be retrieved with given parameters.")));
            }

            int          userId    = userAccess.getUserId(User.Identity.Name);
            user_workout myworkout = db.user_workout.Find(user_workout_id);

            if (myworkout == null)
            {
                return(View("DetailedError", new HttpStatusCodeResult(HttpStatusCode.NotFound, "Your workout could not be found.")));
            }
            else
            {
                workout                       = myworkout.workout;
                ViewBag.myWorkoutId           = myworkout.id;
                ViewBag.numExercisesCompleted = myworkout.number_of_ex_completed;
                ViewBag.isMyWorkout           = true;

                ViewBag.timestampString = timestampByteArrToString(myworkout.timestamp);

                // Workout id is stored in session to be accessed from AddComment post method
                if (workout != null)
                {
                    Session["workout_id"] = workout.id;
                }
                // Checks if workout is in Favorite list
                int userID = userAccess.getUserId(User.Identity.Name);
                user_favorite_workout fav_workout = db.user_favorite_workout
                                                    .Where(m => m.workout_id == (int)workout.id &&
                                                           m.user_id == userID).FirstOrDefault();
                ViewBag.IsFavorite = (fav_workout == null) ? false : true;

                //counts how many users marked workout as Favorite
                ViewBag.FavoritesCount = db.user_favorite_workout.Where(m => m.workout_id.Equals((int)workout.id)).Count();

                var workout_rating = db.workout_rating.Where(m => m.workout_id == workout.id).FirstOrDefault();
                if (workout_rating != null)
                {
                    ViewBag.average_rating = workout_rating.average_rating;
                }
                else
                {
                    ViewBag.average_rating = null;
                }
                return(View(workout));
            }
        }
        public void TestMyWorkoutsAddWorkoutWithBadWorkout()
        {
            user_workout u_workout = new user_workout();
            ViewResult   result    = myWorkoutsCon.AddToMyWorkouts(u_workout) as ViewResult;

            Assert.IsNotNull(result);
            Assert.AreEqual("DetailedError", result.ViewName);
            Assert.IsInstanceOfType(result.Model, typeof(HttpStatusCodeResult));
            var model = result.Model as HttpStatusCodeResult;

            Assert.AreEqual(500, model.StatusCode);
            Assert.AreEqual("Failed to add the requested workout to user workouts.", model.StatusDescription);
        }
        public void TestAddWorkoutToMyWorkouts()
        {
            user_workout userWorkout = new user_workout();

            userWorkout.workout_id = 1;
            db.Setup(c => c.user_workout.Add(userWorkout)).Returns(userWorkout);
            RedirectToRouteResult result = myWorkoutsCon.AddToMyWorkouts(userWorkout) as RedirectToRouteResult;

            Assert.IsNotNull(result);
            Assert.AreEqual(0, result.RouteValues["user_workout_id"], "workoutId was not 1");
            Assert.AreEqual("Details", result.RouteValues["action"], "action was not Controller");
            Assert.AreEqual("MyWorkouts", result.RouteValues["controller"], "controller was not Home");
        }
        public void TestMyWorkoutsDeleteWorkoutNotFound()
        {
            user_workout u_workout = new user_workout();

            u_workout.id = 50406;
            ViewResult result = myWorkoutsCon.DeleteFromMyWorkouts(u_workout) as ViewResult;

            Assert.IsNotNull(result);
            Assert.AreEqual("DetailedError", result.ViewName);
            Assert.IsInstanceOfType(result.Model, typeof(HttpStatusCodeResult));
            var model = result.Model as HttpStatusCodeResult;

            Assert.AreEqual(500, model.StatusCode);
            Assert.AreEqual("The workout does not exist or has already been deleted", model.StatusDescription);
        }
        /* Private Test Helpers */

        /// <summary>
        /// Helper method to determin if my workouts list is sorted in a certain order on a certain property
        /// </summary>
        /// <param name="workouts">The workout list to check</param>
        /// <param name="propName">The workout property that the list should be sorted by</param>
        /// <param name="order">One of "asc" or "desc". Tells the method to check if the list is in ascending or descending order</param>
        /// <returns>True if the list is sorted on the given property in the given order, false otherwise</returns>
        private bool isSorted(PagedList <user_workout> workouts, string propName, string order)
        {
            int limit = (workouts.Count > 10) ? 11 : workouts.Count;

            for (int i = 1; i < limit; i++)
            {
                user_workout currentWorkout = workouts[i];
                user_workout prevWorkout    = workouts[i - 1];
                int?         res            = null;
                if (propName == "name")
                {
                    res = String.Compare(prevWorkout.workout.name, currentWorkout.workout.name);
                }
                else if (propName == "category")
                {
                    res = String.Compare(prevWorkout.workout.category.name, currentWorkout.workout.category.name);
                }
                else if (propName == "dateCreated")
                {
                    res = DateTime.Compare(prevWorkout.workout.created_at, currentWorkout.workout.created_at);
                }
                else if (propName == "username")
                {
                    res = String.Compare(prevWorkout.workout.user.username, currentWorkout.workout.user.username);
                }
                else
                {
                    return(false);
                }

                if (order == "asc")
                {
                    if (res > 0)
                    {
                        return(false);
                    }
                }
                else if (order == "desc")
                {
                    if (res < 0)
                    {
                        return(false);
                    }
                }
            }
            return(true);
        }
示例#10
0
        public ActionResult DeleteFromMyWorkouts([Bind(Include = "id,timestamp")] user_workout userWorkout)
        {
            int userID = userAccess.getUserId(User.Identity.Name);

            if (userID == -1)
            {
                return(View());
            }
            try
            {
                user_workout oldUserWorkout = db.user_workout.Find(userWorkout.id);
                if (oldUserWorkout == null)
                {
                    return(View("DetailedError", new HttpStatusCodeResult(HttpStatusCode.InternalServerError, "The workout does not exist or has already been deleted")));
                }
                if (oldUserWorkout.date_finished != null)
                {
                    return(View("DetailedError", new HttpStatusCodeResult(HttpStatusCode.InternalServerError, "The workout has been completed and can't be removed")));
                }
                var entry = db.Entry(oldUserWorkout);
                var state = entry.State;
                if (state == EntityState.Detached)
                {
                    db.user_workout.Remove(userWorkout);
                }
                else
                {
                    entry.OriginalValues["timestamp"] = userWorkout.timestamp;
                    db.user_workout.Remove(oldUserWorkout);
                }
                db.SaveChanges();
                return(RedirectToAction("Index", "MyWorkouts"));
            }
            catch (DbUpdateConcurrencyException ex)
            {
                return(View("DetailedError", new HttpStatusCodeResult(HttpStatusCode.InternalServerError, "Failed to remove workout as another user may have updated this workout")));
            }
            catch (DbUpdateException ex)
            {
                return(View("DetailedError", new HttpStatusCodeResult(HttpStatusCode.InternalServerError, "Failed to remove the workout.")));
            }
            catch (Exception ex)
            {
                return(View("DetailedError", new HttpStatusCodeResult(HttpStatusCode.InternalServerError, "Failed to delete the requested workout from MyWorkouts.")));
            }
        }
        public void TestMyWorkoutsDetailsForWorkout24()
        {
            user_workout u_workout = new user_workout();

            u_workout.id = 10;
            byte[] timestamp = new byte[8];
            for (var i = 0; i < timestamp.Length; i++)
            {
                timestamp[i] = 0;
            }
            u_workout.timestamp = timestamp;
            u_workout.workout   = new workout
            {
                description = "desc2"
            };
            db.Setup(c => c.user_workout.Find(u_workout.id)).Returns(u_workout);
            ViewResult result = myWorkoutsCon.Details(10) as ViewResult;

            Assert.IsNotNull(result);
            workout workout10 = (workout)result.ViewData.Model;

            Assert.AreEqual("desc2", workout10.description, "description was not 'desc24'");
        }
        public void TestMyWorkoutsDetailsForWorkout1()
        {
            user_workout u_workout = new user_workout();

            u_workout.id = 1;
            byte[] timestamp = new byte[8];
            for (var i = 0; i < timestamp.Length; i++)
            {
                timestamp[i] = 0;
            }
            u_workout.timestamp = timestamp;
            u_workout.workout   = new workout
            {
                name = "workout1"
            };
            db.Setup(c => c.user_workout.Find(u_workout.id)).Returns(u_workout);
            ViewResult result = myWorkoutsCon.Details(1) as ViewResult;

            Assert.IsNotNull(result);
            workout workout1 = (workout)result.ViewData.Model;

            Assert.AreEqual("workout1", workout1.name, "Name was not 'workout1'");
        }
示例#13
0
        public ActionResult MarkExercise(int my_workout_id, int position, string timestampString)
        {
            byte[]       timestamp   = timestampStringToByteArr(timestampString);
            user_workout userWorkout = new user_workout();

            userWorkout.id        = my_workout_id;
            userWorkout.timestamp = timestamp;

            user_workout oldMyWorkout = db.user_workout.Find(my_workout_id);

            if (oldMyWorkout == null)
            {
                var result = new Dictionary <string, string>();
                result.Add("error", "true");
                result.Add("position", Convert.ToString(position));
                result.Add("message", "Failed to mark progress as the workout does not exist or may have been deleted");
                result.Add("code", "500");
                return(Json(result));
            }
            try
            {
                var entry = db.Entry(oldMyWorkout);
                var state = entry.State;

                int totalNumExercises = oldMyWorkout.workout.workout_exercise.Count;
                if (position == 1 || oldMyWorkout.date_started == null)
                {
                    userWorkout.date_started = DateTime.Now;
                    if (position == totalNumExercises)
                    {
                        userWorkout.date_finished = DateTime.Now;
                    }
                }
                else if (position == totalNumExercises)
                {
                    userWorkout.date_finished = DateTime.Now;
                }
                userWorkout.number_of_ex_completed = position;

                if (state == EntityState.Detached)
                {
                    db.Entry(userWorkout).State = EntityState.Modified;
                }
                else
                {
                    entry.OriginalValues["timestamp"] = userWorkout.timestamp;
                    if (userWorkout.date_started != null)
                    {
                        entry.CurrentValues["date_started"] = userWorkout.date_started;
                    }
                    if (userWorkout.date_finished != null)
                    {
                        entry.CurrentValues["date_finished"] = userWorkout.date_finished;
                    }
                    entry.CurrentValues["number_of_ex_completed"] = userWorkout.number_of_ex_completed;
                }
                db.SaveChanges();

                user_workout updatedMyWorkout = db.user_workout.Find(my_workout_id);
                string       newTimestamp     = timestampByteArrToString(updatedMyWorkout.timestamp);
                var          result           = new Dictionary <string, string>();
                result.Add("success", "true");
                result.Add("timestampString", newTimestamp);
                result.Add("error", "false");
                var isCompleted = (userWorkout.date_finished != null) ? "true" : "false";
                result.Add("isCompleted", isCompleted);
                return(Json(result));
            }
            catch (DbUpdateConcurrencyException ex)
            {
                var result = new Dictionary <string, string>();
                result.Add("error", "true");
                result.Add("position", Convert.ToString(position));
                result.Add("message", "Failed to mark progress as the workout may have already been updated");
                result.Add("code", "500");
                return(Json(result));
            }
            catch (DbUpdateException ex)
            {
                var result = new Dictionary <string, string>();
                result.Add("error", "true");
                result.Add("position", Convert.ToString(position));
                result.Add("message", "Failed to mark progress as the workout may have already been updated");
                result.Add("code", "500");
                return(Json(result));
            }
            catch (Exception ex)
            {
                var result = new Dictionary <string, string>();
                result.Add("error", "true");
                result.Add("position", Convert.ToString(position));
                result.Add("message", "Failed to mark workout progress");
                result.Add("code", "500");
                return(Json(result));
            }
        }