def test__sites__list__ok(self): social_url = factories.FacebookUrlFactory() factories.GoogleUrlFactory(site=social_url.site) factories.SiteFactory( user=social_url.site.user) # second site for authenticated user factories.SiteFactory() # some random site request = self.factory.get(self.path) self._authenticate_request(request, user=social_url.site.user) response = views.SiteListCreateView.as_view()(request) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data.__len__(), 2)
def setUpClass(cls): super(TestNonJavascriptSharing, cls).setUpClass() cls.client = Client() cls.factory = RequestFactory() cls.service_factory = channels.ServiceFactory() cls.service_objects = { constants.SOCIAL_SERVICE_GMAIL: channels.GmailService, constants.SOCIAL_SERVICE_GOOGLE_PLUS: channels.GooglePlusService, constants.SOCIAL_SERVICE_FACEBOOK: channels.FacebookService, constants.SOCIAL_SERVICE_TWITTER: channels.TwitterService, constants.SOCIAL_SERVICE_DIGG: channels.DiggService, constants.SOCIAL_SERVICE_DELICIOUS: channels.DeliciousService, constants.SOCIAL_SERVICE_STUMBLEUPON: channels.StumbleuponService, constants.SOCIAL_SERVICE_LINKEDIN: channels.LinkedinService, constants.SOCIAL_SERVICE_PINTEREST: channels.PinterestService, constants.SOCIAL_SERVICE_WHATSAPP: channels.WhatsappService, constants.SOCIAL_SERVICE_TUMBLR: channels.TumblrService, constants.SOCIAL_SERVICE_REDDIT: channels.RedditService, constants.SOCIAL_SERVICE_INSTAGRAM: channels.Service } cls.site = factories.SiteFactory(thank_you_message='test', address_bar_sharing=True, copy_paste_sharing=True, domain='test-site-settings.com', trim_api_key='123') cls.site_id = Signer().sign(cls.site.pk)
def test__site_get_id_by_hash(self): site = factories.SiteFactory() site_id_int = str(site.pk) self.assertEqual(models.Site.get_id_by_hash(site_id_int), site_id_int) signer = Signer() site_id = signer.sign(site.pk) self.assertEqual(models.Site.get_id_by_hash(site_id), site_id_int)
def test__site_get_config_with_social_urls(self): site = factories.SiteFactory(domain='test.com', thank_you_message='test') factories.FacebookUrlFactory(url='social1.com/test', site=site) factories.GoogleUrlFactory(url='social2.com/test', site=site) expected = { 'hash_id': '13:NJPFNaC41thbepMv_YjCqSefKlg', 'sharing': { 'byHash': False, 'copyPaste': False, 'hasShortUrls': True }, 'thank_you': { 'services': { 'facebook': 'social1.com/test', 'googlePlus': 'social2.com/test' }, 'message': 'test', 'advertImageUrl': '', 'advertTitle': '', 'advertUrl': '', }, 'widget_configurations': [], 'offset': 0, 'dmp_execute_code': False, 'vanity_domain': '' } self.assertEqual(site.get_config(), expected)
def test__get_report_api(self): site = factories.SiteFactory() begin_date, end_date = get_begin_end_date_timestamp() params = { 'site': site.pk, 'begin_date': begin_date, 'end_date': end_date, 'events': 'clicks' } url = '/api/v1/reports?%s' % urllib.urlencode(params) request = self.factory.get(url) self._authenticate_request(request, user=site.user) old_response = archive_views.GetReport.as_view()(request) data = json.loads(old_response.content) old_data = self.sum_all(data) kwargs = dict(site=site.pk, source=constants.SOCIAL_SERVICE_FACEBOOK, url='http://test.com', tool=constants.Tools.SHARING_BUTTONS.value, domain='www.gravity4.com', date=datetime.datetime.utcnow(), country=constants.UNKNOWN_COUNTRY, browser=constants.UNKNOWN_BROWSER, search_term='', search_engine='') tasks.update_counters(constants.Events.CLICK.value, **kwargs) request = self.factory.get(url) self._authenticate_request(request, user=site.user) response = archive_views.GetReport.as_view()(request) self.assertEqual(response.status_code, status.HTTP_200_OK) data = json.loads(response.content) new_data = self.sum_all(data) self.assertNotEqual(old_data, new_data)
def test__site_detail__update(self, cache): site = factories.SiteFactory() widget_configuration = factories.WidgetConfigurationFactory() data_set = [ dict(domain='new_site_detail.com'), dict(social_urls=[{ 'service': 'facebook', 'url': 'http://fb.test.com' }]), dict(address_bar_sharing=True, widget_configurations=[widget_configuration.pk]), ] for data in data_set: request = self.factory.patch(reverse('accounts_site_detail', args=[site.pk]), data=data) self._authenticate_request(request, user=site.user) response = views.SiteRetrieveUpdateView.as_view()(request, pk=site.pk) self.assertEqual(response.status_code, status.HTTP_200_OK, response.data) fresh_site = models.Site.objects.get(pk=site.pk) self.assertDictEqual(response.data, serializers.SiteSerializer(fresh_site).data, msg=data) cache.delete.assert_called_with(dict(site_id=site.pk)) self.assertEqual(cache.delete.call_count, 3)
def test__widget_detail__update_buttons_plus(self, cache): site = factories.SiteFactory() widget = factories.WidgetConfigurationFactory(site=site) factories.FacebookWidgetButtonFactory(order=0, configuration=widget, is_extra_button=False) factories.GoogleWidgetButtonFactory(order=1, configuration=widget, is_extra_button=False) data = { 'name': 'New title', 'type': constants.WIDGET_CONFIGURATION_SHARING_BUTTONS, 'extra_button_animation': False, 'orientation': constants.BUTTON_ORIENTATION_VERTICAL, 'button_size': constants.BUTTON_SIZE_SMALL, 'button_style': constants.BUTTON_STYLE_ICON, 'counter_position': constants.COUNTER_POSITION_TOP, 'is_active': True, 'has_link_share_button': False, 'buttons': [{ 'service': 'googlePlus', 'is_extra_button': True, 'is_short_link': True, 'text': 'Google+', 'has_counter': True, 'follow_url': '' }, { 'service': 'facebook', 'is_extra_button': True, 'is_short_link': True, 'text': 'Facebook', 'has_counter': True, 'follow_url': '' }] } request = self.factory.patch( reverse('accounts_widget_detail', args=[site.pk, widget.pk]), data) self._authenticate_request(request, user=widget.site.user) response = views.WidgetRetrieveUpdateView.as_view()( request, site_pk=site.pk, widget_pk=widget.pk) self.assertEqual(response.status_code, status.HTTP_200_OK) expected = data.copy() expected['id'] = widget.pk expected['vanity_domain'] = '' expected['position'] = '' self.assertDictEqual(response.data, expected) cache.delete.assert_called_with(dict(site_id=site.pk)) self.assertEqual(cache.delete.call_count, 1)
def test__get_report_api_incorrect_request(self): site = factories.SiteFactory() begin_date, end_date = get_begin_end_date_timestamp() params = { 'begin_date': begin_date, 'end_date': end_date, 'events': 'clicks' } # Generate 400 (empty site id) url = '/api/v1/reports?%s' % urllib.urlencode(params) request = self.factory.get(url) self._authenticate_request(request, user=site.user) response = archive_views.GetReport.as_view()(request) self.assertEqual(response.status_code, 400) # Generate 404 (nonexistent site id) url = '/api/v1/reports?%s&site=404' % urllib.urlencode(params) request = self.factory.get(url) self._authenticate_request(request, user=site.user) response = archive_views.GetDigest.as_view()(request) self.assertEqual(response.status_code, 404) # Generate 403 (site's user != user) user = factories.UserFactory() url = '/api/v1/reports?%s&site=%s' % (urllib.urlencode(params), site.pk) request = self.factory.get(url) self._authenticate_request(request, user=user) response = archive_views.GetReport.as_view()(request) self.assertEqual(response.status_code, 403)
def setUpClass(cls): super(TestTasks, cls).setUpClass() cls.site = factories.SiteFactory( thank_you_message='test', address_bar_sharing=True, domain='test-tasks.com' ) cls.trim_service = TrimService() cls.timestamp = datetime(2000, 1, 15, 4, 7)
def test__site_detail__unauthorized(self): site = factories.SiteFactory() request = self.factory.get( reverse('accounts_site_detail', args=[site.pk])) self._authenticate_request(request) response = views.SiteRetrieveUpdateView.as_view()(request, pk=site.pk) self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) self.assertDictEqual(response.data, {'detail': 'Not found.'})
def test__site_detail__get(self): site = factories.SiteFactory() request = self.factory.get( reverse('accounts_site_detail', args=[site.pk])) self._authenticate_request(request, user=site.user) response = views.SiteRetrieveUpdateView.as_view()(request, pk=site.pk) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertDictEqual(response.data, serializers.SiteSerializer(site).data)
def test__cache_get_digest_data(self): site = factories.SiteFactory() begin_date, end_date = get_begin_end_date() archive_views.get_digest_data(site, begin_date, end_date, aggregation='day') cached, data = archive_views.get_digest_data(site, begin_date, end_date, aggregation='day') self.assertEqual(cached, True)
def test__widgets__create__more_than_one_disallowed(self): user1 = factories.UserFactory() user2 = factories.UserFactory() site1 = factories.SiteFactory(user=user1) site2 = factories.SiteFactory(user=user1) site3 = factories.SiteFactory(user=user2) disallow_many_widgets = [ constants.WIDGET_CONFIGURATION_COPY_PASTE, constants.WIDGET_CONFIGURATION_NEWSLETTER, constants.WIDGET_CONFIGURATION_MOBILE, constants.WIDGET_CONFIGURATION_VERTICAL_FLOAT ] self.data.update({ 'position': constants.WIDGET_LEFT_POSITION, 'page_title': 'Page title', 'page_url': 'http://example.com', 'media_url': 'http://media.com', 'min_width': 0, }) for widget_type in disallow_many_widgets: self.data['type'] = widget_type # First creation response, _ = self._create_widget(site=site1) self.assertEqual(response.status_code, status.HTTP_201_CREATED) # Second creation fails for the same user and the same site self.data['name'] += '1' response, _ = self._create_widget(site=site1) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertEqual( response.data['non_field_errors'], ['You can not create more than one widget of this type.']) # Second creation doesn't fail for the same user and another site self.data['name'] += '2' response, _ = self._create_widget(site=site2) self.assertEqual(response.status_code, status.HTTP_201_CREATED) # Second creation doesn't fail for another user self.data['name'] += '3' response, _ = self._create_widget(site=site3) self.assertEqual(response.status_code, status.HTTP_201_CREATED)
def test__newsletter_widget_detail__update_media_url(self, cache): site = factories.SiteFactory() widget = factories.WidgetConfigurationFactory( site=site, type=constants.WIDGET_CONFIGURATION_NEWSLETTER) factories.FacebookWidgetButtonFactory(order=0, configuration=widget) factories.GoogleWidgetButtonFactory(order=1, configuration=widget) data = { 'buttons': [{ 'service': 'twitter', 'is_extra_button': True }, { 'service': 'facebook', 'is_extra_button': True }, { 'service': 'pinterest', 'is_extra_button': True }], 'media_url': 'http://test.com' } request = self.factory.patch( reverse('accounts_widget_detail', args=[site.pk, widget.pk]), data) self._authenticate_request(request, user=widget.site.user) response = views.WidgetRetrieveUpdateView.as_view()( request, site_pk=site.pk, widget_pk=widget.pk) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data['media_url'], 'http://test.com') cache.delete.assert_called_with(dict(site_id=site.pk)) self.assertEqual(cache.delete.call_count, 1) # data without pinterest social service data = { 'buttons': [{ 'service': 'twitter', 'is_extra_button': True }], 'media_url': 'http://test.com' } request = self.factory.patch( reverse('accounts_widget_detail', args=[site.pk, widget.pk]), data) self._authenticate_request(request, user=widget.site.user) response = views.WidgetRetrieveUpdateView.as_view()( request, site_pk=site.pk, widget_pk=widget.pk) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data['media_url'], 'http://test.com') cache.delete.assert_called_with(dict(site_id=site.pk)) self.assertEqual(cache.delete.call_count, 2)
def test__widgets__create__more_than_one_allowed(self): user1 = factories.UserFactory() user2 = factories.UserFactory() site1 = factories.SiteFactory(user=user1) site2 = factories.SiteFactory(user=user1) site3 = factories.SiteFactory(user=user2) allow_many_widgets = [ constants.WIDGET_CONFIGURATION_SHARING_BUTTONS, constants.WIDGET_CONFIGURATION_ORIGIN_BUTTONS, constants.WIDGET_CONFIGURATION_FOLLOW ] self.data.update({ 'position': constants.WIDGET_LEFT_POSITION, 'page_title': 'Page title', 'page_url': 'http://example.com', 'media_url': 'http://media.com', 'min_width': 0, }) for widget_type in allow_many_widgets: self.data['type'] = widget_type # First creation response, _ = self._create_widget(site=site1) self.assertEqual(response.status_code, status.HTTP_201_CREATED) # Second creation for the same user and the same site self.data['name'] += '1' response, _ = self._create_widget(site=site1) self.assertEqual(response.status_code, status.HTTP_201_CREATED) # Second creation for the same user and another site self.data['name'] += '2' response, _ = self._create_widget(site=site2) self.assertEqual(response.status_code, status.HTTP_201_CREATED) # Second creation for another user self.data['name'] += '3' response, _ = self._create_widget(site=site3) self.assertEqual(response.status_code, status.HTTP_201_CREATED)
def test__widget_detail__unauthorized(self): site = factories.SiteFactory() widget = factories.WidgetConfigurationFactory(site=site) request = self.factory.get( reverse('accounts_widget_detail', args=[site.pk, widget.pk])) # self._authenticate_request(request) response = views.WidgetRetrieveUpdateView.as_view()( request, site_pk=site.pk, widget_pk=widget.pk) self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED) self.assertDictEqual( response.data, {'detail': 'Authentication credentials were not provided.'})
def test__widget_detail__update_buttons_with_duplicates(self): site = factories.SiteFactory() widget = factories.WidgetConfigurationFactory(site=site) data = {'buttons': [{'service': 'facebook'}, {'service': 'facebook'}]} request = self.factory.patch( reverse('accounts_widget_detail', args=[site.pk, widget.pk]), data) self._authenticate_request(request, user=widget.site.user) response = views.WidgetRetrieveUpdateView.as_view()( request, site_pk=site.pk, widget_pk=widget.pk) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertEqual( response.data['buttons'], ['Service must be unique for the widget configuration.'])
def setUpClass(cls): super(TestTracker, cls).setUpClass() cls.client = Client() cls.factory = RequestFactory() cls.site = factories.SiteFactory(thank_you_message='test', thank_you_advert_image_url='', thank_you_advert_url='', thank_you_advert_title='', address_bar_sharing=True, domain='test-tasks.com') cls.click_url = reverse('tracker_click') cls.track_event = reverse('track_event') cls.site_settings_url = reverse('site_settings') cls.site_id = Signer().sign(cls.site.pk) cls.counters_url = reverse('counters', kwargs={'site_id': cls.site_id}) cls.counters_url_int = reverse('counters', kwargs={'site_id': cls.site.pk}) cls.create_shortlink_url = reverse('tracker_create_shortlink')
def test__all_widgets(self): all_widgets = ( (constants.WIDGET_CONFIGURATION_SHARING_BUTTONS, models.SharingButtonsWidget), (constants.WIDGET_CONFIGURATION_COPY_PASTE, models.CopyPasteWidget), (constants.WIDGET_CONFIGURATION_NEWSLETTER, models.NewsletterWidget), (constants.WIDGET_CONFIGURATION_MOBILE, models.MobileWidget), (constants.WIDGET_CONFIGURATION_FOLLOW, models.FollowWidget), ) for widget_type, class_instance in all_widgets: site = factories.SiteFactory() class_instance.objects.all().delete() for i in range(5): factories.WidgetConfigurationFactory(site=site, type=widget_type) # Check it from the object's manager self.assertEqual(class_instance.objects.all().count(), 5)
def test__site_detail__update_social_urls_with_duplicates(self): site = factories.SiteFactory() data = { 'social_urls': [{ 'service': 'facebook', 'url': 'facebook.com/testUrl' }, { 'service': 'facebook', 'url': 'twitter.com/duplicateServiceUrl' }] } request = self.factory.patch( reverse('accounts_site_detail', args=[site.pk]), data) self._authenticate_request(request, user=site.user) response = views.SiteRetrieveUpdateView.as_view()(request, pk=site.pk) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertEqual(response.data['social_urls'], ['Service must be unique for the site.'])
def test__get_digest_api(self): site = factories.SiteFactory() begin_date, end_date = get_begin_end_date_timestamp() params = { 'site': site.pk, 'begin_date': begin_date, 'end_date': end_date } url = '/api/v1/digest?%s' % urllib.urlencode(params) request = self.factory.get(url) self._authenticate_request(request, user=site.user) response = archive_views.GetDigest.as_view()(request) self.assertEqual(response.status_code, status.HTTP_200_OK) data = get_data(site.pk) for item in data: tasks.update_counters(item['event'], value=1, **item['data']) request = self.factory.get(url) self._authenticate_request(request, user=site.user) response = archive_views.GetDigest.as_view()(request) self.assertEqual(response.status_code, status.HTTP_200_OK)
def test__widget_detail__get(self): serializers_map = { 'sharing-buttons': serializers.SharingButtonsWidgetSerializer, 'copy-paste': serializers.CopyPasteWidgetSerializer, 'newsletter': serializers.NewsletterWidgetSerializer } for widget_type, serializer in serializers_map.items(): site = factories.SiteFactory() widget = factories.WidgetConfigurationFactory(site=site, type=widget_type) request = self.factory.get( reverse('accounts_widget_detail', args=[site.pk, widget.pk])) self._authenticate_request(request, user=widget.site.user) response = views.WidgetRetrieveUpdateView.as_view()( request, site_pk=site.pk, widget_pk=widget.pk) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertDictEqual(response.data, serializer(widget).data)
def test__site_settings_cached(self, create_uuid): facebook_url = 'http://facebook.com/test' thank_you_message = 'test' uuid = 'yPEZFA4eEeWv9ggAJ/e7NQ' site = factories.SiteFactory(thank_you_message=thank_you_message, address_bar_sharing=True, copy_paste_sharing=True, domain='test-site-settings-2.com') factories.FacebookUrlFactory(url=facebook_url, site=site) create_uuid.return_value = uuid site_ids = [str(site.pk), site.hash_id] for site_id in site_ids: request = self.factory.get(self.site_settings_url + '?idsite=' + site_id) expected = { 'sharing': { 'byHash': True, 'copyPaste': True, 'hasShortUrls': True }, 'thank_you': { 'services': { constants.SOCIAL_SERVICE_FACEBOOK: facebook_url }, 'message': thank_you_message, 'advertImageUrl': u'', 'advertTitle': u'', 'advertUrl': u'', }, 'hash_id': site.hash_id, 'widget_configurations': [], 'uuid': uuid, 'dmp_execute_code': False, 'vanity_domain': '' } response = views.site_settings(request) self.assertEqual(response.status_code, 200) self.assertEqual(expected, json.loads(response.content))
def test__site_get_config(self): site = factories.SiteFactory(domain='test.com', thank_you_message='test') expected = { 'hash_id': '13:NJPFNaC41thbepMv_YjCqSefKlg', 'sharing': { 'byHash': False, 'copyPaste': False, 'hasShortUrls': True }, 'thank_you': { 'services': {}, 'message': 'test', 'advertImageUrl': '', 'advertTitle': '', 'advertUrl': '', }, 'widget_configurations': [], 'offset': 0, 'dmp_execute_code': False, 'vanity_domain': '' } self.assertDictEqual(site.get_config(), expected)
def test__widget_detail__update(self, cache): site = factories.SiteFactory() widget = factories.WidgetConfigurationFactory(site=site) data_set = [ dict(name='new_widget_configuration_title'), dict(buttons=[{ 'service': 'facebook', 'is_extra_button': True }, { 'service': 'twitter', 'is_extra_button': False }]), dict(orientation=constants.BUTTON_ORIENTATION_VERTICAL), dict(is_active=False), ] for data in data_set: request = self.factory.patch(reverse('accounts_widget_detail', args=[site.pk, widget.pk]), data=data) self._authenticate_request(request, user=widget.site.user) response = views.WidgetRetrieveUpdateView.as_view()( request, site_pk=site.pk, widget_pk=widget.pk) self.assertEqual(response.status_code, status.HTTP_200_OK, response.data) fresh_widget_configuration = models.WidgetConfiguration.objects.get( pk=widget.pk) self.assertDictEqual(response.data, serializers.SharingButtonsWidgetSerializer( fresh_widget_configuration).data, msg=data) cache.delete.assert_has_calls([call(dict(site_id=site.pk))]) self.assertEqual(cache.delete.call_count, 4)
def test__site_detail__update_when_model_has_social_urls(self, cache): site = factories.SiteFactory() data = { 'domain': 'test.pt', 'thank_you_message': 'test thank you message', 'thank_you_advert_image_url': 'http://mydomain.com/test.png', 'thank_you_advert_url': 'http://mydomain.com', 'thank_you_advert_title': 'some title', 'social_urls': [{ 'service': 'facebook', 'url': 'facebook.com/newTestUrl' }, { 'service': 'twitter', 'url': 'twitter.com/newTestUrl' }], 'address_bar_sharing': True, 'copy_paste_sharing': True, 'has_short_urls': True, 'trim_api_key': '7ec3c5647b5c732db85d11deca8f6d95', 'hash_id': '1234', 'analytics_account': 'ac', 'analytics_property': 'prop', 'analytics_profile': 'prof', 'vanity_domain': '' } request = self.factory.patch( reverse('accounts_site_detail', args=[site.pk]), data) self._authenticate_request(request, user=site.user) response = views.SiteRetrieveUpdateView.as_view()(request, pk=site.pk) self.assertEqual(response.status_code, status.HTTP_200_OK) expected = data.copy() expected['id'] = site.pk facebook_social_url_id = models.SocialUrl.objects.get( site__pk=site.pk, service='facebook').pk twitter_social_url_id = models.SocialUrl.objects.get( site__pk=site.pk, service='twitter').pk expected['social_urls'][0]['id'] = facebook_social_url_id expected['social_urls'][1]['id'] = twitter_social_url_id self.assertEqual(response.data, expected) cache.delete.assert_called_with(dict(site_id=site.pk)) self.assertEqual(cache.delete.call_count, 1) # Delete twitter service from social_url data['social_urls'] = [{ 'service': 'facebook', 'url': 'facebook.com/newTestUrl' }] request = self.factory.put( reverse('accounts_site_detail', args=[site.pk]), data) self._authenticate_request(request, user=site.user) response = views.SiteRetrieveUpdateView.as_view()(request, pk=site.pk) self.assertEqual(response.status_code, status.HTTP_200_OK) expected = data.copy() expected['id'] = site.pk facebook_social_url_id = models.SocialUrl.objects.get( site__pk=site.pk, service='facebook').pk expected['social_urls'][0]['id'] = facebook_social_url_id self.assertEqual(response.data, expected)
def setUpClass(cls): super(WidgetsViewsTestCase, cls).setUpClass() cls.site = factories.SiteFactory() cls.path = reverse('accounts_widgets', args=[cls.site.pk])
def setUpClass(cls): super(ReportsTestCase, cls).setUpClass() cls.site = factories.SiteFactory() begin_date, end_date = date_range[0], date_range[-1] cls.report = Report(cls.site.pk, begin_date, end_date)