def test_empty_database(self):
     sys.argv = ['notused', self.conf_file_path]
     sys.stdout = StringIO()
     result = applications()
     self.assertEqual(result, None)
     stdout = sys.stdout.getvalue()
     self.assertEqual(stdout, '')
    def test_no_arguments(self):
        # Replace sys argv and stdout
        sys.argv = []
        sys.stdout = StringIO()

        result = applications()
        self.assertEqual(result, 2)
        stdout = sys.stdout.getvalue()
        self.assertEqual(stdout, 'You must provide at least one argument\n')
    def test_non_empty_database(self):
        with transaction.manager:
            user = User(first_name='John',
                        last_name='Doe',
                        email='*****@*****.**')
            Session.add(user)

            app1 = Application(user=user,
                               name='Test application 1',
                               main_url='http://example.com',
                               callback_url='http://example.com/callback')
            Session.add(app1)

            app2 = Application(user=user,
                               name='Test application 2',
                               main_url='http://2.example.com',
                               callback_url='http://2.example.com/callback')
            Session.add(app2)

        sys.argv = ['notused', self.conf_file_path]
        sys.stdout = StringIO()
        result = applications()
        self.assertEqual(result, None)
        stdout = sys.stdout.getvalue()
        expected_output = """Test application 1
%(tab)sOwner: John Doe <*****@*****.**>
%(tab)sMain URL: http://example.com
%(tab)sCallback URL: http://example.com/callback
%(tab)sUsers: 0

Test application 2
%(tab)sOwner: John Doe <*****@*****.**>
%(tab)sMain URL: http://2.example.com
%(tab)sCallback URL: http://2.example.com/callback
%(tab)sUsers: 0

""" % {'tab': '\t'}
        self.assertEqual(stdout, expected_output)
    def test_applications(self):
        # Save sys values
        old_args = sys.argv[:]
        old_stdout = sys.stdout

        # Replace sys argv and stdout
        sys.argv = []
        sys.stdout = StringIO('')

        # Call applications with no arguments
        result = applications()
        self.assertEqual(result, 2)
        stdout = sys.stdout.getvalue()
        self.assertEqual(stdout, 'You must provide at least one argument\n')

        # Call applications with a config file but an empty database
        sys.argv = ['notused', self.conf_file_path]
        sys.stdout = StringIO()
        result = applications()
        self.assertEqual(result, None)
        stdout = sys.stdout.getvalue()
        self.assertEqual(stdout, '')

        # Add some data to the database
        u1_id = self.db.users.insert({
                'first_name': 'John',
                'last_name': 'Doe',
                'email': '*****@*****.**',
                })
        self.db.applications.insert({
                'name': 'Test application 1',
                'owner': u1_id,
                'main_url': 'http://example.com/',
                'callback_url': 'http://example.com/callback',
                })
        self.db.applications.insert({
                'name': 'Test application 2',
                'owner': '000000000000000000000000',
                'main_url': 'http://2.example.com/',
                'callback_url': 'http://2.example.com/callback',
                })
        sys.argv = ['notused', self.conf_file_path]
        sys.stdout = StringIO()
        result = applications()
        self.assertEqual(result, None)
        stdout = sys.stdout.getvalue()
        expected_output = """Test application 1
	Owner: John Doe <*****@*****.**>
	Main URL: http://example.com/
	Callback URL: http://example.com/callback
	Users: 0

Test application 2
	Owner: Unknown owner (000000000000000000000000)
	Main URL: http://2.example.com/
	Callback URL: http://2.example.com/callback
	Users: 0

"""
        self.assertEqual(stdout, expected_output)

        # Restore sys.values
        sys.argv = old_args
        sys.stdout = old_stdout