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,127 @@
1
+
2
+ from orionis.luminate.services.standard.std import StdClass
3
+ from orionis.unittesting import TestCase
4
+
5
+ class TestStdClass(TestCase):
6
+
7
+ async def testInitializationAndAccess(self):
8
+ """
9
+ Test the initialization of StdClass and access to its attributes.
10
+
11
+ This test verifies that an instance of StdClass can be created with the given
12
+ first name, last name, and age, and that these attributes can be accessed
13
+ correctly after initialization.
14
+ """
15
+ obj = StdClass(
16
+ first_name='Raul',
17
+ last_name='Uñate',
18
+ age=31
19
+ )
20
+ self.assertEqual(obj.first_name, 'Raul')
21
+ self.assertEqual(obj.age, 31)
22
+
23
+ async def testToDictReturnsCorrectData(self):
24
+ """
25
+ Test that the toDict method of StdClass returns a dictionary with the correct data.
26
+
27
+ This test creates an instance of StdClass with specific attributes and verifies
28
+ that calling toDict() returns a dictionary containing those attributes and their values.
29
+ """
30
+ obj = StdClass(a=1, b=2)
31
+ expected = {'a': 1, 'b': 2}
32
+ self.assertEqual(obj.toDict(), expected)
33
+
34
+ async def testUpdateAttributes(self):
35
+ """
36
+ Test that the `update` method of `StdClass` correctly sets multiple attributes.
37
+
38
+ This test creates an instance of `StdClass`, updates its attributes using the `update` method,
39
+ and asserts that the attributes `foo` and `number` are set to the expected values.
40
+ """
41
+ obj = StdClass()
42
+ obj.update(foo='bar', number=42)
43
+ self.assertEqual(obj.foo, 'bar')
44
+ self.assertEqual(obj.number, 42)
45
+
46
+ async def testUpdateReservedAttributeRaisesError(self):
47
+ """
48
+ Test that updating a reserved attribute (such as '__init__') on a StdClass instance
49
+ raises a ValueError exception.
50
+ """
51
+ obj = StdClass()
52
+ with self.assertRaises(ValueError):
53
+ obj.update(__init__='bad')
54
+
55
+ async def testUpdateConflictingAttributeRaisesError(self):
56
+ """
57
+ Test that updating an object with a conflicting attribute name ('toDict') raises a ValueError.
58
+
59
+ This test ensures that attempting to update the StdClass instance with a keyword argument
60
+ that conflicts with an existing method or reserved attribute ('toDict') correctly triggers
61
+ a ValueError, enforcing attribute safety.
62
+ """
63
+ obj = StdClass()
64
+ with self.assertRaises(ValueError):
65
+ obj.update(toDict='oops')
66
+
67
+ async def testRemoveExistingAttributes(self):
68
+ """
69
+ Tests that the `remove` method of `StdClass` successfully removes an existing attribute ('x') from the object,
70
+ while leaving other attributes ('y') intact.
71
+ """
72
+ obj = StdClass(x=1, y=2)
73
+ obj.remove('x')
74
+ self.assertFalse(hasattr(obj, 'x'))
75
+ self.assertTrue(hasattr(obj, 'y'))
76
+
77
+ async def testRemoveNonExistingAttributeRaisesError(self):
78
+ """
79
+ Test that attempting to remove a non-existing attribute from a StdClass instance raises an AttributeError.
80
+
81
+ This test verifies that the `remove` method of `StdClass` correctly raises an AttributeError
82
+ when called with the name of an attribute that does not exist on the object.
83
+ """
84
+ obj = StdClass()
85
+ with self.assertRaises(AttributeError):
86
+ obj.remove('not_there')
87
+
88
+ async def testFromDictCreatesEquivalentInstance(self):
89
+ """
90
+ Test that StdClass.from_dict creates an instance equivalent to the original data.
91
+
92
+ This test verifies that when a dictionary is passed to StdClass.from_dict,
93
+ the resulting object's toDict() method returns a dictionary equal to the original input.
94
+ """
95
+ data = {'a': 10, 'b': 20}
96
+ obj = StdClass.from_dict(data)
97
+ self.assertEqual(obj.toDict(), data)
98
+
99
+ async def testReprAndStr(self):
100
+ """
101
+ Test that the __repr__ and __str__ methods of StdClass include the class name and the value of 'x' respectively.
102
+
103
+ This test verifies:
104
+ - The string representation produced by repr(obj) contains the class name 'StdClass'.
105
+ - The string representation produced by str(obj) contains the key-value pair "'x': 5".
106
+ """
107
+ obj = StdClass(x=5)
108
+ self.assertIn("StdClass", repr(obj))
109
+ self.assertIn("'x': 5", str(obj))
110
+
111
+ async def testEquality(self):
112
+ """
113
+ Tests the equality and inequality operations for StdClass instances.
114
+
115
+ This test creates three instances of StdClass:
116
+ - 'a' and 'b' with identical attributes (x=1, y=2), which should be considered equal.
117
+ - 'c' with a different attribute (x=3), which should not be equal to 'a'.
118
+
119
+ Assertions:
120
+ - Verifies that 'a' and 'b' are equal.
121
+ - Verifies that 'a' and 'c' are not equal.
122
+ """
123
+ a = StdClass(x=1, y=2)
124
+ b = StdClass(x=1, y=2)
125
+ c = StdClass(x=3)
126
+ self.assertEqual(a, b)
127
+ self.assertNotEqual(a, c)
File without changes
@@ -0,0 +1,129 @@
1
+ from orionis.luminate.services.wrapper.dicts.dot_dict import DotDict
2
+ from orionis.unittesting import TestCase
3
+
4
+ class TestDotDict(TestCase):
5
+ """
6
+ Test cases for the DotDict class which provides dictionary with dot notation access.
7
+ """
8
+
9
+ async def testDotNotationAccess(self):
10
+ """
11
+ Test that dictionary values can be accessed using dot notation.
12
+ Verifies that both existing and non-existing keys can be accessed via dot notation,
13
+ with None returned for missing keys.
14
+ """
15
+ dd = DotDict({'key1': 'value1', 'nested': {'inner': 42}})
16
+ self.assertEqual(dd.key1, 'value1')
17
+ self.assertEqual(dd.nested.inner, 42)
18
+ self.assertIsNone(dd.non_existent)
19
+
20
+ async def testDotNotationAssignment(self):
21
+ """
22
+ Test that dictionary values can be set using dot notation.
23
+ Verifies that new keys can be added and existing keys can be updated using dot notation,
24
+ with automatic conversion of nested dictionaries to DotDict.
25
+ """
26
+ dd = DotDict()
27
+ dd.key1 = 'value1'
28
+ dd.nested = {'inner': 42}
29
+
30
+ self.assertEqual(dd['key1'], 'value1')
31
+ self.assertIsInstance(dd.nested, DotDict)
32
+ self.assertEqual(dd.nested.inner, 42)
33
+
34
+ async def testDotNotationDeletion(self):
35
+ """
36
+ Test that dictionary keys can be deleted using dot notation.
37
+ Verifies that existing keys can be deleted and appropriate AttributeError is raised
38
+ when trying to delete non-existent keys.
39
+ """
40
+ dd = DotDict({'key1': 'value1', 'key2': 'value2'})
41
+ del dd.key1
42
+ self.assertNotIn('key1', dd)
43
+
44
+ with self.assertRaises(AttributeError):
45
+ del dd.non_existent
46
+
47
+ async def testGetMethod(self):
48
+ """
49
+ Test that the get method works with automatic DotDict conversion.
50
+ Verifies that the get method returns the correct value or default,
51
+ and converts nested dictionaries to DotDict instances.
52
+ """
53
+ dd = DotDict({'key1': 'value1', 'nested': {'inner': 42}})
54
+
55
+ self.assertEqual(dd.get('key1'), 'value1')
56
+ self.assertEqual(dd.get('non_existent', 'default'), 'default')
57
+ self.assertIsInstance(dd.get('nested'), DotDict)
58
+ self.assertEqual(dd.get('nested').inner, 42)
59
+
60
+ async def testExportMethod(self):
61
+ """
62
+ Test that the export method converts to regular dictionary recursively.
63
+ Verifies that all nested DotDict instances are converted back to regular dicts.
64
+ """
65
+ dd = DotDict({
66
+ 'key1': 'value1',
67
+ 'nested': DotDict({
68
+ 'inner': 42,
69
+ 'deep': DotDict({'a': 1})
70
+ })
71
+ })
72
+
73
+ exported = dd.export()
74
+ self.assertIsInstance(exported, dict)
75
+ self.assertIsInstance(exported['nested'], dict)
76
+ self.assertIsInstance(exported['nested']['deep'], dict)
77
+ self.assertEqual(exported['nested']['inner'], 42)
78
+
79
+ async def testCopyMethod(self):
80
+ """
81
+ Test that the copy method creates a deep copy with DotDict conversion.
82
+ Verifies that the copy is independent of the original and maintains DotDict structure.
83
+ """
84
+ original = DotDict({
85
+ 'key1': 'value1',
86
+ 'nested': {'inner': 42}
87
+ })
88
+
89
+ copied = original.copy()
90
+ copied.key1 = 'modified'
91
+ copied.nested.inner = 100
92
+
93
+ self.assertEqual(original.key1, 'value1')
94
+ self.assertEqual(original.nested.inner, 42)
95
+ self.assertEqual(copied.key1, 'modified')
96
+ self.assertEqual(copied.nested.inner, 100)
97
+ self.assertIsInstance(copied.nested, DotDict)
98
+
99
+ async def testNestedDictConversion(self):
100
+ """
101
+ Test that nested dictionaries are automatically converted to DotDict.
102
+ Verifies that nested dicts are converted both during initialization and assignment.
103
+ """
104
+ dd = DotDict({
105
+ 'level1': {
106
+ 'level2': {
107
+ 'value': 42
108
+ }
109
+ }
110
+ })
111
+
112
+ self.assertIsInstance(dd.level1, DotDict)
113
+ self.assertIsInstance(dd.level1.level2, DotDict)
114
+ self.assertEqual(dd.level1.level2.value, 42)
115
+
116
+ # Test dynamic assignment
117
+ dd.new_nested = {'a': {'b': 1}}
118
+ self.assertIsInstance(dd.new_nested, DotDict)
119
+ self.assertIsInstance(dd.new_nested.a, DotDict)
120
+
121
+ async def testReprMethod(self):
122
+ """
123
+ Test that the string representation correctly identifies as DotDict.
124
+ Verifies that the __repr__ method includes the DotDict prefix.
125
+ """
126
+ dd = DotDict({'key': 'value'})
127
+ self.assertTrue(repr(dd).startswith('DotDict({'))
128
+ self.assertTrue(repr(dd).endswith('})'))
129
+ self.assertIn("'key': 'value'", repr(dd))
File without changes
@@ -0,0 +1,92 @@
1
+
2
+ from orionis.unittesting import TestCase, TestResult, TestStatus
3
+
4
+ class TestTestResult(TestCase):
5
+ """
6
+ Test cases for the TestResult dataclass.
7
+ """
8
+
9
+ async def testDefaultValues(self):
10
+ """
11
+ Test that TestResult initializes with correct default values for optional fields.
12
+
13
+ Verifies that optional fields are None when not provided during initialization.
14
+ """
15
+ result = TestResult(
16
+ id=1,
17
+ name="Sample Test",
18
+ status=TestStatus.PASSED,
19
+ execution_time=0.5
20
+ )
21
+ self.assertIsNone(result.error_message)
22
+ self.assertIsNone(result.traceback)
23
+ self.assertIsNone(result.class_name)
24
+ self.assertIsNone(result.method)
25
+ self.assertIsNone(result.module)
26
+ self.assertIsNone(result.file_path)
27
+
28
+ async def testRequiredFields(self):
29
+ """
30
+ Test that TestResult requires all non-optional fields during initialization.
31
+
32
+ Ensures that missing any required field raises a TypeError.
33
+ """
34
+ with self.assertRaises(TypeError):
35
+ TestResult() # Missing all required fields
36
+
37
+ with self.assertRaises(TypeError):
38
+ # Missing id
39
+ TestResult(
40
+ name="Sample Test",
41
+ status=TestStatus.PASSED,
42
+ execution_time=0.5
43
+ )
44
+
45
+ async def testImmutable(self):
46
+ """
47
+ Test that TestResult instances are immutable (frozen dataclass).
48
+
49
+ Verifies that attribute modification after creation raises a FrozenInstanceError.
50
+ """
51
+ result = TestResult(
52
+ id=1,
53
+ name="Sample Test",
54
+ status=TestStatus.PASSED,
55
+ execution_time=0.5
56
+ )
57
+ with self.assertRaises(Exception):
58
+ result.name = "Modified Name"
59
+
60
+ async def testStatusValues(self):
61
+ """
62
+ Test that TestResult correctly handles all possible TestStatus values.
63
+
64
+ Verifies that all enum values can be assigned to the status field.
65
+ """
66
+ for status in TestStatus:
67
+ result = TestResult(
68
+ id=1,
69
+ name="Status Test",
70
+ status=status,
71
+ execution_time=0.1
72
+ )
73
+ self.assertEqual(result.status, status)
74
+
75
+ async def testErrorFields(self):
76
+ """
77
+ Test that error-related fields are properly stored when provided.
78
+
79
+ Verifies that error_message and traceback are stored correctly when provided.
80
+ """
81
+ error_msg = "Test failed"
82
+ traceback = "Traceback info"
83
+ result = TestResult(
84
+ id=1,
85
+ name="Failing Test",
86
+ status=TestStatus.FAILED,
87
+ execution_time=0.2,
88
+ error_message=error_msg,
89
+ traceback=traceback
90
+ )
91
+ self.assertEqual(result.error_message, error_msg)
92
+ self.assertEqual(result.traceback, traceback)
@@ -0,0 +1,138 @@
1
+ from orionis.luminate.test.cases.test_case import TestCase
2
+ from orionis.unittesting import UnitTest, ExecutionMode, UnittestTestLoader, UnittestTestSuite, unittest_mock_patch, UnittestMagicMock, UnittestTestResult
3
+
4
+ class TestUnitTest(TestCase):
5
+ """
6
+ Test cases for the UnitTest class which handles test discovery and execution.
7
+ """
8
+
9
+ async def testDefaultConfiguration(self):
10
+ """
11
+ Test that UnitTest initializes with correct default configuration values.
12
+ Verifies that all default attributes are set as expected upon initialization.
13
+ """
14
+ unit_test = UnitTest()
15
+ self.assertEqual(unit_test.verbosity, 2)
16
+ self.assertEqual(unit_test.execution_mode, ExecutionMode.SEQUENTIAL.value)
17
+ self.assertEqual(unit_test.max_workers, 4)
18
+ self.assertFalse(unit_test.fail_fast)
19
+ self.assertTrue(unit_test.print_result)
20
+ self.assertIsInstance(unit_test.loader, UnittestTestLoader)
21
+ self.assertIsInstance(unit_test.suite, UnittestTestSuite)
22
+
23
+ async def testConfigureMethod(self):
24
+ """
25
+ Test that configure method properly updates configuration values.
26
+ Verifies that all configuration parameters can be updated through the configure method.
27
+ """
28
+ unit_test = UnitTest()
29
+ configured = unit_test.configure(
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
+ )
37
+
38
+ self.assertEqual(unit_test.verbosity, 1)
39
+ self.assertEqual(unit_test.execution_mode, ExecutionMode.PARALLEL.value)
40
+ self.assertEqual(unit_test.max_workers, 8)
41
+ self.assertTrue(unit_test.fail_fast)
42
+ self.assertFalse(unit_test.print_result)
43
+ self.assertTrue(unit_test.throw_exception)
44
+ self.assertEqual(configured, unit_test)
45
+
46
+ async def testDiscoverTestsInModule(self):
47
+ """
48
+ Test that discoverTestsInModule correctly loads tests from a module.
49
+ Verifies that tests can be discovered from a module and added to the test suite.
50
+ """
51
+ unit_test = UnitTest()
52
+ with unittest_mock_patch.object(unit_test.loader, 'loadTestsFromName') as mock_load:
53
+ mock_load.return_value = UnittestTestSuite()
54
+ result = unit_test.discoverTestsInModule('test_module')
55
+
56
+ mock_load.assert_called_once_with('test_module')
57
+ self.assertEqual(result, unit_test)
58
+ self.assertEqual(len(unit_test.suite._tests), 0)
59
+
60
+ async def testFlattenTestSuite(self):
61
+ """
62
+ Test that _flattenTestSuite correctly flattens nested test suites.
63
+
64
+ Verifies that both simple and nested test suites are properly flattened.
65
+ """
66
+ unit_test = UnitTest()
67
+ test_case1 = UnittestMagicMock()
68
+ test_case2 = UnittestMagicMock()
69
+
70
+ nested_suite = UnittestTestSuite()
71
+ nested_suite.addTest(test_case1)
72
+ nested_suite.addTest(test_case2)
73
+
74
+ main_suite = UnittestTestSuite()
75
+ main_suite.addTest(nested_suite)
76
+
77
+ flattened = unit_test._flattenTestSuite(main_suite)
78
+ self.assertEqual(len(flattened), 2)
79
+ self.assertIn(test_case1, flattened)
80
+ self.assertIn(test_case2, flattened)
81
+
82
+ async def testMergeTestResults(self):
83
+ """
84
+ Test that _mergeTestResults correctly combines test results.
85
+
86
+ Verifies that test counts, failures, and errors are properly merged.
87
+ """
88
+ unit_test = UnitTest()
89
+ combined = UnittestTestResult()
90
+ individual = UnittestTestResult()
91
+
92
+ individual.testsRun = 2
93
+ individual.failures = [('test1', 'failure')]
94
+ individual.errors = [('test2', 'error')]
95
+
96
+ unit_test._mergeTestResults(combined, individual)
97
+ self.assertEqual(combined.testsRun, 2)
98
+ self.assertEqual(len(combined.failures), 1)
99
+ self.assertEqual(len(combined.errors), 1)
100
+
101
+ async def testClearTests(self):
102
+ """
103
+ Test that clearTests method resets the test suite.
104
+ Verifies that the test suite is emptied when clearTests is called.
105
+ """
106
+ unit_test = UnitTest()
107
+ mock_test = UnittestMagicMock()
108
+ unit_test.suite.addTest(mock_test)
109
+
110
+ unit_test.clearTests()
111
+ self.assertEqual(len(unit_test.suite._tests), 0)
112
+
113
+ async def testGetTestNames(self):
114
+ """
115
+ Test that getTestNames returns correct test identifiers.
116
+ Verifies that test names are properly extracted from the test suite.
117
+ """
118
+ unit_test = UnitTest()
119
+ mock_test = UnittestMagicMock()
120
+ mock_test.id.return_value = 'test_id'
121
+ unit_test.suite.addTest(mock_test)
122
+
123
+ names = unit_test.getTestNames()
124
+ self.assertEqual(names, ['test_id'])
125
+
126
+ async def testGetTestCount(self):
127
+ """
128
+ Test that getTestCount returns the correct number of tests.
129
+ Verifies that the count matches the number of tests in the suite.
130
+ """
131
+ unit_test = UnitTest()
132
+ mock_test1 = UnittestMagicMock()
133
+ mock_test2 = UnittestMagicMock()
134
+ unit_test.suite.addTest(mock_test1)
135
+ unit_test.suite.addTest(mock_test2)
136
+
137
+ count = unit_test.getTestCount()
138
+ self.assertEqual(count, 2)
@@ -1,10 +0,0 @@
1
- from orionis.luminate.config.app.entities.app import App
2
-
3
- __all__ = [
4
- "app"
5
- ]
6
- __author__ = "Raúl Mauricio Uñate Castro"
7
- __description__ = (
8
- "This dataclass defines the main configuration of the Orionis Framework application. "
9
- "Its design aims to provide a flexible and adaptable structure for Python projects."
10
- )
@@ -1,7 +0,0 @@
1
- from orionis.luminate.config.auth.entities.auth import Auth
2
-
3
- __all__ = [
4
- "Auth",
5
- ]
6
- __author__ = "Raul Mauricio Uñate Castro"
7
- __description__ = "This module exports a dataclass that contains the required properties to configure an Orionis application"
@@ -1,9 +0,0 @@
1
- from orionis.luminate.config.cache.entities.cache import Cache
2
-
3
- __all__ = [
4
- "Cache",
5
- ]
6
- __author__ = "Raúl Mauricio Uñate Castro"
7
- __description__ = (
8
- "This dataclass defines the structure of the cache configuration. "
9
- )
@@ -1,58 +0,0 @@
1
- from dataclasses import dataclass, field
2
- from orionis.luminate.config.cache.entities.file import File
3
- from orionis.luminate.config.cache.entities.stores import Stores
4
- from orionis.luminate.config.cache.enums.drivers import Drivers
5
- from orionis.luminate.config.exceptions.integrity_exception import OrionisIntegrityException
6
- from orionis.luminate.services.environment import Env
7
-
8
- @dataclass
9
- class Cache:
10
- """
11
- Represents the cache configuration for the application.
12
- Attributes:
13
- default (Drivers | str): The default cache storage type. Can be a member of the Drivers enum or a string
14
- (e.g., 'memory', 'file'). Defaults to the value of the 'CACHE_STORE' environment variable or Drivers.MEMORY.
15
- stores (Stores): The configuration for available cache stores. Defaults to a Stores instance with a file store
16
- at the path specified by the 'CACHE_PATH' environment variable or "storage/framework/cache/data".
17
- Methods:
18
- __post_init__():
19
- - Validates that 'default' is either a Drivers enum member or a string.
20
- - Converts 'default' from string to Drivers enum if necessary.
21
- - Validates that 'stores' is an instance of Stores.
22
- """
23
-
24
- default: Drivers | str = field(
25
- default=Env.get("CACHE_STORE", Drivers.MEMORY),
26
- metadata={
27
- "description": "The default cache storage type (e.g., 'memory' or 'file').",
28
- "type": Drivers,
29
- },
30
- )
31
-
32
- stores: Stores = field(
33
- default_factory=lambda: Stores(
34
- file=File(
35
- path=Env.get("CACHE_PATH", "storage/framework/cache/data")
36
- )
37
- )
38
- )
39
-
40
- def __post_init__(self):
41
- """
42
- Post-initialization processing to ensure the cache configuration is set correctly.
43
- """
44
- # Ensure the default cache store is valid
45
- if not isinstance(self.default, (Drivers, str)):
46
- raise OrionisIntegrityException("The default cache store must be an instance of Drivers or a string.")
47
-
48
- # Convert string to Drivers enum if applicable
49
- if isinstance(self.default, str):
50
- value = self.default.upper().strip()
51
- if value not in Drivers._member_names_:
52
- raise OrionisIntegrityException(f"Invalid cache driver: {self.default}. Must be one of {Drivers._member_names_}.")
53
- else:
54
- self.default = getattr(Drivers, value)
55
-
56
- # Ensure the stores attribute is an instance of Stores
57
- if not isinstance(self.stores, Stores):
58
- raise OrionisIntegrityException("The stores must be an instance of Stores.")
@@ -1,29 +0,0 @@
1
- from dataclasses import dataclass, field
2
- from orionis.luminate.services.paths import Resolver
3
-
4
- @dataclass
5
- class File:
6
- """
7
- Represents a file storage path.
8
-
9
- Attributes
10
- ----------
11
- path : str
12
- The file path used for caching.
13
- """
14
- path: str = field(
15
- default_factory=lambda:Resolver().relativePath('storage/framework/cache/data').toString(),
16
- metadata={
17
- "description": "The file path used for caching.",
18
- "type": str,
19
- },
20
- )
21
-
22
- def __post_init__(self):
23
- """
24
- Post-initialization processing to ensure the path is set correctly.
25
- """
26
- if not self.path:
27
- raise ValueError("The file path cannot be empty.")
28
- if not isinstance(self.path, str):
29
- raise TypeError("The file path must be a string.")
@@ -1,35 +0,0 @@
1
- from dataclasses import dataclass, field
2
- from typing import Any
3
- from orionis.luminate.config.cache.entities.file import File
4
- from orionis.luminate.services.paths.resolver import Resolver
5
-
6
- @dataclass
7
- class Stores:
8
- """
9
- Represents a collection of cache storage backends for the application.
10
- Attributes:
11
- file (File): An instance of `File` representing file-based cache storage.
12
- The default path is set to 'storage/framework/cache/data', resolved
13
- relative to the application's root directory.
14
- Methods:
15
- __post_init__():
16
- Ensures that the 'file' attribute is properly initialized as an instance of `File`.
17
- Raises a TypeError if the type check fails.
18
- """
19
-
20
- file: File = field(
21
- default_factory=lambda: File(
22
- path=Resolver().relativePath('storage/framework/cache/data').toString()
23
- ),
24
- metadata={
25
- "description": "An instance of `File` representing file-based cache storage.",
26
- "type": File,
27
- },
28
- )
29
-
30
- def __post_init__(self):
31
- """
32
- Post-initialization processing to ensure the stores are set correctly.
33
- """
34
- if not isinstance(self.file, File):
35
- raise TypeError("The file store must be an instance of File.")