cartodb-4.42/lib/assets/test/spec/builder/editor/analyses/analysis-notifications.spec.js
2024-04-06 05:25:13 +00:00

211 lines
7.0 KiB
JavaScript

var _ = require('underscore');
var Backbone = require('backbone');
var Notifier = require('builder/components/notifier/notifier');
var AnalysisNotifications = require('builder/editor/layers/analysis-views/analysis-notifications');
describe('AnalysisNotifications.track', function () {
beforeEach(function () {
this.analysisNode = new Backbone.Model({ id: 'a1' });
this.notification = new Backbone.Model();
spyOn(Notifier, 'addNotification').and.returnValue(this.notification);
spyOn(this.notification, 'set');
AnalysisNotifications.track(this.analysisNode);
});
describe('if there is an existing notification for the node', function () {
beforeEach(function () {
spyOn(Notifier, 'getNotification').and.returnValue(this.notification);
});
describe('status changes', function () {
it('should update the notification if analysis is pending', function () {
this.analysisNode.set('status', 'pending');
expect(this.notification.set).toHaveBeenCalledWith({
'status': 'loading',
'info': 'notifications.analysis.waiting'
});
});
it('should update the notification if analysis is running', function () {
this.analysisNode.set('status', 'running');
expect(this.notification.set).toHaveBeenCalledWith({
'status': 'loading',
'info': 'notifications.analysis.running'
});
});
it('should update the notification if analysis is waiting', function () {
this.analysisNode.set('status', 'waiting');
expect(this.notification.set).toHaveBeenCalledWith({
'status': 'loading',
'info': 'notifications.analysis.waiting'
});
});
it('should update the notification if analysis succeeded', function () {
this.analysisNode.set('status', 'ready');
expect(this.notification.set).toHaveBeenCalledWith({
'status': 'success',
'info': 'notifications.analysis.completed',
'closable': true,
'delay': Notifier.DEFAULT_DELAY
});
});
it('should update the notification if analysis failed', function () {
this.analysisNode.set('status', 'failed');
expect(this.notification.set).toHaveBeenCalledWith({
'status': 'error',
'info': 'notifications.analysis.failed',
'closable': true,
'autoclosable': false
});
});
});
describe('when an analysis node is deleted', function () {
it('should update the notification', function () {
this.analysisNode.trigger('destroy', this.analysisNode);
expect(this.notification.set).toHaveBeenCalledWith({
'status': 'success',
'info': 'notifications.analysis.removed',
'closable': true,
'delay': Notifier.DEFAULT_DELAY
});
});
it('should not update the notification if avoidNotification', function () {
this.analysisNode.set({avoidNotification: true}, {silent: true});
this.analysisNode.trigger('destroy', this.analysisNode);
expect(this.notification.set).not.toHaveBeenCalled();
});
});
});
describe('if there is NO notification for the node', function () {
_.each(['pending', 'waiting', 'failed'], function (status) {
it('should display a notification if node has a ' + status + ' status initially', function () {
this.analysisNode = new Backbone.Model({ id: 'a1' });
this.analysisNode.set({
status: status
});
AnalysisNotifications.track(this.analysisNode);
expect(Notifier.addNotification).toHaveBeenCalled();
});
});
it('should NOT display a notification if node has a ready status initially', function () {
this.analysisNode = new Backbone.Model({ id: 'a1' });
this.analysisNode.set({
status: 'ready'
});
AnalysisNotifications.track(this.analysisNode);
expect(Notifier.addNotification).not.toHaveBeenCalled();
});
describe('status changes', function () {
it('should update the notification if analysis is pending', function () {
this.analysisNode.set('status', 'pending');
expect(Notifier.addNotification).toHaveBeenCalledWith({
status: 'loading',
info: 'notifications.analysis.waiting',
id: this.analysisNode.cid
});
});
it('should update the notification if analysis is waiting', function () {
this.analysisNode.set('status', 'waiting');
expect(Notifier.addNotification).toHaveBeenCalledWith({
status: 'loading',
info: 'notifications.analysis.waiting',
id: this.analysisNode.cid
});
});
it('should update the notification if analysis succeeded', function () {
this.analysisNode.set('status', 'ready');
expect(Notifier.addNotification).toHaveBeenCalledWith({
status: 'success',
info: 'notifications.analysis.completed',
closable: true,
delay: Notifier.DEFAULT_DELAY,
id: this.analysisNode.cid
});
});
it('should update the notification if analysis failed', function () {
this.analysisNode.set({
'status': 'failed'
});
expect(Notifier.addNotification).toHaveBeenCalledWith({
status: 'error',
info: 'notifications.analysis.failed',
closable: true,
autoclosable: false,
id: this.analysisNode.cid
});
});
describe('when an analysis node has errors', function () {
it('should update the notification if analysis failed and has errors', function () {
this.analysisNode.set({
'error': { message: 'something went wrong!' },
'status': 'failed'
});
expect(Notifier.addNotification).toHaveBeenCalledWith({
status: 'error',
info: 'notifications.analysis.failed: something went wrong!',
closable: true,
autoclosable: false,
id: this.analysisNode.cid
});
});
it('should update the notification if analysis failed and has errors in error_message', function () {
this.analysisNode.set({
'error_message': 'something went a little bit wrong!',
'status': 'failed'
});
expect(Notifier.addNotification).toHaveBeenCalledWith({
status: 'error',
info: 'notifications.analysis.failed: something went a little bit wrong!',
closable: true,
autoclosable: false,
id: this.analysisNode.cid
});
});
});
});
describe('when an analysis node is deleted', function () {
it('should update the notification', function () {
this.analysisNode.trigger('destroy', this.analysisNode);
expect(Notifier.addNotification).toHaveBeenCalledWith({
status: 'success',
info: 'notifications.analysis.removed',
closable: true,
delay: Notifier.DEFAULT_DELAY,
id: this.analysisNode.cid
});
});
});
});
});