def test_wildcard_path_4(self): if self.db.provider.dialect == 'Oracle': raise unittest.SkipTest with raises_if(self, self.db.provider.dialect != 'MySQL', TranslationError, '...does not support wildcards in JSON path...'): values = get(p.info[...][:][...][:] for p in self.Product)[:] self.assertSetEqual(set(values), {'16GB', '64GB'})
def test_var_in_json(self): with raises_if(self, self.db.provider.dialect == 'Oracle', TypeError, "For `key in JSON` operation Oracle supports literal key values only, " "parameters are not allowed: key in p.info['colors']"): key = 'Gold' obj = get(p for p in self.Product if key in p.info['colors']) self.assertTrue(obj)
def test_composite_param_in_condition(self): with raises_if(self, self.db.provider.dialect == 'Oracle', TranslationError, "Oracle doesn't allow parameters in JSON paths"): key = 'models' index = 0 p = get(p for p in self.Product if p.info[key][index]['name'] == 'Wi-Fi') self.assertIsNotNone(p)
def test_ne_json_2(self): with raises_if(self, self.db.provider.dialect == 'Oracle', TranslationError, "Oracle does not support comparison of json structures: p.info['os'] != Json({})"): p = get(p for p in self.Product if p.info['os'] != Json({})) self.assertTrue(p) p = get(p for p in self.Product if p.info['os'] != {'type': 'iOS', 'version': '8'}) self.assertFalse(p)
def test_len(self): with raises_if(self, self.db.provider.dialect == 'Oracle', TranslationError, 'Oracle does not provide `length` function for JSON arrays'): val = select(len(p.tags) for p in self.Product).first() self.assertEqual(val, 3) val = select(len(p.info['colors']) for p in self.Product).first() self.assertEqual(val, 3)
def test_composite_param(self): with raises_if(self, self.db.provider.dialect == 'Oracle', TranslationError, "Oracle doesn't allow parameters in JSON paths"): key = 'models' index = 0 val = get(p.info[key][index]['name'] for p in self.Product) self.assertEqual(val, 'Wi-Fi')
def test_ne_empty_list(self): with raises_if( self, self.db.provider.dialect == 'Oracle', TranslationError, "Oracle does not support comparison of json structures: p.info['colors'] != Json([])" ): p = get(p for p in self.Product if p.info['colors'] != Json([])) self.assertTrue(p)
def test_equal_empty_list_2(self): with raises_if( self, db.provider.dialect == 'Oracle', TranslationError, "Oracle does not support comparison of json structures: p.info['colors'] == Json([])" ): p = get(p for p in Product if p.info['colors'] == Json([])) self.assertIsNone(p)
def test_equal_list_4(self): colors = ['Gold', 'Silver', 'Space Gray'] with raises_if( self, db.provider.dialect == 'Oracle', TranslationError, "Oracle does not support comparison of json structures: p.info['colors'] == Json(colors)" ): p = get(p for p in Product if p.info['colors'] == Json(colors)) self.assertTrue(p)
def test_wildcard_path_in_condition(self): errors = { 'MySQL': 'Wildcards are not allowed in json_contains()', 'SQLite': '...does not support wildcards in JSON path...', 'PostgreSQL': '...does not support wildcards in JSON path...' } dialect = self.db.provider.dialect with raises_if(self, dialect in errors, TranslationError, errors.get(dialect)): p = get(p for p in self.Product if '16GB' in p.info['models'][:]['capacity']) self.assertTrue(p)
def test_wildcard_path_with_params_as_string(self): if self.db.provider.dialect != 'Oracle': exc_msg = '...does not support wildcards in JSON path...' else: exc_msg = "Oracle doesn't allow parameters in JSON paths" with raises_if(self, self.db.provider.dialect != 'MySQL', TranslationError, exc_msg): key = 'models' index = 0 values = get("p.info[key][:]['capacity'][index] for p in self.Product") self.assertListEqual(values, ['16GB', '16GB'])
def test_equal_json_1(self): with raises_if( self, self.db.provider.dialect == 'Oracle', TranslationError, "Oracle does not support comparison of json structures: " "p.info['os'] == {'type':'iOS', 'version':'8'}"): p = get(p for p in self.Product if p.info['os'] == { 'type': 'iOS', 'version': '8' }) self.assertTrue(p)
def test_wildcard_path_3(self): with raises_if(self, self.db.provider.dialect not in ('Oracle', 'MySQL'), TranslationError, '...does not support wildcards in JSON path...'): names = get(p.info[...][0]['name'] for p in self.Product) self.assertSetEqual(set(names), {'Wi-Fi'})
def test_wildcard_path_2(self): with raises_if(self, self.db.provider.dialect not in ('Oracle', 'MySQL'), TranslationError, '...does not support wildcards in JSON path...'): values = get(p.info['os'][...] for p in self.Product) self.assertSetEqual(set(values), {'iOS', '8'})
def test_wildcard_path_1(self): with raises_if(self, db.provider.dialect not in ('Oracle', 'MySQL'), TranslationError, '...does not support wildcards in JSON path...'): names = get(p.info['models'][:]['name'] for p in Product) self.assertSetEqual(set(names), {'Wi-Fi', 'Wi-Fi + Cellular'})