gestion 1.9.12

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.
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