class ModelTests(unittest.TestCase):

    def setUp(self):
        self.tc = TelestreamCloud(access_key='my_access_key',
                                  secret_key='my_secret_key')
        self.flip = self.tc.get_resource('flip')

    def test_separate_cloud_credentials(self):
        self.assertTrue('factory_id' not in self.tc._credentials())

        @all_requests
        def api_url(url, request):
            factory_array = [{'id': 'factory_id_XXX', 'name': 'factory_one'},
                             {'id': 'factory_id_YYY', 'name': 'factory_two'}]
            return {'status_code': 200,
                    'content': json.dumps(factory_array).encode('utf-8')}

        with HTTMock(api_url):
            factories = self.flip.factories.all()

        self.assertTrue(len(factories) == 2)
        self.assertEqual(factories[0].name, 'factory_one')
        self.assertEqual(factories[0].id, 'factory_id_XXX')
        self.assertEqual(factories[0].credentials['factory_id'], 'factory_id_XXX')
        self.assertEqual(factories[1].name, 'factory_two')
        self.assertEqual(factories[1].id, 'factory_id_YYY')
        self.assertEqual(factories[1].credentials['factory_id'], 'factory_id_YYY')
 def setUp(self):
     self.tc = TelestreamCloud(access_key='my_access_key',
                               secret_key='my_secret_key',
                               api_host='myapihost',
                               api_port=85, factory_id='my_cloud_id')
class RestAPI(unittest.TestCase):

    def setUp(self):
        self.tc = TelestreamCloud(access_key='my_access_key',
                                  secret_key='my_secret_key',
                                  api_host='myapihost',
                                  api_port=85, factory_id='my_cloud_id')

    def test_get(self):

       @all_requests
       def api_url(url, request):
           query_params = dict(parser.parse_qsl(url.query))
           self.assertEqual(query_params['signature'], '6tgl7r/9knHL5AhXqN3p3KXX74ofMrr7tBy6A7LL79s=')
           self.assertEqual(query_params['timestamp'], '2015-12-30T20:21:00+00:00')
           return {'status_code': 200}

       with HTTMock(api_url), freeze_time("2015-12-30 20:21"):
           response = self.tc.get('/factories.json')

    def test_post_with_no_params(self):

        @all_requests
        def api_url(url, request):
            query_params = dict(parser.parse_qsl(url.query))
            self.assertEqual(query_params['signature'], 'NoqEko/YOPhSfxvltZNd6AbStBvnMwptaEsFUmfXWPw=')
            self.assertEqual(query_params['timestamp'], '2009-11-04T17:54:11+00:00')
            return {'status_code': 200}

        with HTTMock(api_url), freeze_time('2009-11-04T17:54:11+00:00'):
            response = self.tc.post('/videos.json')

    def test_post_with_arguments(self):

        @all_requests
        def api_url(url, request):
            query_params = dict(parser.parse_qsl(url.query))
            self.assertEqual(query_params['signature'], '0xryIngb+aZNfTcwl/91lU6nAKouyvUq+fZJ84+KXbo=')
            self.assertEqual(query_params['timestamp'], '2009-11-04T17:54:11+00:00')
            self.assertEqual(query_params['param1'], 'one')
            self.assertEqual(query_params['param2'], 'two')
            return {'status_code': 200}

        with HTTMock(api_url), freeze_time('2009-11-04T17:54:11+00:00'):
            response = self.tc.post('/videos.json', {'param1': 'one', 'param2': 'two'})

    def test_post_with_file_argument(self):

        @all_requests
        def api_url(url, request):
            query_params = dict(parser.parse_qsl(url.query))
            self.assertEqual(query_params['signature'], '0xryIngb+aZNfTcwl/91lU6nAKouyvUq+fZJ84+KXbo=')
            self.assertEqual(query_params['timestamp'], '2009-11-04T17:54:11+00:00')
            self.assertEqual(query_params['param1'], 'one')
            self.assertEqual(query_params['param2'], 'two')
            self.assertTrue('file' not in query_params)
            return {'status_code': 200}

        with HTTMock(api_url), freeze_time('2009-11-04T17:54:11+00:00'):
            response = self.tc.post('/videos.json', {'param1': 'one', 'param2': 'two', 'file': __file__})

    def test_params_with_difficult_characters(self):

        @all_requests
        def api_url(url, request):
            query_params = dict(parser.parse_qsl(url.query))
            self.assertEqual(query_params['signature'], '/pahnvDahQqhfg8WcW7fu7SUGowWsQ7+kzq9vQ0/yvY=')
            self.assertEqual(query_params['timestamp'], '2009-11-04T17:54:11+00:00')
            self.assertEqual(query_params['tilde'], '~')
            self.assertEqual(query_params['slash'], '/')
            self.assertEqual(query_params['space'], ' ')
            return {'status_code': 200}

        with HTTMock(api_url), freeze_time('2009-11-04T17:54:11+00:00'):
            response = self.tc.post('/videos.json', {'tilde': '~', 'space': ' ', 'slash': '/'})

    def test_params_with_non_string_arguments(self):

        @all_requests
        def api_url(url, request):
            query_params = dict(parser.parse_qsl(url.query))
            self.assertEqual(query_params['signature'], 'U955cX1+IK76eY8gvy4OEf+aDXeMPW8/SWA7PmoOvOs=')
            self.assertEqual(query_params['timestamp'], '2009-11-04T17:54:11+00:00')
            return {'status_code': 200}

        with HTTMock(api_url), freeze_time('2009-11-04T17:54:11+00:00'):
            response = self.tc.post('/videos.json', {'param2': 2})


    def test_params_with_unicode_characters(self):

        @all_requests
        def api_url(url, request):
            query_params = dict(parser.parse_qsl(url.query))
            self.assertEqual(query_params['signature'], '3UFfzALe0OEMNGi7S8O/ZiNp4+vMVE8Kaw1Ab31ZvqE=')
            self.assertEqual(query_params['timestamp'], '2014-12-22T17:54:11+00:00')
            self.assertEqual(query_params['file_name'], 'original♥.mp4')

            return {'status_code': 200}

        with HTTMock(api_url), freeze_time('2014-12-22T17:54:11+00:00'):
            response = self.tc.post('/videos/upload.json', {'file_name': u'original♥.mp4'})
 def setUp(self):
     self.tc = TelestreamCloud(access_key='my_access_key',
                               secret_key='my_secret_key')
     self.flip = self.tc.get_resource('flip')