odata-client
Version:
110 lines (92 loc) • 3.06 kB
JavaScript
;
const odata = require('../index');
const request = require('../request');
const config = {
version: '2.0',
headers: {Accept: 'application/json'}
};
describe('Merge (ODATA v2) tests', function () {
it('should merge a product', function (done) {
request({
url: 'http://services.odata.org/V2/(S(readwrite))/OData/OData.svc',
}).then(response => {
var q = function () {
return odata(Object.assign({ service: response.redirectUrls[1] }, config));
};
var productId;
// get every products
q().resource('Products')
.get()
.then(function (res) {
expect(res.statusCode).toEqual(200);
productId = JSON.parse(res.body).d[0].ID;
// update the first product
return q().resource('Products', productId)
.merge({Name: 'Updated Bread'});
})
.then(function (res) {
expect(res.statusCode).toEqual(204);
// get the updated product
return q().resource('Products', productId).get()
})
.then(function (res) {
expect(res.statusCode).toEqual(200);
var updatedProduct = JSON.parse(res.body).d;
expect(updatedProduct.Name).toEqual('Updated Bread');
})
.catch(function (err) {
fail(err);
})
.finally(done);
});
});
it('should batch merge products', function (done) {
request({
url: 'http://services.odata.org/(S(readwrite))/V2/OData/OData.svc',
}).then(response => {
let m = /https:\/\/services.odata.org\/V2\/\(S\((\w+)\)\)\/OData\/OData.svc/.exec(response.redirectUrls[1]);
let key;
if(m) {
key = m[1];
}
var q = function (batch) {
if(batch && key) {
return odata(Object.assign({
service: `https://services.odata.org/(S(${key}))/V2/OData/OData.svc`
}, config));
}
return odata(Object.assign({service: response.redirectUrls[1]}, config));
};
// get every products
q().resource('Products')
.get()
.then(function (res) {
expect(res.statusCode).toEqual(200);
var products = JSON.parse(res.body).d;
var batch = q(true).batch();
products.forEach(function (product) {
batch.resource('Products', product.ID)
.merge({Name: product.Name + " (UPDATED)"});
});
// update the first product
return batch.send();
})
.then(function (res) {
expect(res.statusCode).toEqual(202); // Accepted
// get every products
return q().resource('Products').get()
})
.then(function (res) {
expect(res.statusCode).toEqual(200);
var products = JSON.parse(res.body).d;
products.forEach(function (product) {
expect(product.Name).toMatch(/ \(UPDATED\)$/);
});
})
.catch(function (err) {
fail(err);
})
.finally(done);
});
});
});