def test_url_with_supplements_requested(self): url = reverse(BetterSelfResourceConstants.AGGREGATE) start_date = "2020-01-02" supplements = SupplementFactory.create_batch(2, user=self.user_1) start_time = serialize_date_to_user_localized_datetime( start_date, user=self.user_1) for supplement in supplements: SupplementLogFactory(user=self.user_1, supplement=supplement, time=start_time) supplement_uuids = [str(supplement.uuid) for supplement in supplements] kwargs = { "start_date": "2020-01-01", "end_date": "2020-01-02", "supplement_uuids": supplement_uuids, } response = self.client_1.post(url, data=kwargs, format="json") self.assertEqual(response.status_code, 200, response.data) self.assertIsNotNone(response.data["supplements"])
def test_url_with_supplements_requested_filter(self): url = reverse(BetterSelfResourceConstants.AGGREGATE) start_date = "2020-01-02" # delete any previous data to not screw up results SupplementLog.objects.filter(user=self.user_1).delete() supplements = SupplementFactory.create_batch(2, user=self.user_1) start_time = serialize_date_to_user_localized_datetime( start_date, user=self.user_1) for supplement in supplements: SupplementLogFactory(user=self.user_1, supplement=supplement, time=start_time) # only do one uuid supplement_uuids = [ str(supplement.uuid) for supplement in supplements[:1] ] kwargs = { "start_date": "2020-01-01", "end_date": "2020-01-02", "supplement_uuids": supplement_uuids, } response = self.client_1.post(url, data=kwargs, format="json") self.assertEqual(response.status_code, 200, response.data) expected_log_count = SupplementLog.objects.filter( user=self.user_1, supplement__uuid__in=supplement_uuids).count() returned_log_count = len(response.data["supplements"]["logs"]) self.assertEqual(expected_log_count, returned_log_count)
def setUpTestData(cls): user_1 = UserFactory() user_2 = UserFactory() cls.end_period = get_utc_now() cls.end_period_date_string = cls.end_period.date().strftime( yyyy_mm_dd_format_1) cls.start_period = get_time_relative_units_ago(cls.end_period, days=7) cls.start_period_date_string = cls.start_period.date().strftime( yyyy_mm_dd_format_1) supplements = SupplementFactory.create_batch(10, user=user_1) for index in range(100): # simulate some missing data if index % 5 == 0 and index != 0: continue date_to_use = cls.end_period - relativedelta.relativedelta( days=index) SleepLogFactory(end_time=date_to_use, user=user_1) for supplement in supplements: SupplementLogFactory.create_batch(2, user=user_1, supplement=supplement, time=date_to_use) cls.user_1_id = user_1.id cls.user_2_id = user_2.id for index in range(100): # simulate some missing data if index % 5 == 0 and index != 0: continue date_to_use = cls.end_period - relativedelta.relativedelta( days=index) DailyProductivityLogFactory(user=user_1, date=date_to_use) # add some random data to user_2 also to make sure no leaking DailyProductivityLogFactory(user=user_2, date=date_to_use)
def test_edit_supplement_log_with_supplement_stack(self): log = SupplementLogFactory.create(user=self.user_1) stack = SupplementStackFactory(user=self.user_1) update_url = log.get_update_url() data = {"supplement_uuid": str(stack.uuid)} response = self.client_1.post(update_url, data=data) self.assertEqual(response.status_code, 400)
def setUpTestData(cls): user_1 = UserFactory() user_2 = UserFactory() # do 2 days ago, that way you can create data faster when self-testing start_period = datetime.datetime(2020, 9, 22, tzinfo=user_1.timezone) supplements = SupplementFactory.create_batch(2, user=user_1) for index in range(3): date_to_use = start_period - relativedelta.relativedelta( days=index) SleepLogFactory(end_time=date_to_use, user=user_1) for supplement in supplements: SupplementLogFactory.create_batch(2, user=user_1, supplement=supplement, time=date_to_use) cls.user_1_id = user_1.id cls.user_2_id = user_2.id
def create_demo_fixtures_for_user(user): username = user.username if "demo" not in username: raise ValueError( f"Cannot Run Demo Fixtures for Username without DEMO {username}") # wipe out all the previous models and start from scratch models_to_clean = [ Activity, ActivityLog, DailyProductivityLog, Ingredient, IngredientComposition, SleepLog, Supplement, SupplementLog, SupplementStack, SupplementStackComposition, WellBeingLog, FoodLog, Food, ] for model in models_to_clean: model.objects.filter(user=user).delete() # easier to see any row updates daily_logs_to_create = 30 nested_models_logs_to_create = 10 supplements_to_create = 15 supplement_logs_to_create_daily = 2 sleep_logs_to_create = 90 activities_to_create = 40 activities = ActivityFactory.create_batch(activities_to_create, user=user) for activity in activities: ActivityLogFactory.create_batch(nested_models_logs_to_create, activity=activity, user=user) productivity_logs_to_create = 90 # do a week ahead of time, that way you don't really have to deal with constantly rerunning # this script for now on deployments utc_now = get_utc_now() # relative_end_date_of_fixtures_creation = get_time_relative_units_forward( # utc_now, days=7 # ) # don't create dates in the advance now that we run this celery script every 30 minutes relative_end_date_of_fixtures_creation = utc_now dates_to_create = [] for index in range(productivity_logs_to_create): relative_date = (relative_end_date_of_fixtures_creation - relativedelta.relativedelta(days=index)) dates_to_create.append(relative_date) supplements = SupplementFactory.create_batch(supplements_to_create, user=user) for date in dates_to_create: DailyProductivityLogFactory(date=date, user=user) start_dt = date.replace(hour=0) end_dt = date.replace(hour=23) for supplement in supplements: result = FuzzyDateTime(start_dt=start_dt, end_dt=end_dt).fuzz() # nothing more than right now, that's just noisy if result > utc_now: continue SupplementLogFactory.create_batch( supplement_logs_to_create_daily, user=user, supplement=supplement, time=result, ) # ingredients = IngredientFactory.create_batch(fixtures_to_create, user=user) # # for ingredient in ingredients: # ingredient_composition = IngredientCompositionFactory( # ingredient=ingredient, user=user # ) # supplement = SupplementFactory.create( # user=user, # name=ingredient.name, # ingredient_compositions=[ingredient_composition], # ) # SupplementLogFactory.create_batch( # nested_models_logs_to_create, user=user, supplement=supplement # ) WellBeingLogFactory.create_batch(daily_logs_to_create, user=user) sleep_dates = [] for index in range(sleep_logs_to_create): sleep_date = (relative_end_date_of_fixtures_creation - relativedelta.relativedelta(days=index)) sleep_dates.append(sleep_date) for sleep_date in sleep_dates: SleepLogFactory(end_time=sleep_date, user=user) foods = FoodFactory.create_batch(daily_logs_to_create, user=user) for food in foods: FoodLogFactory.create_batch(nested_models_logs_to_create, food=food, user=user) logger.info(f"Successfully Created Demo Fixtures for {user.username}")
def create_demo_fixtures_for_user(user): username = user.username if "demo" not in username: raise ValueError( f"Cannot Run Demo Fixtures for Username without DEMO {username}") # wipe out all the previous models and start from scratch models_to_clean = [ Activity, ActivityLog, DailyProductivityLog, Ingredient, IngredientComposition, SleepLog, Supplement, SupplementLog, SupplementStack, SupplementStackComposition, WellBeingLog, FoodLog, Food, ] for model in models_to_clean: model.objects.filter(user=user).delete() # easier to see any row updates daily_logs_to_create = 30 nested_models_logs_to_create = 10 supplements_to_create = 15 sleep_logs_to_create = 90 activities_to_create = 40 activities = ActivityFactory.create_batch(activities_to_create, user=user) for activity in activities: ActivityLogFactory.create_batch(nested_models_logs_to_create, activity=activity, user=user) productivity_logs_to_create = 90 DailyProductivityLogFactory.create_batch(productivity_logs_to_create, user=user) supplements = SupplementFactory.create_batch(supplements_to_create, user=user) for supplement in supplements: SupplementLogFactory.create_batch(nested_models_logs_to_create, user=user, supplement=supplement) # ingredients = IngredientFactory.create_batch(fixtures_to_create, user=user) # # for ingredient in ingredients: # ingredient_composition = IngredientCompositionFactory( # ingredient=ingredient, user=user # ) # supplement = SupplementFactory.create( # user=user, # name=ingredient.name, # ingredient_compositions=[ingredient_composition], # ) # SupplementLogFactory.create_batch( # nested_models_logs_to_create, user=user, supplement=supplement # ) WellBeingLogFactory.create_batch(daily_logs_to_create, user=user) utc_now = get_utc_now() # do 2 days ago, that way you can create data faster when self-testing start_period = get_time_relative_units_ago(utc_now, days=2) sleep_dates = [] for index in range(sleep_logs_to_create): sleep_date = start_period - relativedelta.relativedelta(days=index) sleep_dates.append(sleep_date) for sleep_date in sleep_dates: SleepLogFactory(end_time=sleep_date, user=user) foods = FoodFactory.create_batch(daily_logs_to_create, user=user) for food in foods: FoodLogFactory.create_batch(nested_models_logs_to_create, food=food, user=user) logger.info(f"Successfully Created Demo Fixtures for {user.username}")