summaryrefslogtreecommitdiff
path: root/ext/librethinkdbxx/test/upstream/transform/object.yaml
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2017-11-02 07:05:11 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2017-11-02 07:05:11 -0700
commit4e88c80a22b6ca982341413ee806ade0df57b4b7 (patch)
tree82c2daaac597f74595bc83c18646280a56898e1a /ext/librethinkdbxx/test/upstream/transform/object.yaml
parenta6203ed0389c1b995ebe94935b2d1ddeb01f36ee (diff)
downloadinfinitytier-4e88c80a22b6ca982341413ee806ade0df57b4b7.tar.gz
infinitytier-4e88c80a22b6ca982341413ee806ade0df57b4b7.zip
RethinkDB native connector work, minor fixes.
Diffstat (limited to 'ext/librethinkdbxx/test/upstream/transform/object.yaml')
-rw-r--r--ext/librethinkdbxx/test/upstream/transform/object.yaml147
1 files changed, 147 insertions, 0 deletions
diff --git a/ext/librethinkdbxx/test/upstream/transform/object.yaml b/ext/librethinkdbxx/test/upstream/transform/object.yaml
new file mode 100644
index 00000000..41f9aa91
--- /dev/null
+++ b/ext/librethinkdbxx/test/upstream/transform/object.yaml
@@ -0,0 +1,147 @@
+desc: Tests manipulation operations on objects
+tests:
+
+ # Define some objects to work with
+ - def: obj = r.expr({'a':1, 'b':2,'c':"str",'d':null,'e':{'f':'buzz'}})
+
+ ## Get attr
+
+ - cd: obj['a']
+ js:
+ - obj('a')
+ - obj.getField('a')
+ ot: 1
+ - cd: obj['c']
+ js:
+ - obj('c')
+ - obj.getField('c')
+ ot: 'str'
+
+ ## Has_Fields
+
+ - cd: obj.has_fields('b')
+ ot: true
+ - cd: obj.keys().contains('d')
+ ot: true
+ - cd: obj.has_fields('d')
+ ot: false
+ - cd: obj.has_fields({'e':'f'})
+ ot: true
+ - cd: obj.has_fields({'e':'g'})
+ ot: false
+ - cd: obj.has_fields('f')
+ ot: false
+
+ # Has_Fields is variadic
+ - cd: obj.has_fields('a', 'b')
+ ot: true
+ - cd: obj.has_fields('a', 'd')
+ ot: false
+ - cd: obj.has_fields('a', 'f')
+ ot: false
+ - cd: obj.has_fields('a', {'e':'f'})
+ ot: true
+
+ # Has_Fields is polymorphic
+ - cd: r.expr([obj, obj.pluck('a', 'b')]).has_fields('a', 'b').count()
+ ot: 2
+ - cd: r.expr([obj, obj.pluck('a', 'b')]).has_fields('a', 'c').count()
+ ot: 1
+ - cd: r.expr([obj, obj.pluck('a', 'e')]).has_fields('a', {'e':'f'}).count()
+ ot: 2
+
+ ## Pluck
+
+ - cd: obj.pluck('a')
+ ot: {'a':1}
+ - cd: obj.pluck('a', 'b')
+ ot: {'a':1, 'b':2}
+
+ ## Without
+
+ - cd: obj.without('a')
+ ot: {'b':2, 'c':'str', 'd':null, 'e':{'f':'buzz'}}
+ - cd: obj.without('a', 'b')
+ ot: {'c':'str', 'd':null,'e':{'f':'buzz'}}
+ - cd: obj.without('a', 'b', 'c', 'd')
+ ot: {'e':{'f':'buzz'}}
+ - cd: obj.without({'e':'f'})
+ ot: {'a':1, 'b':2, 'c':'str', 'd':null, 'e':{}}
+ - cd: obj.without({'e':'buzz'})
+ ot: {'a':1, 'b':2, 'c':'str', 'd':null, 'e':{'f':'buzz'}}
+
+ ## Merge
+ #obj = r.expr({'a':1, 'b':2,'c':"str",'d':null,'e':{'f':'buzz'}})
+
+ # complete replacement
+ - cd: obj.merge(1)
+ ot: 1
+
+ # add attr
+ - cd: obj.merge({'e':-2})
+ ot: {'a':1, 'b':2, 'c':'str', 'd':null, 'e':-2}
+
+ # delete attr
+ - cd: obj.merge({'e':r.literal()})
+ ot: {'a':1, 'b':2, 'c':'str', 'd':null}
+
+ # recursive merge
+ - cd: obj.merge({'e':{'f':'quux'}})
+ ot: {'a':1, 'b':2, 'c':'str', 'd':null, 'e':{'f':'quux'}}
+
+ - cd: obj.merge({'e':{'g':'quux'}})
+ ot: {'a':1, 'b':2, 'c':'str', 'd':null, 'e':{'f':'buzz', 'g':'quux'}}
+
+ - cd: obj.merge({'e':r.literal({'g':'quux'})})
+ ot: {'a':1, 'b':2, 'c':'str', 'd':null, 'e':{'g':'quux'}}
+
+ # overwrite
+ - cd: obj.merge({'a':-1})
+ ot: {'a':-1, 'b':2, 'c':'str', 'd':null, 'e':{'f':'buzz'}}
+
+ - def: errmsg = 'Stray literal keyword found:'+' literal is only legal inside of the object passed to merge or update and cannot nest inside other literals.'
+
+ # errors
+ - cd: r.literal('foo')
+ ot: err("ReqlQueryLogicError", errmsg, [])
+
+ - cd: obj.merge(r.literal('foo'))
+ ot: err("ReqlQueryLogicError", errmsg, [])
+
+ - cd: obj.merge({'foo':r.literal(r.literal('foo'))})
+ ot: err("ReqlQueryLogicError", errmsg, [])
+
+ - def: o = r.expr({'a':{'b':1, 'c':2}, 'd':3})
+
+ - cd: o.merge({'e':4}, {'f':5})
+ ot: ({'a':{'b':1, 'c':2}, 'd':3, 'e':4, 'f':5})
+
+ - rb: r.expr([o, o.merge({'d':4})]).merge{|row| {'e':row['d']}}
+ py: r.expr([o, o.merge({'d':4})]).merge(lambda row:{'e':row['d']})
+ js: r.expr([o, o.merge({'d':4})]).merge(function(row){return {'e':row('d')}})
+ ot: ([{'a':{'b':1, 'c':2}, 'd':3, 'e':3}, {'a':{'b':1, 'c':2}, 'd':4, 'e':4}])
+
+ - py: r.expr([o, o.merge({'d':4})]).merge({'e':r.row['d']})
+ js: r.expr([o, o.merge({'d':4})]).merge({'e':r.row('d')})
+ ot: ([{'a':{'b':1, 'c':2}, 'd':3, 'e':3}, {'a':{'b':1, 'c':2}, 'd':4, 'e':4}])
+
+ - rb: r.expr([o, o.merge({'d':4})]).merge{|row| {'a':{'b':2}}}
+ py: r.expr([o, o.merge({'d':4})]).merge(lambda row:{'a':{'b':2}})
+ js: r.expr([o, o.merge({'d':4})]).merge(function(row){return {'a':{'b':2}}})
+ ot: ([{'a':{'b':2, 'c':2}, 'd':3}, {'a':{'b':2, 'c':2}, 'd':4}])
+
+ - rb: r.expr([o, o.merge({'d':4})]).merge{|row| {'a':r.literal({'b':2})}}
+ py: r.expr([o, o.merge({'d':4})]).merge(lambda row:{'a':r.literal({'b':2})})
+ js: r.expr([o, o.merge({'d':4})]).merge(function(row){return {'a':r.literal({'b':2})}})
+ ot: ([{'a':{'b':2}, 'd':3}, {'a':{'b':2}, 'd':4}])
+
+ ## keys
+ - cd: obj.keys()
+ ot: (['a', 'b', 'c', 'd', 'e'])
+
+ - cd: obj.values()
+ ot: ([1, 2, 'str', null, {'f':'buzz'}])
+
+ ## count
+ - cd: obj.count()
+ ot: 5