service-container.js 3.3 KB

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