Commit 6b773b25 authored by Patricio Bruna's avatar Patricio Bruna

Creating resources with attributes working

parent 3f589551
......@@ -19326,7 +19326,8 @@ var ZimbraAdminApi =
value: function createAccount(name, password, attributes, callback) {
var resource_data = {
name: { '_content': name },
password: { '_content': password }
password: { '_content': password },
a: this.dictionary.attributesToArray(attributes)
};
this.create('Account', resource_data, callback);
}
......@@ -19339,7 +19340,8 @@ var ZimbraAdminApi =
key: 'createDomain',
value: function createDomain(name, attributes, callback) {
var resource_data = {
name: { '_content': name }
name: { '_content': name },
a: this.dictionary.attributesToArray(attributes)
};
this.create('Domain', resource_data, callback);
}
......@@ -21077,6 +21079,14 @@ var ZimbraAdminApi =
value: true
});
var _entries = __webpack_require__(546);
var _entries2 = _interopRequireDefault(_entries);
var _map = __webpack_require__(550);
var _map2 = _interopRequireDefault(_map);
var _classCallCheck2 = __webpack_require__(359);
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
......@@ -21122,6 +21132,17 @@ var ZimbraAdminApi =
if (resource_identifier.match(uuid_regex)) return 'id';
return 'name';
}
}, {
key: 'attributesToArray',
value: function attributesToArray(attributes) {
if ($.isEmptyObject(attributes)) return [];
var result = [];
var map = new _map2.default((0, _entries2.default)(attributes));
map.forEach(function (key, value) {
result.push({ 'n': value, '_content': key });
});
return result;
}
}, {
key: 'classFactory',
value: function classFactory(resource, object) {
......@@ -48018,6 +48039,657 @@ var ZimbraAdminApi =
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(403).Buffer))
/***/ },
/* 546 */
/***/ function(module, exports, __webpack_require__) {
/*** IMPORTS FROM imports-loader ***/
var $ = __webpack_require__(2);
var jQuery = __webpack_require__(2);
module.exports = { "default": __webpack_require__(547), __esModule: true };
/***/ },
/* 547 */
/***/ function(module, exports, __webpack_require__) {
/*** IMPORTS FROM imports-loader ***/
var $ = __webpack_require__(2);
var jQuery = __webpack_require__(2);
__webpack_require__(548);
module.exports = __webpack_require__(306).Object.entries;
/***/ },
/* 548 */
/***/ function(module, exports, __webpack_require__) {
/*** IMPORTS FROM imports-loader ***/
var $ = __webpack_require__(2);
var jQuery = __webpack_require__(2);
// https://github.com/tc39/proposal-object-values-entries
var $export = __webpack_require__(304)
, $entries = __webpack_require__(549)(true);
$export($export.S, 'Object', {
entries: function entries(it){
return $entries(it);
}
});
/***/ },
/* 549 */
/***/ function(module, exports, __webpack_require__) {
/*** IMPORTS FROM imports-loader ***/
var $ = __webpack_require__(2);
var jQuery = __webpack_require__(2);
var getKeys = __webpack_require__(325)
, toIObject = __webpack_require__(327)
, isEnum = __webpack_require__(353).f;
module.exports = function(isEntries){
return function(it){
var O = toIObject(it)
, keys = getKeys(O)
, length = keys.length
, i = 0
, result = []
, key;
while(length > i)if(isEnum.call(O, key = keys[i++])){
result.push(isEntries ? [key, O[key]] : O[key]);
} return result;
};
};
/***/ },
/* 550 */
/***/ function(module, exports, __webpack_require__) {
/*** IMPORTS FROM imports-loader ***/
var $ = __webpack_require__(2);
var jQuery = __webpack_require__(2);
module.exports = { "default": __webpack_require__(551), __esModule: true };
/***/ },
/* 551 */
/***/ function(module, exports, __webpack_require__) {
/*** IMPORTS FROM imports-loader ***/
var $ = __webpack_require__(2);
var jQuery = __webpack_require__(2);
__webpack_require__(358);
__webpack_require__(298);
__webpack_require__(342);
__webpack_require__(552);
__webpack_require__(565);
module.exports = __webpack_require__(306).Map;
/***/ },
/* 552 */
/***/ function(module, exports, __webpack_require__) {
/*** IMPORTS FROM imports-loader ***/
var $ = __webpack_require__(2);
var jQuery = __webpack_require__(2);
'use strict';
var strong = __webpack_require__(553);
// 23.1 Map Objects
module.exports = __webpack_require__(562)('Map', function(get){
return function Map(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };
}, {
// 23.1.3.6 Map.prototype.get(key)
get: function get(key){
var entry = strong.getEntry(this, key);
return entry && entry.v;
},
// 23.1.3.9 Map.prototype.set(key, value)
set: function set(key, value){
return strong.def(this, key === 0 ? 0 : key, value);
}
}, strong, true);
/***/ },
/* 553 */
/***/ function(module, exports, __webpack_require__) {
/*** IMPORTS FROM imports-loader ***/
var $ = __webpack_require__(2);
var jQuery = __webpack_require__(2);
'use strict';
var dP = __webpack_require__(310).f
, create = __webpack_require__(323)
, hide = __webpack_require__(309)
, redefineAll = __webpack_require__(554)
, ctx = __webpack_require__(307)
, anInstance = __webpack_require__(555)
, defined = __webpack_require__(301)
, forOf = __webpack_require__(556)
, $iterDefine = __webpack_require__(302)
, step = __webpack_require__(345)
, setSpecies = __webpack_require__(561)
, DESCRIPTORS = __webpack_require__(314)
, fastKey = __webpack_require__(349).fastKey
, SIZE = DESCRIPTORS ? '_s' : 'size';
var getEntry = function(that, key){
// fast case
var index = fastKey(key), entry;
if(index !== 'F')return that._i[index];
// frozen object case
for(entry = that._f; entry; entry = entry.n){
if(entry.k == key)return entry;
}
};
module.exports = {
getConstructor: function(wrapper, NAME, IS_MAP, ADDER){
var C = wrapper(function(that, iterable){
anInstance(that, C, NAME, '_i');
that._i = create(null); // index
that._f = undefined; // first entry
that._l = undefined; // last entry
that[SIZE] = 0; // size
if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that);
});
redefineAll(C.prototype, {
// 23.1.3.1 Map.prototype.clear()
// 23.2.3.2 Set.prototype.clear()
clear: function clear(){
for(var that = this, data = that._i, entry = that._f; entry; entry = entry.n){
entry.r = true;
if(entry.p)entry.p = entry.p.n = undefined;
delete data[entry.i];
}
that._f = that._l = undefined;
that[SIZE] = 0;
},
// 23.1.3.3 Map.prototype.delete(key)
// 23.2.3.4 Set.prototype.delete(value)
'delete': function(key){
var that = this
, entry = getEntry(that, key);
if(entry){
var next = entry.n
, prev = entry.p;
delete that._i[entry.i];
entry.r = true;
if(prev)prev.n = next;
if(next)next.p = prev;
if(that._f == entry)that._f = next;
if(that._l == entry)that._l = prev;
that[SIZE]--;
} return !!entry;
},
// 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)
// 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)
forEach: function forEach(callbackfn /*, that = undefined */){
anInstance(this, C, 'forEach');
var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3)
, entry;
while(entry = entry ? entry.n : this._f){
f(entry.v, entry.k, this);
// revert to the last existing entry
while(entry && entry.r)entry = entry.p;
}
},
// 23.1.3.7 Map.prototype.has(key)
// 23.2.3.7 Set.prototype.has(value)
has: function has(key){
return !!getEntry(this, key);
}
});
if(DESCRIPTORS)dP(C.prototype, 'size', {
get: function(){
return defined(this[SIZE]);
}
});
return C;
},
def: function(that, key, value){
var entry = getEntry(that, key)
, prev, index;
// change existing entry
if(entry){
entry.v = value;
// create new entry
} else {
that._l = entry = {
i: index = fastKey(key, true), // <- index
k: key, // <- key
v: value, // <- value
p: prev = that._l, // <- previous entry
n: undefined, // <- next entry
r: false // <- removed
};
if(!that._f)that._f = entry;
if(prev)prev.n = entry;
that[SIZE]++;
// add to index
if(index !== 'F')that._i[index] = entry;
} return that;
},
getEntry: getEntry,
setStrong: function(C, NAME, IS_MAP){
// add .keys, .values, .entries, [@@iterator]
// 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11
$iterDefine(C, NAME, function(iterated, kind){
this._t = iterated; // target
this._k = kind; // kind
this._l = undefined; // previous
}, function(){
var that = this
, kind = that._k
, entry = that._l;
// revert to the last existing entry
while(entry && entry.r)entry = entry.p;
// get next entry
if(!that._t || !(that._l = entry = entry ? entry.n : that._t._f)){
// or finish the iteration
that._t = undefined;
return step(1);
}
// return step by kind
if(kind == 'keys' )return step(0, entry.k);
if(kind == 'values')return step(0, entry.v);
return step(0, [entry.k, entry.v]);
}, IS_MAP ? 'entries' : 'values' , !IS_MAP, true);
// add [@@species], 23.1.2.2, 23.2.2.2
setSpecies(NAME);
}
};
/***/ },
/* 554 */
/***/ function(module, exports, __webpack_require__) {
/*** IMPORTS FROM imports-loader ***/
var $ = __webpack_require__(2);
var jQuery = __webpack_require__(2);
var hide = __webpack_require__(309);
module.exports = function(target, src, safe){
for(var key in src){
if(safe && target[key])target[key] = src[key];
else hide(target, key, src[key]);
} return target;
};
/***/ },
/* 555 */
/***/ function(module, exports, __webpack_require__) {
/*** IMPORTS FROM imports-loader ***/
var $ = __webpack_require__(2);
var jQuery = __webpack_require__(2);
module.exports = function(it, Constructor, name, forbiddenField){
if(!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)){
throw TypeError(name + ': incorrect invocation!');
} return it;
};
/***/ },
/* 556 */
/***/ function(module, exports, __webpack_require__) {
/*** IMPORTS FROM imports-loader ***/
var $ = __webpack_require__(2);
var jQuery = __webpack_require__(2);
var ctx = __webpack_require__(307)
, call = __webpack_require__(557)
, isArrayIter = __webpack_require__(558)
, anObject = __webpack_require__(311)
, toLength = __webpack_require__(331)
, getIterFn = __webpack_require__(559);
module.exports = function(iterable, entries, fn, that, ITERATOR){
var iterFn = ITERATOR ? function(){ return iterable; } : getIterFn(iterable)
, f = ctx(fn, that, entries ? 2 : 1)
, index = 0
, length, step, iterator;
if(typeof iterFn != 'function')throw TypeError(iterable + ' is not iterable!');
// fast case for arrays with default iterator
if(isArrayIter(iterFn))for(length = toLength(iterable.length); length > index; index++){
entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);
} else for(iterator = iterFn.call(iterable); !(step = iterator.next()).done; ){
call(iterator, f, step.value, entries);
}
};
/***/ },
/* 557 */
/***/ function(module, exports, __webpack_require__) {
/*** IMPORTS FROM imports-loader ***/
var $ = __webpack_require__(2);
var jQuery = __webpack_require__(2);
// call something on iterator step with safe closing on error
var anObject = __webpack_require__(311);
module.exports = function(iterator, fn, value, entries){
try {
return entries ? fn(anObject(value)[0], value[1]) : fn(value);
// 7.4.6 IteratorClose(iterator, completion)
} catch(e){
var ret = iterator['return'];
if(ret !== undefined)anObject(ret.call(iterator));
throw e;
}
};
/***/ },
/* 558 */
/***/ function(module, exports, __webpack_require__) {
/*** IMPORTS FROM imports-loader ***/
var $ = __webpack_require__(2);
var jQuery = __webpack_require__(2);
// check on default Array iterator
var Iterators = __webpack_require__(321)
, ITERATOR = __webpack_require__(339)('iterator')
, ArrayProto = Array.prototype;
module.exports = function(it){
return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);
};
/***/ },
/* 559 */
/***/ function(module, exports, __webpack_require__) {
/*** IMPORTS FROM imports-loader ***/
var $ = __webpack_require__(2);
var jQuery = __webpack_require__(2);
var classof = __webpack_require__(560)
, ITERATOR = __webpack_require__(339)('iterator')
, Iterators = __webpack_require__(321);
module.exports = __webpack_require__(306).getIteratorMethod = function(it){
if(it != undefined)return it[ITERATOR]
|| it['@@iterator']
|| Iterators[classof(it)];
};
/***/ },
/* 560 */
/***/ function(module, exports, __webpack_require__) {
/*** IMPORTS FROM imports-loader ***/
var $ = __webpack_require__(2);
var jQuery = __webpack_require__(2);
// getting tag from 19.1.3.6 Object.prototype.toString()
var cof = __webpack_require__(329)
, TAG = __webpack_require__(339)('toStringTag')
// ES3 wrong here
, ARG = cof(function(){ return arguments; }()) == 'Arguments';
// fallback for IE11 Script Access Denied error
var tryGet = function(it, key){
try {
return it[key];
} catch(e){ /* empty */ }
};
module.exports = function(it){
var O, T, B;
return it === undefined ? 'Undefined' : it === null ? 'Null'
// @@toStringTag case
: typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T
// builtinTag case
: ARG ? cof(O)
// ES3 arguments fallback
: (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;
};
/***/ },
/* 561 */
/***/ function(module, exports, __webpack_require__) {
/*** IMPORTS FROM imports-loader ***/
var $ = __webpack_require__(2);
var jQuery = __webpack_require__(2);
'use strict';
var global = __webpack_require__(305)
, core = __webpack_require__(306)
, dP = __webpack_require__(310)
, DESCRIPTORS = __webpack_require__(314)
, SPECIES = __webpack_require__(339)('species');
module.exports = function(KEY){
var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY];
if(DESCRIPTORS && C && !C[SPECIES])dP.f(C, SPECIES, {
configurable: true,
get: function(){ return this; }
});
};
/***/ },
/* 562 */
/***/ function(module, exports, __webpack_require__) {
/*** IMPORTS FROM imports-loader ***/
var $ = __webpack_require__(2);
var jQuery = __webpack_require__(2);
'use strict';
var global = __webpack_require__(305)
, $export = __webpack_require__(304)
, meta = __webpack_require__(349)
, fails = __webpack_require__(315)
, hide = __webpack_require__(309)
, redefineAll = __webpack_require__(554)
, forOf = __webpack_require__(556)
, anInstance = __webpack_require__(555)
, isObject = __webpack_require__(312)
, setToStringTag = __webpack_require__(338)
, dP = __webpack_require__(310).f
, each = __webpack_require__(563)(0)
, DESCRIPTORS = __webpack_require__(314);
module.exports = function(NAME, wrapper, methods, common, IS_MAP, IS_WEAK){
var Base = global[NAME]
, C = Base
, ADDER = IS_MAP ? 'set' : 'add'
, proto = C && C.prototype
, O = {};
if(!DESCRIPTORS || typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function(){
new C().entries().next();
}))){
// create collection constructor
C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);
redefineAll(C.prototype, methods);
meta.NEED = true;
} else {
C = wrapper(function(target, iterable){
anInstance(target, C, NAME, '_c');
target._c = new Base;
if(iterable != undefined)forOf(iterable, IS_MAP, target[ADDER], target);
});
each('add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON'.split(','),function(KEY){
var IS_ADDER = KEY == 'add' || KEY == 'set';
if(KEY in proto && !(IS_WEAK && KEY == 'clear'))hide(C.prototype, KEY, function(a, b){
anInstance(this, C, KEY);
if(!IS_ADDER && IS_WEAK && !isObject(a))return KEY == 'get' ? undefined : false;
var result = this._c[KEY](a === 0 ? 0 : a, b);
return IS_ADDER ? this : result;
});
});
if('size' in proto)dP(C.prototype, 'size', {
get: function(){
return this._c.size;
}
});
}
setToStringTag(C, NAME);
O[NAME] = C;
$export($export.G + $export.W + $export.F, O);
if(!IS_WEAK)common.setStrong(C, NAME, IS_MAP);
return C;
};
/***/ },
/* 563 */
/***/ function(module, exports, __webpack_require__) {
/*** IMPORTS FROM imports-loader ***/
var $ = __webpack_require__(2);
var jQuery = __webpack_require__(2);
// 0 -> Array#forEach
// 1 -> Array#map
// 2 -> Array#filter
// 3 -> Array#some
// 4 -> Array#every
// 5 -> Array#find
// 6 -> Array#findIndex
var ctx = __webpack_require__(307)
, IObject = __webpack_require__(328)
, toObject = __webpack_require__(341)
, toLength = __webpack_require__(331)
, asc = __webpack_require__(564);
module.exports = function(TYPE, $create){
var IS_MAP = TYPE == 1
, IS_FILTER = TYPE == 2
, IS_SOME = TYPE == 3
, IS_EVERY = TYPE == 4
, IS_FIND_INDEX = TYPE == 6
, NO_HOLES = TYPE == 5 || IS_FIND_INDEX
, create = $create || asc;
return function($this, callbackfn, that){
var O = toObject($this)
, self = IObject(O)
, f = ctx(callbackfn, that, 3)
, length = toLength(self.length)
, index = 0
, result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined
, val, res;
for(;length > index; index++)if(NO_HOLES || index in self){
val = self[index];
res = f(val, index, O);
if(TYPE){
if(IS_MAP)result[index] = res; // map
else if(res)switch(TYPE){
case 3: return true; // some
case 5: return val; // find
case 6: return index; // findIndex
case 2: result.push(val); // filter
} else if(IS_EVERY)return false; // every
}
}
return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;
};
};
/***/ },
/* 564 */
/***/ function(module, exports, __webpack_require__) {
/*** IMPORTS FROM imports-loader ***/
var $ = __webpack_require__(2);
var jQuery = __webpack_require__(2);
// 9.4.2.3 ArraySpeciesCreate(originalArray, length)
var isObject = __webpack_require__(312)
, isArray = __webpack_require__(354)
, SPECIES = __webpack_require__(339)('species');
module.exports = function(original, length){
var C;
if(isArray(original)){
C = original.constructor;
// cross-realm fallback
if(typeof C == 'function' && (C === Array || isArray(C.prototype)))C = undefined;
if(isObject(C)){
C = C[SPECIES];
if(C === null)C = undefined;
}
} return new (C === undefined ? Array : C)(length);
};
/***/ },
/* 565 */
/***/ function(module, exports, __webpack_require__) {
/*** IMPORTS FROM imports-loader ***/
var $ = __webpack_require__(2);
var jQuery = __webpack_require__(2);
// https://github.com/DavidBruant/Map-Set.prototype.toJSON
var $export = __webpack_require__(304);
$export($export.P + $export.R, 'Map', {toJSON: __webpack_require__(566)('Map')});
/***/ },
/* 566 */
/***/ function(module, exports, __webpack_require__) {
/*** IMPORTS FROM imports-loader ***/
var $ = __webpack_require__(2);
var jQuery = __webpack_require__(2);
// https://github.com/DavidBruant/Map-Set.prototype.toJSON
var classof = __webpack_require__(560)
, from = __webpack_require__(567);
module.exports = function(NAME){
return function toJSON(){
if(classof(this) != NAME)throw TypeError(NAME + "#toJSON isn't generic");
return from(this);
};
};
/***/ },
/* 567 */
/***/ function(module, exports, __webpack_require__) {
/*** IMPORTS FROM imports-loader ***/
var $ = __webpack_require__(2);
var jQuery = __webpack_require__(2);
var forOf = __webpack_require__(556);
module.exports = function(iter, ITERATOR){
var result = [];
forOf(iter, false, result.push, result, ITERATOR);
return result;
};
/***/ }
/******/ ]);
//# sourceMappingURL=zimbra-admin-api.js.map
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -190,7 +190,8 @@ class ZimbraAdminApi {
createAccount(name, password, attributes, callback) {
let resource_data = {
name: { '_content': name },
password: { '_content': password }
password: { '_content': password },
a: this.dictionary.attributesToArray(attributes)
};
this.create('Account', resource_data, callback);
}
......@@ -201,7 +202,8 @@ class ZimbraAdminApi {
createDomain(name, attributes, callback) {
let resource_data = {
name: { '_content': name }
name: { '_content': name },
a: this.dictionary.attributesToArray(attributes)
};
this.create('Domain', resource_data, callback);
}
......
......@@ -22,6 +22,16 @@ export default class Dictionary {
return 'name';
}
attributesToArray (attributes) {
if ($.isEmptyObject(attributes)) return [];
const result = []
const map = new Map(Object.entries(attributes));
map.forEach((key, value) => {
result.push({ 'n': value, '_content': key });
});
return result;
}
classFactory (resource, object) {
const class_name = this.resourceToClass(resource.toLowerCase());
return new class_name(object);
......
......@@ -177,6 +177,36 @@
});
});
it('should create and return Domain with attributes', function(done){
let resource_name = Date.now() + '.dev';
let resource_attributes = {
zimbraSkinLogoURL: 'http://www.zboxapp.com',
postOfficeBox: 'ZBoxApp'
};
let api = new ZimbraAdminApi(auth_data);
let callback = function(err, data){
if (err) return console.log(err);
expect(data.attrs.zimbraSkinLogoURL).to.equal('http://www.zboxapp.com');
expect(data.attrs.postOfficeBox).to.equal('ZBoxApp');
done();
};
api.createDomain(resource_name, resource_attributes, callback);
});
it('should create and return an account with extra attributes', function(done){
let account_name = Date.now() + '@zboxapp.dev';
let account_password = Date.now();
let account_attributes = { 'sn': 'Bruna', 'givenName': 'Patricio' };
let api = new ZimbraAdminApi(auth_data);
api.createAccount(account_name, account_password, account_attributes, function(err, data){
if (err) return console.log(err);
expect(data.attrs.sn).to.equal('Bruna');
expect(data.attrs.givenName).to.equal('Patricio');
done();
});
});
});
})();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment