gestion 1.9.12

Sign up to get free protection for your applications and to get access to all the features.
Files changed (233) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +48 -0
  3. data/.project +14 -0
  4. data/Binaries/adduser_to_buzz +15 -0
  5. data/Binaries/backup +7 -0
  6. data/Binaries/check_gestion +8 -0
  7. data/Binaries/gestion.gnumail +22 -0
  8. data/Binaries/gestion.logrotate +34 -0
  9. data/Binaries/gestion.service +12 -0
  10. data/Binaries/gestion_update.rb +183 -0
  11. data/Binaries/gestion_update.service +10 -0
  12. data/Binaries/get_compta +11 -0
  13. data/Binaries/kill_gestion +16 -0
  14. data/Binaries/ldap/add_indexes +51 -0
  15. data/Binaries/ldap/backup +2 -0
  16. data/Binaries/ldap/install_ldap +92 -0
  17. data/Binaries/ldap/restore +7 -0
  18. data/Binaries/lib_backup +5 -0
  19. data/Binaries/log_scan_errors +8 -0
  20. data/Binaries/loop_gestion +64 -0
  21. data/Binaries/onetimers/sync_courses_from_compta.rb +74 -0
  22. data/Binaries/onetimers/transfer_cash_from_ldap_to_csv +26 -0
  23. data/Binaries/reboot +5 -0
  24. data/Binaries/restore +3 -0
  25. data/Binaries/restore_do +22 -0
  26. data/Binaries/sort_events +31 -0
  27. data/Binaries/start_gestion +18 -0
  28. data/Binaries/swipe_gestion +18 -0
  29. data/Binaries/update_africompta +21 -0
  30. data/Binaries/update_users +3 -0
  31. data/Diplomas.src/accredited.odg +0 -0
  32. data/Diplomas.src/diploma.odg +0 -0
  33. data/Diplomas.src/label.odg +0 -0
  34. data/Diplomas.src/presence_sheet.ods +0 -0
  35. data/Diplomas.src/presence_sheet_small.ods +0 -0
  36. data/Diplomas.src/student_card.odg +0 -0
  37. data/Doc/130514-it-ideas.odt +0 -0
  38. data/Doc/Compta-cash.mm +179 -0
  39. data/Doc/General.odt +0 -0
  40. data/Entities/AccessGroups.rb +117 -0
  41. data/Entities/Activity.rb +178 -0
  42. data/Entities/ChatMsg.rb +142 -0
  43. data/Entities/Classroom.rb +11 -0
  44. data/Entities/Client.rb +19 -0
  45. data/Entities/Computer.rb +21 -0
  46. data/Entities/ConfigBase.rb +280 -0
  47. data/Entities/Course.rb +1588 -0
  48. data/Entities/CourseType.rb +171 -0
  49. data/Entities/DFiles.rb +466 -0
  50. data/Entities/FilesManage.rb +226 -0
  51. data/Entities/Grade.rb +186 -0
  52. data/Entities/Internet.rb +300 -0
  53. data/Entities/Netdev.rb +10 -0
  54. data/Entities/Person.rb +1175 -0
  55. data/Entities/Plug.rb +98 -0
  56. data/Entities/Quiz.rb +33 -0
  57. data/Entities/Recharges.rb +37 -0
  58. data/Entities/Report.rb +136 -0
  59. data/Entities/Room.rb +12 -0
  60. data/Entities/SMS.rb +30 -0
  61. data/Entities/ScheduleType.rb +33 -0
  62. data/Entities/Share.rb +120 -0
  63. data/Entities/Task.rb +51 -0
  64. data/Entities/Ticket.rb +72 -0
  65. data/Entities/Usage.rb +143 -0
  66. data/Entities/Worker.rb +29 -0
  67. data/Files/apache-profeda.conf +36 -0
  68. data/Files/label.erb +121 -0
  69. data/Files/label_notfound.erb +64 -0
  70. data/Files/label_notpassed.erb +84 -0
  71. data/Files/mobileinfo.erb +115 -0
  72. data/Files/smb.conf +333 -0
  73. data/Files/timetable.html +36 -0
  74. data/Files/timetable.js +239 -0
  75. data/Gemfile +12 -0
  76. data/Gemfile.dev +12 -0
  77. data/Gemfile.dev.lock +127 -0
  78. data/Gemfile.lock +127 -0
  79. data/Gemfile.prod +8 -0
  80. data/Gestion +35 -0
  81. data/Gestion.rb +220 -0
  82. data/INSTALL +40 -0
  83. data/Images/connection.xcf +0 -0
  84. data/Images/connection_no.png +0 -0
  85. data/Images/connection_wait.png +0 -0
  86. data/Images/connection_yes.png +0 -0
  87. data/Paths/Exas.rb +13 -0
  88. data/Paths/Files.rb +19 -0
  89. data/Paths/GetDiplomas.rb +20 -0
  90. data/Paths/Info.rb +114 -0
  91. data/Paths/Label.rb +187 -0
  92. data/Paths/MobileInfo.rb +19 -0
  93. data/Paths/internetCash.rb +34 -0
  94. data/Paths/internetWifi.rb +54 -0
  95. data/README.md +60 -0
  96. data/Rakefile +13 -0
  97. data/TODO +1391 -0
  98. data/Test/.gitignore +3 -0
  99. data/Test/Diplomas/base_gestion.odt +0 -0
  100. data/Test/Diplomas/base_report.odt +0 -0
  101. data/Test/Diplomas/carte_etudiant.odg +0 -0
  102. data/Test/Diplomas/exam_language.odt +0 -0
  103. data/Test/Diplomas/label.odg +0 -0
  104. data/Test/Diplomas/presence_sheet.ods +0 -0
  105. data/Test/Diplomas/presence_sheet_small.ods +0 -0
  106. data/Test/Diplomas/student_card.odg +0 -0
  107. data/Test/Manual/testMerge +18 -0
  108. data/Test/config_test.yaml +26 -0
  109. data/Test/db.testGestion +0 -0
  110. data/Test/dfiles/descs/avg-rescue.desc +10 -0
  111. data/Test/dfiles/descs/avg.desc +8 -0
  112. data/Test/dfiles/descs/driver.desc +8 -0
  113. data/Test/dfiles/descs/linuxmint.desc +7 -0
  114. data/Test/dfiles/files/avg-160203.exe +1 -0
  115. data/Test/dfiles/files/avg.iso +1 -0
  116. data/Test/dfiles/files/driver.exe +1 -0
  117. data/Test/dfiles/index_post.html +3 -0
  118. data/Test/dfiles/index_pre.html +8 -0
  119. data/Test/dfiles/priorities +5 -0
  120. data/Test/ge_activity.rb +124 -0
  121. data/Test/ge_chat.rb +106 -0
  122. data/Test/ge_compta.rb +67 -0
  123. data/Test/ge_configbase.rb +54 -0
  124. data/Test/ge_course.rb +1114 -0
  125. data/Test/ge_dfiles.rb +121 -0
  126. data/Test/ge_filesmanage.rb +180 -0
  127. data/Test/ge_info.rb +27 -0
  128. data/Test/ge_internet.rb +246 -0
  129. data/Test/ge_login.rb +55 -0
  130. data/Test/ge_person.rb +373 -0
  131. data/Test/ge_qvinfo.rb +28 -0
  132. data/Test/ge_report.rb +97 -0
  133. data/Test/ge_share.rb +27 -0
  134. data/Test/ge_sms.rb +34 -0
  135. data/Test/ge_tasks.rb +19 -0
  136. data/Test/ge_usage.rb +168 -0
  137. data/Test/ge_view.rb +46 -0
  138. data/Test/multiconf-captive +29 -0
  139. data/Test/test.conf +7 -0
  140. data/Test/test.rb +49 -0
  141. data/Test/test_bytes.png +0 -0
  142. data/VERSION +140 -0
  143. data/Views/Admin/Backup.rb +91 -0
  144. data/Views/Admin/Configuration.rb +44 -0
  145. data/Views/Admin/Credit.rb +32 -0
  146. data/Views/Admin/FilesManage.rb +219 -0
  147. data/Views/Admin/Function.rb +39 -0
  148. data/Views/Admin/Power.rb +49 -0
  149. data/Views/Admin/Printer.rb +37 -0
  150. data/Views/Admin/Server.rb +252 -0
  151. data/Views/Admin/Tabs.rb +5 -0
  152. data/Views/Admin/Update.rb +73 -0
  153. data/Views/Admin/UpdateSystem.rb +26 -0
  154. data/Views/Cashbox/Activity.rb +191 -0
  155. data/Views/Cashbox/Course.rb +141 -0
  156. data/Views/Cashbox/Credit.rb +79 -0
  157. data/Views/Cashbox/Report.rb +115 -0
  158. data/Views/Cashbox/Service.rb +105 -0
  159. data/Views/Cashbox/Tabs.rb +10 -0
  160. data/Views/Compta/Accounts.rb +36 -0
  161. data/Views/Compta/Course.rb +96 -0
  162. data/Views/Compta/Show.rb +6 -0
  163. data/Views/Compta/Transfer.rb +66 -0
  164. data/Views/Course/Diploma.rb +203 -0
  165. data/Views/Course/Grade.rb +401 -0
  166. data/Views/Course/Modify.rb +447 -0
  167. data/Views/Course/Print.rb +94 -0
  168. data/Views/Course/Responsible.rb +44 -0
  169. data/Views/Course/Stats.rb +76 -0
  170. data/Views/Course/Students.rb +92 -0
  171. data/Views/Course/Tabs.rb +220 -0
  172. data/Views/Internet/Access.rb +134 -0
  173. data/Views/Internet/ClassEdit.rb +24 -0
  174. data/Views/Internet/ClassUsers.rb +81 -0
  175. data/Views/Internet/Config.rb +32 -0
  176. data/Views/Internet/Mobile.rb +213 -0
  177. data/Views/Internet/Recharges.rb +49 -0
  178. data/Views/Internet/Tabs.rb +6 -0
  179. data/Views/Inventory/Computer.rb +24 -0
  180. data/Views/Inventory/Room.rb +18 -0
  181. data/Views/Inventory/Tabs.rb +9 -0
  182. data/Views/Inventory/TicketClosed.rb +7 -0
  183. data/Views/Inventory/TicketOpen.rb +23 -0
  184. data/Views/Library/Person.rb +36 -0
  185. data/Views/Library/Tabs.rb +7 -0
  186. data/Views/Network/Block.rb +87 -0
  187. data/Views/Network/Netdevs.rb +21 -0
  188. data/Views/Network/Restriction.rb +37 -0
  189. data/Views/Network/Share.rb +167 -0
  190. data/Views/Network/Tables.rb +28 -0
  191. data/Views/Network/Tabs.rb +6 -0
  192. data/Views/Person/Admin.rb +99 -0
  193. data/Views/Person/Center.rb +48 -0
  194. data/Views/Person/Course.rb +72 -0
  195. data/Views/Person/Modify.rb +153 -0
  196. data/Views/Person/Tabs.rb +162 -0
  197. data/Views/Report/ComptaExecutive.rb +221 -0
  198. data/Views/Report/ComptaFlat.rb +79 -0
  199. data/Views/Report/ReportCourse.rb +47 -0
  200. data/Views/Report/Tabs.rb +8 -0
  201. data/Views/Report/Usage.rb +52 -0
  202. data/Views/Report/UsageCases.rb +59 -0
  203. data/Views/Self/Cash.rb +67 -0
  204. data/Views/Self/Chat.rb +55 -0
  205. data/Views/Self/Concours.rb +109 -0
  206. data/Views/Self/Email.rb +34 -0
  207. data/Views/Self/Internet.rb +255 -0
  208. data/Views/Self/Results.rb +17 -0
  209. data/Views/Self/Services.rb +85 -0
  210. data/Views/Self/Show.rb +47 -0
  211. data/Views/Self/Tabs.rb +5 -0
  212. data/Views/Special/DFileEdit.rb +13 -0
  213. data/Views/Special/PlugEdit.rb +56 -0
  214. data/Views/Special/Tabs.rb +6 -0
  215. data/Views/Special/Vnc.rb +39 -0
  216. data/Views/Task/Client.rb +21 -0
  217. data/Views/Task/Edit.rb +33 -0
  218. data/Views/Task/List.rb +55 -0
  219. data/Views/Task/Tabs.rb +9 -0
  220. data/Views/Task/Worker.rb +30 -0
  221. data/Views/Template/Activity.rb +33 -0
  222. data/Views/Template/CourseType.rb +63 -0
  223. data/Views/Template/ScheduleType.rb +29 -0
  224. data/Views/Template/Tabs.rb +5 -0
  225. data/Views/Welcome.rb +121 -0
  226. data/config.yaml.default +36 -0
  227. data/po/Gestion-ar.po +2356 -0
  228. data/po/Gestion-en.mo +0 -0
  229. data/po/Gestion-en.po +4363 -0
  230. data/po/Gestion-fr.mo +0 -0
  231. data/po/Gestion-fr.po +4345 -0
  232. data/po/traduction-ar.rtf +76 -0
  233. metadata +381 -0
data/Test/ge_dfiles.rb ADDED
@@ -0,0 +1,121 @@
1
+ require 'test/unit'
2
+
3
+ class TC_DFiles < Test::Unit::TestCase
4
+
5
+ def setup
6
+ Entities.delete_all_data
7
+
8
+ # Seting up files for tests
9
+ DFiles.set_dir_base(File.join(Dir.pwd, 'dfiles.test'))
10
+ FileUtils.rm_rf('dfiles.test')
11
+ FileUtils.mkdir 'dfiles.test'
12
+ %w(files descs).each { |dir|
13
+ [dir, "#{dir}.save"].each { |d|
14
+ savedir = File.join('dfiles.test', d)
15
+ Dir.mkdir savedir
16
+ FileUtils.cp(Dir.glob("dfiles/#{dir}/*"), savedir)
17
+ }
18
+ }
19
+ Dir.glob('dfiles/*').each { |f|
20
+ unless File.directory?(f)
21
+ FileUtils.cp(f, 'dfiles.test')
22
+ end
23
+ }
24
+ FileUtils.cp('dfiles/priorities', 'dfiles.test')
25
+ DFiles.load
26
+ DFilePriorities.load
27
+ @df_avg = DFiles.find_by_name('avg$')
28
+ @df_avg_rescue = DFiles.find_by_name('avg_rescue')
29
+ @df_driver = DFiles.find_by_name('driver')
30
+ @files = DFiles.search_all_.size
31
+ end
32
+
33
+ def teardown
34
+ #@dirs.each{|dir| FileUtils.rm_rf dir}
35
+ end
36
+
37
+ def test_load
38
+ descs = DFiles.search_all_
39
+ assert_equal 4, descs.size
40
+ avg = descs.find { |df| df.name =~ /avg$/ }
41
+ assert avg
42
+ assert_equal 'avg-160203.exe', avg.save_file
43
+ assert_equal '2', avg.tags.first.first
44
+
45
+ newdir = Dir.pwd + '/descs.save'
46
+ FileUtils.rm Dir.glob(newdir + '/*')
47
+ DFiles.dir_descs = newdir
48
+ DFiles.changed = true
49
+ DFiles.save
50
+
51
+ files_saved = Dir.glob("#{newdir}/*")
52
+ assert_equal @files, files_saved.size
53
+ end
54
+
55
+ def test_update_files
56
+ FileUtils.rm Dir.glob(DFiles.dir_files + '/*')
57
+ DFiles.update_desc_from_dir(DFiles.dir_descs + '.save')
58
+ testfile = DFiles.dir_files + '/test.com'
59
+ IO.write(testfile, 'Hello there')
60
+ DFiles.update_files_from_dir(DFiles.dir_files + '.save')
61
+ assert !File.exists?(testfile)
62
+ assert File.exists?(DFiles.dir_files + '/avg-160203.exe')
63
+ assert_equal @files - 1, DFiles.search_all_.size
64
+ end
65
+
66
+ def test_get_files
67
+ dfp = DFilePriorities.find_by_priority(9)
68
+ assert_equal 1, dfp.get_files.size
69
+ end
70
+
71
+ def test_file_priorities
72
+ prios = DFilePriorities.search_all_
73
+ result = [1, 1, 0, 1]
74
+ prios.each { |p|
75
+ files = p.get_files
76
+ dputs(3) { [p, files, result].join('::') }
77
+ assert_equal result.shift, files.size, prios.collect { |p| p.inspect }
78
+ }
79
+ end
80
+
81
+ def test_get_tag_prio
82
+ assert_equal 2, @df_avg.get_tag_prio('windows')
83
+ assert_equal 1, @df_avg.get_tag_prio('avg')
84
+ assert_equal nil, @df_avg.get_tag_prio('avg2')
85
+ end
86
+
87
+ def test_files_pruning
88
+ files = DFilePriorities.get_most_wanted
89
+ assert_equal 80, files.inject(0) { |tot, f| tot + f.file_size }
90
+ assert_equal 3, files.size
91
+ files = DFiles.get_limited_files(files, 40)
92
+ assert_equal 38, files.inject(0) { |tot, f| tot + f.file_size }
93
+ assert_equal 2, files.size
94
+ end
95
+
96
+ def test_get_most_wanted
97
+ files = DFilePriorities.get_most_wanted
98
+ assert_equal 3, files.size
99
+ end
100
+
101
+
102
+ def test_search_by_all
103
+ files = DFiles.search_by_all(:tags, 'windows antivirus'.split)
104
+ assert_equal 2, files.size
105
+ files = DFiles.search_by_all(:tags, 'windows iso'.split)
106
+ assert_equal 1, files.size
107
+ end
108
+
109
+ def test_get_tags
110
+ tag_test = [['windows', 7], ['iso', 6], ['linux', 2]]
111
+ tag_test.each { |tag, count|
112
+ tags = DFiles.get_tags(tag)
113
+ assert_equal count, tags.size
114
+ }
115
+ end
116
+
117
+ def test_update_html
118
+ DFiles.url_html = '.'
119
+ DFiles.update_html
120
+ end
121
+ end
@@ -0,0 +1,180 @@
1
+ require 'test/unit'
2
+
3
+ class TC_FilesManage < Test::Unit::TestCase
4
+
5
+ def setup
6
+ Entities.delete_all_data
7
+
8
+ # Seting up files for tests
9
+ dir = 'fmdirs.test'
10
+ FMDirs.dir_base = File.join(Dir.pwd, dir)
11
+ FileUtils.rm_rf(dir)
12
+ FileUtils.mkdir dir
13
+ counter = 1
14
+ @fmdirs = []
15
+ @fmentries = []
16
+ %w( windows mac ).each { |base|
17
+ FileUtils.mkdir File.join(dir, base)
18
+ @fmdirs.push FMDirs.create({name: base})
19
+ %w( office utils ).each { |sub|
20
+ subdir = File.join(dir, base, sub)
21
+ @fmdirs.push FMDirs.create({name: sub, parent: base})
22
+ FileUtils.mkdir subdir
23
+ fname = "Test#{counter}.zip"
24
+ FileUtils.touch(File.join(subdir, fname))
25
+ File.open(File.join(subdir, fname + '.file'), 'w') { |f|
26
+ f.write("#{fname}\nhttp://base.com\n\n"+
27
+ "Description #{counter}\n\n#{base}\n#{sub}\ntag1, tag2")
28
+ }
29
+ counter += 1
30
+ }
31
+ }
32
+ FMEntries.load
33
+ @fmentries = FMEntries.search_all_
34
+ end
35
+
36
+ def teardown
37
+ #@dirs.each{|dir| FileUtils.rm_rf dir}
38
+ end
39
+
40
+ def test_search_by_path
41
+ dir = FMDirs.search_by_path('office', 'windows')
42
+ assert dir
43
+ assert dir.path.size > 0
44
+ end
45
+
46
+ def test_search_by_directory
47
+ entries = FMEntries.search_by_directory(@fmdirs[1])
48
+ assert_equal 1, entries.size
49
+ assert_equal 'Test1.zip.file', entries[0]._name
50
+ end
51
+
52
+ def test_load_fmdirs
53
+ assert_equal %w(windows mac), FMDirs.base_dirs.collect { |bd| bd._name }
54
+ assert_equal %w(office utils), FMDirs.sub_dirs('windows').collect { |bd| bd._name }
55
+ assert_equal %w(office utils), FMDirs.sub_dirs(FMDirs.base_dirs[0]).collect { |bd| bd._name }
56
+ end
57
+
58
+ def test_load_fmentries
59
+ assert_equal 4, FMEntries.search_all.count
60
+ FMEntries.save
61
+ FMDirs.save
62
+ FMEntries.delete_all_data(true)
63
+ assert_equal 0, FMEntries.search_all.count
64
+ dir = 'fmdirs.test'
65
+ FMDirs.dir_base = File.join(Dir.pwd, dir)
66
+ FMDirs.load
67
+ FMEntries.load
68
+ assert_equal 4, FMEntries.search_all.count
69
+ e = FMEntries.find_by_name('Test1.zip.file')
70
+ assert_equal 'Test1.zip', e._url_file
71
+ assert_equal %w(tag1 tag2), e._tags
72
+ end
73
+
74
+ def test_create
75
+ FMEntries.create(name: 'new.com', url_file: 'http://localhost/new.com', url_page: 'http://new.com',
76
+ description: 'desc', directory: @fmdirs[2], tags: %w(one two three))
77
+ assert_equal 5, FMEntries.search_all.count
78
+ reload
79
+ assert_equal 5, FMEntries.search_all.count
80
+ e = FMEntries.find_by_name('new.com.file')
81
+ assert_equal 'http://localhost/new.com', e._url_file
82
+ assert_equal %w(one two three), e._tags
83
+
84
+ end
85
+
86
+ def test_entries
87
+ assert_equal 0, @fmdirs[0].entries.size
88
+ assert_equal 1, @fmdirs[1].entries.size
89
+ assert_equal 0, @fmdirs[1].update_files.size
90
+ File.open(File.join(@fmdirs[1].path, 'newfile.exe'), 'w') { |f|}
91
+ assert_equal 1, @fmdirs[1].entries.size
92
+ newentries = @fmdirs[1].update_files
93
+ assert_equal 1, newentries.size
94
+ entries = @fmdirs[1].entries
95
+ assert_equal 2, entries.size
96
+ assert_equal 'newfile.exe.file', entries[1]._name
97
+ assert_equal 0, @fmdirs[1].update_files.size
98
+ end
99
+
100
+ def test_update
101
+ assert_equal 2, @fmdirs[0].sub_dirs.size
102
+ Dir.mkdir(File.join(@fmdirs[0].path, 'games'))
103
+ @fmdirs[0].update_dirs
104
+ dirs = @fmdirs[0].sub_dirs
105
+ assert_equal 3, dirs.size
106
+ assert_equal 'games', dirs[2]._name
107
+ end
108
+
109
+ def test_update_speed
110
+
111
+ end
112
+
113
+ def test_filename
114
+ assert_equal 'Test1.zip', @fmentries[0].file_name
115
+ @fmentries[0]._url_file = ':win.zip:http://localhost/test1.zip'
116
+ assert_equal 'win.zip', @fmentries[0].file_name
117
+ end
118
+
119
+ def test_delete
120
+ assert_equal 1, @fmdirs[1].entries.size
121
+ @fmentries[0].delete
122
+ assert_equal 0, @fmdirs[1].entries.size
123
+
124
+ reload
125
+
126
+ assert_equal 0, @fmdirs[1].entries.size
127
+ end
128
+
129
+ def test_double
130
+ assert_equal 6, FMDirs.search_all_.size
131
+ FMDirs.create(name: 'windows')
132
+ assert_equal 6, FMDirs.search_all_.size
133
+ FMDirs.create(parent: 'windows', name:'utils')
134
+ assert_equal 6, FMDirs.search_all_.size
135
+ FMDirs.create(parent: 'windows', name:'utils2')
136
+ assert_equal 7, FMDirs.search_all_.size
137
+ FMDirs.create(name: 'windows2')
138
+ assert_equal 8, FMDirs.search_all_.size
139
+ end
140
+
141
+ def test_spaces
142
+ FileUtils.touch(File.join(@fmdirs[1].path, 'éducation française verbes.exe'))
143
+ FileUtils.touch(File.join(@fmdirs[1].path, 'éducation française mots.exe'))
144
+ f = @fmdirs[1].update_files
145
+ assert_equal 2, f.size
146
+ f.each{|fi|
147
+ assert fi.name !~ / /
148
+ assert fi.file_name !~ / /
149
+ assert fi.description.size > 0
150
+ assert File.exists?(File.join(@fmdirs[1].path, fi.file_name))
151
+ }
152
+ end
153
+
154
+ def test_rename
155
+ @fmentries[0].rename('newname.zip')
156
+ reload
157
+ f = @fmentries[0]
158
+ assert_equal 'http://localhost/newname.zip', f._url_file
159
+ assert_equal 'newname.zip.file', f._name
160
+ assert File.exist?(f.full_path)
161
+ assert File.exist?(f._directory.path(f.file_name))
162
+ end
163
+
164
+ def test_subdirs
165
+ Dir.mkdir(@fmdirs[1].path('subdir'))
166
+ assert_equal [], @fmdirs[1].update_files
167
+ assert_equal 1, @fmdirs[1].entries.size
168
+ end
169
+
170
+ def reload
171
+ FMEntries.save
172
+ FMDirs.save
173
+ FMEntries.delete_all_data(true)
174
+ assert_equal 0, FMEntries.search_all.count
175
+ dir = 'fmdirs.test'
176
+ FMDirs.dir_base = File.join(Dir.pwd, dir)
177
+ FMDirs.load
178
+ FMEntries.load
179
+ end
180
+ end
data/Test/ge_info.rb ADDED
@@ -0,0 +1,27 @@
1
+ require 'test/unit'
2
+ require_relative '../Paths/Info.rb'
3
+
4
+ class TC_info < Test::Unit::TestCase
5
+ def setup
6
+ @info = Info.new
7
+ Entities.delete_all_data()
8
+
9
+ dputs(1){ 'Resetting SQLite' }
10
+ SQLite.dbs_close_all
11
+ FileUtils.cp( 'db.testGestion', 'data/compta.db')
12
+ SQLite.dbs_open_load_migrate
13
+
14
+ ConfigBases.init_load
15
+
16
+ Entities.Persons.create( :first_name => 'admin', :password => 'super123', :permissions => ['admin'], :groups => [] )
17
+ Entities.Persons.create( :first_name => 'josue', :password => 'super', :permissions => ['secretary'] )
18
+ Entities.Persons.create( :first_name => 'surf', :password => 'super', :permissions => ['internet'] )
19
+ end
20
+
21
+ def teardown
22
+ end
23
+
24
+ def test_clientuse
25
+ dputs(1){ Info.clientUse({:user => 'admin'}).to_s }
26
+ end
27
+ end
@@ -0,0 +1,246 @@
1
+ require 'test/unit'
2
+ require 'network'
3
+ include Network
4
+
5
+ class Web_req
6
+ attr_reader :peeraddr, :header
7
+
8
+ def initialize(ip)
9
+ @peeraddr = [0, 0, 0, ip]
10
+ end
11
+ end
12
+
13
+ class TC_Internet < Test::Unit::TestCase
14
+ def setup
15
+ Entities.delete_all_data
16
+ ConfigBase.store(functions:[:internet_captive])
17
+ @test = Persons.create(:login_name => 'test', :internet_credit => 50)
18
+ Sessions.create(@test).web_req = Web_req.new(10)
19
+ @test2 = Persons.create(:login_name => 'test2', :internet_credit => 50)
20
+ @free = Persons.create(:login_name => 'free', :internet_credit => 50,
21
+ :groups => ['freesurf'])
22
+ dputs(1) { "#{@test.inspect}" }
23
+ @device = Device::Simulation.load
24
+ @operator = @device.operator
25
+
26
+ ConfigBase.captive_dev = 'simul0'
27
+ ConfigBase.cost_base = 5
28
+ ConfigBase.cost_shared = 10
29
+ ConfigBase.send_config
30
+ Captive.cleanup_skip = true
31
+ Internet.setup
32
+ Captive.setup
33
+ end
34
+
35
+ def teardown
36
+ end
37
+
38
+ def libnet_isp_gprs
39
+ @operator.connection_type = Operator::CONNECTION_ONDEMAND
40
+ ConfigBase.allow_free = ['false']
41
+ end
42
+
43
+ def libnet_isp_vsat
44
+ @operator.connection_type = Operator::CONNECTION_ALWAYS
45
+ ConfigBase.allow_free = ['true']
46
+ end
47
+
48
+ def test_take_money
49
+ libnet_isp_gprs
50
+
51
+ @device.connection_status = Device::DISCONNECTED
52
+
53
+ assert_equal 50, @test.internet_credit
54
+
55
+ Internet.take_money
56
+ assert_equal 50, @test.internet_credit
57
+
58
+ @device.connection_status = Device::CONNECTED
59
+
60
+ Captive.user_connect :test, 10
61
+ Internet.take_money
62
+ assert_equal 35, @test.internet_credit
63
+
64
+ Captive.user_connect :test2, 11
65
+ Internet.take_money
66
+ assert_equal 25, @test.internet_credit
67
+ assert_equal 40, @test2.internet_credit
68
+
69
+ Captive.user_connect :free, 12
70
+ Internet.take_money
71
+ assert_equal 17, @test.internet_credit
72
+ assert_equal 32, @test2.internet_credit
73
+ assert_equal 42, @free.internet_credit
74
+
75
+ Captive.user_disconnect( :free, 12 )
76
+ Captive.user_disconnect( :test2, 11 )
77
+ Internet.take_money
78
+ assert_equal 2, @test.internet_credit
79
+ Internet.take_money
80
+ assert_equal [], Captive.users_connected
81
+ end
82
+
83
+
84
+ def test_take_money_perm
85
+ libnet_isp_vsat
86
+
87
+ assert_equal 50, @test.internet_credit
88
+
89
+ Internet.take_money
90
+ assert_equal 50, @test.internet_credit
91
+
92
+ @device.connection_status = Device::CONNECTED
93
+
94
+ Captive.user_connect :test, 10
95
+ Internet.take_money
96
+ assert_equal 35, @test.internet_credit
97
+
98
+ Captive.user_connect :test2, 11
99
+ Internet.take_money
100
+ assert_equal 25, @test.internet_credit
101
+ assert_equal 40, @test2.internet_credit
102
+
103
+ assert_equal 50, @free.internet_credit
104
+ Captive.user_connect :free, 12
105
+ Internet.take_money
106
+ assert_equal 17, @test.internet_credit
107
+ assert_equal 32, @test2.internet_credit
108
+ assert_equal 50, @free.internet_credit
109
+
110
+ Captive.user_disconnect :free, 12
111
+ Captive.user_disconnect :test2, 11
112
+ Internet.take_money
113
+ assert_equal 2, @test.internet_credit
114
+ Internet.take_money
115
+ assert_equal [], Captive.users_connected
116
+ end
117
+
118
+ def test_users_str
119
+ assert_equal "one, three, two",
120
+ SelfInternet.make_users_str(%w( one two three).join("\n"))
121
+
122
+ assert_equal "four, one, three, two",
123
+ SelfInternet.make_users_str(%w( one two three four ).join("\n"))
124
+
125
+ assert_equal "five, four, one, six,<br>three, two",
126
+ SelfInternet.make_users_str(%w( one two three four five six ).join("\n"))
127
+ end
128
+
129
+ def test_atimes
130
+ ag1 = AccessGroups.create(:name => "office", :members => %w( test free ),
131
+ :action => %w( allow_else_block ), :priority => 20, :limit_day_mo => 200,
132
+ :access_times => %w( lu-ve;08:00;10:00 lu-ve;10:30;13:00 lu-ve;16:00;18:00 ))
133
+ assert_equal false,
134
+ AccessGroup.time_in_atime(Time.parse("2012/1/1 10:00"), "lu-ve;8:00;12:00")
135
+ assert_equal true,
136
+ AccessGroup.time_in_atime(Time.parse("2012/1/2 10:00"), "lu-ve;8:00;12:00")
137
+ assert_equal true,
138
+ AccessGroup.time_in_atime(Time.parse("2012/1/2 10:00"), "lu,ma;8:00;12:00")
139
+ assert_equal false,
140
+ AccessGroup.time_in_atime(Time.parse("2012/1/2 10:00"), "me;8:00;12:00")
141
+ assert_equal true,
142
+ AccessGroup.time_in_atime(Time.parse("2012/1/2 10:00"), "lu-di;8:00;12:00")
143
+ assert_equal true,
144
+ AccessGroup.time_in_atime(Time.parse("2012/1/3 4:00"), "lu;22:00;6:00")
145
+ assert_equal false,
146
+ AccessGroup.time_in_atime(Time.parse("2012/1/3 6:00"), "lu;22:00;6:00")
147
+
148
+ assert_equal false,
149
+ ag1.time_in_atimes(Time.parse("2012/1/1 8:0"))
150
+ assert_equal true,
151
+ ag1.time_in_atimes(Time.parse("2012/1/2 8:0"))
152
+ end
153
+
154
+ def test_access_groups
155
+ ag1 = AccessGroups.create(:name => "office", :members => %w( test free ),
156
+ :action => %w( allow_else_block ), :priority => 20, :limit_day_mo => 200,
157
+ :access_times => %w( lu-ve;08:00;10:00 lu-ve;10:30;13:00 lu-ve;16:00;18:00 ))
158
+
159
+ assert_equal [true, 'office'], AccessGroups.allow_user("test",
160
+ Time.parse("1/2/2012 8:0"))
161
+ assert_equal [true, 'default'], AccessGroups.allow_user("test2",
162
+ Time.parse("1/2/2012 8:0"))
163
+
164
+ assert_equal [true, 'default'], AccessGroups.allow_user("test2",
165
+ Time.parse("1/2/2012 10:0"))
166
+ ag2 = AccessGroups.create(:name => "block", :members => %w( ),
167
+ :action => %w( block ), :priority => 30, :limit_day_mo => 200,
168
+ :access_times => %w( lu,ma,me,je,ve,sa,di;8:0;10:30 ))
169
+ assert_equal [false, 'Blocked by rule **block**'], AccessGroups.allow_user("test2",
170
+ Time.parse("1/2/2012 10:0"))
171
+ assert_equal [false, 'Blocked by rule **block**'], AccessGroups.allow_user("test",
172
+ Time.parse("1/2/2012 8:0"))
173
+ ag2.priority = 10
174
+ assert_equal [true, 'office'], AccessGroups.allow_user("test",
175
+ Time.parse("1/2/2012 8:0"))
176
+
177
+ assert_equal [false, 'Blocked by rule **block**'], AccessGroups.allow_user("test2",
178
+ Time.parse("1/2/2012 10:0"))
179
+ ag3 = AccessGroups.create(:name => "director", :members => %w( test2 ),
180
+ :action => %w( allow ), :priority => 40, :limit_day_mo => 200,
181
+ :access_times => %w( lu-di;8:0;10:30 ))
182
+ assert_equal [true, 'director'], AccessGroups.allow_user("test2",
183
+ Time.parse("1/2/2012 10:0"))
184
+ assert_equal [true, 'director'], AccessGroups.allow_user("test2",
185
+ Time.parse("1/3/2012 10:0"))
186
+
187
+ ag2.priority = 30
188
+ assert_equal [false, 'Blocked by rule **block**'], AccessGroups.allow_user("test",
189
+ Time.parse("1/2/2012 8:0"))
190
+ ag4 = AccessGroups.create(:name => "everybody", :members => %w( test ),
191
+ :action => %w( allow ), :priority => 60, :limit_day_mo => 200)
192
+ assert_equal [true, 'everybody'], AccessGroups.allow_user("test",
193
+ Time.parse("1/2/2012 8:0"))
194
+
195
+ end
196
+
197
+ def test_header
198
+ #assert_fail "Shall test for ip-address in header"
199
+ end
200
+
201
+ def test_active_course
202
+ user_1 = Persons.create( login_name: 'user1' )
203
+ user_2 = Persons.create( login_name: 'user1' )
204
+ course = Courses.create( name: 'internet', students: [user_1.login_name, user_2.login_name])
205
+
206
+ assert_equal false, Internet.active_course_for( user_1 )
207
+ assert_equal false, Internet.active_course_for( user_2 )
208
+
209
+ course.start = Date.yesterday.strftime('%d.%m.%Y')
210
+ course.end = Date.tomorrow.strftime('%d.%m.%Y')
211
+
212
+ assert_equal true, Internet.active_course_for( user_1 )
213
+ assert_equal true, Internet.active_course_for( user_2 )
214
+ end
215
+
216
+ def test_internet_person
217
+ ic_inf = InternetClasses.create(name: 'unlimited', type: ['unlimited'])
218
+ ic_lim = InternetClasses.create(name: 'daily', type: ['limit_daily_mo'])
219
+ ip = InternetPersons.create(person:@test, iclass: ic_inf)
220
+ t = Date.today
221
+ tr = Captive.traffic
222
+
223
+ assert ip.is_active?
224
+ ip.start = (t - 10).to_web
225
+ assert ip.is_active?
226
+ ip.duration = 1
227
+ assert !ip.is_active?
228
+ ip.duration = 10
229
+ assert !ip.is_active?
230
+ ip.duration = 11
231
+ assert ip.is_active?
232
+
233
+ tr.traffic_init(:test, [0,0])
234
+ assert_equal 0, tr.get_day(:test, 1).first.inject(:+)
235
+ assert ic_inf.in_limits?(:test)
236
+ assert !ic_lim.in_limits?(:test)
237
+ ic_lim.limit = 1
238
+ assert ic_lim.in_limits?(:test)
239
+
240
+ ip.iclass = ic_lim
241
+ assert ip.in_limits?
242
+ tr.update_host(:test, [500_000, 500_000])
243
+ assert !ip.in_limits?
244
+ end
245
+
246
+ end
data/Test/ge_login.rb ADDED
@@ -0,0 +1,55 @@
1
+ require 'test/unit'
2
+
3
+ class SimulWebReq
4
+ def self.header
5
+ {}
6
+ end
7
+
8
+ def self.peeraddr
9
+ [0,0,0,0]
10
+ end
11
+ end
12
+
13
+ class TC_Login < Test::Unit::TestCase
14
+ def setup
15
+ Entities.delete_all_data()
16
+
17
+ dputs(1){ 'Resetting SQLite'
18
+ }
19
+ SQLite.dbs_close_all
20
+ FileUtils.cp( 'db.testGestion', 'data/compta.db')
21
+ SQLite.dbs_open_load_migrate
22
+
23
+ ConfigBases.init_load
24
+
25
+ Entities.Persons.create( :first_name => 'admin', :password => 'super123', :permissions => ['admin'] )
26
+ Entities.Persons.create( :first_name => 'josue', :password => 'super', :permissions => ['secretary'] )
27
+ Entities.Persons.create( :first_name => 'surf', :password => 'super', :permissions => ['internet'] )
28
+ end
29
+
30
+ def teardown
31
+ end
32
+
33
+ def test_login
34
+ admin = Entities.Persons.match_by_login_name('admin')
35
+ assert_not_nil admin, "Couldn't get 'admin'"
36
+
37
+ reply = RPCQooxdooHandler.request( 1, 'View.Welcome', 'button', [['default', 'simple_connect',
38
+ {'username' => 'admin', 'password' => 'super123'}]], SimulWebReq )
39
+ assert_not_nil reply
40
+ assert_not_equal nil, reply['result'].index{|i| i[:cmd] == :session_id}, reply.inspect
41
+
42
+ reply = RPCQooxdooHandler.request( 1, 'View.Welcome', 'button', [['default', 'simple_connect',
43
+ {'username' => 'josue', 'password' => 'false'}]])
44
+ assert_not_nil reply
45
+ assert_equal [{:data=>:login_failed, :cmd=>:window_show},
46
+ {:data=>{:reason=> 'Password wrong'}, :cmd=>:update}], reply['result'], "#{reply.inspect}"
47
+
48
+ reply = RPCQooxdooHandler.request( 1, 'View.Welcome', 'button', [['default', 'simple_connect',
49
+ {'username' => 'foo', 'password' => 'false'}]])
50
+ assert_not_nil reply
51
+ assert_equal [{:data=>:login_failed, :cmd=>:window_show},
52
+ {:data=>{:reason=>"User doesn't exist"}, :cmd=>:update}], reply['result'], "#{reply.inspect}"
53
+ end
54
+
55
+ end