orionis 0.253.0__py3-none-any.whl → 0.266.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.253.0.dist-info → orionis-0.266.0.dist-info}/METADATA +19 -3
  159. orionis-0.266.0.dist-info/RECORD +440 -0
  160. {orionis-0.253.0.dist-info → orionis-0.266.0.dist-info}/WHEEL +1 -1
  161. orionis-0.266.0.dist-info/entry_points.txt +2 -0
  162. orionis-0.266.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.253.0.dist-info/RECORD +0 -318
  269. orionis-0.253.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.253.0.dist-info → orionis-0.266.0.dist-info/licenses}/LICENCE +0 -0
  397. {orionis-0.253.0.dist-info → orionis-0.266.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,140 @@
1
+ from orionis.luminate.foundation.config.app.entities.app import App
2
+ from orionis.luminate.foundation.config.app.enums.ciphers import Cipher
3
+ from orionis.luminate.foundation.config.app.enums.environments import Environments
4
+ from orionis.luminate.foundation.config.exceptions.integrity import OrionisIntegrityException
5
+ from orionis.unittesting import TestCase
6
+
7
+ class TestConfigApp(TestCase):
8
+ """
9
+ Test cases for the App configuration class.
10
+ """
11
+
12
+ async def testDefaultValues(self):
13
+ """
14
+ Test that the App instance is created with the correct default values.
15
+
16
+ Verifies that all default values match the expected defaults from the class definition.
17
+ """
18
+ app = App()
19
+ self.assertEqual(app.name, 'Orionis Application')
20
+ self.assertEqual(app.env, Environments.DEVELOPMENT.value)
21
+ self.assertTrue(app.debug)
22
+ self.assertEqual(app.url, 'http://127.0.0.1')
23
+ self.assertEqual(app.port, 8000)
24
+ self.assertEqual(app.timezone, 'UTC')
25
+ self.assertEqual(app.locale, 'en')
26
+ self.assertEqual(app.fallback_locale, 'en')
27
+ self.assertEqual(app.cipher, Cipher.AES_256_CBC.value)
28
+ self.assertIsNone(app.key)
29
+ self.assertEqual(app.maintenance, '/maintenance')
30
+
31
+ async def testEnvironmentValidation(self):
32
+ """
33
+ Test that the environment attribute is properly validated and converted.
34
+
35
+ Verifies that string environments are converted to enum values and invalid environments raise exceptions.
36
+ """
37
+ # Test valid string environment
38
+ app = App(env="PRODUCTION")
39
+ self.assertEqual(app.env, Environments.PRODUCTION.value)
40
+
41
+ # Test valid enum environment
42
+ app = App(env=Environments.TESTING)
43
+ self.assertEqual(app.env, Environments.TESTING.value)
44
+
45
+ # Test invalid environment
46
+ with self.assertRaises(OrionisIntegrityException):
47
+ App(env="INVALID_ENV")
48
+
49
+ async def testCipherValidation(self):
50
+ """
51
+ Test that the cipher attribute is properly validated and converted.
52
+
53
+ Verifies that string ciphers are converted to enum values and invalid ciphers raise exceptions.
54
+ """
55
+ # Test valid string cipher
56
+ app = App(cipher="AES_128_CBC")
57
+ self.assertEqual(app.cipher, Cipher.AES_128_CBC.value)
58
+
59
+ # Test valid enum cipher
60
+ app = App(cipher=Cipher.AES_192_CBC)
61
+ self.assertEqual(app.cipher, Cipher.AES_192_CBC.value)
62
+
63
+ # Test invalid cipher
64
+ with self.assertRaises(OrionisIntegrityException):
65
+ App(cipher="INVALID_CIPHER")
66
+
67
+ async def testTypeValidation(self):
68
+ """
69
+ Test that type validation works correctly for all attributes.
70
+
71
+ Verifies that invalid types for each attribute raise OrionisIntegrityException.
72
+ """
73
+ # Test invalid name type
74
+ with self.assertRaises(OrionisIntegrityException):
75
+ App(name=123)
76
+
77
+ # Test invalid debug type
78
+ with self.assertRaises(OrionisIntegrityException):
79
+ App(debug="true")
80
+
81
+ # Test invalid url type
82
+ with self.assertRaises(OrionisIntegrityException):
83
+ App(url=123)
84
+
85
+ # Test invalid port type
86
+ with self.assertRaises(OrionisIntegrityException):
87
+ App(port="8000")
88
+
89
+ # Test invalid workers type
90
+ with self.assertRaises(OrionisIntegrityException):
91
+ App(workers="4")
92
+
93
+ # Test invalid reload type
94
+ with self.assertRaises(OrionisIntegrityException):
95
+ App(reload="true")
96
+
97
+ async def testToDictMethod(self):
98
+ """
99
+ Test that the toDict method returns a proper dictionary representation.
100
+
101
+ Verifies that the returned dictionary contains all expected keys and values.
102
+ """
103
+ app = App()
104
+ app_dict = app.toDict()
105
+
106
+ self.assertIsInstance(app_dict, dict)
107
+ self.assertEqual(app_dict['name'], 'Orionis Application')
108
+ self.assertEqual(app_dict['env'], Environments.DEVELOPMENT.value)
109
+ self.assertTrue(app_dict['debug'])
110
+ self.assertEqual(app_dict['url'], 'http://127.0.0.1')
111
+ self.assertEqual(app_dict['port'], 8000)
112
+ self.assertEqual(app_dict['timezone'], 'UTC')
113
+ self.assertEqual(app_dict['locale'], 'en')
114
+ self.assertEqual(app_dict['fallback_locale'], 'en')
115
+ self.assertEqual(app_dict['cipher'], Cipher.AES_256_CBC.value)
116
+ self.assertIsNone(app_dict['key'])
117
+ self.assertEqual(app_dict['maintenance'], '/maintenance')
118
+
119
+ async def testNonEmptyStringValidation(self):
120
+ """
121
+ Test that empty strings are rejected for attributes requiring non-empty strings.
122
+ Verifies that attributes requiring non-empty strings raise exceptions when empty strings are provided.
123
+ """
124
+ with self.assertRaises(OrionisIntegrityException):
125
+ App(name="")
126
+
127
+ with self.assertRaises(OrionisIntegrityException):
128
+ App(url="")
129
+
130
+ with self.assertRaises(OrionisIntegrityException):
131
+ App(timezone="")
132
+
133
+ with self.assertRaises(OrionisIntegrityException):
134
+ App(locale="")
135
+
136
+ with self.assertRaises(OrionisIntegrityException):
137
+ App(fallback_locale="")
138
+
139
+ with self.assertRaises(OrionisIntegrityException):
140
+ App(maintenance="")
File without changes
@@ -1,9 +1,12 @@
1
- from orionis.luminate.test import TestCase
2
- from orionis.luminate.config.auth import Auth
1
+
2
+ from orionis.luminate.foundation.config.auth.entities.auth import Auth
3
+ from orionis.unittesting import TestCase
3
4
 
4
5
  class TestConfigApp(TestCase):
5
6
  """
6
- Unit tests for App configuration defaults.
7
+ Test suite for verifying the behavior of the Auth configuration within the application.
8
+ This class contains asynchronous test cases to ensure that the Auth object
9
+ correctly handles the assignment and retrieval of new attribute values.
7
10
  """
8
11
 
9
12
  async def testNewValue(self):
File without changes
@@ -0,0 +1,98 @@
1
+ from orionis.unittesting import TestCase
2
+ from orionis.luminate.foundation.config.cache.entities.cache import Cache
3
+ from orionis.luminate.foundation.config.cache.enums.drivers import Drivers
4
+ from orionis.luminate.foundation.config.exceptions.integrity import OrionisIntegrityException
5
+ from orionis.luminate.foundation.config.cache.entities.stores import Stores
6
+
7
+ class TestConfigCache(TestCase):
8
+ """
9
+ Test cases for the Cache configuration class.
10
+ """
11
+
12
+ async def testDefaultValues(self):
13
+ """
14
+ Test that the Cache instance is created with the correct default values.
15
+ Verifies that default values match the expected defaults from the class definition.
16
+ """
17
+ cache = Cache()
18
+ self.assertEqual(cache.default, Drivers.MEMORY.value)
19
+ self.assertIsInstance(cache.stores, Stores)
20
+
21
+ async def testDriverValidation(self):
22
+ """
23
+ Test that the default driver attribute is properly validated and converted.
24
+ Verifies that string drivers are converted to enum values and invalid drivers raise exceptions.
25
+ """
26
+ # Test valid string driver
27
+ cache = Cache(default="FILE")
28
+ self.assertEqual(cache.default, Drivers.FILE.value)
29
+
30
+
31
+ # Test invalid driver
32
+ with self.assertRaises(OrionisIntegrityException):
33
+ Cache(default="INVALID_DRIVER")
34
+
35
+ async def testDriverCaseInsensitivity(self):
36
+ """
37
+ Test that driver names are case-insensitive when provided as strings.
38
+ Verifies that different case variations of driver names are properly normalized.
39
+ """
40
+ # Test lowercase
41
+ cache = Cache(default="file")
42
+ self.assertEqual(cache.default, Drivers.FILE.value)
43
+
44
+ # Test mixed case
45
+ cache = Cache(default="FiLe")
46
+ self.assertEqual(cache.default, Drivers.FILE.value)
47
+
48
+ # Test uppercase
49
+ cache = Cache(default="FILE")
50
+ self.assertEqual(cache.default, Drivers.FILE.value)
51
+
52
+ async def testTypeValidation(self):
53
+ """
54
+ Test that type validation works correctly for all attributes.
55
+ Verifies that invalid types for each attribute raise OrionisIntegrityException.
56
+ """
57
+ # Test invalid default type
58
+ with self.assertRaises(OrionisIntegrityException):
59
+ Cache(default=123)
60
+
61
+ # Test invalid stores type
62
+ with self.assertRaises(OrionisIntegrityException):
63
+ Cache(stores="invalid_stores")
64
+
65
+ async def testToDictMethod(self):
66
+ """
67
+ Test that the toDict method returns a proper dictionary representation.
68
+ Verifies that the returned dictionary contains all expected keys and values.
69
+ """
70
+ cache = Cache()
71
+ cache_dict = cache.toDict()
72
+
73
+ self.assertIsInstance(cache_dict, dict)
74
+ self.assertEqual(cache_dict['default'], Drivers.MEMORY.value)
75
+ self.assertIsInstance(cache_dict['stores'], dict)
76
+
77
+ async def testStoresInstanceValidation(self):
78
+ """
79
+ Test that stores attribute must be an instance of Stores class.
80
+ Verifies that only Stores instances are accepted for the stores attribute.
81
+ """
82
+ # Test with proper Stores instance
83
+ stores = Stores() # Assuming Stores has a default constructor
84
+ cache = Cache(stores=stores)
85
+ self.assertIsInstance(cache.stores, Stores)
86
+
87
+ # Test with invalid stores type
88
+ with self.assertRaises(OrionisIntegrityException):
89
+ Cache(stores={"file": "some_path"})
90
+
91
+ async def testDriverEnumConversion(self):
92
+ """
93
+ Test that Drivers enum values are properly converted to their string representations.
94
+ Verifies that enum members are converted to their value representations.
95
+ """
96
+ # Test with enum member
97
+ cache = Cache(default=Drivers.MEMORY)
98
+ self.assertEqual(cache.default, Drivers.MEMORY.value)
@@ -0,0 +1,78 @@
1
+ from orionis.luminate.foundation.config.cache.entities.file import File
2
+ from orionis.luminate.foundation.config.exceptions.integrity import OrionisIntegrityException
3
+ from orionis.unittesting import TestCase
4
+
5
+ class TestConfigFile(TestCase):
6
+ """
7
+ Test cases for the File cache configuration entity.
8
+ """
9
+
10
+ async def testDefaultPath(self):
11
+ """
12
+ Test that the File instance is created with the correct default path.
13
+ Verifies that the default path matches the expected value from the class definition.
14
+ """
15
+ file_config = File()
16
+ self.assertEqual(file_config.path, 'storage/framework/cache/data')
17
+
18
+ async def testCustomPath(self):
19
+ """
20
+ Test that a custom path can be set during initialization.
21
+ Verifies that the path attribute accepts and stores valid custom paths.
22
+ """
23
+ custom_path = 'custom/cache/path'
24
+ file_config = File(path=custom_path)
25
+ self.assertEqual(file_config.path, custom_path)
26
+
27
+ async def testEmptyPathValidation(self):
28
+ """
29
+ Test that empty paths are rejected.
30
+ Verifies that an empty path raises an OrionisIntegrityException.
31
+ """
32
+ with self.assertRaises(OrionisIntegrityException):
33
+ File(path="")
34
+
35
+ async def testPathTypeValidation(self):
36
+ """
37
+ Test that non-string paths are rejected.
38
+ Verifies that non-string path values raise an OrionisIntegrityException.
39
+ """
40
+ with self.assertRaises(OrionisIntegrityException):
41
+ File(path=123)
42
+
43
+ with self.assertRaises(OrionisIntegrityException):
44
+ File(path=None)
45
+
46
+ with self.assertRaises(OrionisIntegrityException):
47
+ File(path=[])
48
+
49
+ async def testToDictMethod(self):
50
+ """
51
+ Test that the toDict method returns a proper dictionary representation.
52
+ Verifies that the returned dictionary contains the expected path value.
53
+ """
54
+ file_config = File()
55
+ config_dict = file_config.toDict()
56
+
57
+ self.assertIsInstance(config_dict, dict)
58
+ self.assertEqual(config_dict['path'], 'storage/framework/cache/data')
59
+
60
+ async def testCustomPathToDict(self):
61
+ """
62
+ Test that custom paths are properly included in the dictionary representation.
63
+ Verifies that toDict() includes custom path values when specified.
64
+ """
65
+ custom_path = 'another/cache/location'
66
+ file_config = File(path=custom_path)
67
+ config_dict = file_config.toDict()
68
+
69
+ self.assertEqual(config_dict['path'], custom_path)
70
+
71
+ async def testWhitespacePathHandling(self):
72
+ """
73
+ Test that paths with whitespace are accepted but not automatically trimmed.
74
+ Verifies that the validation allows paths containing whitespace characters.
75
+ """
76
+ spaced_path = ' storage/cache/with/space '
77
+ file_config = File(path=spaced_path)
78
+ self.assertEqual(file_config.path, spaced_path)
@@ -0,0 +1,88 @@
1
+ from orionis.luminate.foundation.config.cache.entities.stores import Stores
2
+ from orionis.luminate.foundation.config.cache.entities.file import File
3
+ from orionis.luminate.foundation.config.exceptions.integrity import OrionisIntegrityException
4
+ from orionis.unittesting import TestCase
5
+
6
+ class TestConfigStores(TestCase):
7
+ """
8
+ Test cases for the Stores cache configuration entity.
9
+ """
10
+
11
+ async def testDefaultFileStore(self):
12
+ """
13
+ Test that Stores initializes with a default File instance.
14
+ Verifies that the file attribute is properly initialized with default File configuration.
15
+ """
16
+ stores = Stores()
17
+ self.assertIsInstance(stores.file, File)
18
+ self.assertEqual(stores.file.path, 'storage/framework/cache/data')
19
+
20
+ async def testCustomFileStore(self):
21
+ """
22
+ Test that Stores accepts a custom File configuration.
23
+ Verifies that a custom File instance can be provided during initialization.
24
+ """
25
+ custom_file = File(path='custom/cache/path')
26
+ stores = Stores(file=custom_file)
27
+ self.assertIsInstance(stores.file, File)
28
+ self.assertEqual(stores.file.path, 'custom/cache/path')
29
+
30
+ async def testFileTypeValidation(self):
31
+ """
32
+ Test that Stores validates the file attribute type.
33
+ Verifies that non-File instances raise OrionisIntegrityException.
34
+ """
35
+ with self.assertRaises(OrionisIntegrityException):
36
+ Stores(file="not_a_file_instance")
37
+
38
+ with self.assertRaises(OrionisIntegrityException):
39
+ Stores(file=123)
40
+
41
+ with self.assertRaises(OrionisIntegrityException):
42
+ Stores(file=None)
43
+
44
+ async def testToDictMethodWithDefaults(self):
45
+ """
46
+ Test that toDict returns proper dictionary with default values.
47
+ Verifies the dictionary representation contains the correct default file path.
48
+ """
49
+ stores = Stores()
50
+ stores_dict = stores.toDict()
51
+
52
+ self.assertIsInstance(stores_dict, dict)
53
+ self.assertIsInstance(stores_dict['file'], dict)
54
+ self.assertEqual(stores_dict['file']['path'], 'storage/framework/cache/data')
55
+
56
+ async def testToDictMethodWithCustomFile(self):
57
+ """
58
+ Test that toDict includes custom file configurations.
59
+ Verifies the dictionary representation reflects custom file paths.
60
+ """
61
+ custom_file = File(path='alternate/cache/location')
62
+ stores = Stores(file=custom_file)
63
+ stores_dict = stores.toDict()
64
+
65
+ self.assertEqual(stores_dict['file']['path'], 'alternate/cache/location')
66
+
67
+ async def testHashability(self):
68
+ """
69
+ Test that Stores maintains hashability due to unsafe_hash=True.
70
+ Verifies that Stores instances can be used in sets and as dictionary keys.
71
+ """
72
+ store1 = Stores()
73
+ store2 = Stores()
74
+ store_set = {store1, store2}
75
+
76
+ self.assertEqual(len(store_set), 1)
77
+
78
+ custom_store = Stores(file=File(path='custom/path'))
79
+ store_set.add(custom_store)
80
+ self.assertEqual(len(store_set), 2)
81
+
82
+ async def testKwOnlyInitialization(self):
83
+ """
84
+ Test that Stores enforces keyword-only initialization.
85
+ Verifies that positional arguments are not allowed for initialization.
86
+ """
87
+ with self.assertRaises(TypeError):
88
+ Stores(File())
File without changes
@@ -0,0 +1,121 @@
1
+
2
+ from orionis.luminate.foundation.config.cors.entities.cors import Cors
3
+ from orionis.luminate.foundation.config.exceptions.integrity import OrionisIntegrityException
4
+ from orionis.unittesting import TestCase
5
+
6
+ class TestCorsConfig(TestCase):
7
+ """
8
+ Unit tests for Cors configuration defaults and validation.
9
+ """
10
+
11
+ async def testDefaultValues(self):
12
+ """
13
+ Test the default values of the Cors configuration.
14
+
15
+ This test verifies that a newly instantiated Cors object has the following default settings:
16
+ - allow_origins: ["*"]
17
+ - allow_origin_regex: None
18
+ - allow_methods: ["*"]
19
+ - allow_headers: ["*"]
20
+ - expose_headers: []
21
+ - allow_credentials: False
22
+ - max_age: 600
23
+ """
24
+ cors = Cors()
25
+ self.assertEqual(cors.allow_origins, ["*"])
26
+ self.assertIsNone(cors.allow_origin_regex)
27
+ self.assertEqual(cors.allow_methods, ["*"])
28
+ self.assertEqual(cors.allow_headers, ["*"])
29
+ self.assertEqual(cors.expose_headers, [])
30
+ self.assertFalse(cors.allow_credentials)
31
+ self.assertEqual(cors.max_age, 600)
32
+
33
+ async def testCustomValues(self):
34
+ """
35
+ Test that the Cors configuration correctly sets custom values for all parameters.
36
+
37
+ This test verifies that:
38
+ - `allow_origins` is set to the provided list of origins.
39
+ - `allow_origin_regex` is set to the provided regex pattern.
40
+ - `allow_methods` is set to the provided list of HTTP methods.
41
+ - `allow_headers` is set to the provided list of headers.
42
+ - `expose_headers` is set to the provided list of exposed headers.
43
+ - `allow_credentials` is set to True.
44
+ - `max_age` is set to the provided integer value.
45
+
46
+ Ensures that the Cors object accurately reflects the custom configuration values.
47
+ """
48
+ cors = Cors(
49
+ allow_origins=["https://example.com"],
50
+ allow_origin_regex="^https://.*\\.example\\.com$",
51
+ allow_methods=["GET", "POST"],
52
+ allow_headers=["Authorization", "Content-Type"],
53
+ expose_headers=["X-Custom-Header"],
54
+ allow_credentials=True,
55
+ max_age=3600
56
+ )
57
+ self.assertEqual(cors.allow_origins, ["https://example.com"])
58
+ self.assertEqual(cors.allow_origin_regex, "^https://.*\\.example\\.com$")
59
+ self.assertEqual(cors.allow_methods, ["GET", "POST"])
60
+ self.assertEqual(cors.allow_headers, ["Authorization", "Content-Type"])
61
+ self.assertEqual(cors.expose_headers, ["X-Custom-Header"])
62
+ self.assertTrue(cors.allow_credentials)
63
+ self.assertEqual(cors.max_age, 3600)
64
+
65
+ async def testInvalidAllowOriginsType(self):
66
+ """
67
+ Test that passing a string instead of a list to the 'allow_origins' parameter of the Cors class
68
+ raises an OrionisIntegrityException.
69
+ """
70
+ with self.assertRaises(OrionisIntegrityException):
71
+ Cors(allow_origins="*")
72
+
73
+ async def testInvalidAllowOriginRegexType(self):
74
+ """
75
+ Test that passing a non-string, non-None value (specifically an integer) to the
76
+ `allow_origin_regex` parameter of the `Cors` class raises an OrionisIntegrityException.
77
+ """
78
+ with self.assertRaises(OrionisIntegrityException):
79
+ Cors(allow_origin_regex=123)
80
+
81
+ async def testInvalidAllowMethodsType(self):
82
+ """
83
+ Test that initializing the Cors class with an invalid type for 'allow_methods' raises an OrionisIntegrityException.
84
+
85
+ This test verifies that passing a string instead of a list to the 'allow_methods' parameter
86
+ of the Cors class triggers the expected exception, ensuring type validation is enforced.
87
+ """
88
+ with self.assertRaises(OrionisIntegrityException):
89
+ Cors(allow_methods="GET")
90
+
91
+ async def testInvalidAllowHeadersType(self):
92
+ """
93
+ Test that initializing the Cors class with a non-list type for 'allow_headers' (specifically a string)
94
+ raises an OrionisIntegrityException, ensuring type validation for the 'allow_headers' parameter.
95
+ """
96
+ with self.assertRaises(OrionisIntegrityException):
97
+ Cors(allow_headers="Authorization")
98
+
99
+ async def testInvalidExposeHeadersType(self):
100
+ """
101
+ Test that initializing the Cors class with a non-list type for 'expose_headers'
102
+ raises an OrionisIntegrityException. Ensures type validation for the 'expose_headers' parameter.
103
+ """
104
+ with self.assertRaises(OrionisIntegrityException):
105
+ Cors(expose_headers="X-Custom-Header")
106
+
107
+ async def testInvalidAllowCredentialsType(self):
108
+ """
109
+ Test that initializing the Cors class with a non-boolean value for 'allow_credentials'
110
+ raises an OrionisIntegrityException, ensuring type validation for the parameter.
111
+ """
112
+ with self.assertRaises(OrionisIntegrityException):
113
+ Cors(allow_credentials="yes")
114
+
115
+ async def testInvalidMaxAgeType(self):
116
+ """
117
+ Test that passing a non-integer value (specifically a string) to the `max_age` parameter of the `Cors` class
118
+ raises an `OrionisIntegrityException`. This ensures that `max_age` only accepts integer or None values.
119
+ """
120
+ with self.assertRaises(OrionisIntegrityException):
121
+ Cors(max_age="3600")
File without changes
@@ -0,0 +1,108 @@
1
+ from orionis.luminate.foundation.config.database.entities.database import Database
2
+ from orionis.luminate.foundation.config.database.entities.connections import Connections
3
+ from orionis.luminate.foundation.config.exceptions.integrity import OrionisIntegrityException
4
+ from orionis.unittesting import TestCase
5
+
6
+ class TestConfigDatabase(TestCase):
7
+ """
8
+ Test cases for the Database configuration class.
9
+ """
10
+
11
+ async def testDefaultValues(self):
12
+ """
13
+ Test that Database instance is created with correct default values.
14
+ Verifies default connection is 'sqlite' and connections object is properly initialized.
15
+ """
16
+ db = Database()
17
+ self.assertEqual(db.default, 'sqlite')
18
+ self.assertIsInstance(db.connections, Connections)
19
+
20
+ async def testDefaultConnectionValidation(self):
21
+ """
22
+ Test default connection attribute validation.
23
+ Verifies that only valid connection types are accepted as default.
24
+ """
25
+ # Test valid connection types
26
+ valid_connections = ['sqlite', 'mysql', 'pgsql', 'oracle']
27
+ for conn in valid_connections:
28
+ try:
29
+ Database(default=conn)
30
+ except OrionisIntegrityException:
31
+ self.fail(f"Valid connection type '{conn}' should not raise exception")
32
+
33
+ # Test invalid connection type
34
+ with self.assertRaises(OrionisIntegrityException):
35
+ Database(default='invalid_connection')
36
+
37
+ # Test empty default
38
+ with self.assertRaises(OrionisIntegrityException):
39
+ Database(default='')
40
+
41
+ # Test non-string default
42
+ with self.assertRaises(OrionisIntegrityException):
43
+ Database(default=123)
44
+
45
+ async def testConnectionsValidation(self):
46
+ """
47
+ Test connections attribute validation.
48
+ Verifies that only Connections instances are accepted.
49
+ """
50
+ # Test invalid connections type
51
+ with self.assertRaises(OrionisIntegrityException):
52
+ Database(connections="not_a_connections_instance")
53
+
54
+ # Test None connections
55
+ with self.assertRaises(OrionisIntegrityException):
56
+ Database(connections=None)
57
+
58
+ # Test valid connections
59
+ try:
60
+ Database(connections=Connections())
61
+ except OrionisIntegrityException:
62
+ self.fail("Valid Connections instance should not raise exception")
63
+
64
+ async def testToDictMethod(self):
65
+ """
66
+ Test that toDict returns proper dictionary representation.
67
+ Verifies all attributes are correctly included in dictionary.
68
+ """
69
+ db = Database()
70
+ db_dict = db.toDict()
71
+ self.assertIsInstance(db_dict, dict)
72
+ self.assertEqual(db_dict['default'], 'sqlite')
73
+ self.assertIsInstance(db_dict['connections'], dict)
74
+
75
+ async def testCustomValues(self):
76
+ """
77
+ Test that custom values are properly stored and validated.
78
+ Verifies custom configurations are correctly handled.
79
+ """
80
+ custom_connections = Connections()
81
+ custom_db = Database(
82
+ default='mysql',
83
+ connections=custom_connections
84
+ )
85
+ self.assertEqual(custom_db.default, 'mysql')
86
+ self.assertIs(custom_db.connections, custom_connections)
87
+
88
+ async def testHashability(self):
89
+ """
90
+ Test that Database maintains hashability due to unsafe_hash=True.
91
+ Verifies that Database instances can be used in sets and as dictionary keys.
92
+ """
93
+ db1 = Database()
94
+ db2 = Database()
95
+ db_set = {db1, db2}
96
+ self.assertEqual(len(db_set), 1)
97
+
98
+ custom_db = Database(default='pgsql')
99
+ db_set.add(custom_db)
100
+ self.assertEqual(len(db_set), 2)
101
+
102
+ async def testKwOnlyInitialization(self):
103
+ """
104
+ Test that Database enforces keyword-only initialization.
105
+ Verifies that positional arguments are not allowed for initialization.
106
+ """
107
+ with self.assertRaises(TypeError):
108
+ Database('sqlite', Connections())