58 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
import 'jquery';
 | 
						|
import 'jquery-ujs';
 | 
						|
import AjaxLoadingSpinner from '~/ajax_loading_spinner';
 | 
						|
 | 
						|
describe('Ajax Loading Spinner', () => {
 | 
						|
  const fixtureTemplate = 'static/ajax_loading_spinner.html.raw';
 | 
						|
  preloadFixtures(fixtureTemplate);
 | 
						|
 | 
						|
  beforeEach(() => {
 | 
						|
    loadFixtures(fixtureTemplate);
 | 
						|
    AjaxLoadingSpinner.init();
 | 
						|
  });
 | 
						|
 | 
						|
  it('change current icon with spinner icon and disable link while waiting ajax response', (done) => {
 | 
						|
    spyOn(jQuery, 'ajax').and.callFake((req) => {
 | 
						|
      const xhr = new XMLHttpRequest();
 | 
						|
      const ajaxLoadingSpinner = document.querySelector('.js-ajax-loading-spinner');
 | 
						|
      const icon = ajaxLoadingSpinner.querySelector('i');
 | 
						|
 | 
						|
      req.beforeSend(xhr, { dataType: 'text/html' });
 | 
						|
 | 
						|
      expect(icon).not.toHaveClass('fa-trash-o');
 | 
						|
      expect(icon).toHaveClass('fa-spinner');
 | 
						|
      expect(icon).toHaveClass('fa-spin');
 | 
						|
      expect(icon.dataset.icon).toEqual('fa-trash-o');
 | 
						|
      expect(ajaxLoadingSpinner.getAttribute('disabled')).toEqual('');
 | 
						|
 | 
						|
      req.complete({});
 | 
						|
 | 
						|
      done();
 | 
						|
      const deferred = $.Deferred();
 | 
						|
      return deferred.promise();
 | 
						|
    });
 | 
						|
    document.querySelector('.js-ajax-loading-spinner').click();
 | 
						|
  });
 | 
						|
 | 
						|
  it('use original icon again and enabled the link after complete the ajax request', (done) => {
 | 
						|
    spyOn(jQuery, 'ajax').and.callFake((req) => {
 | 
						|
      const xhr = new XMLHttpRequest();
 | 
						|
      const ajaxLoadingSpinner = document.querySelector('.js-ajax-loading-spinner');
 | 
						|
 | 
						|
      req.beforeSend(xhr, { dataType: 'text/html' });
 | 
						|
      req.complete({});
 | 
						|
 | 
						|
      const icon = ajaxLoadingSpinner.querySelector('i');
 | 
						|
      expect(icon).toHaveClass('fa-trash-o');
 | 
						|
      expect(icon).not.toHaveClass('fa-spinner');
 | 
						|
      expect(icon).not.toHaveClass('fa-spin');
 | 
						|
      expect(ajaxLoadingSpinner.getAttribute('disabled')).toEqual(null);
 | 
						|
 | 
						|
      done();
 | 
						|
      const deferred = $.Deferred();
 | 
						|
      return deferred.promise();
 | 
						|
    });
 | 
						|
    document.querySelector('.js-ajax-loading-spinner').click();
 | 
						|
  });
 | 
						|
});
 |