admin_data 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +221 -0
- data/README.textile +21 -0
- data/Rakefile +46 -0
- data/app/controllers/admin_data/base_controller.rb +114 -0
- data/app/controllers/admin_data/diagnostic_controller.rb +28 -0
- data/app/controllers/admin_data/feed_controller.rb +17 -0
- data/app/controllers/admin_data/main_controller.rb +132 -0
- data/app/controllers/admin_data/migration_controller.rb +19 -0
- data/app/controllers/admin_data/search_controller.rb +125 -0
- data/app/controllers/admin_data/validate_model_controller.rb +106 -0
- data/app/views/admin_data/diagnostic/index.html.erb +17 -0
- data/app/views/admin_data/diagnostic/missing_index.html.erb +26 -0
- data/app/views/admin_data/feed/index.rss.builder +24 -0
- data/app/views/admin_data/main/all_models.html.erb +22 -0
- data/app/views/admin_data/main/association/_association_info.html.erb +10 -0
- data/app/views/admin_data/main/association/_belongs_to_info.html.erb +7 -0
- data/app/views/admin_data/main/association/_has_many_info.html.erb +7 -0
- data/app/views/admin_data/main/association/_has_one_info.html.erb +6 -0
- data/app/views/admin_data/main/edit.html.erb +38 -0
- data/app/views/admin_data/main/misc/_form.html.erb +25 -0
- data/app/views/admin_data/main/misc/_modify_record.html.erb +22 -0
- data/app/views/admin_data/main/new.html.erb +23 -0
- data/app/views/admin_data/main/show.html.erb +41 -0
- data/app/views/admin_data/main/table_structure.html.erb +55 -0
- data/app/views/admin_data/migration/index.html.erb +18 -0
- data/app/views/admin_data/migration/jstest.html.erb +51 -0
- data/app/views/admin_data/search/_search_base.html.erb +34 -0
- data/app/views/admin_data/search/advance_search.html.erb +3 -0
- data/app/views/admin_data/search/quick_search.html.erb +6 -0
- data/app/views/admin_data/search/search/_advance_search_form.html.erb +48 -0
- data/app/views/admin_data/search/search/_errors.html.erb +5 -0
- data/app/views/admin_data/search/search/_listing.html.erb +40 -0
- data/app/views/admin_data/search/search/_search_form.html.erb +28 -0
- data/app/views/admin_data/search/search/_sortby.html.erb +18 -0
- data/app/views/admin_data/search/search/_title.html.erb +34 -0
- data/app/views/admin_data/shared/_breadcrum.html.erb +10 -0
- data/app/views/admin_data/shared/_drop_down_klasses.html.erb +4 -0
- data/app/views/admin_data/shared/_flash_message.html.erb +13 -0
- data/app/views/admin_data/shared/_header.html.erb +23 -0
- data/app/views/admin_data/shared/_powered_by.html.erb +23 -0
- data/app/views/admin_data/shared/_secondary_navigation.html.erb +28 -0
- data/app/views/admin_data/validate_model/_bad.html.erb +1 -0
- data/app/views/admin_data/validate_model/tid.html.erb +2 -0
- data/app/views/admin_data/validate_model/validate.html.erb +67 -0
- data/app/views/layouts/admin_data.html.erb +60 -0
- data/config/routes.rb +34 -0
- data/init.rb +1 -0
- data/lib/admin_data.rb +34 -0
- data/lib/admin_data/chelper.rb +37 -0
- data/lib/admin_data/compatibility.rb +7 -0
- data/lib/admin_data/helpers.rb +222 -0
- data/lib/admin_data/railtie.rb +21 -0
- data/lib/admin_data/search.rb +186 -0
- data/lib/admin_data/settings.rb +72 -0
- data/lib/admin_data/util.rb +237 -0
- data/lib/admin_data/version.rb +3 -0
- data/lib/admin_data_date_validation.rb +79 -0
- data/lib/css/app.css +224 -0
- data/lib/css/base.css +1071 -0
- data/lib/css/header.css +65 -0
- data/lib/css/rounded.css +18 -0
- data/lib/css/themes/drastic-dark/style.css +374 -0
- data/lib/css/umbrella.css +34 -0
- data/lib/css/vendor/images/ui-bg_diagonals-thick_75_f3d8d8_40x40.png +0 -0
- data/lib/css/vendor/images/ui-bg_dots-small_65_a6a6a6_2x2.png +0 -0
- data/lib/css/vendor/images/ui-bg_flat_0_333333_40x100.png +0 -0
- data/lib/css/vendor/images/ui-bg_flat_65_ffffff_40x100.png +0 -0
- data/lib/css/vendor/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/lib/css/vendor/images/ui-bg_glass_55_fbf8ee_1x400.png +0 -0
- data/lib/css/vendor/images/ui-bg_highlight-hard_100_eeeeee_1x100.png +0 -0
- data/lib/css/vendor/images/ui-bg_highlight-hard_100_f6f6f6_1x100.png +0 -0
- data/lib/css/vendor/images/ui-bg_highlight-soft_15_cc0000_1x100.png +0 -0
- data/lib/css/vendor/images/ui-icons_004276_256x240.png +0 -0
- data/lib/css/vendor/images/ui-icons_cc0000_256x240.png +0 -0
- data/lib/css/vendor/images/ui-icons_ffffff_256x240.png +0 -0
- data/lib/css/vendor/jquery-ui-1.7.2.custom.css +406 -0
- data/lib/css/vendor/qunit.css +119 -0
- data/lib/js/advance_search/act_on_result.js +47 -0
- data/lib/js/advance_search/adv_search.js +46 -0
- data/lib/js/advance_search/advance_search.js +60 -0
- data/lib/js/advance_search/advance_search_structure.js +79 -0
- data/lib/js/advance_search/ajaxify_advance_search.js +28 -0
- data/lib/js/advance_search/build_first_row.js +12 -0
- data/lib/js/advance_search/event_bindings.js +87 -0
- data/lib/js/advance_search/global_ajax_setting.js +10 -0
- data/lib/js/advance_search/trigger_submit_on_domready.js +6 -0
- data/lib/js/misc/drop_down_change.js +8 -0
- data/lib/js/misc/js_util.js +42 -0
- data/lib/js/misc/quick_search_input_focus.js +6 -0
- data/lib/js/test/act_on_result.js +120 -0
- data/lib/js/test/advance_search.js +80 -0
- data/lib/js/test/ajaxify_advance_search.js +29 -0
- data/lib/js/test/build_first_row.js +10 -0
- data/lib/js/test/event_bindings.js +100 -0
- data/lib/js/validate_model/ajaxify_form.js +66 -0
- data/lib/js/validate_model/select_all.js +15 -0
- data/lib/js/vendor/jack.js +903 -0
- data/lib/js/vendor/jquery-1.4.1.js +6078 -0
- data/lib/js/vendor/jquery-ui-1.7.2.custom.min.js +298 -0
- data/lib/js/vendor/jquery.ba-isjquery.js +21 -0
- data/lib/js/vendor/jquery.form.js +814 -0
- data/lib/js/vendor/jquery.lint.js +604 -0
- data/lib/js/vendor/log.js +9 -0
- data/lib/js/vendor/qunit.js +1043 -0
- data/lib/tasks/admin_data_tasks.rake +7 -0
- data/lib/tasks/validate_models_bg.rake +23 -0
- data/test/factories/article.rb +9 -0
- data/test/factories/car.rb +4 -0
- data/test/factories/city.rb +4 -0
- data/test/factories/comment.rb +6 -0
- data/test/factories/door.rb +4 -0
- data/test/factories/engine.rb +4 -0
- data/test/functional/base_controller_test.rb +5 -0
- data/test/functional/feed_controller_test.rb +34 -0
- data/test/functional/main_controller_test.rb +421 -0
- data/test/functional/migration_controller_test.rb +30 -0
- data/test/functional/routes_test.rb +61 -0
- data/test/functional/search_controller_test.rb +814 -0
- data/test/helper/view_helper_test.rb +177 -0
- data/test/misc_tests/date_validation_test.rb +32 -0
- data/test/misc_tests/settings_test.rb +29 -0
- data/test/misc_tests/util_test.rb +83 -0
- data/test/rails_root/Gemfile +22 -0
- data/test/rails_root/Gemfile.lock +101 -0
- data/test/rails_root/Rakefile +7 -0
- data/test/rails_root/app/controllers/application_controller.rb +3 -0
- data/test/rails_root/app/helpers/application_helper.rb +2 -0
- data/test/rails_root/app/models/article.rb +25 -0
- data/test/rails_root/app/models/city.rb +15 -0
- data/test/rails_root/app/models/comment.rb +13 -0
- data/test/rails_root/app/models/tech_magazine.rb +2 -0
- data/test/rails_root/app/models/vehicle/car.rb +4 -0
- data/test/rails_root/app/models/vehicle/door.rb +3 -0
- data/test/rails_root/app/models/vehicle/engine.rb +3 -0
- data/test/rails_root/app/views/layouts/application.html.erb +14 -0
- data/test/rails_root/config.ru +4 -0
- data/test/rails_root/config/application.rb +42 -0
- data/test/rails_root/config/boot.rb +13 -0
- data/test/rails_root/config/database.yml +22 -0
- data/test/rails_root/config/environment.rb +5 -0
- data/test/rails_root/config/environments/development.rb +22 -0
- data/test/rails_root/config/environments/production.rb +49 -0
- data/test/rails_root/config/environments/test.rb +35 -0
- data/test/rails_root/config/initializers/backtrace_silencers.rb +7 -0
- data/test/rails_root/config/initializers/inflections.rb +10 -0
- data/test/rails_root/config/initializers/mime_types.rb +5 -0
- data/test/rails_root/config/initializers/secret_token.rb +7 -0
- data/test/rails_root/config/initializers/session_store.rb +8 -0
- data/test/rails_root/config/locales/en.yml +5 -0
- data/test/rails_root/config/routes.rb +58 -0
- data/test/rails_root/db/migrate/20090809061114_create_tables.rb +70 -0
- data/test/rails_root/db/schema.rb +74 -0
- data/test/rails_root/db/seeds.rb +7 -0
- data/test/rails_root/script/rails +6 -0
- data/test/rails_root/test/performance/browsing_test.rb +0 -0
- data/test/rails_root/test/test_helper.rb +13 -0
- data/test/support/assertions.rb +20 -0
- data/test/test_helper.rb +74 -0
- metadata +321 -0
@@ -0,0 +1,42 @@
|
|
1
|
+
var AdminData = AdminData || {};
|
2
|
+
|
3
|
+
AdminData.jsUtil = {
|
4
|
+
|
5
|
+
// TODO since advance search was not working with util confirm , window.confirm is used directly
|
6
|
+
// fix it later
|
7
|
+
confirm: function(arg) {
|
8
|
+
window.confirm(arg);
|
9
|
+
},
|
10
|
+
|
11
|
+
buildOptionsFromArray: function(array, element) {
|
12
|
+
element.append($('<option />'));
|
13
|
+
for (i in array) {
|
14
|
+
$('<option />').text(array[i][0]).attr('value', array[i][1]).appendTo(element);
|
15
|
+
}
|
16
|
+
element.attr('disabled', false);
|
17
|
+
},
|
18
|
+
|
19
|
+
colorizeRows: function() {
|
20
|
+
$('.colorize tr:odd').addClass('odd');
|
21
|
+
$('.colorize tr:even').addClass('even');
|
22
|
+
},
|
23
|
+
|
24
|
+
// returns date in string format. example: 07-September-2009
|
25
|
+
dateToString: function(date) {
|
26
|
+
var month = (date.getMonth() + 1).toString();
|
27
|
+
var day = date.getDate().toString();
|
28
|
+
//days between 1 and 9 should have 0 before them
|
29
|
+
if (day.length == 1) day = '0' + day;
|
30
|
+
var months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
|
31
|
+
return day + "-" + months[month - 1] + "-" + date.getFullYear();
|
32
|
+
},
|
33
|
+
|
34
|
+
randomNumber: function() {
|
35
|
+
var maxVal = 100000000,
|
36
|
+
minVal = 1;
|
37
|
+
var randVal = minVal + (Math.random() * (maxVal - minVal));
|
38
|
+
return Math.round(randVal);
|
39
|
+
}
|
40
|
+
|
41
|
+
};
|
42
|
+
|
@@ -0,0 +1,120 @@
|
|
1
|
+
module('act_on_result', {
|
2
|
+
teardown: function() {
|
3
|
+
$('#advance_search_delete_all').remove();
|
4
|
+
$('#advance_search_destroy_all').remove();
|
5
|
+
$('#results').remove();
|
6
|
+
$('#advance_search_form').remove();
|
7
|
+
},
|
8
|
+
setup: function() {
|
9
|
+
$(document.body).append($('<a />', {
|
10
|
+
href: '#',
|
11
|
+
id: 'advance_search_delete_all'
|
12
|
+
}));
|
13
|
+
|
14
|
+
$(document.body).append($('<a />', {
|
15
|
+
href: '#',
|
16
|
+
id: 'advance_search_destroy_all'
|
17
|
+
}));
|
18
|
+
|
19
|
+
$(document.body).append($('<div />', {
|
20
|
+
id: 'results'
|
21
|
+
}));
|
22
|
+
|
23
|
+
$(document.body).append($('<div />', {
|
24
|
+
id: 'advance_search_form'
|
25
|
+
}));
|
26
|
+
}
|
27
|
+
});
|
28
|
+
|
29
|
+
test('invoking success callback', function() {
|
30
|
+
expect(1);
|
31
|
+
AdminData.actOnResult.successCallback({
|
32
|
+
success: 'hello world'
|
33
|
+
});
|
34
|
+
equals('hello world', $('#results').text(), '#results should have text hello world');
|
35
|
+
});
|
36
|
+
|
37
|
+
test('live clicking #advance_search_delete_all with cancel action', function() {
|
38
|
+
expect(0);
|
39
|
+
jack(function() {
|
40
|
+
jack.expect('AdminData.jsUtil.confirm').once().mock(function() {
|
41
|
+
return false;
|
42
|
+
});
|
43
|
+
//TODO ensure that the value passed to action is delete
|
44
|
+
jack.expect('AdminData.actOnResult.action').exactly('0 time');
|
45
|
+
$('#advance_search_delete_all').trigger('click');
|
46
|
+
});
|
47
|
+
});
|
48
|
+
|
49
|
+
test('live clicking #advance_search_delete_all', function() {
|
50
|
+
expect(0);
|
51
|
+
var args;
|
52
|
+
|
53
|
+
jack(function() {
|
54
|
+
jack.expect('AdminData.jsUtil.confirm').once().mock(function() {
|
55
|
+
return true;
|
56
|
+
});
|
57
|
+
jack.expect('AdminData.actOnResult.action').once().mock(function(action_type) {
|
58
|
+
args = action_type;
|
59
|
+
return {};
|
60
|
+
});
|
61
|
+
$('#advance_search_delete_all').trigger('click');
|
62
|
+
});
|
63
|
+
equals('delete', args, 'action_type should be delete');
|
64
|
+
|
65
|
+
});
|
66
|
+
|
67
|
+
test('live clicking #advance_search_destroy_all with cancel action', function() {
|
68
|
+
expect(0);
|
69
|
+
jack(function() {
|
70
|
+
jack.expect('AdminData.jsUtil.confirm').once().mock(function() {
|
71
|
+
return false;
|
72
|
+
});
|
73
|
+
jack.expect('AdminData.actOnResult.action').exactly('0 time');
|
74
|
+
$('#advance_search_destroy_all').trigger('click');
|
75
|
+
});
|
76
|
+
});
|
77
|
+
|
78
|
+
test('live clicking #advance_search_destroy_all', function() {
|
79
|
+
expect(0);
|
80
|
+
var args;
|
81
|
+
|
82
|
+
jack(function() {
|
83
|
+
jack.expect('AdminData.jsUtil.confirm').once().mock(function() {
|
84
|
+
return true;
|
85
|
+
});
|
86
|
+
jack.expect('AdminData.actOnResult.action').once().mock(function(action_type) {
|
87
|
+
args = action_type;
|
88
|
+
return {};
|
89
|
+
});
|
90
|
+
$('#advance_search_destroy_all').trigger('click');
|
91
|
+
});
|
92
|
+
equals('destroy', args, 'action_type should be destroy');
|
93
|
+
});
|
94
|
+
|
95
|
+
test('actOnResultAJAX', function() {
|
96
|
+
expect(5);
|
97
|
+
$('#advance_search_form').attr('action', 'http://localhost:3000');
|
98
|
+
$('#advance_search_form').data('admin_data_form_array', [{
|
99
|
+
name: 'foo',
|
100
|
+
value: 'i_am_foo'
|
101
|
+
}]);
|
102
|
+
|
103
|
+
var ajaxArgs;
|
104
|
+
|
105
|
+
jack(function() {
|
106
|
+
jack.expect('$.ajax').once().mock(function(args) {
|
107
|
+
ajaxArgs = args;
|
108
|
+
});
|
109
|
+
AdminData.actOnResult.action('delete');
|
110
|
+
});
|
111
|
+
|
112
|
+
equals('post', ajaxArgs.type, 'ajax arguments should have type as post');
|
113
|
+
equals('json', ajaxArgs.dataType, 'ajax arguments should have json as dataType');
|
114
|
+
equals('http://localhost:3000', ajaxArgs.url, 'ajax arguments should have valid url');
|
115
|
+
var data = ajaxArgs.data;
|
116
|
+
ok(data, 'ajax arguments should have value for key data');
|
117
|
+
equals('foo=i_am_foo&admin_data_advance_search_action_type=delete', data, 'data should have parameterized value');
|
118
|
+
|
119
|
+
});
|
120
|
+
|
@@ -0,0 +1,80 @@
|
|
1
|
+
module('advance_search');
|
2
|
+
|
3
|
+
test('buildFirstRow', function() {
|
4
|
+
expect(2);
|
5
|
+
$('#advance_search_table').html('');
|
6
|
+
AdminData.advanceSearch.buildFirstRow();
|
7
|
+
var $a = $('#advance_search_table').find('a');
|
8
|
+
ok($a.hasClass('add_row_link'), 'first row should have anchor element with class remove_row');
|
9
|
+
ok('+', $a.text(), 'first row should have anchor element with text +');
|
10
|
+
});
|
11
|
+
|
12
|
+
|
13
|
+
test("buildCol1", function() {
|
14
|
+
expect(3);
|
15
|
+
|
16
|
+
var $td = AdminData.advanceSearch.buildCol1();
|
17
|
+
ok($.isjQuery($td), "buildCol1 should return an instance of jQuery");
|
18
|
+
|
19
|
+
var className = $td.find('select').attr('className');
|
20
|
+
equals('col1', className, 'buildCol1 should have select with class col1');
|
21
|
+
|
22
|
+
var countOfOptions = $td.find('select option').length;
|
23
|
+
equals(12, countOfOptions, 'buildCol1 should have select with 12 options');
|
24
|
+
});
|
25
|
+
|
26
|
+
test("buildCol2", function() {
|
27
|
+
expect(3);
|
28
|
+
|
29
|
+
var $td = AdminData.advanceSearch.buildCol2();
|
30
|
+
ok($.isjQuery($td), "buildCol2 should return an instance of jQuery");
|
31
|
+
|
32
|
+
ok($td.find('select').hasClass('col2'), 'buildCol2 should have class col2');
|
33
|
+
ok($td.find('select').hasClass('disabled'), 'buildCol2 should have class disabled');
|
34
|
+
});
|
35
|
+
|
36
|
+
test("buildCol3", function() {
|
37
|
+
expect(3);
|
38
|
+
|
39
|
+
var $td = AdminData.advanceSearch.buildCol3();
|
40
|
+
ok($.isjQuery($td), "buildCol3 should return an instance of jQuery");
|
41
|
+
|
42
|
+
ok($td.find('input').hasClass('col3'), 'buildCol3 should have input element with class col3');
|
43
|
+
ok($td.find('input').attr('disabled'), 'buildCol3 should have input element with attribute disabled');
|
44
|
+
});
|
45
|
+
|
46
|
+
test("buildCol4", function() {
|
47
|
+
expect(3);
|
48
|
+
|
49
|
+
var $td = AdminData.advanceSearch.buildCol4();
|
50
|
+
ok($.isjQuery($td), "buildCol4 should return an instance of jQuery");
|
51
|
+
|
52
|
+
var a = $td.find('a');
|
53
|
+
ok(a.hasClass('remove_row'), 'buildCol4 should have anchor element with class remove_row');
|
54
|
+
equals('x', a.text(), 'buildCol4 should have anchor element with text x');
|
55
|
+
});
|
56
|
+
|
57
|
+
test("buildRow", function() {
|
58
|
+
expect(8);
|
59
|
+
jack(function() {
|
60
|
+
jack.expect("AdminData.jsUtil.randomNumber").exactly("1 time").mock(function() {
|
61
|
+
return 100;
|
62
|
+
});
|
63
|
+
|
64
|
+
var $tr = AdminData.advanceSearch.buildRow();
|
65
|
+
ok($.isjQuery($tr), "buildCol4 should return an instance of jQuery");
|
66
|
+
|
67
|
+
equals(4, $tr.find('td').length, 'buildRow should have 4 td elements');
|
68
|
+
|
69
|
+
ok($tr.find('select.col1').attr('name'), 'buildRow should have select.col1 with attribute name');
|
70
|
+
ok($tr.find('select.col2').attr('name'), 'buildRow should have select.col1 with attribute name');
|
71
|
+
ok($tr.find('input.col3').attr('name'), 'buildRow should have input.col1 with attribute name');
|
72
|
+
|
73
|
+
equals('adv_search[100_row][col1]', $tr.find('select.col1').attr('name'), 'select.col1 should have right name');
|
74
|
+
equals('adv_search[100_row][col2]', $tr.find('select.col2').attr('name'), 'select.col2 should have right name');
|
75
|
+
equals('adv_search[100_row][col3]', $tr.find('input.col3').attr('name'), 'input.col3 should have right name');
|
76
|
+
|
77
|
+
});
|
78
|
+
|
79
|
+
});
|
80
|
+
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module('ajaxify advance search', {
|
2
|
+
teardown: function() {
|
3
|
+
$('#results').remove();
|
4
|
+
$('#advance_search_form').remove();
|
5
|
+
},
|
6
|
+
setup: function() {
|
7
|
+
$(document.body).append($('<div />', {
|
8
|
+
id: 'results'
|
9
|
+
}));
|
10
|
+
$(document.body).append($('<div />', {
|
11
|
+
id: 'advance_search_form'
|
12
|
+
}));
|
13
|
+
}
|
14
|
+
});
|
15
|
+
|
16
|
+
test('successCallback', function() {
|
17
|
+
expect(1);
|
18
|
+
AdminData.ajaxifyAdvanceSearch.successCallback('hello world');
|
19
|
+
equals('hello world', $('#results').text(), '#results should have text hello world');
|
20
|
+
});
|
21
|
+
|
22
|
+
test('beforeSubmitCallback', function() {
|
23
|
+
expect(1);
|
24
|
+
AdminData.ajaxifyAdvanceSearch.beforeSubmitCallback(['1', '2'], null);
|
25
|
+
|
26
|
+
var $results = $('#results');
|
27
|
+
equals('searching...', $('#results').text(), '#results should have text searching');
|
28
|
+
});
|
29
|
+
|
@@ -0,0 +1,100 @@
|
|
1
|
+
module('event_bindings');
|
2
|
+
|
3
|
+
test('live click on a.add_row_link', function() {
|
4
|
+
expect(3);
|
5
|
+
|
6
|
+
$('#advance_search_table').html('');
|
7
|
+
equals(0, $('#advance_search_table tr').length, 'there should be no row in the table');
|
8
|
+
|
9
|
+
AdminData.advanceSearch.buildFirstRow();
|
10
|
+
equals(1, $('#advance_search_table tr').length, 'there should be only first row in the table');
|
11
|
+
|
12
|
+
$('#advance_search_table a.add_row_link').trigger('click');
|
13
|
+
equals(2, $('#advance_search_table tr').length, 'additional row should be added to the table');
|
14
|
+
});
|
15
|
+
|
16
|
+
test('live click on a.remove_row link', function() {
|
17
|
+
expect(5);
|
18
|
+
|
19
|
+
$('#advance_search_table').html('');
|
20
|
+
equals(0, $('#advance_search_table tr').length, 'there should be no row in the table');
|
21
|
+
|
22
|
+
AdminData.advanceSearch.buildFirstRow();
|
23
|
+
equals(1, $('#advance_search_table tr').length, 'there should be only first row in the table');
|
24
|
+
|
25
|
+
$('#advance_search_table').append(AdminData.advanceSearch.buildRow());
|
26
|
+
equals(2, $('#advance_search_table tr').length, 'there should be two rows in the table');
|
27
|
+
|
28
|
+
var $a = $('#advance_search_table a.remove_row');
|
29
|
+
equals(1, $a.length, 'there should be one anchor element with class remove_row');
|
30
|
+
|
31
|
+
$('#advance_search_table a.remove_row').trigger('click');
|
32
|
+
equals(1, $('#advance_search_table tr').length, 'there should be only one row in the table');
|
33
|
+
});
|
34
|
+
|
35
|
+
test('live select.col1 change', function() {
|
36
|
+
expect(10);
|
37
|
+
|
38
|
+
$('#advance_search_table').html('');
|
39
|
+
equals(0, $('#advance_search_table tr').length, 'there should be no row in the table');
|
40
|
+
|
41
|
+
AdminData.advanceSearch.buildFirstRow();
|
42
|
+
equals(1, $('#advance_search_table tr').length, 'there should be only first row in the table');
|
43
|
+
|
44
|
+
ok($('#advance_search_table select.col2').is(':disabled'), 'second column should be disabled');
|
45
|
+
|
46
|
+
$('#advance_search_table select.col1').val('first_name');
|
47
|
+
$('#advance_search_table select.col1').trigger('change');
|
48
|
+
|
49
|
+
ok(!$('#advance_search_table select.col2').is(':disabled'), 'second column should be enabled');
|
50
|
+
|
51
|
+
var s = $('#advance_search_table select.col2 option').eq(0).text();
|
52
|
+
equals('', s, 'empty value should be the first option');
|
53
|
+
|
54
|
+
s = $('#advance_search_table select.col2 option').eq(1).text();
|
55
|
+
equals('is null', s, 'is null should be the second option');
|
56
|
+
|
57
|
+
s = $('#advance_search_table select.col2 option').eq(2).text();
|
58
|
+
equals('is not null', s, 'is null should be the third option');
|
59
|
+
|
60
|
+
s = $('#advance_search_table select.col2 option').eq(3).text();
|
61
|
+
equals('contains', s, 'contains should be the fourth option');
|
62
|
+
|
63
|
+
s = $('#advance_search_table select.col2 option').eq(4).text();
|
64
|
+
equals('is exactly', s, 'contains should be the fifth option');
|
65
|
+
|
66
|
+
s = $('#advance_search_table select.col2 option').eq(5).text();
|
67
|
+
equals("doesn't contain", s, 'does not contain should be the sixth option');
|
68
|
+
});
|
69
|
+
|
70
|
+
test('live select.col2 change', function() {
|
71
|
+
expect(2);
|
72
|
+
|
73
|
+
$('#advance_search_table').html('');
|
74
|
+
AdminData.advanceSearch.buildFirstRow();
|
75
|
+
ok($('#advance_search_table input.col3').is(':disabled'), 'third column should be disabled');
|
76
|
+
|
77
|
+
$('#advance_search_table select.col1').val('first_name');
|
78
|
+
$('#advance_search_table select.col1').trigger('change');
|
79
|
+
$('#advance_search_table select.col2').val('contains');
|
80
|
+
$('#advance_search_table select.col2').trigger('change');
|
81
|
+
|
82
|
+
ok($('#advance_search_table input.col3').is(':enabled'), 'third column should be enabled');
|
83
|
+
});
|
84
|
+
|
85
|
+
|
86
|
+
test('live select.col2 change for is_null input', function() {
|
87
|
+
expect(2);
|
88
|
+
|
89
|
+
$('#advance_search_table').html('');
|
90
|
+
AdminData.advanceSearch.buildFirstRow();
|
91
|
+
ok($('#advance_search_table input.col3').is(':disabled'), 'third column should be disabled');
|
92
|
+
|
93
|
+
$('#advance_search_table select.col1').val('first_name');
|
94
|
+
$('#advance_search_table select.col1').trigger('change');
|
95
|
+
$('#advance_search_table select.col2').val('is_null');
|
96
|
+
$('#advance_search_table select.col2').trigger('change');
|
97
|
+
|
98
|
+
ok($('#advance_search_table input.col3').is(':disabled'), 'third column should be disabled');
|
99
|
+
});
|
100
|
+
|
@@ -0,0 +1,66 @@
|
|
1
|
+
jQuery(document).ready(function($) {
|
2
|
+
return function($) {
|
3
|
+
function handleSuccess(json, statusText) {
|
4
|
+
$('#spinner').hide();
|
5
|
+
var base_url;
|
6
|
+
|
7
|
+
if (! (json.error === undefined)) {
|
8
|
+
$('#submit').attr('value', 'Start validation');
|
9
|
+
$('#validation_result').html('').hide();
|
10
|
+
$('#error').html(json.error).show();
|
11
|
+
} else if (json.still_processing === 'yes') {
|
12
|
+
if (! (json.base_url === undefined)) {
|
13
|
+
base_url = json.base_url;
|
14
|
+
}
|
15
|
+
var keep_checking = function() {
|
16
|
+
var url = base_url + '/admin_data/diagnostic/validate_model?still_processing=yes';
|
17
|
+
url = url + '&tid=' + $('#tid').text();
|
18
|
+
var fn = function(json) {
|
19
|
+
if (json.still_processing === 'no') {
|
20
|
+
clearInterval(refreshID);
|
21
|
+
$('#submit').attr('value', 'Start validation');
|
22
|
+
$('#validation_result').html('').hide();
|
23
|
+
$('#validation_result').html('Validation result').show();
|
24
|
+
$('#validate_model_rhs_data').html(json.data);
|
25
|
+
} else {
|
26
|
+
var processed_info = json.currently_processing_klass;
|
27
|
+
var s = processed_info + ' ... ';
|
28
|
+
$('#validation_result').html(s);
|
29
|
+
$('#validate_model_rhs_data').html(json.data);
|
30
|
+
}
|
31
|
+
};
|
32
|
+
|
33
|
+
$.getJSON(url, fn);
|
34
|
+
};
|
35
|
+
var refreshID = setInterval(keep_checking, 4000);
|
36
|
+
} else {
|
37
|
+
$('#validation_result').html('Validation result').show();
|
38
|
+
$('#validate_model_rhs_data').html(json.data);
|
39
|
+
}
|
40
|
+
}
|
41
|
+
|
42
|
+
function preSubmit(formData, jqForm, options) {
|
43
|
+
$('html,body').animate({
|
44
|
+
scrollTop: 0
|
45
|
+
},
|
46
|
+
0);
|
47
|
+
$('#validate_model_rhs_data').html('');
|
48
|
+
$('#validation_result').html('Processing .... This page will refersh itself periodically.').show();
|
49
|
+
$('#error').hide();
|
50
|
+
$('#spinner').show();
|
51
|
+
$('#submit').attr('value', 'processing ...');
|
52
|
+
return true;
|
53
|
+
}
|
54
|
+
|
55
|
+
var options = {
|
56
|
+
beforeSubmit: preSubmit,
|
57
|
+
success: handleSuccess,
|
58
|
+
dataType: 'json'
|
59
|
+
};
|
60
|
+
|
61
|
+
$('#validate_model_form').ajaxForm(options);
|
62
|
+
|
63
|
+
};
|
64
|
+
} (jQuery));
|
65
|
+
|
66
|
+
|