Esempio n. 1
0
    def test_authorization_with_event_custom_payload(self):
        later_on = datetime.datetime(2010, 1, 2, tzinfo=utc)
        org = Organization(code="a")
        org.save()
        event = org.create_event(
            Event(name="event", time=later_on),
            self.tom
        )

        custom_payload = "event:{0}".format(event.id)

        #test that phone clients that using this will be added to event
        number = {
            'phone_number': '212-718-4000',
            'default_country': 'US',
        }
        auth_response = self.client.post('/authorize_phone_number/', content_type='application/json', data=json.dumps(number))
        confirmation_key = json.loads(auth_response.content)['confirmation_key']

        pre_count = AlbumMember.objects.filter(album=event.album).count()
        confirm = {
            'confirmation_code': '6666', # Default code currently used for testing
            'device_description': 'iPhone 3GS'
        }
        r = self.client.post(
            '/confirm_sms_code/{0}/?custom_payload={1}'.format(
                confirmation_key,
                custom_payload,
            ),
            content_type='application/json', data=json.dumps(confirm),
        )
        self.assertEqual(r.status_code, 200)
        post_count = AlbumMember.objects.filter(album=event.album).count()
        self.assertEqual(pre_count + 1, post_count)
Esempio n. 2
0
    def test_app_init_with_event_session(self):
        later_on = datetime.datetime(2010, 1, 2, tzinfo=utc)
        org = Organization(code="a")
        org.save()
        event = org.create_event(
            Event(name="event", time=later_on),
            self.tom
        )
        eventLink = event.create_link()

        # Visit the invite_page so that the session data is associated with the client
        r = self.client.get(reverse(event_link, args=(eventLink.slug,)))
        self.assertEqual(r.status_code, 200)

        r = self.client.get(reverse(app_init) + '?app=android&device_description=test')
        self.assertEqual(r.status_code, 302)
        url = urlparse.urlparse(r['Location'])
        query_str = url.query
        if not query_str:
            # Python's urlparse module sometimes will not parse the query
            # string for schemes that it doesn't like, so we have to extract it
            # manually
            query_str = url.path[url.path.find('?')+1:]
        self.assertEqual(url.scheme, 'shotvibe')
        query = urlparse.parse_qs(query_str, strict_parsing=True)
        self.assertEqual(len(query['country_code'][0]), 2)
        custom_payload = query['custom_payload'][0]
        self.assertEqual(custom_payload, "event:{0}".format(event.id))
Esempio n. 3
0
 def setUp(self):
     self.amanda = auth.get_user_model().objects.get(pk=2)
     self.org = Organization(code="a")
     self.org.save()
     self.org.add_user(self.amanda)
     now = django.utils.timezone.now()
     self.event = self.org.create_event(
         Event(name="event", time=now),
         self.amanda
     )
Esempio n. 4
0
class EventLinkVisitTests(TestCase):
    fixtures = ['tests/test_users']

    def setUp(self):
        self.amanda = auth.get_user_model().objects.get(pk=2)
        self.org = Organization(code="a")
        self.org.save()
        self.org.add_user(self.amanda)
        now = django.utils.timezone.now()
        self.event = self.org.create_event(
            Event(name="event", time=now),
            self.amanda,
        )

    def test_visited_count(self):
        eventLink = self.event.create_link()
        pk = eventLink.pk
        slug = eventLink.slug

        self.assertEqual(eventLink.visited_count, 0)

        for i in xrange(20):
            r = self.client.get(reverse(event_link, args=[slug]))
            #have to fetch link again
            eventLink = EventLink.objects.get(pk=pk)
            self.assertEqual(eventLink.visited_count, i + 1)

    def test_downloaded_count(self):
        eventLink = self.event.create_link()
        pk = eventLink.pk
        slug = eventLink.slug

        self.assertEqual(eventLink.visited_count, 0)

        for i in xrange(20):
            r = self.client.get(reverse(event_download_link, args=[slug]))
            self.assertEqual(r.status_code, 302)
            #have to fetch link again
            eventLink = EventLink.objects.get(pk=pk)
            self.assertEqual(eventLink.downloaded_count, i + 1)
Esempio n. 5
0
class EventLinkTests(TestCase):
    fixtures = ['tests/test_users']

    def setUp(self):
        self.amanda = auth.get_user_model().objects.get(pk=2)
        self.org = Organization(code="a")
        self.org.save()
        self.org.add_user(self.amanda)
        now = django.utils.timezone.now()
        self.event = self.org.create_event(
            Event(name="event", time=now),
            self.amanda
        )

    def test_url_hashing(self):
        # check first 10.000 values
        n = 10000
        ids = range(n)
        seen_hashes = set()
        for i in ids:
            h = EventLink.encode_hash(i)
            r_i = EventLink.decode_hash(h)
            self.assertEqual(i, r_i)
            seen_hashes.add(h)
        # check for no collisions
        self.assertEqual(len(seen_hashes), n)

        # check some random custom url values
        vals = ['foobar', 'somecustomlink1']
        for val in vals:
            i = EventLink.decode_hash(val)
            r_h = EventLink.encode_hash(i)
            self.assertEqual(val, r_h)

        # check some random invalid url values
        vals = ['foo bar', 'somecustom/link']
        for val in vals:
            i = EventLink.decode_hash(val)
            self.assertEqual(i, None)

    def test_url_creation(self):
        n = 1000
        ids = range(n)
        for i in ids:
            eventLink = self.event.create_link()

        self.assertEqual(EventLink.objects.count(), n)

    def test_url_collision(self):
        n = 10
        ids = range(n)
        rev_slugs = []
        for i in ids:
            eventLink = self.event.create_link()
            rev_slugs.append(eventLink.slug)
        self.assertEqual(EventLink.objects.count(), n)
        for slug in rev_slugs:
            with self.assertRaises(IntegrityError):
                with transaction.atomic():
                    self.event.create_link(slug=slug)

    def test_url_collision_skip(self):
        vals = (5, 6, 4, 7, 8, 20)
        for i, val in enumerate(vals):
            slug = EventLink.encode_hash(val)
            eventLink = self.event.create_link(slug=slug)

        n = 10
        ids = range(n)
        for i in ids:
            eventLink = self.event.create_link()
        num_links = EventLink.objects.filter(event__isnull=False).count()
        self.assertEqual(num_links, n+len(vals))
Esempio n. 6
0
 def setUp(self):
     self.amanda = auth.get_user_model().objects.get(pk=2)
     self.org = Organization(code="a")
     self.org.save()
     self.org.add_user(self.amanda)
     self.client.login(username='******', password='******')
Esempio n. 7
0
class AffiliateCRUDTests(TestCase):
    fixtures = ['tests/test_users']

    def setUp(self):
        self.amanda = auth.get_user_model().objects.get(pk=2)
        self.org = Organization(code="a")
        self.org.save()
        self.org.add_user(self.amanda)
        self.client.login(username='******', password='******')

    def test_create_event(self):
        r = self.client.get(reverse(create_event, args=[self.org.code]))
        self.assertEqual(r.status_code, 200)
        data = {
            'name': 'Sample',
            'time_0': '18/02/2014 13:45',
            'sms_message': 'Test',
            'push_notification': 'Test',
            'location': 'Test',
            'html_content': """<ul>
    <li>Hey</li>
    <li>Hey</li>
</ul>""",
        }
        r = self.client.post(reverse(create_event, args=[self.org.code]), data)
        self.assertEqual(r.status_code, 302)

        #should redirect to new event
        event = self.org.event_set.all()[0]
        event_url = 'http://testserver' + \
            reverse(event_edit, args=[self.org.code, event.pk])
        self.assertEqual(r['Location'], event_url)

        #check fields were set correctly
        for field in ('name', 'sms_message', 'push_notification', 'location', 'html_content'):
            self.assertEqual(getattr(event, field), data.get(field))

    def test_edit_event(self):
        now = django.utils.timezone.now()
        event = self.org.create_event(
            Event(name="event", time=now),
            self.amanda
        )
        event_edit_url = reverse(event_edit, args=[self.org.code, event.pk])
        r = self.client.get(event_edit_url)
        self.assertEqual(r.status_code, 200)
        data = {
            'name': 'Sample',
            'time_0': '18/02/2014 13:45',
            'sms_message': 'Test',
            'push_notification': 'Test',
            'location': 'Test',
            'html_content': """<ul>
    <li>Hey</li>
    <li>Hey</li>
</ul>""",
        }
        r = self.client.post(event_edit_url, data)
        self.assertEqual(r.status_code, 200)

        event = Event.objects.get(pk=event.pk)
        #check fields were set correctly
        for field in ('name', 'sms_message', 'push_notification', 'location', 'html_content'):
            self.assertEqual(getattr(event, field), data.get(field))

    def test_create_new_link(self):
        now = django.utils.timezone.now()
        event = self.org.create_event(
            Event(name="event", time=now),
            self.amanda
        )
        event_links_url = reverse(event_links, args=[self.org.code, event.pk])
        r = self.client.get(event_links_url)
        self.assertEqual(r.status_code, 200)

        #test auto link creation
        data = {}

        for i in xrange(10):
            r = self.client.post(event_links_url, data)
            self.assertEqual(r.status_code, 200)
            self.assertEqual(event.links().count(), i+1)

    def test_import_numbers(self):
        now = django.utils.timezone.now()
        event = self.org.create_event(
            Event(name="event", time=now),
            self.amanda
        )
        invites_url = reverse(event_invites, args=[self.org.code, event.pk])
        r = self.client.get(invites_url)
        self.assertEqual(r.status_code, 200)

        #test auto link creation
        data = {
            'data': """somebody +18881231234
somebody else +18881234444""",
        }

        r = self.client.post(invites_url, data)
        self.assertEqual(r.status_code, 200)
        self.assertEqual(event.eventinvites().count(), 2)

    def test_import_numbers_with_rtl(self):
        now = django.utils.timezone.now()
        event = self.org.create_event(
            Event(name="event", time=now),
            self.amanda
        )
        invites_url = reverse(event_invites, args=[self.org.code, event.pk])
        r = self.client.get(invites_url)
        self.assertEqual(r.status_code, 200)

        #test auto link creation
        data = {
            'data': '\xd7\xa2\xd7\x95\xd7\x9e\xd7\xa8 \xd7\xa7\xd7\x9c\xd7\x99\xd7\x99\xd7\x9f \t522222955\n' +
                    '\xd7\x90\xd7\x99\xd7\x99\xd7\xa4\xd7\x95\xd7\x9f 5\t586277493\n' +
                    '\xd7\xa0\xd7\xa7\xd7\xa1\xd7\x95\xd7\xa1 4 \t586277494\n' +
                    '\xd7\x90\xd7\x99\xd7\x99\xd7\xa4\xd7\x95\xd7\x9f 4 \t587306619\n',
            'default_country': 'IL'
        }

        r = self.client.post(invites_url, data)
        self.assertEqual(r.status_code, 200)
        self.assertEqual(event.eventinvites().count(), 4)

        r = self.client.get(invites_url)
        self.assertEqual(r.status_code, 200)

    def test_sms_send(self):
        from mock import patch
        now = django.utils.timezone.now()
        event = self.org.create_event(
            Event(name="event", time=now),
            self.amanda
        )
        event.create_eventinvites([
            ('test_user1', '+12127180000'),
            ('test_user2', '+12127180001'),
            ('test_user3', '+12127180002'),
        ], 'US')

        self.assertEqual(len(event.eventinvites()), 3)
        with patch("phone_auth.models.send_sms") as mock:
            event.send_invites(event.eventinvites())
            self.assertEqual(mock.call_count, 3)

    def test_multiple_sms_send(self):
        from mock import patch
        now = django.utils.timezone.now()
        event_a = self.org.create_event(
            Event(name="event_a", time=now),
            self.amanda
        )
        event_a.create_eventinvites([
            ('test_user1', '+12127180000'),
            ('test_user2', '+12127180001'),
        ], 'US')
        self.assertEqual(len(event_a.eventinvites()), 2)
        with patch("phone_auth.models.send_sms") as mock:
            event_a.send_invites(event_a.eventinvites())
            self.assertEqual(mock.call_count, 2)

        event_b = self.org.create_event(
            Event(name="event_b", time=now),
            self.amanda
        )
        event_b.create_eventinvites([
            ('test_user3', '+12127180000'),
            ('test_user4', '+12127180001'),
        ], 'US')

        self.assertEqual(len(event_b.eventinvites()), 2)
        with patch("phone_auth.models.send_sms") as mock:
            event_b.send_invites(event_b.eventinvites())
            self.assertEqual(mock.call_count, 2)
Esempio n. 8
0
    def test_organization_access(self):
        amanda = auth.get_user_model().objects.get(pk=2)
        barney = auth.get_user_model().objects.get(pk=3)
        chloe = auth.get_user_model().objects.get(pk=4)
        daniel = auth.get_user_model().objects.get(pk=5)
        org_a = Organization(code="a")
        org_a.save()
        org_b = Organization(code="b")
        org_b.save()
        org_ab = Organization(code="ab")
        org_ab.save()
        org_c = Organization(code="c")
        org_c.save()

        org_a.add_user(amanda)
        org_ab.add_user(amanda)
        org_b.add_user(barney)
        org_ab.add_user(barney)
        org_c.add_user(chloe)

        endpoint_items = [
            reverse(organization, args=(org_a,)),
            reverse(organization, args=(org_b,)),
            reverse(organization, args=(org_ab,)),
            reverse(organization, args=(org_c,)),
        ]
        access_matrix = {
            ('2', 'amanda'): [True, False, True, False],
            ('3', 'barney'): [False, True, True, False],
            ('4', 'chloe'): [False, False, False, True],
            ('5', 'daniel'): [False, False, False, False],
        }
        OKAY_RESPONSE = 200
        DENY_RESPONSE = 404

        for credentials, access_list in access_matrix.iteritems():
            self.client.login(username=credentials[0], password=credentials[1])
            for endpoint, access in zip(endpoint_items, access_list):
                r = self.client.get(endpoint)
                self.assertEqual(
                    r.status_code,
                    OKAY_RESPONSE if access else DENY_RESPONSE,
                )