public void Insert(PublicRecipe t)
        {
            if (_currentPublicRecipeState.Exists(r => r.Author == t.Author && r.Title == t.Title)) return;

            var random = new Random();

            if (t.Id == default(int)) t.Id = random.Next(1, int.MaxValue);

            if (t.Items != null && t.Items.Count > 0)
            {
                foreach (var recipeItem in t.Items)
                {
                    if (recipeItem.Id == default(int))
                    {
                        recipeItem.Id = random.Next(1, int.MaxValue);
                    }
                }
            }

            if (t.Reviews != null && t.Reviews.Count > 0)
            {
                foreach (var review in t.Reviews)
                {
                    if (review.Id == default(int))
                    {
                        review.Id = random.Next(1, int.MaxValue);
                    }
                }
            }

            _currentPublicRecipeState.Add(t);
        }
        public void OverallRatingShouldComputerCorrectly(int[] ratings, int expected)
        {
            var sut = new PublicRecipe();
            foreach (var rating in ratings)
            {
                sut.AddReview(new UserReview {Rating = rating});
            }

            sut.OverallRating.ShouldEqual(expected);
        }
        public void Update(PublicRecipe t)
        {
            var existing = _currentPublicRecipeState.SingleOrDefault(a => a.Id == t.Id);

            if (existing != null)
            {
                _currentPublicRecipeState.Remove(existing);
                //_currentPublicRecipeState.Add(t);
                Insert(t);
            }
        }
        public static PublicRecipe ConvertFromPrivateRecipe(PrivateRecipe privateRecipe)
        {
            if (privateRecipe == null) return null;

            var pubRecipe = new PublicRecipe();
            pubRecipe.Title = privateRecipe.Title;
            pubRecipe.Author = privateRecipe.Author;
            pubRecipe.TimeCreated = privateRecipe.TimeCreated;
            pubRecipe.TimeLastModified = privateRecipe.TimeLastModified;
            pubRecipe.Items = privateRecipe.Items.ConvertAll(item => item.DeepCopy(false, pubRecipe));

            return pubRecipe;
        }
        public static UserReview GenerateRandomReview(PublicRecipe publicRecipe)
        {
            var fixture = new Fixture();
            fixture.Behaviors.Remove(new ThrowingRecursionBehavior());
            fixture.Behaviors.Add(new OmitOnRecursionBehavior());

            var review = fixture.Build<UserReview>().With(r => r.PublicRecipe, publicRecipe).Create();
            return review;
        }