SauceLabs.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. describe('SauceLabs', function () {
  2. var SauceLabs = require('..');
  3. var sauce;
  4. var nockle;
  5. describe('#constructor', function () {
  6. it('can be instantiated with `new`', function () {
  7. sauce = new SauceLabs();
  8. sauce.should.be.an.instanceof(SauceLabs);
  9. });
  10. });
  11. describe('once instantiated', function () {
  12. beforeEach(function () {
  13. var base = 'https://:username::password@saucelabs.com';
  14. var config = {
  15. username: 'johndoe',
  16. password: '550e8400-e29b-41d4-a716-446655440000',
  17. proxy: 'http://google.com'
  18. };
  19. sauce = new SauceLabs(config);
  20. nockle = new chai.Nockle(base, config);
  21. });
  22. afterEach(function () {
  23. sauce = null;
  24. nockle = null;
  25. });
  26. describe('when the response status is not 200', function () {
  27. it('notifies the callback', function (done) {
  28. var error = { error: 'foobar' };
  29. var mock = nockle.failget('/rest/v1/users/:username', null, error);
  30. sauce.getAccountDetails(verifyFailure(error, done));
  31. });
  32. });
  33. describe('when the response body cannot be parsed', function () {
  34. it('notifies the callback', function (done) {
  35. var error = 'foobar';
  36. var mock = nockle.failget('/rest/v1/users/:username', null, error);
  37. sauce.getAccountDetails(verifyFailure('Could not parse response: ' + error, done));
  38. });
  39. });
  40. describe('#getAccountDetails', function () {
  41. it('GETs `/rest/v1/users/:username`', function (done) {
  42. var mock = nockle.get('/rest/v1/users/:username');
  43. sauce.getAccountDetails(verifySuccess(mock, done));
  44. });
  45. });
  46. describe('#getAccountLimits', function () {
  47. it('GETs `/rest/v1/:username/limits`', function (done) {
  48. var mock = nockle.get('/rest/v1/:username/limits');
  49. sauce.getAccountLimits(verifySuccess(mock, done));
  50. });
  51. });
  52. describe('#getUserActivity', function () {
  53. describe('without start and end dates', function () {
  54. it('GETs `/rest/v1/:username/activity`', function (done) {
  55. var mock = nockle.get('/rest/v1/:username/activity');
  56. sauce.getUserActivity(verifySuccess(mock, done));
  57. });
  58. });
  59. describe('with start date', function () {
  60. var start = new Date('Jan 1, 1970 00:00:00');
  61. it('GETs `/rest/v1/:username/activity?start=1970-01-01`', function (done) {
  62. var mock = nockle.get('/rest/v1/:username/activity?start=1970-01-01');
  63. sauce.getUserActivity(start, verifySuccess(mock, done));
  64. });
  65. });
  66. describe('with end date', function () {
  67. var end = new Date('Jan 1, 1971 00:00:00');
  68. it('GETs `/rest/v1/:username/activity?end=1971-01-01`', function (done) {
  69. var mock = nockle.get('/rest/v1/:username/activity?end=1971-01-01');
  70. sauce.getUserActivity(null, end, verifySuccess(mock, done));
  71. });
  72. });
  73. describe('with start and end dates', function () {
  74. var start = new Date('Jan 1, 1970 00:00:00');
  75. var end = new Date('Jan 1, 1971 00:00:00');
  76. it('GETs `/rest/v1/:username/activity?start=1970-01-01&end=1971-01-01`', function (done) {
  77. var mock = nockle.get('/rest/v1/:username/activity?start=1970-01-01&end=1971-01-01');
  78. sauce.getUserActivity(start, end, verifySuccess(mock, done));
  79. });
  80. });
  81. });
  82. describe('#getUserConcurrency', function () {
  83. it('GETs `/rest/v1/users/:username/concurrency`', function (done) {
  84. var mock = nockle.get('/rest/v1/users/:username/concurrency');
  85. sauce.getUserConcurrency(verifySuccess(mock, done));
  86. });
  87. });
  88. describe('#getAccountUsage', function () {
  89. it('GETs `/rest/v1/users/:username/usage`', function (done) {
  90. var mock = nockle.get('/rest/v1/users/:username/usage');
  91. sauce.getAccountUsage(verifySuccess(mock, done));
  92. });
  93. });
  94. describe('#getJobs', function () {
  95. it('GETs `/rest/v1/:username/jobs?full=true`', function (done) {
  96. var mock = nockle.get('/rest/v1/:username/jobs?full=true');
  97. sauce.getJobs(verifySuccess(mock, done));
  98. });
  99. });
  100. describe('#showJob', function () {
  101. it('GETs `/rest/v1/:username/jobs/:id`', function (done) {
  102. var id = '01230123-example-id-1234';
  103. var mock = nockle.get('/rest/v1/:username/jobs/:id', { id: id });
  104. sauce.showJob(id, verifySuccess(mock, done));
  105. });
  106. });
  107. describe('#showJobAssets', function () {
  108. it('GETs `/rest/v1/:username/jobs/:id/assets`', function (done) {
  109. var id = '01230123-example-id-1234';
  110. var mock = nockle.get('/rest/v1/:username/jobs/:id/assets', { id: id });
  111. sauce.showJobAssets(id, verifySuccess(mock, done));
  112. });
  113. });
  114. describe('#updateJob', function () {
  115. it('PUTs `/rest/v1/:username/jobs/:id`', function (done) {
  116. var id = '01230123-example-id-1234';
  117. var mock = nockle.put('/rest/v1/:username/jobs/:id', { id: id });
  118. sauce.updateJob(id, {}, verifySuccess(mock, done));
  119. });
  120. it('doesnt require a callback', function (done) {
  121. var id = '01230123-example-id-1234';
  122. var mock = nockle.put('/rest/v1/:username/jobs/:id', { id: id });
  123. sauce.updateJob(id, {});
  124. done();
  125. });
  126. });
  127. describe('#stopJob', function () {
  128. it('PUTs `/rest/v1/:username/jobs/:id/stop`', function (done) {
  129. var id = '01230123-example-id-1234';
  130. var mock = nockle.put('/rest/v1/:username/jobs/:id/stop', { id: id });
  131. sauce.stopJob(id, {}, verifySuccess(mock, done));
  132. });
  133. });
  134. describe('#deleteJob', function () {
  135. it('DELETEs `/rest/v1/:username/jobs/:id`', function (done) {
  136. var id = '01230123-example-id-1234';
  137. var mock = nockle.delete('/rest/v1/:username/jobs/:id', { id: id });
  138. sauce.deleteJob(id, verifySuccess(mock, done));
  139. });
  140. });
  141. describe('#getActiveTunnels', function () {
  142. it('GETs `/rest/v1/:username/tunnels`', function (done) {
  143. var mock = nockle.get('/rest/v1/:username/tunnels');
  144. sauce.getActiveTunnels(verifySuccess(mock, done));
  145. });
  146. });
  147. describe('#getTunnel', function () {
  148. it('GETs `/rest/v1/:username/tunnels/:id`', function (done) {
  149. var id = '01230123-example-id-1234';
  150. var mock = nockle.get('/rest/v1/:username/tunnels/:id', { id: id });
  151. sauce.getTunnel(id, verifySuccess(mock, done));
  152. });
  153. });
  154. describe('#deleteTunnel', function () {
  155. it('DELETEs `/rest/v1/:username/tunnels/:id`', function (done) {
  156. var id = '01230123-example-id-1234';
  157. var mock = nockle.delete('/rest/v1/:username/tunnels/:id', { id: id });
  158. sauce.deleteTunnel(id, verifySuccess(mock, done));
  159. });
  160. });
  161. describe('#getServiceStatus', function () {
  162. it('GETs `/rest/v1/info/status`', function (done) {
  163. var mock = nockle.get('/rest/v1/info/status');
  164. sauce.getServiceStatus(verifySuccess(mock, done));
  165. });
  166. });
  167. describe('#getBrowsers', function () {
  168. it('GETs `/rest/v1/info/browsers`', function (done) {
  169. var mock = nockle.get('/rest/v1/info/browsers');
  170. sauce.getBrowsers(verifySuccess(mock, done));
  171. });
  172. });
  173. describe('#getAllBrowsers', function () {
  174. it('GETs `/rest/v1/info/browsers/all`', function (done) {
  175. var mock = nockle.get('/rest/v1/info/browsers/all');
  176. sauce.getAllBrowsers(verifySuccess(mock, done));
  177. });
  178. });
  179. describe('#getSeleniumBrowsers', function () {
  180. it('GETs `/rest/v1/info/browsers/selenium-rc`', function (done) {
  181. var mock = nockle.get('/rest/v1/info/browsers/selenium-rc');
  182. sauce.getSeleniumBrowsers(verifySuccess(mock, done));
  183. });
  184. });
  185. describe('#getWebDriverBrowsers', function () {
  186. it('GETs `/rest/v1/info/browsers/webdriver`', function (done) {
  187. var mock = nockle.get('/rest/v1/info/browsers/webdriver');
  188. sauce.getWebDriverBrowsers(verifySuccess(mock, done));
  189. });
  190. });
  191. describe('#getTestCounter', function () {
  192. it('GETs `/rest/v1/info/counter`', function (done) {
  193. var mock = nockle.get('/rest/v1/info/counter');
  194. sauce.getTestCounter(verifySuccess(mock, done));
  195. });
  196. });
  197. describe('#createSubAccount', function () {
  198. it('POSTs `/rest/v1/users/:username`', function (done) {
  199. var mock = nockle.post('/rest/v1/users/:username');
  200. sauce.createSubAccount({}, verifySuccess(mock, done));
  201. });
  202. });
  203. describe('#updateSubAccount', function () {
  204. it('POSTs `/rest/v1/users/:username/subscription`', function (done) {
  205. var mock = nockle.post('/rest/v1/users/:username/subscription');
  206. sauce.updateSubAccount({}, verifySuccess(mock, done));
  207. });
  208. });
  209. describe('#deleteSubAccount', function () {
  210. it('DELETEs `/rest/v1/users/:username/subscription`', function (done) {
  211. var mock = nockle.delete('/rest/v1/users/:username/subscription');
  212. sauce.deleteSubAccount(verifySuccess(mock, done));
  213. });
  214. });
  215. describe('#createPublicLink', function () {
  216. var id = '01230123-example-id-1234';
  217. var date = new Date('Jan 1, 1970 00:00:00');
  218. describe('with job ID, date and hour', function () {
  219. it('creates the proper link', function (done) {
  220. var expected = 'https://saucelabs.com/jobs/01230123-example-id-1234?auth=8bcfe0b2e888794a63050ea74ad12005';
  221. sauce.createPublicLink(id, date, true, verifyLink(expected, done));
  222. });
  223. });
  224. describe('with job ID and date', function () {
  225. it('creates the proper link', function (done) {
  226. var expected = 'https://saucelabs.com/jobs/01230123-example-id-1234?auth=c86f247871504dfc1b11736b334b2409';
  227. sauce.createPublicLink(id, date, verifyLink(expected, done));
  228. });
  229. });
  230. describe('with job ID', function () {
  231. it('creates the proper link', function (done) {
  232. var expected = 'https://saucelabs.com/jobs/01230123-example-id-1234?auth=211e7791e357ddbc22065b864167d3c9';
  233. sauce.createPublicLink(id, verifyLink(expected, done));
  234. });
  235. });
  236. });
  237. describe('#getSubAccountList', function () {
  238. it('GETs `/rest/v1/users/:username/list-subaccounts`', function (done) {
  239. var mock = nockle.get('/rest/v1/users/:username/list-subaccounts');
  240. sauce.getSubAccountList(verifySuccess(mock, done));
  241. });
  242. });
  243. describe('#getSubAccounts', function () {
  244. it('GETs `/rest/v1/users/:username/subaccounts`', function (done) {
  245. var mock = nockle.get('/rest/v1/users/:username/subaccounts');
  246. sauce.getSubAccounts(verifySuccess(mock, done));
  247. });
  248. });
  249. });
  250. });
  251. function verifySuccess(mock, done) {
  252. return function (err, data) {
  253. if (err) return done(new Error(err.error));
  254. mock.isDone().should.be.true;
  255. done();
  256. };
  257. }
  258. function verifyFailure(error, done) {
  259. return function (err, data) {
  260. if (!err) return done(new Error('Request succeeded'));
  261. err.should.deep.equal(error);
  262. done();
  263. };
  264. }
  265. function verifyLink(url, done) {
  266. return function (err, data) {
  267. if (err) return done(new Error(err));
  268. data.should.equal(url);
  269. done();
  270. };
  271. }