admin_data 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
+
|