public void FitnessActivity_CRUD()
        {
            // FYI - For comparing dates Healthgraph API doesn't seem to support fidelity down to the millisecond level.
            //Create
            var newActivity = new FitnessActivitiesNewModel
            {
                Type = "Running",
                Equipment = "Treadmill",
                StartTime = DateTime.Now,
                TotalDistance = 237903.79842947799d,
                Duration = 120,
                AverageHeartRate = 100,
                HeartRate = new List<HeartRateModel> { new HeartRateModel { Timestamp = 60, HeartRate = 100 } },
                TotalCalories = 44,
                Notes = "Integration test!",
                Path = new List<PathModel>
                {
                    new PathModel { Timestamp = 0, Latitude = 100, Longitude = 100, Altitude = 0, Type = "start" },
                    new PathModel { Timestamp = 120, Latitude = 102, Longitude = 104, Altitude = 0, Type = "end" }
                },
                PostToFacebook = false,
                PostToTwitter = false,
                DetectPauses = false
            };
            var uri = ActivitiesRequest.CreateActivity(newActivity);
            Assert.IsTrue(!string.IsNullOrEmpty(uri));

            //Read from Feed
            var activitiesItem = ActivitiesRequest.GetFeedPage().Items.FirstOrDefault();
            Assert.IsNotNull(activitiesItem);
            Assert.AreEqual(newActivity.Type, activitiesItem.Type);
            Assert.AreEqual(newActivity.StartTime.ToString(), activitiesItem.StartTime.ToString());
            Assert.AreEqual(newActivity.TotalDistance, activitiesItem.TotalDistance);
            Assert.AreEqual(newActivity.Duration, activitiesItem.Duration);
            Assert.AreEqual(uri, activitiesItem.Uri);

            /*
            //Read from past
            var activitiesDetail = ActivitiesRequest.GetActivity(uri);
            AssertFitnessActivities(newActivity, activitiesDetail);
            Assert.AreEqual(newActivity.TotalCalories, activitiesDetail.TotalCalories);
            Assert.AreEqual(uri, activitiesDetail.Uri);

            //Update
            activitiesDetail.Type = "Hiking";
            activitiesDetail.Equipment = "None";
            activitiesDetail.StartTime = activitiesDetail.StartTime.AddHours(1);
            var activitiesDetailUpdated = ActivitiesRequest.UpdateActivity(activitiesDetail);
            AssertFitnessActivities(activitiesDetail, activitiesDetailUpdated);
            Assert.AreEqual(activitiesDetail.TotalCalories, activitiesDetailUpdated.TotalCalories);
            Assert.AreEqual(uri, activitiesDetailUpdated.Uri);
            */

            //Delete
            ActivitiesRequest.DeleteActivity(uri);
        }
        public void Init()
        {
            ValidActivity = new FitnessActivitiesPastModel
            {
                Type = FitnessActivitiesEndpoint.ValidType.First(),
                SecondaryType = string.Empty,
                Equipment = FitnessActivitiesEndpoint.ValidEquipment.First(),
                StartTime = DateTime.Now,
                Duration = 120,
                AverageHeartRate = 0,
                HeartRate = null,
                TotalCalories = 500,
                Notes = null,
                Path = new List<PathModel>
                {
                    new PathModel
                    {
                        Timestamp = 0,
                        Latitude = 100.0,
                        Longitude = 100.0,
                        Altitude = 100.0,
                        Type = FitnessActivitiesEndpoint.ValidPathType.First()
                    },
                    new PathModel
                    {
                        Timestamp = 60,
                        Latitude = 120.0,
                        Longitude = 120.0,
                        Altitude = 50.0,
                        Type = FitnessActivitiesEndpoint.ValidPathType.First()
                    }
                }
            };

            ValidActivityNew = new FitnessActivitiesNewModel
            {
                Type = FitnessActivitiesEndpoint.ValidType.First(),
                SecondaryType = string.Empty,
                Equipment = FitnessActivitiesEndpoint.ValidEquipment.First(),
                StartTime = DateTime.Now,
                Duration = 120,
                AverageHeartRate = 0,
                HeartRate = null,
                TotalCalories = 500,
                Notes = null,
                Path = new List<PathModel>
                {
                    new PathModel
                    {
                        Timestamp = 0,
                        Latitude = 100.0,
                        Longitude = 100.0,
                        Altitude = 100.0,
                        Type = FitnessActivitiesEndpoint.ValidPathType.First()
                    },
                    new PathModel
                    {
                        Timestamp = 60,
                        Latitude = 120.0,
                        Longitude = 120.0,
                        Altitude = 50.0,
                        Type = FitnessActivitiesEndpoint.ValidPathType.First()
                    }
                },
                PostToFacebook = null,
                PostToTwitter = null,
                DetectPauses = null
            };
        }
 public string CreateActivity(FitnessActivitiesNewModel activityToCreate)
 {
     var request = PrepareActivitiesCreateRequest(activityToCreate);
     return _tokenManager.ExecuteCreate(request);
 }
 public void CreateActivityAsync(Action<string> success, Action<HealthGraphException> failure, FitnessActivitiesNewModel activityToCreate)
 {
     var request = PrepareActivitiesCreateRequest(activityToCreate);
     _tokenManager.ExecuteCreateAsync(request, success, failure);
 }
        /// <summary>
        /// Prepares the request object to create a new model.
        /// </summary>
        /// <param name="activityToCreate"></param>
        /// <returns></returns>
        private IRestRequest PrepareActivitiesCreateRequest(FitnessActivitiesNewModel activityToCreate)
        {
            var request = new RestRequest(Method.POST);
            request.Resource = _user.FitnessActivities;

            ValidateModel(activityToCreate);

            //Add body to the request
            request.AddParameter(FitnessActivitiesNewModel.ContentType, _tokenManager.DefaultJsonSerializer.Serialize(new
            {
                type = activityToCreate.Type,
                secondary_type = activityToCreate.SecondaryType,
                equipment = activityToCreate.Equipment,
                start_time = activityToCreate.StartTime,
                total_distance = activityToCreate.TotalDistance,
                duration = activityToCreate.Duration,
                average_heart_rate = activityToCreate.AverageHeartRate,
                heart_rate = activityToCreate.HeartRate,
                total_calories = activityToCreate.TotalCalories,
                notes = activityToCreate.Notes,
                path = ((activityToCreate.Path != null) && (activityToCreate.Path.Count == 0)) ? null : activityToCreate.Path,
                post_to_facebook = activityToCreate.PostToFacebook,
                post_to_twitter = activityToCreate.PostToTwitter,
                detect_pauses = activityToCreate.DetectPauses
            }), ParameterType.RequestBody);
            return request;
        }