orionis 0.252.0__py3-none-any.whl → 0.265.0__py3-none-any.whl

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 (397) hide show
  1. orionis/application.py +6 -0
  2. orionis/framework.py +1 -1
  3. orionis/luminate/{application.py → _application.py} +21 -19
  4. orionis/luminate/{container → _container}/container.py +4 -4
  5. orionis/luminate/{container → _container}/container_integrity.py +2 -2
  6. orionis/luminate/{container → _container}/resolve.py +2 -2
  7. orionis/luminate/{contracts → _contracts}/application.py +2 -2
  8. orionis/luminate/{contracts → _contracts}/console/task_manager.py +1 -1
  9. orionis/luminate/{contracts → _contracts}/facades/commands/scheduler_facade.py +1 -1
  10. orionis/luminate/{contracts → _contracts}/facades/facade.py +4 -3
  11. orionis/luminate/{contracts → _contracts}/foundation/providers/service_providers_bootstrapper.py +2 -2
  12. orionis/luminate/{contracts → _contracts}/providers/service_provider.py +1 -1
  13. orionis/luminate/{facades → _facades}/app_facade.py +2 -2
  14. orionis/luminate/{facades → _facades}/commands/commands_facade.py +3 -3
  15. orionis/luminate/{facades → _facades}/commands/scheduler_facade.py +3 -3
  16. orionis/luminate/{facades → _facades}/config/config_facade.py +3 -3
  17. orionis/luminate/{facades → _facades}/environment/environment_facade.py +3 -3
  18. orionis/luminate/{facades → _facades}/files/path_facade.py +4 -4
  19. orionis/luminate/{facades → _facades}/log/log_facade.py +2 -2
  20. orionis/luminate/{foundation → _foundation}/console/command_bootstrapper.py +2 -2
  21. orionis/luminate/{foundation → _foundation}/environment/environment_bootstrapper.py +3 -3
  22. orionis/luminate/{foundation → _foundation/foundation}/config/config_bootstrapper.py +3 -3
  23. orionis/luminate/{foundation → _foundation}/providers/service_providers_bootstrapper.py +4 -4
  24. orionis/luminate/{providers → _providers}/commands/reactor_commands_service_provider.py +7 -7
  25. orionis/luminate/{providers → _providers}/commands/scheduler_provider.py +3 -3
  26. orionis/luminate/{providers → _providers}/config/config_service_provider.py +3 -3
  27. orionis/luminate/{providers → _providers}/environment/environment__service_provider.py +4 -4
  28. orionis/luminate/_providers/files/paths_provider.py +21 -0
  29. orionis/luminate/{providers → _providers}/log/log_service_provider.py +5 -5
  30. orionis/luminate/{providers → _providers}/service_provider.py +2 -2
  31. orionis/luminate/{services_ → _services}/commands/reactor_commands_service.py +3 -3
  32. orionis/luminate/{services_ → _services}/commands/scheduler_service.py +1 -1
  33. orionis/luminate/{services_ → _services}/config/config_service.py +1 -1
  34. orionis/luminate/{services_ → _services}/log/log_service.py +1 -1
  35. orionis/luminate/app.py +19 -0
  36. orionis/luminate/console/base/command.py +1 -1
  37. orionis/luminate/console/command_filter.py +1 -1
  38. orionis/luminate/console/commands/help.py +1 -1
  39. orionis/luminate/console/commands/schedule_work.py +2 -2
  40. orionis/luminate/console/dumper/dump_die.py +1 -1
  41. orionis/luminate/console/kernel.py +1 -1
  42. orionis/luminate/console/output/console.py +3 -3
  43. orionis/luminate/console/output/executor.py +1 -1
  44. orionis/luminate/console/output/progress_bar.py +1 -1
  45. orionis/luminate/console/parser.py +1 -1
  46. orionis/luminate/{config → foundation/config}/app/entities/app.py +44 -43
  47. orionis/luminate/{config → foundation/config}/auth/entities/auth.py +9 -1
  48. orionis/luminate/foundation/config/cache/entities/cache.py +74 -0
  49. orionis/luminate/foundation/config/cache/entities/file.py +46 -0
  50. orionis/luminate/foundation/config/cache/entities/stores.py +46 -0
  51. orionis/luminate/{contracts/config → foundation/config/contracts}/config.py +8 -12
  52. orionis/luminate/foundation/config/cors/entities/cors.py +129 -0
  53. orionis/luminate/foundation/config/database/entities/connections.py +89 -0
  54. orionis/luminate/foundation/config/database/entities/database.py +62 -0
  55. orionis/luminate/foundation/config/database/entities/mysql.py +270 -0
  56. orionis/luminate/foundation/config/database/entities/oracle.py +227 -0
  57. orionis/luminate/foundation/config/database/entities/pgsql.py +189 -0
  58. orionis/luminate/foundation/config/database/entities/sqlite.py +178 -0
  59. orionis/luminate/foundation/config/database/enums/mysql_charsets.py +92 -0
  60. orionis/luminate/foundation/config/database/enums/mysql_collations.py +53 -0
  61. orionis/luminate/foundation/config/database/enums/mysql_engine.py +18 -0
  62. orionis/luminate/foundation/config/database/enums/oracle_encoding.py +44 -0
  63. orionis/luminate/foundation/config/database/enums/oracle_nencoding.py +31 -0
  64. orionis/luminate/foundation/config/database/enums/pgsql_charsets.py +90 -0
  65. orionis/luminate/foundation/config/database/enums/pgsql_collations.py +26 -0
  66. orionis/luminate/foundation/config/database/enums/pgsql_mode.py +24 -0
  67. orionis/luminate/foundation/config/database/enums/sqlite_foreign_key.py +12 -0
  68. orionis/luminate/foundation/config/database/enums/sqlite_journal.py +22 -0
  69. orionis/luminate/foundation/config/database/enums/sqlite_synchronous.py +16 -0
  70. orionis/luminate/foundation/config/filesystems/entitites/aws.py +134 -0
  71. orionis/luminate/foundation/config/filesystems/entitites/disks.py +68 -0
  72. orionis/luminate/foundation/config/filesystems/entitites/filesystems.py +53 -0
  73. orionis/luminate/foundation/config/filesystems/entitites/local.py +39 -0
  74. orionis/luminate/foundation/config/filesystems/entitites/public.py +52 -0
  75. orionis/luminate/foundation/config/logging/entities/channels.py +115 -0
  76. orionis/luminate/foundation/config/logging/entities/chunked.py +128 -0
  77. orionis/luminate/foundation/config/logging/entities/daily.py +113 -0
  78. orionis/luminate/foundation/config/logging/entities/hourly.py +100 -0
  79. orionis/luminate/foundation/config/logging/entities/logging.py +51 -0
  80. orionis/luminate/foundation/config/logging/entities/monthly.py +100 -0
  81. orionis/luminate/foundation/config/logging/entities/stack.py +74 -0
  82. orionis/luminate/foundation/config/logging/entities/weekly.py +102 -0
  83. orionis/luminate/foundation/config/logging/enums/levels.py +21 -0
  84. orionis/luminate/foundation/config/mail/entities/file.py +41 -0
  85. orionis/luminate/foundation/config/mail/entities/mail.py +56 -0
  86. orionis/luminate/foundation/config/mail/entities/mailers.py +54 -0
  87. orionis/luminate/foundation/config/mail/entities/smtp.py +104 -0
  88. orionis/luminate/foundation/config/queue/entities/brokers.py +55 -0
  89. orionis/luminate/foundation/config/queue/entities/database.py +107 -0
  90. orionis/luminate/foundation/config/queue/entities/queue.py +47 -0
  91. orionis/luminate/foundation/config/queue/enums/strategy.py +15 -0
  92. orionis/luminate/foundation/config/roots/paths.py +446 -0
  93. orionis/luminate/foundation/config/session/entities/session.py +147 -0
  94. orionis/luminate/foundation/config/session/enums/same_site_policy.py +14 -0
  95. orionis/luminate/foundation/config/session/helpers/secret_key.py +16 -0
  96. orionis/luminate/foundation/config/startup.py +203 -0
  97. orionis/luminate/foundation/config/testing/entities/__init__.py +0 -0
  98. orionis/luminate/{config → foundation/config/testing}/entities/testing.py +36 -20
  99. orionis/luminate/foundation/config/testing/enums/__init__.py +0 -0
  100. orionis/luminate/foundation/config/testing/enums/test_mode.py +12 -0
  101. orionis/luminate/patterns/__init__.py +0 -4
  102. orionis/luminate/patterns/singleton/__init__.py +0 -10
  103. orionis/luminate/services/asynchrony/__init__.py +0 -0
  104. orionis/luminate/services/asynchrony/async_io.py +31 -0
  105. orionis/luminate/services/environment/__init__.py +0 -10
  106. orionis/luminate/services/environment/contracts/__init__.py +0 -5
  107. orionis/luminate/services/environment/contracts/env.py +0 -11
  108. orionis/luminate/services/environment/dot_env.py +87 -163
  109. orionis/luminate/services/environment/env.py +0 -11
  110. orionis/luminate/services/introspection/__init__.py +0 -0
  111. orionis/luminate/services/introspection/abstracts/__init__.py +0 -0
  112. orionis/luminate/services/introspection/abstracts/entities/__init__.py +0 -0
  113. orionis/luminate/services/introspection/abstracts/entities/abstract_class_attributes.py +37 -0
  114. orionis/luminate/{support → services}/introspection/abstracts/reflect_abstract.py +1 -1
  115. orionis/luminate/services/introspection/dependencies/__init__.py +0 -0
  116. orionis/luminate/services/introspection/dependencies/contracts/__init__.py +0 -0
  117. orionis/luminate/{support → services}/introspection/dependencies/contracts/reflect_dependencies.py +2 -2
  118. orionis/luminate/services/introspection/dependencies/entities/__init__.py +0 -0
  119. orionis/luminate/services/introspection/dependencies/entities/class_dependencies.py +41 -0
  120. orionis/luminate/services/introspection/dependencies/entities/method_dependencies.py +42 -0
  121. orionis/luminate/services/introspection/dependencies/entities/resolved_dependencies.py +49 -0
  122. orionis/luminate/{support → services}/introspection/dependencies/reflect_dependencies.py +4 -4
  123. orionis/luminate/services/parsers/__init__.py +0 -0
  124. orionis/luminate/services/parsers/contracts/__init__.py +0 -0
  125. orionis/luminate/{support/parsers/exception_parser.py → services/parsers/exception.py} +1 -1
  126. orionis/luminate/services/parsers/serializer.py +15 -0
  127. orionis/luminate/services/paths/__init__.py +0 -9
  128. orionis/luminate/services/paths/resolver.py +1 -1
  129. orionis/luminate/services/standard/__init__.py +0 -0
  130. orionis/luminate/services/standard/contracts/__init__.py +0 -0
  131. orionis/luminate/{support → services}/standard/std.py +1 -1
  132. orionis/luminate/services/system/__init__.py +0 -0
  133. orionis/luminate/services/system/contracts/__init__.py +0 -0
  134. orionis/luminate/services/system/contracts/imports.py +31 -0
  135. orionis/luminate/services/system/contracts/workers.py +18 -0
  136. orionis/luminate/services/system/imports.py +124 -0
  137. orionis/luminate/services/system/runtime_imports.py +70 -0
  138. orionis/luminate/services/{workers/maximum_workers.py → system/workers.py} +2 -1
  139. orionis/luminate/services/wrapper/__init__.py +0 -0
  140. orionis/luminate/services/wrapper/dicts/__init__.py +0 -0
  141. orionis/luminate/services/wrapper/dicts/dot_dict.py +115 -0
  142. orionis/luminate/support/introspection/__init__.py +0 -5
  143. orionis/luminate/support/introspection/container_integrity.py +2 -2
  144. orionis/luminate/support/introspection/instances/__init__.py +0 -5
  145. orionis/luminate/support/introspection/reflection.py +1 -1
  146. orionis/luminate/test/__init__.py +0 -23
  147. orionis/luminate/test/cases/test_async.py +41 -9
  148. orionis/luminate/test/cases/test_case.py +27 -13
  149. orionis/luminate/test/cases/test_sync.py +28 -6
  150. orionis/luminate/test/output/contracts/{test_std_out.py → dumper.py} +2 -1
  151. orionis/luminate/test/output/{test_std_out.py → dumper.py} +7 -4
  152. orionis/luminate/test/suites/__init__.py +0 -0
  153. orionis/luminate/test/suites/contracts/__init__.py +0 -0
  154. orionis/luminate/test/suites/contracts/test_suite.py +23 -0
  155. orionis/luminate/test/suites/test_suite.py +101 -0
  156. orionis/luminate/test/{core → suites}/test_unit.py +16 -8
  157. orionis/unittesting.py +43 -0
  158. {orionis-0.252.0.dist-info → orionis-0.265.0.dist-info}/METADATA +19 -3
  159. orionis-0.265.0.dist-info/RECORD +440 -0
  160. {orionis-0.252.0.dist-info → orionis-0.265.0.dist-info}/WHEEL +1 -1
  161. orionis-0.265.0.dist-info/entry_points.txt +2 -0
  162. orionis-0.265.0.dist-info/zip-safe +1 -0
  163. tests/example/test_example.py +1 -1
  164. tests/foundation/__init__.py +0 -0
  165. tests/foundation/config/__init__.py +0 -0
  166. tests/foundation/config/app/__init__.py +0 -0
  167. tests/foundation/config/app/test_app.py +140 -0
  168. tests/foundation/config/auth/__init__.py +0 -0
  169. tests/{config → foundation/config/auth}/test_auth.py +6 -3
  170. tests/foundation/config/cache/__init__.py +0 -0
  171. tests/foundation/config/cache/test_cache.py +98 -0
  172. tests/foundation/config/cache/test_cache_file.py +78 -0
  173. tests/foundation/config/cache/test_cache_stores.py +88 -0
  174. tests/foundation/config/cors/__init__.py +0 -0
  175. tests/foundation/config/cors/test_cors.py +121 -0
  176. tests/foundation/config/database/__init__.py +0 -0
  177. tests/foundation/config/database/test_database.py +108 -0
  178. tests/foundation/config/database/test_database_connections.py +129 -0
  179. tests/foundation/config/database/test_database_mysql.py +231 -0
  180. tests/foundation/config/database/test_database_oracle.py +204 -0
  181. tests/foundation/config/database/test_database_pgsql.py +187 -0
  182. tests/foundation/config/database/test_database_sqlite.py +153 -0
  183. tests/foundation/config/exceptions/__init__.py +0 -0
  184. tests/foundation/config/exceptions/test_exceptions_integrity.py +83 -0
  185. tests/foundation/config/filesystems/__init__.py +0 -0
  186. tests/foundation/config/filesystems/test_filesystems.py +110 -0
  187. tests/foundation/config/filesystems/test_filesystems_aws.py +133 -0
  188. tests/foundation/config/filesystems/test_filesystems_disks.py +114 -0
  189. tests/foundation/config/filesystems/test_filesystems_local.py +95 -0
  190. tests/foundation/config/filesystems/test_filesystems_public.py +120 -0
  191. tests/foundation/config/logging/__init__.py +0 -0
  192. tests/foundation/config/logging/test_logging.py +48 -0
  193. tests/foundation/config/logging/test_logging_channels.py +157 -0
  194. tests/foundation/config/logging/test_logging_chunked.py +166 -0
  195. tests/foundation/config/logging/test_logging_daily.py +153 -0
  196. tests/foundation/config/logging/test_logging_hourly.py +131 -0
  197. tests/foundation/config/logging/test_logging_monthly.py +133 -0
  198. tests/foundation/config/logging/test_logging_stack.py +124 -0
  199. tests/foundation/config/logging/test_logging_weekly.py +133 -0
  200. tests/foundation/config/mail/__init__.py +0 -0
  201. tests/foundation/config/mail/test_mail.py +73 -0
  202. tests/foundation/config/mail/test_mail_file.py +61 -0
  203. tests/foundation/config/mail/test_mail_mailers.py +58 -0
  204. tests/foundation/config/mail/test_mail_smtp.py +102 -0
  205. tests/foundation/config/queue/__init__.py +0 -0
  206. tests/foundation/config/queue/test_queue.py +58 -0
  207. tests/foundation/config/queue/test_queue_brokers.py +67 -0
  208. tests/foundation/config/queue/test_queue_database.py +95 -0
  209. tests/foundation/config/root/__init__.py +0 -0
  210. tests/foundation/config/root/test_root_paths.py +134 -0
  211. tests/foundation/config/session/__init__.py +0 -0
  212. tests/foundation/config/session/test_session.py +138 -0
  213. tests/foundation/config/startup/__init__.py +0 -0
  214. tests/foundation/config/startup/test_config_startup.py +134 -0
  215. tests/foundation/config/testing/__init__.py +0 -0
  216. tests/foundation/config/testing/test_testing.py +167 -0
  217. tests/patterns/singleton/test_singleton.py +2 -2
  218. tests/services/asynchrony/__init__.py +0 -0
  219. tests/{support/async_io/test_async_coroutine.py → services/asynchrony/test_async_io.py} +6 -5
  220. tests/services/environment/test_env.py +155 -33
  221. tests/services/inspection/__init__.py +0 -0
  222. tests/services/inspection/dependencies/__init__.py +0 -0
  223. tests/services/inspection/dependencies/mocks/__init__.py +0 -0
  224. tests/services/inspection/dependencies/mocks/mock_user.py +30 -0
  225. tests/services/inspection/dependencies/mocks/mock_user_controller.py +27 -0
  226. tests/services/inspection/dependencies/mocks/mock_users_permissions.py +41 -0
  227. tests/services/inspection/dependencies/test_reflect_dependencies.py +94 -0
  228. tests/services/parsers/__init__.py +0 -0
  229. tests/services/parsers/mocks/__init__.py +0 -0
  230. tests/services/parsers/mocks/mock_custom_error.py +15 -0
  231. tests/{support → services}/parsers/test_exception_parser.py +8 -8
  232. tests/services/path/__init__.py +0 -0
  233. tests/services/path/test_resolver.py +73 -0
  234. tests/services/standard/__init__.py +0 -0
  235. tests/services/standard/test_std.py +127 -0
  236. tests/services/wrapper/__init__.py +0 -0
  237. tests/services/wrapper/test_wrapper_doc_dict.py +129 -0
  238. tests/testing/__init__.py +0 -0
  239. tests/testing/test_testing_result.py +92 -0
  240. tests/testing/test_testing_unit.py +138 -0
  241. orionis/luminate/config/app/__init__.py +0 -10
  242. orionis/luminate/config/auth/__init__.py +0 -7
  243. orionis/luminate/config/cache/__init__.py +0 -9
  244. orionis/luminate/config/cache/entities/cache.py +0 -58
  245. orionis/luminate/config/cache/entities/file.py +0 -29
  246. orionis/luminate/config/cache/entities/stores.py +0 -35
  247. orionis/luminate/config/entities/cors.py +0 -58
  248. orionis/luminate/config/entities/database.py +0 -204
  249. orionis/luminate/config/entities/filesystems.py +0 -98
  250. orionis/luminate/config/entities/logging.py +0 -157
  251. orionis/luminate/config/entities/mail.py +0 -76
  252. orionis/luminate/config/entities/queue.py +0 -62
  253. orionis/luminate/config/entities/session.py +0 -58
  254. orionis/luminate/providers/files/paths_provider.py +0 -20
  255. orionis/luminate/services/workers/__init__.py +0 -10
  256. orionis/luminate/support/adapters/dot_dict.py +0 -29
  257. orionis/luminate/support/asynchrony/async_io.py +0 -40
  258. orionis/luminate/support/asynchrony/contracts/async_coroutine.py +0 -26
  259. orionis/luminate/support/introspection/abstracts/entities/abstract_class_attributes.py +0 -11
  260. orionis/luminate/support/introspection/dependencies/__init__.py +0 -5
  261. orionis/luminate/support/introspection/dependencies/entities/class_dependencies.py +0 -11
  262. orionis/luminate/support/introspection/dependencies/entities/method_dependencies.py +0 -11
  263. orionis/luminate/support/introspection/dependencies/entities/resolved_dependencies.py +0 -12
  264. orionis/luminate/support/paths/contracts/resolver.py +0 -67
  265. orionis/luminate/support/paths/resolver.py +0 -83
  266. orionis/luminate/test/core/contracts/test_suite.py +0 -30
  267. orionis/luminate/test/core/test_suite.py +0 -93
  268. orionis-0.252.0.dist-info/RECORD +0 -318
  269. orionis-0.252.0.dist-info/entry_points.txt +0 -2
  270. tests/config/test_app.py +0 -122
  271. tests/config/test_cache.py +0 -20
  272. tests/support/adapters/fakes/fake_dict.py +0 -15
  273. tests/support/adapters/test_doct_dict.py +0 -21
  274. tests/support/inspection/fakes/fake_reflect_dependencies.py +0 -25
  275. tests/support/inspection/test_reflect_dependencies.py +0 -67
  276. tests/support/parsers/fakes/fake_custom_error.py +0 -27
  277. tests/support/path/test_resolver.py +0 -33
  278. tests/support/standard/test_std.py +0 -62
  279. /orionis/{console.py → clinstall.py} +0 -0
  280. /orionis/luminate/{config → _container}/__init__.py +0 -0
  281. /orionis/luminate/{container → _container}/exception.py +0 -0
  282. /orionis/luminate/{container → _container}/lifetimes.py +0 -0
  283. /orionis/luminate/{config/app/entities → _contracts}/__init__.py +0 -0
  284. /orionis/luminate/{config/app/enums → _contracts/config}/__init__.py +0 -0
  285. /orionis/luminate/{config/contracts → _contracts/config}/config.py +0 -0
  286. /orionis/luminate/{config/auth/entities → _contracts/console}/__init__.py +0 -0
  287. /orionis/luminate/{config/cache/entities → _contracts/console/base}/__init__.py +0 -0
  288. /orionis/luminate/{contracts → _contracts}/console/base/command.py +0 -0
  289. /orionis/luminate/{contracts → _contracts}/console/command_filter.py +0 -0
  290. /orionis/luminate/{contracts → _contracts}/console/kernel.py +0 -0
  291. /orionis/luminate/{config/cache/enums → _contracts/console/output}/__init__.py +0 -0
  292. /orionis/luminate/{contracts → _contracts}/console/output/console.py +0 -0
  293. /orionis/luminate/{contracts → _contracts}/console/output/executor.py +0 -0
  294. /orionis/luminate/{contracts → _contracts}/console/output/progress_bar.py +0 -0
  295. /orionis/luminate/{contracts → _contracts}/console/parser.py +0 -0
  296. /orionis/luminate/{contracts → _contracts}/container/container.py +0 -0
  297. /orionis/luminate/{contracts → _contracts}/container/container_integrity.py +0 -0
  298. /orionis/luminate/{config/contracts → _contracts/facades}/__init__.py +0 -0
  299. /orionis/luminate/{config/exceptions → _contracts/facades/commands}/__init__.py +0 -0
  300. /orionis/luminate/{contracts → _contracts}/facades/commands/commands_facade.py +0 -0
  301. /orionis/luminate/{container → _contracts/facades/config}/__init__.py +0 -0
  302. /orionis/luminate/{contracts → _contracts}/facades/config/config_facade.py +0 -0
  303. /orionis/luminate/{contracts → _contracts/facades/environment}/__init__.py +0 -0
  304. /orionis/luminate/{contracts → _contracts}/facades/environment/environment_facade.py +0 -0
  305. /orionis/luminate/{contracts/config → _contracts/facades/files}/__init__.py +0 -0
  306. /orionis/luminate/{contracts → _contracts}/facades/files/path_facade.py +0 -0
  307. /orionis/luminate/{contracts/console → _contracts/facades/log}/__init__.py +0 -0
  308. /orionis/luminate/{contracts → _contracts}/facades/log/log_facade.py +0 -0
  309. /orionis/luminate/{contracts/console/base → _contracts/facades/tests}/__init__.py +0 -0
  310. /orionis/luminate/{contracts → _contracts}/facades/tests/tests_facade.py +0 -0
  311. /orionis/luminate/{contracts/console/output → _contracts/foundation}/__init__.py +0 -0
  312. /orionis/luminate/{contracts → _contracts}/foundation/bootstraper.py +0 -0
  313. /orionis/luminate/{contracts/facades → _contracts/foundation/config}/__init__.py +0 -0
  314. /orionis/luminate/{contracts → _contracts}/foundation/config/config_bootstrapper.py +0 -0
  315. /orionis/luminate/{contracts/facades/commands → _contracts/foundation/console}/__init__.py +0 -0
  316. /orionis/luminate/{contracts → _contracts}/foundation/console/command_bootstrapper.py +0 -0
  317. /orionis/luminate/{contracts/facades/config → _contracts/foundation/environment}/__init__.py +0 -0
  318. /orionis/luminate/{contracts → _contracts}/foundation/environment/environment_bootstrapper.py +0 -0
  319. /orionis/luminate/{contracts/facades/environment → _contracts/foundation/providers}/__init__.py +0 -0
  320. /orionis/luminate/{contracts/facades/files → _contracts/providers}/__init__.py +0 -0
  321. /orionis/luminate/{contracts/facades/log → _contracts/services}/__init__.py +0 -0
  322. /orionis/luminate/{contracts/facades/tests → _contracts/services/commands}/__init__.py +0 -0
  323. /orionis/luminate/{contracts → _contracts}/services/commands/reactor_commands_service.py +0 -0
  324. /orionis/luminate/{contracts → _contracts}/services/commands/schedule_service.py +0 -0
  325. /orionis/luminate/{contracts/foundation → _contracts/services/config}/__init__.py +0 -0
  326. /orionis/luminate/{contracts → _contracts}/services/config/config_service.py +0 -0
  327. /orionis/luminate/{contracts/foundation/config → _contracts/services/environment}/__init__.py +0 -0
  328. /orionis/luminate/{contracts → _contracts}/services/environment/environment_service.py +0 -0
  329. /orionis/luminate/{contracts/foundation/console → _contracts/services/files}/__init__.py +0 -0
  330. /orionis/luminate/{contracts → _contracts}/services/files/path_resolver_service.py +0 -0
  331. /orionis/luminate/{contracts/foundation/environment → _contracts/services/log}/__init__.py +0 -0
  332. /orionis/luminate/{contracts → _contracts}/services/log/log_service.py +0 -0
  333. /orionis/luminate/{contracts → _contracts}/support/exception_parse.py +0 -0
  334. /orionis/luminate/{contracts → _contracts}/support/reflection.py +0 -0
  335. /orionis/luminate/{contracts/foundation/providers → _facades}/__init__.py +0 -0
  336. /orionis/luminate/{contracts/providers → _facades/commands}/__init__.py +0 -0
  337. /orionis/luminate/{contracts/services → _facades/config}/__init__.py +0 -0
  338. /orionis/luminate/{contracts/services/commands → _facades/environment}/__init__.py +0 -0
  339. /orionis/luminate/{contracts/services/config → _facades/files}/__init__.py +0 -0
  340. /orionis/luminate/{contracts/services/environment → _facades/log}/__init__.py +0 -0
  341. /orionis/luminate/{contracts/services/files → _foundation}/__init__.py +0 -0
  342. /orionis/luminate/{contracts/services/log → _foundation/console}/__init__.py +0 -0
  343. /orionis/luminate/{facades → _foundation/environment}/__init__.py +0 -0
  344. /orionis/luminate/{facades/commands → _foundation/exceptions}/__init__.py +0 -0
  345. /orionis/luminate/{foundation → _foundation}/exceptions/exception_bootstrapper.py +0 -0
  346. /orionis/luminate/{foundation → _foundation}/exceptions/exception_providers.py +0 -0
  347. /orionis/luminate/{facades → _foundation/foundation}/config/__init__.py +0 -0
  348. /orionis/luminate/{facades/environment → _foundation/providers}/__init__.py +0 -0
  349. /orionis/luminate/{facades/files → _providers}/__init__.py +0 -0
  350. /orionis/luminate/{facades/log → _providers/commands}/__init__.py +0 -0
  351. /orionis/luminate/{foundation/console → _providers/config}/__init__.py +0 -0
  352. /orionis/luminate/{foundation → _providers}/environment/__init__.py +0 -0
  353. /orionis/luminate/{foundation/exceptions → _providers/files}/__init__.py +0 -0
  354. /orionis/luminate/{foundation/providers → _providers/log}/__init__.py +0 -0
  355. /orionis/luminate/{providers → _services}/__init__.py +0 -0
  356. /orionis/luminate/{providers → _services}/commands/__init__.py +0 -0
  357. /orionis/luminate/{providers → _services}/config/__init__.py +0 -0
  358. /orionis/luminate/{providers/environment → _services/log}/__init__.py +0 -0
  359. /orionis/luminate/{providers/files → foundation/config/app}/__init__.py +0 -0
  360. /orionis/luminate/{providers/log → foundation/config/app/entities}/__init__.py +0 -0
  361. /orionis/luminate/{services_ → foundation/config/app/enums}/__init__.py +0 -0
  362. /orionis/luminate/{config → foundation/config}/app/enums/ciphers.py +0 -0
  363. /orionis/luminate/{config → foundation/config}/app/enums/environments.py +0 -0
  364. /orionis/luminate/{services_/commands → foundation/config/auth}/__init__.py +0 -0
  365. /orionis/luminate/{services_/config → foundation/config/auth/entities}/__init__.py +0 -0
  366. /orionis/luminate/{services_/log → foundation/config/cache}/__init__.py +0 -0
  367. /orionis/luminate/{support/adapters → foundation/config/cache/entities}/__init__.py +0 -0
  368. /orionis/luminate/{support/asynchrony → foundation/config/cache/enums}/__init__.py +0 -0
  369. /orionis/luminate/{config → foundation/config}/cache/enums/drivers.py +0 -0
  370. /orionis/luminate/{support/asynchrony → foundation/config}/contracts/__init__.py +0 -0
  371. /orionis/luminate/{support/introspection/abstracts → foundation/config/cors}/__init__.py +0 -0
  372. /orionis/luminate/{support/introspection/abstracts → foundation/config/cors}/entities/__init__.py +0 -0
  373. /orionis/luminate/{support/introspection/dependencies/contracts → foundation/config/database}/__init__.py +0 -0
  374. /orionis/luminate/{support/introspection/dependencies → foundation/config/database}/entities/__init__.py +0 -0
  375. /orionis/luminate/{support/parsers → foundation/config/database/enums}/__init__.py +0 -0
  376. /orionis/luminate/{support/parsers/contracts → foundation/config/exceptions}/__init__.py +0 -0
  377. /orionis/luminate/{config/exceptions/integrity_exception.py → foundation/config/exceptions/integrity.py} +0 -0
  378. /orionis/luminate/{support/paths → foundation/config/filesystems}/__init__.py +0 -0
  379. /orionis/luminate/{support/paths/contracts → foundation/config/filesystems/entitites}/__init__.py +0 -0
  380. /orionis/luminate/{support/standard → foundation/config/logging}/__init__.py +0 -0
  381. /orionis/luminate/{support/standard/contracts → foundation/config/logging/entities}/__init__.py +0 -0
  382. /orionis/luminate/{test/core → foundation/config/logging/enums}/__init__.py +0 -0
  383. /orionis/luminate/{test/core/contracts → foundation/config/mail}/__init__.py +0 -0
  384. {tests/config → orionis/luminate/foundation/config/mail/entities}/__init__.py +0 -0
  385. {tests/support/adapters → orionis/luminate/foundation/config/queue}/__init__.py +0 -0
  386. {tests/support/adapters/fakes → orionis/luminate/foundation/config/queue/entities}/__init__.py +0 -0
  387. {tests/support/async_io → orionis/luminate/foundation/config/roots}/__init__.py +0 -0
  388. {tests/support/parsers → orionis/luminate/foundation/config/session}/__init__.py +0 -0
  389. {tests/support/parsers/fakes → orionis/luminate/foundation/config/session/entities}/__init__.py +0 -0
  390. {tests/support/path → orionis/luminate/foundation/config/session/enums}/__init__.py +0 -0
  391. {tests/support/standard → orionis/luminate/foundation/config/testing}/__init__.py +0 -0
  392. /orionis/luminate/{support → services}/parsers/contracts/exception_parser.py +0 -0
  393. /orionis/luminate/{support → services}/standard/contracts/std.py +0 -0
  394. /orionis/luminate/test/exceptions/{test_exception.py → test_failure_exception.py} +0 -0
  395. /orionis/luminate/test/{core → suites}/contracts/test_unit.py +0 -0
  396. {orionis-0.252.0.dist-info → orionis-0.265.0.dist-info/licenses}/LICENCE +0 -0
  397. {orionis-0.252.0.dist-info → orionis-0.265.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,95 @@
1
+ from orionis.luminate.foundation.config.queue.entities.database import Database
2
+ from orionis.luminate.foundation.config.queue.enums.strategy import Strategy
3
+ from orionis.luminate.foundation.config.exceptions.integrity import OrionisIntegrityException
4
+ from orionis.unittesting import TestCase
5
+
6
+ class TestDatabaseQueue(TestCase):
7
+
8
+ async def testDefaultInitialization(self):
9
+ """
10
+ Test that Database instance is initialized with correct default values.
11
+ Verifies that default table name, queue name, retry_after, and strategy are set properly.
12
+ """
13
+ db_queue = Database()
14
+ self.assertEqual(db_queue.table, "jobs")
15
+ self.assertEqual(db_queue.queue, "default")
16
+ self.assertEqual(db_queue.retry_after, 90)
17
+ self.assertEqual(db_queue.strategy, Strategy.FIFO.value)
18
+
19
+ async def testTableNameValidation(self):
20
+ """
21
+ Test validation for table name attribute.
22
+ Verifies that invalid table names raise OrionisIntegrityException.
23
+ """
24
+ with self.assertRaises(OrionisIntegrityException):
25
+ Database(table="1jobs") # Starts with number
26
+ with self.assertRaises(OrionisIntegrityException):
27
+ Database(table="Jobs") # Uppercase letter
28
+ with self.assertRaises(OrionisIntegrityException):
29
+ Database(table="jobs-table") # Invalid character
30
+ with self.assertRaises(OrionisIntegrityException):
31
+ Database(table=123) # Non-string value
32
+
33
+ async def testQueueNameValidation(self):
34
+ """
35
+ Test validation for queue name attribute.
36
+ Verifies that non-ASCII queue names raise OrionisIntegrityException.
37
+ """
38
+ with self.assertRaises(OrionisIntegrityException):
39
+ Database(queue="café") # Non-ASCII character
40
+ with self.assertRaises(OrionisIntegrityException):
41
+ Database(queue=123) # Non-string value
42
+
43
+ async def testRetryAfterValidation(self):
44
+ """
45
+ Test validation for retry_after attribute.
46
+ Verifies that non-positive integers raise OrionisIntegrityException.
47
+ """
48
+ with self.assertRaises(OrionisIntegrityException):
49
+ Database(retry_after=0)
50
+ with self.assertRaises(OrionisIntegrityException):
51
+ Database(retry_after=-1)
52
+ with self.assertRaises(OrionisIntegrityException):
53
+ Database(retry_after="90") # String instead of int
54
+
55
+ async def testStrategyValidation(self):
56
+ """
57
+ Test validation and normalization for strategy attribute.
58
+ Verifies both string and Strategy enum inputs are properly handled.
59
+ """
60
+ # Test string inputs (case-insensitive)
61
+ db1 = Database(strategy="fifo")
62
+ self.assertEqual(db1.strategy, Strategy.FIFO.value)
63
+ db2 = Database(strategy="LIFO")
64
+ self.assertEqual(db2.strategy, Strategy.LIFO.value)
65
+
66
+ # Test enum inputs
67
+ db3 = Database(strategy=Strategy.PRIORITY)
68
+ self.assertEqual(db3.strategy, Strategy.PRIORITY.value)
69
+
70
+ # Test invalid inputs
71
+ with self.assertRaises(OrionisIntegrityException):
72
+ Database(strategy="invalid_strategy")
73
+ with self.assertRaises(OrionisIntegrityException):
74
+ Database(strategy=123)
75
+
76
+ async def testToDictMethod(self):
77
+ """
78
+ Test the toDict method returns proper dictionary representation.
79
+ Verifies all fields are included with correct values.
80
+ """
81
+ db_queue = Database()
82
+ result = db_queue.toDict()
83
+ self.assertIsInstance(result, dict)
84
+ self.assertEqual(result["table"], "jobs")
85
+ self.assertEqual(result["queue"], "default")
86
+ self.assertEqual(result["retry_after"], 90)
87
+ self.assertEqual(result["strategy"], Strategy.FIFO.value)
88
+
89
+ async def testKwOnlyInitialization(self):
90
+ """
91
+ Test that Database requires keyword arguments for initialization.
92
+ Verifies the class enforces kw_only=True in its dataclass decorator.
93
+ """
94
+ with self.assertRaises(TypeError):
95
+ Database("jobs", "default", 90, Strategy.FIFO)
File without changes
@@ -0,0 +1,134 @@
1
+ from pathlib import Path
2
+ from orionis.luminate.foundation.config.exceptions.integrity import OrionisIntegrityException
3
+ from orionis.luminate.foundation.config.roots.paths import Paths
4
+ from orionis.unittesting import TestCase
5
+
6
+ class TestPaths(TestCase):
7
+ """
8
+ Test suite for the Paths dataclass which defines the project directory structure.
9
+ This test class verifies the integrity of path definitions, default values,
10
+ and the behavior of accessor methods.
11
+ """
12
+
13
+ def testDefaultPathsInstantiation(self):
14
+ """
15
+ Test that a Paths instance can be created with default values.
16
+ Verifies that all default paths are correctly initialized and
17
+ the instance is properly constructed.
18
+ """
19
+ paths = Paths()
20
+ self.assertIsInstance(paths, Paths)
21
+
22
+ def testRequiredPathsAreSet(self):
23
+ """
24
+ Test that all required paths have non-empty default values.
25
+ Checks that paths marked as required in metadata are properly
26
+ initialized with valid string values.
27
+ """
28
+ paths = Paths()
29
+ required_fields = [
30
+ 'console_scheduler', 'console_commands', 'http_controllers',
31
+ 'http_middleware', 'models', 'providers', 'exceptions',
32
+ 'views', 'routes_web', 'config', 'migrations',
33
+ 'storage_logs', 'storage_framework'
34
+ ]
35
+ for field in required_fields:
36
+ value = getattr(paths, field)
37
+ self.assertTrue(isinstance(value, str) and len(value) > 0)
38
+
39
+ def testOptionalPathsCanBeEmpty(self):
40
+ """
41
+ Test that optional paths can be empty strings.
42
+ Verifies that paths not marked as required can be empty strings
43
+ without raising exceptions.
44
+ """
45
+ with self.assertRaises(OrionisIntegrityException):
46
+ Paths(
47
+ http_requests='',
48
+ events='',
49
+ listeners='',
50
+ notifications='',
51
+ jobs='',
52
+ policies='',
53
+ services='',
54
+ lang='',
55
+ assets='',
56
+ routes_api='',
57
+ routes_console='',
58
+ routes_channels='',
59
+ seeders='',
60
+ factories='',
61
+ storage_sessions='',
62
+ storage_cache='',
63
+ storage_views=''
64
+ )
65
+
66
+ def testPathValidationRejectsNonStringValues(self):
67
+ """
68
+ Test that non-string path values raise OrionisIntegrityException.
69
+ Verifies that the __post_init__ validation rejects non-string values
70
+ for all path fields.
71
+ """
72
+ with self.assertRaises(OrionisIntegrityException):
73
+ Paths(console_scheduler=123)
74
+
75
+ def testPathValidationRejectsEmptyRequiredPaths(self):
76
+ """
77
+ Test that empty required paths raise OrionisIntegrityException.
78
+ Verifies that required paths cannot be empty strings.
79
+ """
80
+ with self.assertRaises(OrionisIntegrityException):
81
+ Paths(console_scheduler='')
82
+
83
+ def testToDictReturnsCompleteDictionary(self):
84
+ """
85
+ Test that toDict() returns a complete dictionary of all paths.
86
+ Verifies that the returned dictionary contains all path fields
87
+ with their current values.
88
+ """
89
+ paths = Paths()
90
+ path_dict = paths.toDict()
91
+ self.assertIsInstance(path_dict, dict)
92
+ self.assertEqual(len(path_dict), len(paths.__dataclass_fields__))
93
+ for field in paths.__dataclass_fields__:
94
+ self.assertIn(field, path_dict)
95
+
96
+ def testPathAccessorMethodsReturnPathObjects(self):
97
+ """
98
+ Test that all path accessor methods return Path objects.
99
+ Verifies that each get* method returns a proper pathlib.Path instance.
100
+ """
101
+ paths = Paths()
102
+ self.assertIsInstance(paths.getConsoleScheduler(), Path)
103
+ self.assertIsInstance(paths.getHttpControllers(), Path)
104
+ self.assertIsInstance(paths.getModels(), Path)
105
+ self.assertIsInstance(paths.getViews(), Path)
106
+ self.assertIsInstance(paths.getRoutesWeb(), Path)
107
+ self.assertIsInstance(paths.getConfig(), Path)
108
+ self.assertIsInstance(paths.getMigrations(), Path)
109
+ self.assertIsInstance(paths.getStorageLogs(), Path)
110
+
111
+ def testFrozenDataclassBehavior(self):
112
+ """
113
+ Test that the dataclass is truly frozen (immutable).
114
+ Verifies that attempts to modify attributes after creation
115
+ raise exceptions.
116
+ """
117
+ paths = Paths()
118
+ with self.assertRaises(Exception):
119
+ paths.console_scheduler = 'new/path' # type: ignore
120
+
121
+ def testPathMetadataIsAccessible(self):
122
+ """
123
+ Test that path metadata is properly defined and accessible.
124
+ Verifies that each path field has the expected metadata structure
125
+ with description, type, and required fields.
126
+ """
127
+ paths = Paths()
128
+ for field in paths.__dataclass_fields__.values():
129
+ metadata = field.metadata
130
+ self.assertIn('description', metadata)
131
+ self.assertIn('type', metadata)
132
+ self.assertIn('required', metadata)
133
+ self.assertIn(metadata['type'], ['file', 'directory'])
134
+ self.assertIsInstance(metadata['required'], bool)
File without changes
@@ -0,0 +1,138 @@
1
+ from orionis.luminate.foundation.config.session.entities.session import Session
2
+ from orionis.luminate.foundation.config.session.enums.same_site_policy import SameSitePolicy
3
+ from orionis.luminate.foundation.config.exceptions.integrity import OrionisIntegrityException
4
+ from orionis.unittesting import TestCase
5
+
6
+ class TestSession(TestCase):
7
+
8
+ async def testDefaultInitialization(self):
9
+ """
10
+ Test that Session instance is initialized with correct default values.
11
+ Verifies default values for all attributes including secret_key generation.
12
+ """
13
+ session = Session()
14
+ self.assertIsInstance(session.secret_key, str)
15
+ self.assertEqual(session.session_cookie, "orionis_session")
16
+ self.assertEqual(session.max_age, 1800)
17
+ self.assertEqual(session.same_site, SameSitePolicy.LAX.value)
18
+ self.assertEqual(session.path, "/")
19
+ self.assertFalse(session.https_only)
20
+ self.assertIsNone(session.domain)
21
+
22
+ async def testSecretKeyValidation(self):
23
+ """
24
+ Test validation for secret_key attribute.
25
+ Verifies that invalid secret keys raise OrionisIntegrityException.
26
+ """
27
+ with self.assertRaises(OrionisIntegrityException):
28
+ Session(secret_key="") # Empty string
29
+ with self.assertRaises(OrionisIntegrityException):
30
+ Session(secret_key=123) # Non-string value
31
+
32
+ async def testSessionCookieValidation(self):
33
+ """
34
+ Test validation for session_cookie attribute.
35
+ Verifies invalid cookie names raise OrionisIntegrityException.
36
+ """
37
+ with self.assertRaises(OrionisIntegrityException):
38
+ Session(session_cookie="") # Empty string
39
+ with self.assertRaises(OrionisIntegrityException):
40
+ Session(session_cookie="my session") # Contains space
41
+ with self.assertRaises(OrionisIntegrityException):
42
+ Session(session_cookie="session;") # Contains semicolon
43
+
44
+ async def testMaxAgeValidation(self):
45
+ """
46
+ Test validation for max_age attribute.
47
+ Verifies invalid max_age values raise OrionisIntegrityException.
48
+ """
49
+ with self.assertRaises(OrionisIntegrityException):
50
+ Session(max_age="3600") # String instead of int
51
+ with self.assertRaises(OrionisIntegrityException):
52
+ Session(max_age=-1) # Negative value
53
+ # Test None is acceptable
54
+ session = Session(max_age=None)
55
+ self.assertIsNone(session.max_age)
56
+
57
+ async def testSameSiteValidation(self):
58
+ """
59
+ Test validation and normalization for same_site attribute.
60
+ Verifies both string and enum inputs are properly handled.
61
+ """
62
+ # Test string inputs (case-insensitive)
63
+ session1 = Session(same_site="strict")
64
+ self.assertEqual(session1.same_site, SameSitePolicy.STRICT.value)
65
+ session2 = Session(same_site="NONE")
66
+ self.assertEqual(session2.same_site, SameSitePolicy.NONE.value)
67
+
68
+ # Test enum inputs
69
+ session3 = Session(same_site=SameSitePolicy.LAX)
70
+ self.assertEqual(session3.same_site, SameSitePolicy.LAX.value)
71
+
72
+ # Test invalid inputs
73
+ with self.assertRaises(OrionisIntegrityException):
74
+ Session(same_site="invalid")
75
+ with self.assertRaises(OrionisIntegrityException):
76
+ Session(same_site=123)
77
+
78
+ async def testPathValidation(self):
79
+ """
80
+ Test validation for path attribute.
81
+ Verifies invalid paths raise OrionisIntegrityException.
82
+ """
83
+ with self.assertRaises(OrionisIntegrityException):
84
+ Session(path="") # Empty string
85
+ with self.assertRaises(OrionisIntegrityException):
86
+ Session(path="api") # Doesn't start with /
87
+ with self.assertRaises(OrionisIntegrityException):
88
+ Session(path=123) # Non-string value
89
+
90
+ async def testHttpsOnlyValidation(self):
91
+ """
92
+ Test validation for https_only attribute.
93
+ Verifies non-boolean values raise OrionisIntegrityException.
94
+ """
95
+ with self.assertRaises(OrionisIntegrityException):
96
+ Session(https_only="true") # String instead of bool
97
+ with self.assertRaises(OrionisIntegrityException):
98
+ Session(https_only=1) # Integer instead of bool
99
+
100
+ async def testDomainValidation(self):
101
+ """
102
+ Test validation for domain attribute.
103
+ Verifies invalid domains raise OrionisIntegrityException.
104
+ """
105
+ with self.assertRaises(OrionisIntegrityException):
106
+ Session(domain=".example.com") # Starts with dot
107
+ with self.assertRaises(OrionisIntegrityException):
108
+ Session(domain="example.com.") # Ends with dot
109
+ with self.assertRaises(OrionisIntegrityException):
110
+ Session(domain="example..com") # Contains consecutive dots
111
+
112
+ # Test None is acceptable
113
+ session = Session(domain=None)
114
+ self.assertIsNone(session.domain)
115
+
116
+ async def testToDictMethod(self):
117
+ """
118
+ Test the toDict method returns proper dictionary representation.
119
+ Verifies all fields are included with correct values.
120
+ """
121
+ session = Session()
122
+ result = session.toDict()
123
+ self.assertIsInstance(result, dict)
124
+ self.assertIn("secret_key", result)
125
+ self.assertEqual(result["session_cookie"], "orionis_session")
126
+ self.assertEqual(result["max_age"], 1800)
127
+ self.assertEqual(result["same_site"], SameSitePolicy.LAX.value)
128
+ self.assertEqual(result["path"], "/")
129
+ self.assertFalse(result["https_only"])
130
+ self.assertIsNone(result["domain"])
131
+
132
+ async def testKwOnlyInitialization(self):
133
+ """
134
+ Test that Session requires keyword arguments for initialization.
135
+ Verifies the class enforces kw_only=True in its dataclass decorator.
136
+ """
137
+ with self.assertRaises(TypeError):
138
+ Session("key", "session")
File without changes
@@ -0,0 +1,134 @@
1
+ from dataclasses import is_dataclass
2
+ from orionis.luminate.foundation.config.exceptions.integrity import OrionisIntegrityException
3
+ from orionis.luminate.foundation.config.startup import Configuration
4
+ from orionis.unittesting import TestCase, UnittestMock
5
+
6
+ class TestConfiguration(TestCase):
7
+ """
8
+ Test suite for the Configuration dataclass which encapsulates all major
9
+ configuration sections for the application.
10
+
11
+ This test class verifies the proper initialization, type validation,
12
+ and dictionary conversion of the Configuration class.
13
+ """
14
+
15
+ def testConfigurationIsDataclass(self):
16
+ """
17
+ Test that Configuration is properly defined as a dataclass.
18
+ Verifies that the @dataclass decorator was applied correctly.
19
+ """
20
+ self.assertTrue(is_dataclass(Configuration))
21
+
22
+ def testDefaultInitialization(self):
23
+ """
24
+ Test that Configuration can be initialized with default values.
25
+ Verifies that all default factories work correctly and the
26
+ instance is properly constructed.
27
+ """
28
+ config = Configuration()
29
+ self.assertIsInstance(config, Configuration)
30
+
31
+ def testAllSectionsHaveDefaultFactories(self):
32
+ """
33
+ Test that all configuration sections have default factories.
34
+ Verifies that each field in the Configuration class has a
35
+ default_factory specified.
36
+ """
37
+ config = Configuration()
38
+ for field in config.__dataclass_fields__.values():
39
+ self.assertTrue(hasattr(field, 'default_factory'),
40
+ f"Field {field.name} is missing default_factory")
41
+
42
+ def testTypeValidationInPostInit(self):
43
+ """
44
+ Test that __post_init__ validates types correctly.
45
+ Verifies that the type checking for each configuration section
46
+ works as expected.
47
+ """
48
+ # Test with all correct types (should not raise)
49
+ try:
50
+ Configuration()
51
+ except OrionisIntegrityException:
52
+ self.fail("__post_init__ raised exception with valid types")
53
+
54
+ # Test each section with wrong type
55
+ sections = [
56
+ ('paths', UnittestMock()),
57
+ ('app', UnittestMock()),
58
+ ('auth', UnittestMock()),
59
+ ('cache', UnittestMock()),
60
+ ('cors', UnittestMock()),
61
+ ('database', UnittestMock()),
62
+ ('filesystems', UnittestMock()),
63
+ ('logging', UnittestMock()),
64
+ ('mail', UnittestMock()),
65
+ ('queue', UnittestMock()),
66
+ ('session', UnittestMock()),
67
+ ('testing', UnittestMock())
68
+ ]
69
+
70
+ for section_name, wrong_value in sections:
71
+ with self.subTest(section=section_name):
72
+ kwargs = {section_name: wrong_value}
73
+ with self.assertRaises(OrionisIntegrityException):
74
+ Configuration(**kwargs)
75
+
76
+ def testToDictReturnsCompleteDictionary(self):
77
+ """
78
+ Test that toDict() returns a complete dictionary representation.
79
+ Verifies that the returned dictionary contains all configuration
80
+ sections with their current values.
81
+ """
82
+ config = Configuration()
83
+ config_dict = config.toDict()
84
+ self.assertIsInstance(config_dict, dict)
85
+ self.assertEqual(len(config_dict), len(config.__dataclass_fields__))
86
+ for field in config.__dataclass_fields__:
87
+ self.assertIn(field, config_dict)
88
+
89
+ def testToDictReturnsNestedStructures(self):
90
+ """
91
+ Test that toDict() properly converts nested dataclasses.
92
+ Verifies that the dictionary conversion works recursively for
93
+ all nested configuration sections.
94
+ """
95
+ config = Configuration()
96
+ config_dict = config.toDict()
97
+ self.assertIsInstance(config_dict['paths'], dict)
98
+ self.assertIsInstance(config_dict['app'], dict)
99
+ self.assertIsInstance(config_dict['database'], dict)
100
+
101
+ def testMetadataIsAccessible(self):
102
+ """
103
+ Test that field metadata is properly defined and accessible.
104
+ Verifies that each configuration section field has the expected
105
+ metadata structure with description.
106
+ """
107
+ config = Configuration()
108
+ for field in config.__dataclass_fields__.values():
109
+ metadata = field.metadata
110
+ self.assertIn('description', metadata)
111
+ self.assertIsInstance(metadata['description'], str)
112
+
113
+ def testConfigurationIsMutable(self):
114
+ """
115
+ Test that Configuration is mutable (not frozen).
116
+ Verifies that attributes can be modified after creation since
117
+ the dataclass isn't marked as frozen.
118
+ """
119
+ config = Configuration()
120
+ new_paths = config.paths.__class__()
121
+
122
+ try:
123
+ config.paths = new_paths
124
+ except Exception as e:
125
+ self.fail(f"Should be able to modify attributes, but got {type(e).__name__}")
126
+
127
+ def testConfigurationEquality(self):
128
+ """
129
+ Test that Configuration instances with same values are equal.
130
+ Verifies that dataclass equality comparison works as expected.
131
+ """
132
+ config1 = Configuration()
133
+ config2 = Configuration()
134
+ self.assertNotEqual(config1, config2)
File without changes
@@ -0,0 +1,167 @@
1
+ from orionis.luminate.foundation.config.testing.entities.testing import Testing
2
+ from orionis.luminate.foundation.config.exceptions.integrity import OrionisIntegrityException
3
+ from orionis.luminate.test.enums.test_mode import ExecutionMode
4
+ from orionis.unittesting import TestCase
5
+
6
+ class TestTestingConfig(TestCase):
7
+
8
+ async def testDefaultValues(self):
9
+ """
10
+ Test the default values of the Testing configuration.
11
+ """
12
+ t = Testing()
13
+ self.assertEqual(t.verbosity, 2)
14
+ self.assertEqual(t.execution_mode, ExecutionMode.SEQUENTIAL.value)
15
+ self.assertTrue(isinstance(t.max_workers, int) and t.max_workers >= 1)
16
+ self.assertFalse(t.fail_fast)
17
+ self.assertTrue(t.print_result)
18
+ self.assertFalse(t.throw_exception)
19
+ self.assertEqual(t.base_path, "tests")
20
+ self.assertEqual(t.folder_path, "*")
21
+ self.assertEqual(t.pattern, "test_*.py")
22
+ self.assertIsNone(t.test_name_pattern)
23
+ self.assertEqual(t.tags, [])
24
+
25
+ async def testValidCustomValues(self):
26
+ """
27
+ Test custom valid values for all fields.
28
+ """
29
+ t = Testing(
30
+ verbosity=1,
31
+ execution_mode=ExecutionMode.PARALLEL,
32
+ max_workers=8,
33
+ fail_fast=True,
34
+ print_result=False,
35
+ throw_exception=True,
36
+ base_path="my_tests",
37
+ folder_path=["unit", "integration"],
38
+ pattern="*_spec.py",
39
+ test_name_pattern="test_login*",
40
+ tags=["fast", "critical"]
41
+ )
42
+ self.assertEqual(t.verbosity, 1)
43
+ self.assertEqual(t.execution_mode, ExecutionMode.PARALLEL.value)
44
+ self.assertEqual(t.max_workers, 8)
45
+ self.assertTrue(t.fail_fast)
46
+ self.assertFalse(t.print_result)
47
+ self.assertTrue(t.throw_exception)
48
+ self.assertEqual(t.base_path, "my_tests")
49
+ self.assertEqual(t.folder_path, ["unit", "integration"])
50
+ self.assertEqual(t.pattern, "*_spec.py")
51
+ self.assertEqual(t.test_name_pattern, "test_login*")
52
+ self.assertEqual(t.tags, ["fast", "critical"])
53
+
54
+ async def testFolderPathStringAndList(self):
55
+ """
56
+ Test folder_path accepts both string and list of strings.
57
+ """
58
+ t1 = Testing(folder_path="integration")
59
+ self.assertEqual(t1.folder_path, "integration")
60
+ t2 = Testing(folder_path=["integration", "unit"])
61
+ self.assertEqual(t2.folder_path, ["integration", "unit"])
62
+
63
+ async def testTagsNoneOrList(self):
64
+ """
65
+ Test tags accepts None or list of strings.
66
+ """
67
+ t1 = Testing(tags=None)
68
+ self.assertIsNone(t1.tags)
69
+ t2 = Testing(tags=["a", "b"])
70
+ self.assertEqual(t2.tags, ["a", "b"])
71
+
72
+ async def testInvalidVerbosity(self):
73
+ """
74
+ Test invalid verbosity values.
75
+ """
76
+ with self.assertRaises(OrionisIntegrityException):
77
+ Testing(verbosity=-1)
78
+ with self.assertRaises(OrionisIntegrityException):
79
+ Testing(verbosity=3)
80
+ with self.assertRaises(OrionisIntegrityException):
81
+ Testing(verbosity="high")
82
+
83
+ async def testInvalidExecutionMode(self):
84
+ """
85
+ Test execution_mode cannot be None.
86
+ """
87
+ with self.assertRaises(OrionisIntegrityException):
88
+ Testing(execution_mode=None)
89
+
90
+ async def testInvalidMaxWorkers(self):
91
+ """
92
+ Test invalid max_workers values.
93
+ """
94
+ with self.assertRaises(OrionisIntegrityException):
95
+ Testing(max_workers=0)
96
+ with self.assertRaises(OrionisIntegrityException):
97
+ Testing(max_workers=-5)
98
+ with self.assertRaises(OrionisIntegrityException):
99
+ Testing(max_workers="many")
100
+
101
+ async def testInvalidFailFast(self):
102
+ """
103
+ Test fail_fast must be boolean.
104
+ """
105
+ with self.assertRaises(OrionisIntegrityException):
106
+ Testing(fail_fast="yes")
107
+
108
+ async def testInvalidPrintResult(self):
109
+ """
110
+ Test print_result must be boolean.
111
+ """
112
+ with self.assertRaises(OrionisIntegrityException):
113
+ Testing(print_result=1)
114
+
115
+ async def testInvalidThrowException(self):
116
+ """
117
+ Test throw_exception must be boolean.
118
+ """
119
+ with self.assertRaises(OrionisIntegrityException):
120
+ Testing(throw_exception="no")
121
+
122
+ async def testInvalidBasePath(self):
123
+ """
124
+ Test base_path must be string.
125
+ """
126
+ with self.assertRaises(OrionisIntegrityException):
127
+ Testing(base_path=123)
128
+
129
+ async def testInvalidFolderPath(self):
130
+ """
131
+ Test folder_path must be string or list of strings.
132
+ """
133
+ with self.assertRaises(OrionisIntegrityException):
134
+ Testing(folder_path=123)
135
+ with self.assertRaises(OrionisIntegrityException):
136
+ Testing(folder_path=[1, 2])
137
+ with self.assertRaises(OrionisIntegrityException):
138
+ Testing(folder_path=["ok", 2])
139
+
140
+ async def testInvalidPattern(self):
141
+ """
142
+ Test pattern must be string.
143
+ """
144
+ with self.assertRaises(OrionisIntegrityException):
145
+ Testing(pattern=[])
146
+ with self.assertRaises(OrionisIntegrityException):
147
+ Testing(pattern=123)
148
+
149
+ async def testInvalidTestNamePattern(self):
150
+ """
151
+ Test test_name_pattern must be string or None.
152
+ """
153
+ with self.assertRaises(OrionisIntegrityException):
154
+ Testing(test_name_pattern=[])
155
+ with self.assertRaises(OrionisIntegrityException):
156
+ Testing(test_name_pattern=123)
157
+
158
+ async def testInvalidTags(self):
159
+ """
160
+ Test tags must be None or list of strings.
161
+ """
162
+ with self.assertRaises(OrionisIntegrityException):
163
+ Testing(tags="fast")
164
+ with self.assertRaises(OrionisIntegrityException):
165
+ Testing(tags=[1, 2])
166
+ with self.assertRaises(OrionisIntegrityException):
167
+ Testing(tags=["ok", 2])
@@ -1,5 +1,5 @@
1
- from orionis.luminate.patterns import Singleton
2
- from orionis.luminate.test import TestCase
1
+ from orionis.luminate.patterns.singleton.meta_class import Singleton
2
+ from orionis.luminate.test.cases.test_case import TestCase
3
3
 
4
4
  class TestsAsyncCoroutine(TestCase):
5
5