def test_parse_signed_request(self):
        TEST_SIGNED_REQUEST = 'm2i3DMpnOG3JxFiISuLPN5sTCe9d3NMRyq3pcAtpKd8=.eyJpc3N1ZWRfYXQiOiAxMzI2MDYzOTUwLCAib2F1dGhfdG9rZW4iOiAiQUFBQ2sydEM5ekJZQkFFanlRY0VKWkN0cjgxWkFMM0ZRRXdvcjI5N2lJdFhlRFFYYkZwY0t3ZmdlNjdBdHlYYnBaQld1Z2pEZGdSdmZwbzUyTlRJU0N0ajlpZjZzWkMzSmp0ZXJtMjVyeEhPUDUzMlpDM3BFWSIsICJ1c2VyX2lkIjogMTAwMDAzMzI2OTkwOTkzLCAiYWxnb3JpdGhtIjogIkhNQUMtU0hBMjU2In0='
        data = _parse_signed_request(TEST_SIGNED_REQUEST, settings.FACEBOOK_APPLICATION_SECRET_KEY)

        self.assertEquals(data['user_id'], 100003326990993)
        self.assertEquals(data['algorithm'], 'HMAC-SHA256')
        self.assertEquals(data['oauth_token'], 'AAACk2tC9zBYBAEjyQcEJZCtr81ZAL3FQEwor297iItXeDQXbFpcKwfge67AtyXbpZBWugjDdgRvfpo52NTISCtj9if6sZC3Jjterm25rxHOP532ZC3pEY')
        self.assertEquals(data['issued_at'], 1326063950)
 def assertSignedRequest(sender, **kwargs):
     signed_request = _parse_signed_request(kwargs['signed_request'], settings.FACEBOOK_APPLICATION_SECRET_KEY)
     self.assertEquals(facebook_id, signed_request['user_id'])
     self.assertEquals(oauth_token, signed_request['oauth_token'])
     self.assertTrue(signed_request['issued_at'] > 0)
     self.assertEquals(0, signed_request['expires'])
     self.assertEquals('us', signed_request['user']['country'])
     self.assertEquals('en_US', signed_request['user']['locale'])
     assertSignedRequest.called = True
    def test_create_signed_request(self):
        # test sending only user_id
        signed_request_user_1 = _create_signed_request(settings.FACEBOOK_APPLICATION_SECRET_KEY, user_id=1, issued_at=1254459601, add_default_data=False)
        self.assertEquals(signed_request_user_1, 'Y0ZEAYY9tGklJimbbSGy2dgpYz9qZyVJp18zrI9xQY0=.eyJpc3N1ZWRfYXQiOiAxMjU0NDU5NjAxLCAidXNlcl9pZCI6IDEsICJhbGdvcml0aG0iOiAiSE1BQy1TSEEyNTYifQ==')

        data_user_1 = _parse_signed_request(signed_request_user_1, settings.FACEBOOK_APPLICATION_SECRET_KEY)
        self.assertEquals(sorted(data_user_1.keys()), sorted([u'user_id', u'algorithm', u'issued_at']))
        self.assertEquals(data_user_1['user_id'], 1)
        self.assertEquals(data_user_1['algorithm'], 'HMAC-SHA256')

        # test not sending a user_id which will default to user_id 1
        signed_request_user_2 = _create_signed_request(settings.FACEBOOK_APPLICATION_SECRET_KEY, issued_at=1254459601, add_default_data=False)
        self.assertEquals(signed_request_user_1, signed_request_user_2)

        # test sending each available named argument
        today = datetime.datetime.now()
        tomorrow = today + datetime.timedelta(hours=1)

        signed_request_user_3 = _create_signed_request(
            app_secret = settings.FACEBOOK_APPLICATION_SECRET_KEY,
            user_id = '999',
            issued_at = 1254459600,
            expires = tomorrow,
            oauth_token = '181259711925270|1570a553ad6605705d1b7a5f.1-499729129|8XqMRhCWDKtpG-i_zRkHBDSsqqk',
            app_data = {},
            page = {
                'id': '1',
                'liked': True
            }, add_default_data=False
        )

        data_user_3 = _parse_signed_request(signed_request_user_3, settings.FACEBOOK_APPLICATION_SECRET_KEY)
        self.assertEquals(sorted(data_user_3.keys()), sorted([u'user_id', u'algorithm', u'issued_at', u'expires', u'oauth_token', u'app_data', u'page']))
        self.assertEquals(data_user_3['user_id'], '999')
        self.assertEquals(data_user_3['algorithm'], 'HMAC-SHA256')
        self.assertEquals(data_user_3['issued_at'], 1254459600)
        self.assertEquals(data_user_3['expires'], int(time.mktime(tomorrow.timetuple())))
        self.assertEquals(data_user_3['oauth_token'], '181259711925270|1570a553ad6605705d1b7a5f.1-499729129|8XqMRhCWDKtpG-i_zRkHBDSsqqk')
        self.assertEquals(data_user_3['app_data'], {})
        self.assertEquals(data_user_3['page'], {'id': '1','liked': True})

# ---------------------------------------------------------------------
# End snatched code by Reik Schatz.
# ---------------------------------------------------------------------
    def test_parse_signed_request(self):
        TEST_SIGNED_REQUEST = 'm2i3DMpnOG3JxFiISuLPN5sTCe9d3NMRyq3pcAtpKd8=.eyJpc3N1ZWRfYXQiOiAxMzI2MDYzOTUwLCAib2F1dGhfdG9rZW4iOiAiQUFBQ2sydEM5ekJZQkFFanlRY0VKWkN0cjgxWkFMM0ZRRXdvcjI5N2lJdFhlRFFYYkZwY0t3ZmdlNjdBdHlYYnBaQld1Z2pEZGdSdmZwbzUyTlRJU0N0ajlpZjZzWkMzSmp0ZXJtMjVyeEhPUDUzMlpDM3BFWSIsICJ1c2VyX2lkIjogMTAwMDAzMzI2OTkwOTkzLCAiYWxnb3JpdGhtIjogIkhNQUMtU0hBMjU2In0='
        data = _parse_signed_request(TEST_SIGNED_REQUEST,
                                     settings.FACEBOOK_APPLICATION_SECRET_KEY)

        self.assertEquals(data['user_id'], 100003326990993)
        self.assertEquals(data['algorithm'], 'HMAC-SHA256')
        self.assertEquals(
            data['oauth_token'],
            'AAACk2tC9zBYBAEjyQcEJZCtr81ZAL3FQEwor297iItXeDQXbFpcKwfge67AtyXbpZBWugjDdgRvfpo52NTISCtj9if6sZC3Jjterm25rxHOP532ZC3pEY'
        )
        self.assertEquals(data['issued_at'], 1326063950)
 def test_integration(self):
     self.assertEquals(2, User.objects.count())
     mako = User.objects.get(facebook_id="100003460044223")
     shinra = User.objects.get(facebook_id="100003536165092")
     self.assertEquals("Unittest Mako", mako.full_name)
     self.assertEquals("Unittest Shinra", shinra.full_name)
     self.assertEquals(datetime.date(1980,8,8), mako.birthday)
     self.assertEquals(None, shinra.birthday)
     self.assertEquals("AAAESR2HSywMBAJu23BQ3f9RePbdG785Adhxw8Hkabotkq9oJE2CWGptph5ZBdSra35VyKJiayZAgK5aamCoOYZBLNPxXgC2i4fLi8qL29LYWz5Y9vZB6",
                       mako.oauth_token.token)
     self.assertEquals("AAAESR2HSywMBAEWJNr8m2xufpP2jIoHJ3aKTUREClHgDX3inIxCz4bCqAHZB8pA0cPnmBb7gD02eIdqcQirp7IDyHTlVlU95fWOiSGZBNbCzpU2fPz",
                       shinra.oauth_token.token)
     signed_request = _parse_signed_request(self.client.cookies['signed_request'].value, settings.FACEBOOK_APPLICATION_SECRET_KEY)
     self.assertEquals("100003460044223", signed_request['user_id'])
     self.assertEquals("AAAESR2HSywMBAJu23BQ3f9RePbdG785Adhxw8Hkabotkq9oJE2CWGptph5ZBdSra35VyKJiayZAgK5aamCoOYZBLNPxXgC2i4fLi8qL29LYWz5Y9vZB6",
                       signed_request['oauth_token'])
    def test_create_signed_request(self):
        # test sending only user_id
        signed_request_user_1 = _create_signed_request(
            settings.FACEBOOK_APPLICATION_SECRET_KEY,
            user_id=1,
            issued_at=1254459601,
            add_default_data=False)
        self.assertEquals(
            signed_request_user_1,
            'Y0ZEAYY9tGklJimbbSGy2dgpYz9qZyVJp18zrI9xQY0=.eyJpc3N1ZWRfYXQiOiAxMjU0NDU5NjAxLCAidXNlcl9pZCI6IDEsICJhbGdvcml0aG0iOiAiSE1BQy1TSEEyNTYifQ=='
        )

        data_user_1 = _parse_signed_request(
            signed_request_user_1, settings.FACEBOOK_APPLICATION_SECRET_KEY)
        self.assertEquals(sorted(data_user_1.keys()),
                          sorted([u'user_id', u'algorithm', u'issued_at']))
        self.assertEquals(data_user_1['user_id'], 1)
        self.assertEquals(data_user_1['algorithm'], 'HMAC-SHA256')

        # test not sending a user_id which will default to user_id 1
        signed_request_user_2 = _create_signed_request(
            settings.FACEBOOK_APPLICATION_SECRET_KEY,
            issued_at=1254459601,
            add_default_data=False)
        self.assertEquals(signed_request_user_1, signed_request_user_2)

        # test sending each available named argument
        today = datetime.datetime.now()
        tomorrow = today + datetime.timedelta(hours=1)

        signed_request_user_3 = _create_signed_request(
            app_secret=settings.FACEBOOK_APPLICATION_SECRET_KEY,
            user_id='999',
            issued_at=1254459600,
            expires=tomorrow,
            oauth_token=
            '181259711925270|1570a553ad6605705d1b7a5f.1-499729129|8XqMRhCWDKtpG-i_zRkHBDSsqqk',
            app_data={},
            page={
                'id': '1',
                'liked': True
            },
            add_default_data=False)

        data_user_3 = _parse_signed_request(
            signed_request_user_3, settings.FACEBOOK_APPLICATION_SECRET_KEY)
        self.assertEquals(
            sorted(data_user_3.keys()),
            sorted([
                u'user_id', u'algorithm', u'issued_at', u'expires',
                u'oauth_token', u'app_data', u'page'
            ]))
        self.assertEquals(data_user_3['user_id'], '999')
        self.assertEquals(data_user_3['algorithm'], 'HMAC-SHA256')
        self.assertEquals(data_user_3['issued_at'], 1254459600)
        self.assertEquals(data_user_3['expires'],
                          int(time.mktime(tomorrow.timetuple())))
        self.assertEquals(
            data_user_3['oauth_token'],
            '181259711925270|1570a553ad6605705d1b7a5f.1-499729129|8XqMRhCWDKtpG-i_zRkHBDSsqqk'
        )
        self.assertEquals(data_user_3['app_data'], {})
        self.assertEquals(data_user_3['page'], {'id': '1', 'liked': True})


# ---------------------------------------------------------------------
# End snatched code by Reik Schatz.
# ---------------------------------------------------------------------