def test_simple(self): for x in xrange(10): LogEntry.make(self._default_access, None, None, action="act{}".format(x)).put() req = self.get() self.assertEquals(len(req.json["result"]), 10)
def test_with_week_counter(self): self._load_simple() LogEntry.make(self.app_access.key, "free_u", None, action="share_photo").put() LogEntry.make(self.app_access.key, "free_u", None, action="share_photo", when=(datetime.now() - timedelta(hours=25))).put() LogEntry.make(self.app_access.key, "free_u", None, action="share_photo", when=(datetime.now() - timedelta(days=3))).put() LogEntry.make(self.app_access.key, "free_u", None, action="share_photo", when=(datetime.now() - timedelta(days=6))).put() # outside LogEntry.make(self.app_access.key, "free_u", None, action="share_photo", when=(datetime.now() - timedelta(days=10))).put() profile_state = self.app_access.compile_profile_state( user_id="free_u") self.assertEquals(profile_state["profile"], "free") self.assertEquals(profile_state["default"], "deny") self.assertEquals(len(profile_state["states"]), 3) self.assertEquals(profile_state["states"]["share_photo"][0]["left"], 9) self.assertEquals(profile_state["states"]["share_photo"][0]["limit_to"], 10) self.assertEquals(profile_state["states"]["share_photo"][1]["left"], 16) self.assertEquals(profile_state["states"]["share_photo"][1]["limit_to"], 20)
def test_ensure_order(self): for x in xrange(10): LogEntry.make(self._default_access, None, None, action="act_{}".format(x)).put() req = self.get() results = req.json["result"] self.assertEquals(len(results), 10) self.assertEquals([x["action"] for x in results], ["act_{}".format(x) for x in xrange(9, -1, -1)])
def test_only_mine(self): for x in xrange(5): LogEntry.make(self._default_access, None, None, action="act_{}".format(x)).put() for x in xrange(5): LogEntry.make(Key(LogEntry, 1), None, None, action="act_{}".format(x)).put() req = self.get() results = req.json["result"] self.assertEquals(len(results), 5) self.assertEquals([x["action"] for x in results], ["act_{}".format(x) for x in xrange(4, -1, -1)])
def test_with_outer_user_counter(self): self._load_simple() LogEntry.make(self.app_access.key, "free_u", None, action="upload_photo").put() # none user LogEntry.make(self.app_access.key, "other", None, action="upload_photo").put() profile_state = self.app_access.compile_profile_state(user_id="free_u") self.assertEquals(profile_state["profile"], "free") self.assertEquals(profile_state["default"], "deny") self.assertEquals(len(profile_state["states"]), 3) self.assertEquals(profile_state["states"]["upload_photo"][0]["left"], 9) self.assertEquals(profile_state["states"]["upload_photo"][0]["limit_to"], 10)
def test_with_yesterday_counter(self): self._load_simple() LogEntry.make(self.app_access.key, "free_u", None, action="upload_photo").put() # yesterday LogEntry.make(self.app_access.key, "free_u", None, action="upload_photo", when=datetime.now() - timedelta(hours=25)).put() profile_state = self.app_access.compile_profile_state(user_id="free_u") self.assertEquals(profile_state["profile"], "free") self.assertEquals(profile_state["default"], "deny") self.assertEquals(len(profile_state["states"]), 3) self.assertEquals(profile_state["states"]["upload_photo"][0]["left"], 9) self.assertEquals(profile_state["states"]["upload_photo"][0]["limit_to"], 10)
def test_with_endless_counter(self): self._load_simple() LogEntry.make(self.app_access.key, "prem", None, action="quota").put() for x in xrange(50): LogEntry.make(self.app_access.key, "prem", None, action="quota", when=(datetime.now() - timedelta(days=x ** 2))).put() profile_state = self.app_access.compile_profile_state( user_id="prem") self.assertEquals(profile_state["profile"], "premium") self.assertEquals(profile_state["default"], "allow") self.assertEquals(len(profile_state["states"]), 2) self.assertEquals(profile_state["states"]["quota"][0]["left"], 949) self.assertEquals(profile_state["states"]["quota"][0]["total_max"], 1000)
def post(self): device_id = self.request.POST.get("device_id") user_id = self.request.POST.get("user_id") if not device_id and not user_id: webapp2.abort(400, "either device_id or user_id must be provided") entries = json.loads(self.request.POST.get("entries")) app_key = self.app_access.key if isinstance(entries, dict): entries = [entries] keys = ndb.put_multi([LogEntry.make(app_key, user_id, device_id, **x) for x in entries]) self.response.status = 201 self._post_add(keys, None) return {"entries": len(keys)}
def did(self, user, action, change, **kwargs): LogEntry.make(self.app_access.key, user.user_id, user.device_id, action=action, quantity=change, **kwargs).put()