def test_getitem(self):
        c = CouchDB(self.username, self.password, url=self.url)
        c.connect()
        c['a'] = c._DATABASE_CLASS(c, 'a')
        c['b'] = c._DATABASE_CLASS(c, 'b')

        self.assertTrue(isinstance(c['a'], c._DATABASE_CLASS))
        self.assertTrue(isinstance(c['b'], c._DATABASE_CLASS))
        self.assertRaises(KeyError, c.__getitem__, 'd')

        with mock.patch('cloudant.account.CouchDatabase.exists') as mock_exists:
            mock_exists.return_value = True
            self.assertTrue(isinstance(c['c'], c._DATABASE_CLASS))
    def test_get(self):
        c = CouchDB(self.username, self.password, url=self.url)
        c.connect()

        c['a'] = c._DATABASE_CLASS(c, 'a')

        self.assertEqual(c.get('a'), c['a'])
        self.assertEqual(c.get('d', None), None)

        with mock.patch('cloudant.account.CouchDatabase.exists') as mock_exists:
            mock_exists.return_value = True
            self.assertTrue(isinstance(c.get('b', remote=True), c._DATABASE_CLASS))

        self.assertTrue(c.get('d', None, remote=True) is None)
    def test_delitem(self):
        c = CouchDB(self.username, self.password, url=self.url)
        c.connect()
        c.delete_database = mock.Mock()

        c['a'] = c._DATABASE_CLASS(c, 'a')
        c['b'] = c._DATABASE_CLASS(c, 'b')

        del c['a']
        self.assertTrue('b' in c)
        self.assertTrue('a' not in c)

        c.__delitem__('b', remote=True)
        self.assertTrue(c.delete_database.called)
    def test_setitem(self):
        c = CouchDB(self.username, self.password, url=self.url)
        c.connect()
        self.assertRaises(CloudantException, c.__setitem__, 'c', 'womp')

        value = c._DATABASE_CLASS(c, 'a')
        c.__setitem__('c', value)
        self.assertTrue(c['c'] == value)

        value.exists = mock.Mock()
        value.exists.return_value = False
        value.create = mock.Mock()
        c.__setitem__('c', value, remote=True)
        self.assertTrue(value.create.called)
        self.assertTrue(c['c'] == value)