def test_fetch_statistic_error(self, *args, **kwargs): group = GroupFactory(remote_id=GROUP_ID) post = PostFactory(remote_id=POST_ID, owner=group) self.assertEqual(PostStatistic.objects.count(), 0) with self.assertRaises(VkontakteError): post.fetch_statistic(date_from=date.today() - timedelta(2), date_to=date.today())
def test_fetch_statistic(self): group = GroupFactory(remote_id=GROUP_ID) post = PostFactory(remote_id=POST_ID, owner=group) self.assertEqual(PostStatistic.objects.count(), 0) post.fetch_statistic(date_from=date.today() - timedelta(2), date_to=date.today()) self.assertGreater(PostStatistic.objects.count(), 0) stat = PostStatistic.objects.all()[0] self.assertIsInstance(stat.date, date) self.assertGreater(stat.reach, 0)
def test_fetching_poll(self): group = GroupFactory.create(remote_id=GROUP_ID) post = PostFactory.create(remote_id=POST_ID, owner=group) instance = Poll.remote.fetch(POLL_ID, post) self.assertEqual(instance.pk, POLL_ID) self.assertEqual(instance.question, u'А ты занимаешься спортом?') self.assertEqual(instance.owner, group) self.assertEqual(instance.post, post) self.assertGreater(instance.votes_count, 2126) self.assertIsNotNone(instance.created) self.assertEqual(instance.answers.count(), 7) answer = instance.answers.get(pk=266067661) self.assertEqual(answer.text, u'Свой вариант (расскажу в комментариях).') self.assertGreater(answer.votes_count, 100) self.assertIsNotNone(answer.rate) answer = instance.answers.get(pk=266067655) self.assertEqual(answer.text, u'Да, профессионально!') self.assertGreater(answer.votes_count, 560) self.assertIsNotNone(answer.rate)
def test_fetch_post_reach(self): group = GroupFactory(remote_id=GROUP_ID) post = PostFactory(remote_id=POST_REACH_ID, owner=group) with self.assertRaises(ObjectDoesNotExist): post.reach post.fetch_reach() post = post.__class__.objects.get(pk=post.pk) self.assertGreaterEqual(post.reach.hide, 0) self.assertGreaterEqual(post.reach.join_group, 0) self.assertGreaterEqual(post.reach.links, 0) self.assertGreaterEqual(post.reach.reach_subscribers, 0) self.assertGreaterEqual(post.reach.reach_total, 0) self.assertGreaterEqual(post.reach.report, 0) self.assertGreaterEqual(post.reach.to_group, 0) self.assertGreaterEqual(post.reach.unsubscribe, 0)
def test_fetching_answer_users_by_parser(self, *args, **kwargs): group = GroupFactory.create(remote_id=GROUP_ID) post = PostFactory.create(remote_id=POST_ID, owner=group) poll = PollFactory.create(remote_id=POLL_ID, owner=group, post=post) answer = AnswerFactory.create(pk=266067661, poll=poll) answer.fetch_voters_by_parser() self.assertEqual(answer.voters.count(), answer.votes_count) self.assertGreaterEqual(answer.voters.count(), 155) self.assertGreater(answer.rate, 0)
def test_fetching_answer_users(self, *args, **kwargs): group = GroupFactory.create(remote_id=GROUP_ID) post = PostFactory.create(remote_id=POST_ID, wall_owner=group) poll = PollFactory.create(remote_id=POLL_ID, owner=group, post=post) answer = AnswerFactory.create(pk=266067661, poll=poll) answer.fetch_voters() self.assertEqual(answer.voters.count(), answer.votes_count) self.assertTrue(answer.voters.count() > 110) self.assertTrue(answer.rate > 0)
def test_comment_wall_crud_methods(self): group = GroupFactory(remote_id=GROUP_CRUD_ID) post = PostFactory(remote_id=POST_CRUD_ID, text='', owner=group) user = UserFactory(remote_id=self.token_user_id) self.assertNoCommentsForObject(post) # create Comment.remote.fetch_by_object(object=post) self.assertEqual(Comment.objects.count(), 0) # create comment = Comment(text='Test comment', object=post, owner=group, author=user, date=timezone.now()) comment.save(commit_remote=True) self.objects_to_delete += [comment] self.assertEqual(Comment.objects.count(), 1) self.assertNotEqual(len(comment.remote_id), 0) self.assertCommentTheSameEverywhere(comment) # create by manager comment = Comment.objects.create( text='Test comment created by manager', object=post, owner=group, author=user, date=timezone.now(), commit_remote=True) self.objects_to_delete += [comment] self.assertEqual(Comment.objects.count(), 2) self.assertNotEqual(len(comment.remote_id), 0) self.assertCommentTheSameEverywhere(comment) # update comment.text = 'Test comment updated' comment.save(commit_remote=True) self.assertEqual(Comment.objects.count(), 2) self.assertCommentTheSameEverywhere(comment) # delete comment.delete(commit_remote=True) self.assertEqual(Comment.objects.count(), 2) self.assertTrue(comment.archived) self.assertEqual(Comment.remote.fetch_by_object( object=comment.object).filter(remote_id=comment.remote_id).count(), 0) # restore comment.restore(commit_remote=True) self.assertFalse(comment.archived) self.assertEqual(Comment.objects.count(), 2) self.assertCommentTheSameEverywhere(comment)
def test_parse_poll(self): response = u''' {"response":{"answer_id": 0, "answers": [{"id": 266067655, "rate": 26.76, "text": "Да, профессионально!", "votes": 569}, {"id": 266067661, "rate": 5.41, "text": "Свой вариант (расскажу в комментариях).", "votes": 115}], "created": 1365411542, "owner_id": -16297716, "id": 83838453, "question": "А ты занимаешься спортом? (открытое голосование)", "votes": 2126}}''' group = GroupFactory.create(remote_id=GROUP_ID) post = PostFactory.create(owner=group) instance = Poll.remote.parse_response_dict( json.loads(response)['response'], {'post_id': post.id}) instance.save() self.assertEqual(instance.pk, POLL_ID) self.assertEqual(instance.question, u'А ты занимаешься спортом? (открытое голосование)') self.assertEqual(instance.owner, group) self.assertEqual(instance.post, post) self.assertEqual(instance.votes_count, 2126) self.assertIsNotNone(instance.created) self.assertEqual(instance.answers.count(), 2) answer = instance.answers.get(pk=266067661) self.assertEqual(answer.text, u'Свой вариант (расскажу в комментариях).') self.assertEqual(answer.votes_count, 115) self.assertEqual(answer.rate, 5.41) answer = instance.answers.get(pk=266067655) self.assertEqual(answer.text, u'Да, профессионально!') self.assertEqual(answer.votes_count, 569) self.assertEqual(answer.rate, 26.76)
def test_fetching_answer_users_by_api(self, *args, **kwargs): def calc_percentage(poll, answer_votes): pp = Poll.remote.fetch(poll.pk, poll.post) if pp and pp.votes_count: return answer_votes * 100. / pp.votes_count return 0 group = GroupFactory.create(remote_id=GROUP_ID) post = PostFactory.create(remote_id=POST_ID, owner=group) poll = PollFactory.create(remote_id=POLL_ID, owner=group, post=post) answer = AnswerFactory.create(pk=266067661, poll=poll) answer.fetch_voters_by_api() self.assertEqual(answer.voters.count(), answer.votes_count) self.assertGreaterEqual(answer.voters.count(), 155) self.assertGreater(answer.rate, 0) percentage = calc_percentage(poll, answer.votes_count) self.assertEqual(answer.rate, percentage)
def test_parse_poll(self): response = u''' {"response":{"answer_id": 0, "answers": [{"id": 266067655, "rate": 26.76, "text": "Да, профессионально!", "votes": 569}, {"id": 266067661, "rate": 5.41, "text": "Свой вариант (расскажу в комментариях).", "votes": 115}], "created": 1365411542, "owner_id": -16297716, "poll_id": 83838453, "question": "А ты занимаешься спортом? (открытое голосование)", "votes": 2126}}''' group = GroupFactory.create(remote_id=GROUP_ID) post = PostFactory.create(wall_owner=group) instance = Poll.remote.parse_response_dict(json.loads(response)['response'], {'post_id': post.id}) instance.save() self.assertEqual(instance.pk, POLL_ID) self.assertEqual(instance.question, u'А ты занимаешься спортом? (открытое голосование)') self.assertEqual(instance.owner, group) self.assertEqual(instance.post, post) self.assertEqual(instance.votes_count, 2126) self.assertIsNotNone(instance.created) self.assertEqual(instance.answers.count(), 2) answer = instance.answers.get(pk=266067661) self.assertEqual(answer.text, u'Свой вариант (расскажу в комментариях).') self.assertEqual(answer.votes_count, 115) self.assertEqual(answer.rate, 5.41) answer = instance.answers.get(pk=266067655) self.assertEqual(answer.text, u'Да, профессионально!') self.assertEqual(answer.votes_count, 569) self.assertEqual(answer.rate, 26.76)
def test_fetching_poll(self): group = GroupFactory.create(remote_id=GROUP_ID) post = PostFactory.create(remote_id=POST_ID, wall_owner=group) instance = Poll.remote.fetch(POLL_ID, group, post) self.assertEqual(instance.pk, POLL_ID) self.assertEqual(instance.question, u'А ты занимаешься спортом? (открытое голосование)') self.assertEqual(instance.owner, group) self.assertEqual(instance.post, post) self.assertTrue(instance.votes_count > 2126) self.assertIsNotNone(instance.created) self.assertEqual(instance.answers.count(), 7) answer = instance.answers.get(pk=266067661) self.assertEqual(answer.text, u'Свой вариант (расскажу в комментариях).') self.assertTrue(answer.votes_count > 100) self.assertIsNotNone(answer.rate) answer = instance.answers.get(pk=266067655) self.assertEqual(answer.text, u'Да, профессионально!') self.assertTrue(answer.votes_count > 560) self.assertIsNotNone(answer.rate)
def test_parse_post(self): response = '''{"age": [{"reach": 2153, "value": "12-18"}, {"reach": 1113, "value": "18-21"}, {"reach": 984, "value": "21-24"}, {"reach": 948, "value": "24-27"}, {"reach": 642, "value": "27-30"}, {"reach": 555, "value": "30-35"}, {"reach": 363, "value": "35-45"}, {"reach": 357, "value": "45-100"}], "cities": [{"name": "Донецк", "reach": 38, "value": 223}, {"name": "Воронеж", "reach": 25, "value": 1057}, {"name": "Рио", "reach": 18, "value": 136}, {"name": "Тируванамалай", "reach": 14, "value": 427}], "countries": [{"code": "RU", "name": "Россия", "reach": 6548, "value": 1}, {"code": "US", "name": "США", "reach": 15, "value": 9}], "day": "2014-02-27", "link_clicks": 10, "reach": 8243, "reach_subscribers": 357, "sex": [{"reach": 4420, "value": "f"}, {"reach": 3823, "value": "m"}], "sex_age": [{"reach": 1141, "value": "f;12-18"}, {"reach": 464, "value": "f;18-21"}, {"reach": 513, "value": "f;21-24"}, {"reach": 487, "value": "f;24-27"}, {"reach": 355, "value": "f;27-30"}, {"reach": 337, "value": "f;30-35"}, {"reach": 243, "value": "f;35-45"}, {"reach": 186, "value": "f;45-100"}, {"reach": 1012, "value": "m;12-18"}, {"reach": 649, "value": "m;18-21"}, {"reach": 471, "value": "m;21-24"}, {"reach": 461, "value": "m;24-27"}, {"reach": 287, "value": "m;27-30"}, {"reach": 218, "value": "m;30-35"}, {"reach": 120, "value": "m;35-45"}, {"reach": 171, "value": "m;45-100"}]}''' instance = PostStatistic(post=PostFactory()) instance.parse(json.loads(response)) instance.save() self.assertEqual(instance.date, date(2014, 2, 27)) self.assertEqual(instance.reach, 8243) self.assertEqual(instance.reach_subscribers, 357) self.assertEqual(instance.link_clicks, 10) self.assertEqual(instance.reach_males, 3823) self.assertEqual(instance.reach_females, 4420) self.assertEqual(instance.reach_age_18, 2153) self.assertEqual(instance.reach_age_18_21, 1113) self.assertEqual(instance.reach_age_21_24, 984) self.assertEqual(instance.reach_age_24_27, 948) self.assertEqual(instance.reach_age_27_30, 642) self.assertEqual(instance.reach_age_30_35, 555) self.assertEqual(instance.reach_age_35_45, 363) self.assertEqual(instance.reach_age_45, 357) self.assertEqual(instance.reach_males_age_18, 1012) self.assertEqual(instance.reach_males_age_18_21, 649) self.assertEqual(instance.reach_males_age_21_24, 471) self.assertEqual(instance.reach_males_age_24_27, 461) self.assertEqual(instance.reach_males_age_27_30, 287) self.assertEqual(instance.reach_males_age_30_35, 218) self.assertEqual(instance.reach_males_age_35_45, 120) self.assertEqual(instance.reach_males_age_45, 171) self.assertEqual(instance.reach_females_age_18, 1141) self.assertEqual(instance.reach_females_age_18_21, 464) self.assertEqual(instance.reach_females_age_21_24, 513) self.assertEqual(instance.reach_females_age_24_27, 487) self.assertEqual(instance.reach_females_age_27_30, 355) self.assertEqual(instance.reach_females_age_30_35, 337) self.assertEqual(instance.reach_females_age_35_45, 243) self.assertEqual(instance.reach_females_age_45, 186)