postman-runtime
Version:
Underlying library of executing Postman Collections (used by Newman)
319 lines (292 loc) • 12.2 kB
JavaScript
var _ = require('lodash'),
expect = require('chai').expect;
describe('Inherited Auth', function () {
var testrun,
runOptions = {
collection: {
item: {
name: 'BasicAuth Request',
request: {
url: 'https://postman-echo.com/digest-auth'
}
}
}
};
describe('in request level', function () {
before(function (done) {
var clonedRunOptions = _.merge({}, runOptions,
{
collection: {
item: {
request: {
auth: {
type: 'digest',
digest: {
username: '{{uname}}',
password: '{{pass}}'
}
}
}
}
},
environment: {
values: [{
key: 'uname',
value: 'postman'
}, {
key: 'pass',
value: 'password'
}]
}
}
);
// perform the collection run
this.run(clonedRunOptions, function (err, results) {
testrun = results;
done(err);
});
});
it('should have completed the run', function () {
expect(testrun).to.be.ok;
expect(testrun).to.nested.include({
'done.callCount': 1
});
testrun.done.getCall(0).args[0] && console.error(testrun.done.getCall(0).args[0].stack);
expect(testrun.done.getCall(0).args[0]).to.be.null;
expect(testrun).to.nested.include({
'start.callCount': 1
});
});
it('should have sent the request twice', function () {
expect(testrun).to.nested.include({
'request.callCount': 2
});
var err = testrun.request.firstCall.args[0],
request = testrun.request.firstCall.args[3],
response1 = testrun.request.firstCall.args[2],
response2 = testrun.request.secondCall.args[2];
expect(err).to.be.null;
expect(request.url.toString()).to.equal('https://postman-echo.com/digest-auth');
expect(response1).to.have.property('code', 401);
expect(response2).to.have.property('code', 200);
});
});
describe('in itemGroup level', function () {
before(function (done) {
var clonedRunOptions = _.merge({}, runOptions,
{
collection: {
item: [{
name: 'F1',
auth: {
type: 'digest',
digest: {
username: '{{uname}}',
password: '{{pass}}'
}
},
item: [{
name: 'digestAuth Request 1',
request: {
url: 'https://postman-echo.com/digest-auth'
}
}, {
name: 'digestAuth Request 2',
request: {
url: 'https://postman-echo.com/digest-auth'
}
}]
}]
},
environment: {
values: [{
key: 'uname',
value: 'postman'
}, {
key: 'pass',
value: 'password'
}]
}
}
);
// perform the collection run
this.run(clonedRunOptions, function (err, results) {
testrun = results;
done(err);
});
});
it('should have completed the run', function () {
expect(testrun).to.be.ok;
expect(testrun).to.nested.include({
'done.callCount': 1
});
testrun.done.getCall(0).args[0] && console.error(testrun.done.getCall(0).args[0].stack);
expect(testrun.done.getCall(0).args[0]).to.be.null;
expect(testrun).to.nested.include({
'start.callCount': 1
});
});
it('should have inherited auth for both requests', function () {
// the second req should reuse the nonce and realm from the 1st req's response
expect(testrun).to.nested.include({
'request.callCount': 3
});
var err1 = testrun.request.firstCall.args[0],
request1 = testrun.request.firstCall.args[3],
response1 = testrun.request.firstCall.args[2],
response2 = testrun.request.secondCall.args[2],
err2 = testrun.request.secondCall.args[0],
request2 = testrun.request.secondCall.args[3],
response3 = testrun.request.thirdCall.args[2];
expect(err1).to.be.null;
expect(request1.url.toString()).to.equal('https://postman-echo.com/digest-auth');
expect(response1).to.have.property('code', 401);
expect(response2).to.have.property('code', 200);
expect(err2).to.be.null;
expect(request2.url.toString()).to.equal('https://postman-echo.com/digest-auth');
expect(response3).to.have.property('code', 200);
});
});
describe('in collection level', function () {
before(function (done) {
var clonedRunOptions = _.merge({}, runOptions,
{
collection: {
auth: {
type: 'digest',
digest: {
username: '{{uname}}',
password: '{{pass}}'
}
},
item: [{
name: 'F1',
item: [{
name: 'DigestAuth Request 1',
request: {
url: 'https://postman-echo.com/digest-auth'
}
}, {
name: 'DigestAuth Request 2',
request: {
url: 'https://postman-echo.com/digest-auth'
}
}]
}]
},
environment: {
values: [{
key: 'uname',
value: 'postman'
}, {
key: 'pass',
value: 'password'
}]
}
}
);
// perform the collection run
this.run(clonedRunOptions, function (err, results) {
testrun = results;
done(err);
});
});
it('should have completed the run', function () {
expect(testrun).to.be.ok;
expect(testrun).to.nested.include({
'done.callCount': 1
});
testrun.done.getCall(0).args[0] && console.error(testrun.done.getCall(0).args[0].stack);
expect(testrun.done.getCall(0).args[0]).to.be.null;
expect(testrun).to.nested.include({
'start.callCount': 1
});
});
it('should inherited auth for both requests', function () {
// the second req should reuse the nonce and realm from the 1st req's response
expect(testrun).to.nested.include({
'request.callCount': 3
});
var err1 = testrun.request.firstCall.args[0],
err2 = testrun.request.secondCall.args[0],
request1 = testrun.request.firstCall.args[3],
request2 = testrun.request.secondCall.args[3],
response1 = testrun.request.firstCall.args[2],
response2 = testrun.request.secondCall.args[2],
response3 = testrun.request.thirdCall.args[2];
expect(err1).to.be.null;
expect(err2).to.be.null;
expect(request1.url.toString()).to.equal('https://postman-echo.com/digest-auth');
expect(request2.url.toString()).to.equal('https://postman-echo.com/digest-auth');
expect(response1).to.have.property('code', 401);
expect(response2).to.have.property('code', 200);
expect(response3).to.have.property('code', 200);
});
});
describe('in collection and request level', function () {
before(function (done) {
var clonedRunOptions = _.merge({}, runOptions,
{
collection: {
item: {
request: {
auth: {
type: 'digest',
digest: {
username: '{{uname}}',
password: '{{pass}}'
}
}
}
},
auth: {
type: 'digest',
digest: {
username: 'iamnotpostman',
password: 'password'
}
}
},
environment: {
values: [{
key: 'uname',
value: 'postman'
}, {
key: 'pass',
value: 'password'
}]
}
}
);
// perform the collection run
this.run(clonedRunOptions, function (err, results) {
testrun = results;
done(err);
});
});
it('should have completed the run', function () {
expect(testrun).to.be.ok;
expect(testrun).to.nested.include({
'done.callCount': 1
});
testrun.done.getCall(0).args[0] && console.error(testrun.done.getCall(0).args[0].stack);
expect(testrun.done.getCall(0).args[0]).to.be.null;
expect(testrun).to.nested.include({
'start.callCount': 1
});
});
it('should have sent the request twice', function () {
expect(testrun).to.nested.include({
'request.callCount': 2
});
var err = testrun.request.firstCall.args[0],
request = testrun.request.firstCall.args[3],
response1 = testrun.request.firstCall.args[2],
response2 = testrun.request.secondCall.args[2];
expect(err).to.be.null;
expect(request.url.toString()).to.equal('https://postman-echo.com/digest-auth');
expect(response1).to.have.property('code', 401);
expect(response2).to.have.property('code', 200);
});
});
});