Esempio n. 1
0
    def test_no_database(self):
        env_tuple = ('http://127.0.0.1:8069', 'missingdb', 'usr', None)
        mock.patch('sys.argv', new=['erppeek', '--env', 'demo']).start()
        read_config = mock.patch('erppeek.read_config',
                                 return_value=env_tuple).start()
        self.service.db.list.return_value = ['database']

        # Launch interactive
        self.infunc.side_effect = [
            "client\n",
            "model\n",
            "client.login('gaspard')\n",
            EOFError('Finished')]
        erppeek.main()

        expected_calls = self.startup_calls
        self.assertCalls(*expected_calls)
        self.assertEqual(read_config.call_count, 1)
        outlines = self.stdout.popvalue().splitlines()
        self.assertSequenceEqual(outlines[-3:], [
            "Error: Database 'missingdb' does not exist: ['database']",
            "<Client 'http://127.0.0.1:8069#()'>",
            "Error: Not connected",
        ])
        self.assertOutput(stderr=ANY)
Esempio n. 2
0
    def test_main(self):
        env_tuple = ('http://127.0.0.1:8069', 'database', 'usr', None)
        mock.patch('sys.argv', new=['erppeek', '--env', 'demo']).start()
        read_config = mock.patch('erppeek.read_config',
                                 return_value=env_tuple).start()
        getpass = mock.patch('getpass.getpass',
                             return_value='password').start()
        self.service.db.list.return_value = ['database']
        self.service.common.login.return_value = 17
        self.service.object.execute.side_effect = TypeError

        # Launch interactive
        self.infunc.side_effect = [
            "client\n",
            "model\n",
            "client.login('gaspard')\n",
            "23 + 19\n",
            EOFError('Finished')]
        erppeek.main()

        self.assertEqual(sys.ps1, 'demo >>> ')
        self.assertEqual(sys.ps2, 'demo ... ')
        expected_calls = self.startup_calls + (
            ('common.login', 'database', 'usr', 'password'),
            ('object.execute', 'database', 17, 'password',
             'ir.model.access', 'check', 'res.users', 'write'),
            ('common.login', 'database', 'gaspard', 'password'),
        )
        self.assertCalls(*expected_calls)
        self.assertEqual(getpass.call_count, 2)
        self.assertEqual(read_config.call_count, 1)
        self.assertEqual(self.interact.call_count, 1)
        outlines = self.stdout.popvalue().splitlines()
        self.assertSequenceEqual(outlines[-5:], [
            "Logged in as 'usr'",
            "<Client 'http://127.0.0.1:8069#database'>",
            "<bound method Client.model of "
            "<Client 'http://127.0.0.1:8069#database'>>",
            "Logged in as 'gaspard'",
            "42",
        ])
        self.assertOutput(stderr='\x1b[A\n\n')
Esempio n. 3
0
    def test_invalid_user_password(self):
        env_tuple = ('http://127.0.0.1:8069', 'database', 'usr', 'passwd')
        mock.patch('sys.argv', new=['erppeek', '--env', 'demo']).start()
        mock.patch('os.environ', new={'LANG': 'fr_FR.UTF-8'}).start()
        mock.patch('erppeek.read_config', return_value=env_tuple).start()
        mock.patch('getpass.getpass', return_value='x').start()
        self.service.db.list.return_value = ['database']
        self.service.common.login.side_effect = [17, None]
        self.service.object.execute.side_effect = [42, {}, TypeError, 42, {}]

        # Launch interactive
        self.infunc.side_effect = [
            "client.model('res.company')\n",
            "client.login('gaspard')\n",
            "client.model('res.company')\n",
            EOFError('Finished')]
        erppeek.main()

        usr17 = ('object.execute', 'database', 17, 'passwd')
        cx = {'lang': 'fr_FR'}
        expected_calls = self.startup_calls + (
            ('common.login', 'database', 'usr', 'passwd'),
            usr17 + ('ir.model', 'search',
                     [('model', 'like', 'res.company')]),
            usr17 + ('ir.model', 'read', 42, ('model',)),
            usr17 + ('ir.model.access', 'check', 'res.users', 'write'),
            ('common.login', 'database', 'gaspard', 'x'),
            usr17 + ('ir.model', 'search',
                     [('model', 'like', 'res.company')]),
            usr17 + ('ir.model', 'read', 42, ('model',)),
        )
        self.assertCalls(*expected_calls)
        outlines = self.stdout.popvalue().splitlines()
        self.assertSequenceEqual(outlines[-4:], [
            "Logged in as 'usr'",
            'Model not found: res.company',
            'Error: Invalid username or password',
            'Model not found: res.company',
        ])
        self.assertOutput(stderr=ANY)
Esempio n. 4
0
    def test_invalid_user_password(self):
        env_tuple = ('http://127.0.0.1:8069', 'database', 'usr', 'passwd')
        mock.patch('sys.argv', new=['erppeek', '--env', 'demo']).start()
        mock.patch('os.environ', new={'LANG': 'fr_FR.UTF-8'}).start()
        mock.patch('erppeek.read_config', return_value=env_tuple).start()
        mock.patch('getpass.getpass', return_value='x').start()
        self.service.db.list.return_value = ['database']
        self.service.common.login.side_effect = [17, None]
        self.service.object.execute.side_effect = [42, {}, TypeError, 42, {}]

        # Launch interactive
        self.infunc.side_effect = [
            "client.model('res.company')\n",
            "client.login('gaspard')\n",
            "client.model('res.company')\n",
            EOFError('Finished')]
        erppeek.main()

        usr17 = ('object.execute', 'database', 17, 'passwd')
        expected_calls = self.startup_calls + (
            ('common.login', 'database', 'usr', 'passwd'),
            usr17 + ('ir.model', 'search',
                     [('model', 'like', 'res.company')]),
            usr17 + ('ir.model', 'read', 42, ('model',)),
            usr17 + ('ir.model.access', 'check', 'res.users', 'write'),
            ('common.login', 'database', 'gaspard', 'x'),
            usr17 + ('ir.model', 'search',
                     [('model', 'like', 'res.company')]),
            usr17 + ('ir.model', 'read', 42, ('model',)),
        )
        self.assertCalls(*expected_calls)
        outlines = self.stdout.popvalue().splitlines()
        self.assertSequenceEqual(outlines[-4:], [
            "Logged in as 'usr'",
            'Model not found: res.company',
            'Error: Invalid username or password',
            'Model not found: res.company',
        ])
        self.assertOutput(stderr=ANY)