diff --git a/src/eldarion-ajax-handlers.js b/src/eldarion-ajax-handlers.js
index 5e3a9ba..cac94f4 100644
--- a/src/eldarion-ajax-handlers.js
+++ b/src/eldarion-ajax-handlers.js
@@ -16,6 +16,7 @@
var Handlers = function () {};
Handlers.prototype.redirect = function(e, $el, data) {
+ /* istanbul ignore next */ // Not testable; at least I haven't been able to figure it out
if (data.location) {
window.location.href = data.location;
return false;
diff --git a/tests/specs.js b/tests/specs.js
index 8e86832..9bfde86 100644
--- a/tests/specs.js
+++ b/tests/specs.js
@@ -40,6 +40,47 @@ var responses = {
header: jsonHeader,
status: 503,
responseText: testData
+ },
+ messageFragments: {
+ header: jsonHeader,
+ status: 200,
+ responseText: JSON.stringify({
+ fragments: {
+ '#replace-me': '
Replaced Content
'
+ }
+ })
+ },
+ messageInnerFragments: {
+ header: jsonHeader,
+ status: 200,
+ responseText: JSON.stringify({
+ 'inner-fragments': {
+ '#replace-me': 'Replaced Content
'
+ }
+ })
+ },
+ messageAppendFragments: {
+ header: jsonHeader,
+ status: 200,
+ responseText: JSON.stringify({
+ 'append-fragments': {
+ 'ul.append-to': 'Appended Content'
+ }
+ })
+ },
+ messagePrependFragments: {
+ header: jsonHeader,
+ status: 200,
+ responseText: JSON.stringify({
+ 'prepend-fragments': {
+ 'ul.prepend-to': 'Prepended Content'
+ }
+ })
+ },
+ messageRefresh: {
+ header: jsonHeader,
+ status: 200,
+ responseText: JSON.stringify({ html: 'Refreshed Content
' })
}
};
@@ -511,4 +552,81 @@ describe('eldarion-ajax handlers', function() {
expect($('.my-content').length).toBe(0);
expect($('a').length).toBe(0);
});
+
+ it('fragments replace their selectors', function () {
+ var container = affix('.content-container');
+ container.affix('div[id="replace-me"]').text('Nothing');
+ container.affix('a[class="ajax"]');
+ $('a').click();
+ var request = jasmine.Ajax.requests.mostRecent();
+ request.respondWith(responses.messageFragments);
+ expect($('#replace-me').length).toBe(1);
+ expect($('#replace-me').text()).toBe('Replaced Content');
+ });
+
+ it('inner fragments replace the inside of selectors', function () {
+ var container = affix('.content-container');
+ container.affix('div[id="replace-me"]').text('Nothing');
+ container.affix('a[class="ajax"]');
+ $('a').click();
+ var request = jasmine.Ajax.requests.mostRecent();
+ request.respondWith(responses.messageInnerFragments);
+ expect($('#replace-me #inner-div').length).toBe(1);
+ expect($('#replace-me #inner-div').text()).toBe('Replaced Content');
+ });
+
+ it('append fragments add to their selectors', function () {
+ var container = affix('.content-container');
+ var ul = container.affix('ul.append-to');
+ ul.affix('li[id="id-1"]').text('1');
+ ul.affix('li[id="id-2"]').text('2');
+ container.affix('a[class="ajax"]');
+ $('a').click();
+ var request = jasmine.Ajax.requests.mostRecent();
+ request.respondWith(responses.messageAppendFragments);
+ expect($('ul.append-to').length).toBe(1);
+ expect($('ul.append-to li').length).toBe(3);
+ expect($('ul.append-to li')[2].innerText).toBe('Appended Content');
+ });
+
+ it('prepend fragments add to their selectors', function () {
+ var container = affix('.content-container');
+ var ul = container.affix('ul.prepend-to');
+ ul.affix('li[id="id-2"]').text('2');
+ ul.affix('li[id="id-3"]').text('3');
+ container.affix('a[class="ajax"]');
+ $('a').click();
+ var request = jasmine.Ajax.requests.mostRecent();
+ request.respondWith(responses.messagePrependFragments);
+ expect($('ul.prepend-to').length).toBe(1);
+ expect($('ul.prepend-to li').length).toBe(3);
+ expect($('ul.prepend-to li')[0].innerText).toBe('Prepended Content');
+ });
+
+ it('data-refresh triggers another pull of content from server to update selector content', function () {
+ var container = affix('.content-container');
+ container.affix('.refresh-me[data-refresh-url="/refresh/"]');
+ container.affix('a[class="ajax"][data-refresh=".refresh-me"]');
+ $('a').click();
+ var request = jasmine.Ajax.requests.mostRecent();
+ request.respondWith(responses.message200NoData);
+ var refreshRequest = jasmine.Ajax.requests.mostRecent();
+ refreshRequest.respondWith(responses.messageRefresh);
+ expect($('#refreshed-content').length).toBe(1);
+ expect($('#refreshed-content').text()).toBe('Refreshed Content');
+ });
+
+ it('data-refresh-closest triggers another pull of content from server to update closest selector content', function () {
+ var container = affix('.content-container[data-refresh-url="/refresh/"]');
+ container.affix('a[class="ajax"][data-refresh-closest=".content-container"]');
+ $('a').click();
+ var request = jasmine.Ajax.requests.mostRecent();
+ request.respondWith(responses.message200NoData);
+ var refreshRequest = jasmine.Ajax.requests.mostRecent();
+ refreshRequest.respondWith(responses.messageRefresh);
+ expect($('a').length).toBe(0);
+ expect($('.content-container').length).toBe(0)
+ expect($('#refreshed-content').length).toBe(1);
+ expect($('#refreshed-content').text()).toBe('Refreshed Content');
+ });
});