service-container.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. (function () {
  2. 'use strict';
  3. var container = null;
  4. var orgServices = Misago.prototype._services;
  5. QUnit.module("Service Container", {
  6. beforeEach: function() {
  7. Misago.prototype._services = [];
  8. container = new Misago();
  9. },
  10. afterEach: function() {
  11. Misago.prototype._services = orgServices;
  12. }
  13. });
  14. QUnit.test("addService", function(assert) {
  15. assert.expect(2);
  16. var MockServiceFactory = function() {
  17. return null;
  18. };
  19. Misago.prototype.addService('test', MockServiceFactory);
  20. assert.equal(Misago.prototype._services.length, 1,
  21. "addService() registered single service in container");
  22. assert.equal(Misago.prototype._services[0].item, MockServiceFactory,
  23. "addService() registered MockServiceFactory service in container");
  24. });
  25. QUnit.test("_initServices", function(assert) {
  26. assert.expect(1);
  27. var MockServiceFactory = function(_) {
  28. assert.ok(
  29. _, 'MockServiceFactory was called with container as argument.');
  30. };
  31. container._initServices([{key: 'test', item: MockServiceFactory}]);
  32. });
  33. QUnit.test("factories return values handling", function(assert) {
  34. assert.expect(1);
  35. var MockServiceFactory = function() {
  36. return 'ok!';
  37. };
  38. container._initServices([{key: 'test', item: MockServiceFactory}]);
  39. assert.equal(container.test, 'ok!',
  40. "MockServiceFactory return value was set on container.");
  41. });
  42. QUnit.test("factories returning nothing", function(assert) {
  43. assert.expect(1);
  44. var MockServiceFactory = function() {
  45. 'not returning anything';
  46. };
  47. container._initServices([{key: 'test', item: MockServiceFactory}]);
  48. assert.equal(container.test, undefined,
  49. "MockServiceFactory return value wasn't set on container.");
  50. });
  51. QUnit.test("_destroyServices", function(assert) {
  52. assert.expect(2);
  53. var MockService = {
  54. factory: function(_) {
  55. assert.ok(
  56. _, "MockService's factory was called with container as argument.");
  57. },
  58. destroy: function(_) {
  59. assert.ok(
  60. _, "MockService's destroy was called with container as argument.");
  61. }
  62. };
  63. var services = [{key: 'test', item: MockService}];
  64. container._initServices(services);
  65. container._destroyServices(services);
  66. });
  67. QUnit.test("initialize and destroy order", function(assert) {
  68. assert.expect(2);
  69. var initializationOrder = [];
  70. var destructionOrder = [];
  71. var services = [
  72. {
  73. key: 'test_1',
  74. item: {
  75. factory: function() {
  76. initializationOrder.push(1);
  77. },
  78. destroy: function() {
  79. destructionOrder.push(1);
  80. }
  81. }
  82. },
  83. {
  84. key: 'test_2',
  85. item: {
  86. factory: function() {
  87. initializationOrder.push(2);
  88. },
  89. destroy: function() {
  90. destructionOrder.push(2);
  91. }
  92. }
  93. }
  94. ];
  95. container._initServices(services);
  96. container._destroyServices(services);
  97. assert.deepEqual(initializationOrder, [1, 2],
  98. 'services were initialized in right order.');
  99. assert.deepEqual(destructionOrder, [2, 1],
  100. 'services were destroyed in right order.');
  101. });
  102. QUnit.test("initialization data storage", function(assert) {
  103. assert.expect();
  104. container.init({api: 'test-api/'});
  105. assert.equal(container.setup.api, 'test-api/',
  106. 'container stored initialization data');
  107. });
  108. }());