Merge pull request #7002 from monishdeb/CRM-17396
[civicrm-core.git] / tests / karma / unit / crmMailingRadioDateSpec.js
CommitLineData
8ff76a1d 1'use strict';
ac5009c1 2/* global $, CRM:true */
8ff76a1d
TO
3
4describe('crmMailingRadioDate', function() {
5
6 beforeEach(function() {
7 module('crmResource');
8 module('crmUtil');
9 module('crmMailing');
10 });
11
12 var standardMarkup = '<form name="myForm">' +
13 ' <div crm-mailing-radio-date="mySchedule" ng-model="model.the_date" name="myRadioDate">' +
14 ' <input ng-model="mySchedule.mode" type="radio" name="send" value="now" class="radio-now" />' +
15 ' <input ng-model="mySchedule.mode" type="radio" name="send" value="at" class="radio-at" />' +
a42344f4 16 ' <input crm-ui-datepicker ng-model="mySchedule.datetime" ng-required="mySchedule.mode == \'at\'"/>' +
8ff76a1d
TO
17 ' </div>' +
18 '</form>';
19
20 describe('crmMailingRadioDate directive', function() {
21 var $compile,
22 $rootScope,
23 $interval,
24 $timeout,
25 model,
26 element;
27
28 beforeEach(inject(function(_$compile_, _$rootScope_, _$interval_, _$timeout_) {
29 $compile = _$compile_;
30 $rootScope = _$rootScope_;
31 $interval = _$interval_;
32 $timeout = _$timeout_;
33
a42344f4
CW
34 // Global settings needed for crmUiDatepicker
35 CRM = CRM || {};
36 CRM.config = CRM.config || {};
37 CRM.config.dateInputFormat = 'mm/dd/yy';
38 CRM.config.timeIs24Hr = true;
39
8ff76a1d
TO
40 $rootScope.model = model = {
41 the_date: ''
42 };
43 }));
44
45 it('should update the UI after changing the model', function() {
46 element = $compile(standardMarkup)($rootScope);
47
48 model.the_date = '';
49 $rootScope.$digest();
50 expect($rootScope.myForm.$valid).toBe(true);
51 expect(element.find('.radio-now').prop('checked')).toBe(true);
52 expect(element.find('.radio-at').prop('checked')).toBe(false);
a42344f4
CW
53 expect(element.find('.crm-form-date').datepicker('getDate')).toBe(null);
54 expect(element.find('.crm-form-time').timeEntry('getTime')).toBe(null);
8ff76a1d
TO
55
56 model.the_date = ' ';
57 $rootScope.$digest();
58 expect($rootScope.myForm.$valid).toBe(false);
59 expect(element.find('.radio-now').prop('checked')).toBe(false);
60 expect(element.find('.radio-at').prop('checked')).toBe(true);
a42344f4
CW
61 expect(element.find('.crm-form-date').datepicker('getDate')).toBe(null);
62 expect(element.find('.crm-form-time').timeEntry('getTime')).toBe(null);
8ff76a1d 63
ac5009c1 64 model.the_date = '2014-01-01';
8ff76a1d
TO
65 $rootScope.$digest();
66 expect($rootScope.myForm.$valid).toBe(false);
67 expect(element.find('.radio-now').prop('checked')).toBe(false);
68 expect(element.find('.radio-at').prop('checked')).toBe(true);
ac5009c1
CW
69 expect(element.find('.crm-hidden-date').val()).toEqual('2014-01-01');
70 expect(element.find('.crm-form-date').val()).toEqual('01/01/2014');
a42344f4 71 expect(element.find('.crm-form-time').timeEntry('getTime')).toBe(null);
8ff76a1d 72
ac5009c1 73 model.the_date = '02:03:00';
8ff76a1d
TO
74 $rootScope.$digest();
75 expect($rootScope.myForm.$valid).toBe(false);
76 expect(element.find('.radio-now').prop('checked')).toBe(false);
77 expect(element.find('.radio-at').prop('checked')).toBe(true);
a42344f4
CW
78 expect(element.find('.crm-form-date').datepicker('getDate')).toBe(null);
79 expect(element.find('.crm-form-time').timeEntry('getTime').getMinutes()).toBe(3);
8ff76a1d 80
ac5009c1 81 model.the_date = '2014-01-02 02:03:00';
8ff76a1d 82 $rootScope.$digest();
3bea5218 83 expect($rootScope.myForm.$valid).toBe(false);
8ff76a1d
TO
84 expect(element.find('.radio-now').prop('checked')).toBe(false);
85 expect(element.find('.radio-at').prop('checked')).toBe(true);
a42344f4
CW
86 expect(element.find('.crm-form-date').datepicker('getDate').toDateString()).toEqual('Thu Jan 02 2014');
87 expect(element.find('.crm-form-time').timeEntry('getTime').getMinutes()).toBe(3);
3bea5218
SL
88
89 var now = new Date();
90 now.setDate(now.getDate() + 1);
91 var month = '' + (now.getMonth() + 1);
92 var day = '' + now.getDate();
93 var year = now.getFullYear();
94 var hours = '' + now.getHours();
95 var minutes = '' + now.getMinutes();
96 if (month.length < 2) month = '0' + month;
97 if (day.length < 2) day = '0' + day;
98 var datenow = [year, month, day].join('-');
99 var time = [hours, minutes, "00"].join(':');
100 var currentDate = datenow + ' ' + time;
101 var n = now.toDateString();
102 model.the_date = currentDate;
103 $rootScope.$digest();
104 expect($rootScope.myForm.$valid).toBe(true);
105 expect(element.find('.radio-now').prop('checked')).toBe(false);
106 expect(element.find('.radio-at').prop('checked')).toBe(true);
107 expect(element.find('.crm-form-date').datepicker('getDate').toDateString()).toEqual(n);
8ff76a1d
TO
108 });
109
110 it('should update the model after changing the date and time', function() {
111 element = $compile(standardMarkup)($rootScope);
ac5009c1 112
8ff76a1d
TO
113 model.the_date = '';
114 $rootScope.$digest();
115 expect($rootScope.myForm.$valid).toBe(true);
116 expect(element.find('.radio-now').prop('checked')).toBe(true);
117 expect(element.find('.radio-at').prop('checked')).toBe(false);
118
ac5009c1
CW
119 element.find('.radio-now').click().trigger('click').trigger('change');
120 element.find('.crm-form-date').datepicker('setDate', $.datepicker.parseDate('yy-mm-dd', '2014-01-03')).trigger('change');
8ff76a1d 121 $rootScope.$digest();
a42344f4 122 expect(model.the_date).toBe('2014-01-03');
8ff76a1d
TO
123 expect($rootScope.myForm.$valid).toBe(false);
124 expect(element.find('.radio-now').prop('checked')).toBe(false);
125 expect(element.find('.radio-at').prop('checked')).toBe(true);
126
a42344f4 127 element.find('.crm-form-time').timeEntry('setTime', '04:05').trigger('change');
8ff76a1d 128 $rootScope.$digest();
ac5009c1 129 expect(model.the_date).toBe('2014-01-03 04:05:00');
3bea5218 130 expect($rootScope.myForm.$valid).toBe(false);
8ff76a1d
TO
131 expect(element.find('.radio-now').prop('checked')).toBe(false);
132 expect(element.find('.radio-at').prop('checked')).toBe(true);
133
a42344f4 134 element.find('.crm-form-date').datepicker('setDate', '').trigger('change');
8ff76a1d 135 $rootScope.$digest();
ac5009c1 136 expect(model.the_date).toBe('04:05:00');
8ff76a1d
TO
137 expect($rootScope.myForm.$valid).toBe(false);
138 expect(element.find('.radio-now').prop('checked')).toBe(false);
139 expect(element.find('.radio-at').prop('checked')).toBe(true);
140
141 element.find('.radio-now').click().trigger('click').trigger('change');
142 $rootScope.$digest();
143 expect(model.the_date).toBe(null);
144 expect($rootScope.myForm.$valid).toBe(true);
145 expect(element.find('.radio-now').prop('checked')).toBe(true);
146 expect(element.find('.radio-at').prop('checked')).toBe(false);
147 });
148 });
149});