overlaySpec.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. describe('Overlay Transition', function(){
  2. var tpl = '<div width="width:400px; height: 400px; background:black;display:block;"> <h1> Test Content </h1> </div>';
  3. beforeEach(module('morph'));
  4. beforeEach(module('morph.directives'));
  5. beforeEach(inject(function ($rootScope){
  6. $rootScope.settings = {
  7. overlay: {
  8. template: tpl
  9. }
  10. };
  11. $rootScope.$digest();
  12. }));
  13. // basic overlay functionality tests
  14. it('should compile a template', function(){
  15. inject(function ($compile, $document, $rootScope, $rootElement) {
  16. var morphable = $compile('<div><button ng-morph-overlay="settings"> Test </button></div>')($rootScope);
  17. $rootElement.append(morphable);
  18. angular.element($document[0].body).append($rootElement);
  19. var content = angular.element($document[0].body).find('div')[2];
  20. expect(content.children.length).to.be(1);
  21. });
  22. });
  23. it('should open overlay when directive element is clicked', function() {
  24. inject(function ($compile, $document, $rootScope, $rootElement) {
  25. var morphable = $compile('<div><button ng-morph-overlay="settings"> Test </button></div>')($rootScope);
  26. $rootElement.append(morphable);
  27. angular.element($document[0].body).append($rootElement);
  28. runs(function() {
  29. morphable.find("button")[0].click();
  30. });
  31. waitsFor(function() {
  32. return getComputedStyle(morphable.find("div")[0], null).opacity === "1";
  33. }, "wrapper should be visible to user", 35);
  34. });
  35. });
  36. it('should close overlay when closeEl is clicked', function() {
  37. inject(function ($compile, $document, $rootScope, $rootElement) {
  38. var tplWithCloseEl = '<div background:black;display:block;"> <span class="close-x">x</span> <h1> Test Content </h1> </div>';
  39. $rootScope.settings = {
  40. closeEl: ".close-x",
  41. trigger: 'click',
  42. overlay: {
  43. template: tplWithCloseEl
  44. }
  45. };
  46. var morphable = $compile('<div><button ng-morph-overlay="settings"> Test </button></div>')($rootScope);
  47. $rootElement.append(morphable);
  48. angular.element($document[0].body).append($rootElement);
  49. runs(function() {
  50. morphable.find("button")[0].click();
  51. });
  52. waitsFor(function() {
  53. return getComputedStyle(morphable.find("div")[0], null).opacity === "1";
  54. }, "wrapper should be visible to user", 35);
  55. runs(function() {
  56. morphable.children(".close-x")[0].click();
  57. });
  58. waitsFor(function() {
  59. return getComputedStyle(morphable.find("div")[0], null).opacity === '0' ;
  60. }, "wrapper should be hidden to user", 850);
  61. });
  62. });
  63. // nested morphable tests
  64. it('should compile a template containing a nested overlay morphable', function () {
  65. inject(function ($compile, $document, $rootScope, $rootElement) {
  66. var tplContainingMorphable = '<div style="background:black;display:block;"> <button ng-morph-overlay="nestedOverlaySettings"> Nested Morphable </button></div>';
  67. var nestedOverlayTpl = '<div id="nested-overlay" style="background:black;display:block;"> <span class="close-x">x</span></div>';
  68. $rootScope.overlaySettings = {
  69. closeEl: ".close-x",
  70. trigger: 'click',
  71. overlay: {
  72. template: tplContainingMorphable
  73. }
  74. };
  75. $rootScope.nestedOverlaySettings = {
  76. closeEl: ".close-x",
  77. trigger: 'click',
  78. overlay: {
  79. template: nestedOverlayTpl
  80. }
  81. };
  82. var morphable = $compile('<div><button ng-morph-overlay="overlaySettings"> Test </button></div>')($rootScope);
  83. $rootElement.append(morphable);
  84. angular.element($document[0].body).append($rootElement);
  85. runs(function() {
  86. morphable.find("button")[0].click();
  87. });
  88. expect(morphable[0].querySelector("#nested-overlay").childNodes.length).to.be(2);
  89. });
  90. });
  91. it('should open an overlay when a nested directive element is clicked', function () {
  92. inject(function ($compile, $document, $rootScope, $rootElement) {
  93. var tplContainingMorphable = '<div id="tpl-containing-morphable" width="width:400px; height: 400px; background:black;display:block;"> <button ng-morph-overlay="nestedOverlaySettings"> Nested Morphable </button></div>';
  94. var nestedOverlayTpl = '<div id="nested-overlay" width="width:400px; height: 400px; background:black;display:block;"> <span class="close-x">x</span></div>';
  95. $rootScope.overlaySettings = {
  96. closeEl: ".close-x",
  97. trigger: 'click',
  98. overlay: {
  99. template: tplContainingMorphable
  100. }
  101. };
  102. $rootScope.nestedOverlaySettings = {
  103. closeEl: ".close-x",
  104. trigger: 'click',
  105. overlay: {
  106. template: nestedOverlayTpl
  107. }
  108. };
  109. var morphable = $compile('<div><button ng-morph-overlay="overlaySettings"> Test </button></div>')($rootScope);
  110. $rootElement.append(morphable);
  111. angular.element($document[0].body).append($rootElement);
  112. // open first overlay
  113. runs(function() {
  114. morphable.find("button")[0].click();
  115. });
  116. waitsFor(function() {
  117. return getComputedStyle(morphable.find("div")[0], null).opacity === "1";
  118. }, "wrapper should be visible to user", 35);
  119. // open nested overlay
  120. runs(function() {
  121. var tpl = angular.element(morphable[0].querySelector("#tpl-containing-morphable"));
  122. tpl.find("button")[0].click();
  123. });
  124. waitsFor(function() {
  125. return getComputedStyle(morphable[0].querySelector("#nested-overlay"), null).visibility === "visible";
  126. }, "nested overlay should be visible to user", 35);
  127. });
  128. });
  129. });