def test_limit_drafts(self) -> None: draft_objects = [] hamlet = self.example_user("hamlet") base_time = timezone_now() initial_count = Draft.objects.count() step_value = timedelta(seconds=1) # Create 11 drafts. # TODO: This would be better done as an API request. for i in range(0, settings.MAX_DRAFTS_IN_REGISTER_RESPONSE + 1): draft_objects.append( Draft( user_profile=hamlet, recipient=None, topic="", content="sample draft", last_edit_time=base_time + i * step_value, ) ) Draft.objects.bulk_create(draft_objects) # Now fetch the drafts part of the initial state and make sure # that we only got back settings.MAX_DRAFTS_IN_REGISTER_RESPONSE. # No more. Also make sure that the drafts returned are the most # recently edited ones. self.login("hamlet") page_params = self._get_page_params(self._get_home_page()) self.assertEqual(page_params["user_settings"]["enable_drafts_synchronization"], True) self.assert_length(page_params["drafts"], settings.MAX_DRAFTS_IN_REGISTER_RESPONSE) self.assertEqual( Draft.objects.count(), settings.MAX_DRAFTS_IN_REGISTER_RESPONSE + 1 + initial_count ) # +2 for what's already in the test DB. for draft in page_params["drafts"]: self.assertNotEqual(draft["timestamp"], base_time)
def do_create_drafts(draft_dicts: List[Dict[str, Any]], user_profile: UserProfile) -> List[Draft]: """Create drafts in bulk for a given user based on the draft dicts. Since currently, the only place this method is being used (apart from tests) is from the create_draft view, we assume that the drafts_dicts are syntactically valid (i.e. they satisfy the draft_dict_validator).""" draft_objects = [] for draft_dict in draft_dicts: valid_draft_dict = further_validated_draft_dict( draft_dict, user_profile) draft_objects.append( Draft( user_profile=user_profile, recipient=valid_draft_dict["recipient"], topic=valid_draft_dict["topic"], content=valid_draft_dict["content"], last_edit_time=valid_draft_dict["last_edit_time"], )) created_draft_objects = Draft.objects.bulk_create(draft_objects) event = { "type": "drafts", "op": "add", "drafts": [draft.to_dict() for draft in created_draft_objects], } send_event(user_profile.realm, event, [user_profile.id]) return created_draft_objects
def create_drafts(request: HttpRequest, user_profile: UserProfile, draft_dicts: List[Dict[str, Any]]=REQ("drafts", validator=check_list(draft_dict_validator)), ) -> HttpResponse: draft_objects = [] for draft_dict in draft_dicts: valid_draft_dict = further_validated_draft_dict(draft_dict, user_profile) draft_objects.append(Draft( user_profile=user_profile, recipient=valid_draft_dict["recipient"], topic=valid_draft_dict["topic"], content=valid_draft_dict["content"], last_edit_time=valid_draft_dict["last_edit_time"], )) created_draft_objects = Draft.objects.bulk_create(draft_objects) draft_ids = [draft_object.id for draft_object in created_draft_objects] return json_success({"ids": draft_ids})