generator-codedesignplus 0.0.1-rc.2

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 (200) hide show
  1. package/LICENCE.md +13 -0
  2. package/README.md +454 -0
  3. package/generators/app/index.mjs +22 -0
  4. package/generators/microservice/core/aggregate.mjs +25 -0
  5. package/generators/microservice/core/appsettings.mjs +73 -0
  6. package/generators/microservice/core/asyncWorker.mjs +87 -0
  7. package/generators/microservice/core/command.mjs +54 -0
  8. package/generators/microservice/core/consumer.mjs +73 -0
  9. package/generators/microservice/core/controller.mjs +25 -0
  10. package/generators/microservice/core/core.mjs +98 -0
  11. package/generators/microservice/core/dataTransferObject.mjs +31 -0
  12. package/generators/microservice/core/domainEvent.mjs +36 -0
  13. package/generators/microservice/core/dotnet.mjs +56 -0
  14. package/generators/microservice/core/entity.mjs +29 -0
  15. package/generators/microservice/core/errors.mjs +37 -0
  16. package/generators/microservice/core/grpc.mjs +97 -0
  17. package/generators/microservice/core/microservice.mjs +212 -0
  18. package/generators/microservice/core/proto.mjs +61 -0
  19. package/generators/microservice/core/query.mjs +59 -0
  20. package/generators/microservice/core/repository.mjs +41 -0
  21. package/generators/microservice/core/utils.mjs +196 -0
  22. package/generators/microservice/core/valueObject.mjs +29 -0
  23. package/generators/microservice/core/xml.mjs +48 -0
  24. package/generators/microservice/index.mjs +38 -0
  25. package/generators/microservice/templates/aggregate/ItemAggregate.cs +9 -0
  26. package/generators/microservice/templates/command/ItemCommand.cs +12 -0
  27. package/generators/microservice/templates/command/ItemCommandHandler.cs +9 -0
  28. package/generators/microservice/templates/consumer/ItemHandler.cs +14 -0
  29. package/generators/microservice/templates/controller/ItemController.cs +8 -0
  30. package/generators/microservice/templates/data-transfer-object/ItemDto.cs +6 -0
  31. package/generators/microservice/templates/domain-event/ItemDomainEvent.cs +15 -0
  32. package/generators/microservice/templates/entity/ItemEntity.cs +6 -0
  33. package/generators/microservice/templates/errors/Error.cs +6 -0
  34. package/generators/microservice/templates/grpc/ItemService.cs +6 -0
  35. package/generators/microservice/templates/grpc/grpc.proto +22 -0
  36. package/generators/microservice/templates/microservice/.dockerignore +30 -0
  37. package/generators/microservice/templates/microservice/CodeDesignPlus.Net.Microservice.sln +155 -0
  38. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Application/CodeDesignPlus.Net.Microservice.Application.csproj +20 -0
  39. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Application/Errors.cs +10 -0
  40. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Application/Order/Commands/AddProductToOrder/AddProductToOrderCommand.cs +17 -0
  41. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Application/Order/Commands/AddProductToOrder/AddProductToOrderCommandHandler.cs +27 -0
  42. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Application/Order/Commands/CancelOrder/CancelOrderCommand.cs +13 -0
  43. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Application/Order/Commands/CancelOrder/CancelOrderCommandHandler.cs +24 -0
  44. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Application/Order/Commands/CompleteOrder/CompleteOrderCommand.cs +11 -0
  45. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Application/Order/Commands/CompleteOrder/CompleteOrderCommandHandler.cs +25 -0
  46. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Application/Order/Commands/CreateOrder/CreateOrderCommand.cs +32 -0
  47. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Application/Order/Commands/CreateOrder/CreateOrderCommandHandler.cs +24 -0
  48. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Application/Order/Commands/RemoveProduct/RemoveProductCommand.cs +12 -0
  49. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Application/Order/Commands/RemoveProduct/RemoveProductCommandHandler.cs +22 -0
  50. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Application/Order/Commands/UpdateQuantityProduct/UpdateQuantityProductCommand.cs +14 -0
  51. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Application/Order/Commands/UpdateQuantityProduct/UpdateQuantityProductCommandHandler.cs +24 -0
  52. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Application/Order/DataTransferObjects/AddressDto.cs +11 -0
  53. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Application/Order/DataTransferObjects/ClientDto.cs +9 -0
  54. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Application/Order/DataTransferObjects/OrderDto.cs +18 -0
  55. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Application/Order/DataTransferObjects/ProductDto.cs +10 -0
  56. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Application/Order/Queries/FindOrderById/FindOrderByIdQuery.cs +4 -0
  57. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Application/Order/Queries/FindOrderById/FindOrderByIdQueryHandler.cs +23 -0
  58. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Application/Order/Queries/GetAllOrders/GetAllOrdersQuery.cs +3 -0
  59. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Application/Order/Queries/GetAllOrders/GetAllOrdersQueryHandler.cs +18 -0
  60. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Application/Setup/MapsterConfig.cs +26 -0
  61. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Application/Startup.cs +15 -0
  62. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Application/Usings.cs +18 -0
  63. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Domain/CodeDesignPlus.Net.Microservice.Domain.csproj +11 -0
  64. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Domain/DataTransferObjects/AddProductToOrderParams.cs +15 -0
  65. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Domain/DataTransferObjects/CancelOrderParams.cs +13 -0
  66. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Domain/DataTransferObjects/CompleteOrderParams.cs +12 -0
  67. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Domain/DataTransferObjects/RemoveProductFromOrderParams.cs +11 -0
  68. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Domain/DataTransferObjects/UpdateQuantityProductParams.cs +12 -0
  69. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Domain/DomainEvents/OrderCancelledDomainEvent.cs +21 -0
  70. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Domain/DomainEvents/OrderCompletedDomainEvent.cs +18 -0
  71. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Domain/DomainEvents/OrderCreatedDomainEvent.cs +44 -0
  72. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Domain/DomainEvents/ProductAddedToOrderDomainEvent.cs +20 -0
  73. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Domain/DomainEvents/ProductQuantityUpdatedDomainEvent.cs +20 -0
  74. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Domain/DomainEvents/ProductRemovedFromOrderDomainEvent.cs +18 -0
  75. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Domain/Entities/ProductEntity.cs +10 -0
  76. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Domain/Enums/OrderStatus.cs +10 -0
  77. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Domain/Errors.cs +28 -0
  78. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Domain/OrderAggregate.cs +124 -0
  79. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Domain/Repositories/IOrderRepository.cs +14 -0
  80. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Domain/Startup.cs +12 -0
  81. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Domain/Usings.cs +11 -0
  82. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Domain/ValueObjects/AddressValueObject.cs +30 -0
  83. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Domain/ValueObjects/ClientValueObject.cs +27 -0
  84. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Infrastructure/CodeDesignPlus.Net.Microservice.Infrastructure.csproj +13 -0
  85. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Infrastructure/Errors.cs +6 -0
  86. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Infrastructure/Repositories/OrderRepository.cs +109 -0
  87. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Infrastructure/Startup.cs +10 -0
  88. package/generators/microservice/templates/microservice/src/domain/CodeDesignPlus.Net.Microservice.Infrastructure/Usings.cs +15 -0
  89. package/generators/microservice/templates/microservice/src/entrypoints/CodeDesignPlus.Net.Microservice.AsyncWorker/CodeDesignPlus.Net.Microservice.AsyncWorker.csproj +31 -0
  90. package/generators/microservice/templates/microservice/src/entrypoints/CodeDesignPlus.Net.Microservice.AsyncWorker/Program.cs +41 -0
  91. package/generators/microservice/templates/microservice/src/entrypoints/CodeDesignPlus.Net.Microservice.AsyncWorker/Properties/launchSettings.json +15 -0
  92. package/generators/microservice/templates/microservice/src/entrypoints/CodeDesignPlus.Net.Microservice.AsyncWorker/Usings.cs +10 -0
  93. package/generators/microservice/templates/microservice/src/entrypoints/CodeDesignPlus.Net.Microservice.AsyncWorker/appsettings.Development.json +2 -0
  94. package/generators/microservice/templates/microservice/src/entrypoints/CodeDesignPlus.Net.Microservice.AsyncWorker/appsettings.json +129 -0
  95. package/generators/microservice/templates/microservice/src/entrypoints/CodeDesignPlus.Net.Microservice.Rest/CodeDesignPlus.Net.Microservice.Rest.csproj +36 -0
  96. package/generators/microservice/templates/microservice/src/entrypoints/CodeDesignPlus.Net.Microservice.Rest/CodeDesignPlus.Net.Microservice.Rest.csproj.user +11 -0
  97. package/generators/microservice/templates/microservice/src/entrypoints/CodeDesignPlus.Net.Microservice.Rest/Controllers/OrderController.cs +138 -0
  98. package/generators/microservice/templates/microservice/src/entrypoints/CodeDesignPlus.Net.Microservice.Rest/Core/Mapster/MapsterConfig.cs +12 -0
  99. package/generators/microservice/templates/microservice/src/entrypoints/CodeDesignPlus.Net.Microservice.Rest/Dockerfile +37 -0
  100. package/generators/microservice/templates/microservice/src/entrypoints/CodeDesignPlus.Net.Microservice.Rest/Program.cs +52 -0
  101. package/generators/microservice/templates/microservice/src/entrypoints/CodeDesignPlus.Net.Microservice.Rest/Properties/launchSettings.json +26 -0
  102. package/generators/microservice/templates/microservice/src/entrypoints/CodeDesignPlus.Net.Microservice.Rest/Usings.cs +22 -0
  103. package/generators/microservice/templates/microservice/src/entrypoints/CodeDesignPlus.Net.Microservice.Rest/appsettings.Development.json +3 -0
  104. package/generators/microservice/templates/microservice/src/entrypoints/CodeDesignPlus.Net.Microservice.Rest/appsettings.json +86 -0
  105. package/generators/microservice/templates/microservice/src/entrypoints/CodeDesignPlus.Net.Microservice.gRpc/CodeDesignPlus.Net.Microservice.gRpc.csproj +35 -0
  106. package/generators/microservice/templates/microservice/src/entrypoints/CodeDesignPlus.Net.Microservice.gRpc/CodeDesignPlus.Net.Microservice.gRpc.csproj.user +9 -0
  107. package/generators/microservice/templates/microservice/src/entrypoints/CodeDesignPlus.Net.Microservice.gRpc/Core/Mapster/MapsterConfig.cs +13 -0
  108. package/generators/microservice/templates/microservice/src/entrypoints/CodeDesignPlus.Net.Microservice.gRpc/Program.cs +61 -0
  109. package/generators/microservice/templates/microservice/src/entrypoints/CodeDesignPlus.Net.Microservice.gRpc/Properties/launchSettings.json +23 -0
  110. package/generators/microservice/templates/microservice/src/entrypoints/CodeDesignPlus.Net.Microservice.gRpc/Protos/orders.proto +66 -0
  111. package/generators/microservice/templates/microservice/src/entrypoints/CodeDesignPlus.Net.Microservice.gRpc/Services/OrderService.cs +29 -0
  112. package/generators/microservice/templates/microservice/src/entrypoints/CodeDesignPlus.Net.Microservice.gRpc/Usings.cs +12 -0
  113. package/generators/microservice/templates/microservice/src/entrypoints/CodeDesignPlus.Net.Microservice.gRpc/appsettings.Development.json +3 -0
  114. package/generators/microservice/templates/microservice/src/entrypoints/CodeDesignPlus.Net.Microservice.gRpc/appsettings.json +92 -0
  115. package/generators/microservice/templates/microservice/tests/integration/CodeDesignPlus.Net.Microservice.AsyncWorker.Test/CodeDesignPlus.Net.Microservice.AsyncWorker.Test.csproj +35 -0
  116. package/generators/microservice/templates/microservice/tests/integration/CodeDesignPlus.Net.Microservice.AsyncWorker.Test/Properties/launchSettings.json +12 -0
  117. package/generators/microservice/templates/microservice/tests/integration/CodeDesignPlus.Net.Microservice.AsyncWorker.Test/Usings.cs +8 -0
  118. package/generators/microservice/templates/microservice/tests/integration/CodeDesignPlus.Net.Microservice.Rest.Test/CodeDesignPlus.Net.Microservice.Rest.Test.csproj +36 -0
  119. package/generators/microservice/templates/microservice/tests/integration/CodeDesignPlus.Net.Microservice.Rest.Test/Controllers/OrderControllerTest.cs +337 -0
  120. package/generators/microservice/templates/microservice/tests/integration/CodeDesignPlus.Net.Microservice.Rest.Test/Properties/launchSettings.json +12 -0
  121. package/generators/microservice/templates/microservice/tests/integration/CodeDesignPlus.Net.Microservice.Rest.Test/Usings.cs +8 -0
  122. package/generators/microservice/templates/microservice/tests/integration/CodeDesignPlus.Net.Microservice.gRpc.Test/CodeDesignPlus.Net.Microservice.gRpc.Test.csproj +46 -0
  123. package/generators/microservice/templates/microservice/tests/integration/CodeDesignPlus.Net.Microservice.gRpc.Test/Protos/orders.proto +65 -0
  124. package/generators/microservice/templates/microservice/tests/integration/CodeDesignPlus.Net.Microservice.gRpc.Test/Services/OrdersServiceTest.cs +64 -0
  125. package/generators/microservice/templates/microservice/tests/integration/CodeDesignPlus.Net.Microservice.gRpc.Test/Usings.cs +7 -0
  126. package/generators/microservice/templates/microservice/tests/load/load-rest.js +63 -0
  127. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Application.Test/CodeDesignPlus.Net.Microservice.Application.Test.csproj +34 -0
  128. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Application.Test/Order/Commands/AddProductToOrder/AddProductToOrderCommandHandlerTest.cs +98 -0
  129. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Application.Test/Order/Commands/AddProductToOrder/AddProductToOrderCommandTest.cs +84 -0
  130. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Application.Test/Order/Commands/CancelOrder/CancelOrderCommandHandlerTest.cs +74 -0
  131. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Application.Test/Order/Commands/CancelOrder/CancelOrderCommandTest.cs +43 -0
  132. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Application.Test/Order/Commands/CompleteOrder/CompleteOrderCommandHandlerTest.cs +74 -0
  133. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Application.Test/Order/Commands/CompleteOrder/CompleteOrderCommandTest.cs +32 -0
  134. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Application.Test/Order/Commands/CreateOrder/CreateOrderCommandHandlerTest.cs +100 -0
  135. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Application.Test/Order/Commands/CreateOrder/CreateOrderCommandTest.cs +122 -0
  136. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Application.Test/Order/Commands/RemoveProduct/RemoveProductCommandHandlerTest.cs +71 -0
  137. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Application.Test/Order/Commands/RemoveProduct/RemoveProductCommandTest.cs +33 -0
  138. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Application.Test/Order/Commands/UpdateQuantityProduct/UpdateQuantityProductCommandHandlerTest.cs +82 -0
  139. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Application.Test/Order/Commands/UpdateQuantityProduct/UpdateQuantityProductCommandTest.cs +51 -0
  140. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Application.Test/Order/Queries/FindOrderById/FindOrderByIdQueryHandlerTest.cs +70 -0
  141. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Application.Test/Order/Queries/GetAllOrders/GetAllOrdersQueryHandlerTest.cs +80 -0
  142. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Application.Test/Setup/MapsterConfigTest.cs +20 -0
  143. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Application.Test/Usings.cs +18 -0
  144. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.AsyncWorker.Test/CodeDesignPlus.Net.Microservice.AsyncWorker.Test.csproj +38 -0
  145. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.AsyncWorker.Test/Usings.cs +9 -0
  146. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Default.Test/CodeDesignPlus.Net.Microservice.Default.Test.csproj +35 -0
  147. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Default.Test/Usings.cs +6 -0
  148. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Default.Test/Validations/AggregateTest.cs +37 -0
  149. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Default.Test/Validations/CommandsTests.cs +29 -0
  150. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Default.Test/Validations/DataTransferObjectTest.cs +47 -0
  151. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Default.Test/Validations/DomainEventTest.cs +42 -0
  152. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Default.Test/Validations/EntityTest.cs +25 -0
  153. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Default.Test/Validations/ErrorsTest.cs +55 -0
  154. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Default.Test/Validations/QueryTests.cs +29 -0
  155. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Default.Test/Validations/StartupTest.cs +43 -0
  156. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Domain.Test/CodeDesignPlus.Net.Microservice.Domain.Test.csproj +38 -0
  157. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Domain.Test/DomainEvents/OrderCancelledDomainEventTest.cs +46 -0
  158. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Domain.Test/OrderAggregateTest.cs +518 -0
  159. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Domain.Test/Usings.cs +7 -0
  160. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Infrastructure.Test/CodeDesignPlus.Net.Microservice.Infrastructure.Test.csproj +34 -0
  161. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Infrastructure.Test/Repositories/OrderRepositoryTest.cs +259 -0
  162. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Infrastructure.Test/Usings.cs +14 -0
  163. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Rest.Test/CodeDesignPlus.Net.Microservice.Rest.Test.csproj +40 -0
  164. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Rest.Test/Controllers/OrderControllerTest.cs +189 -0
  165. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Rest.Test/Core/Mapster/MapsterConfigTest.cs +19 -0
  166. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.Rest.Test/Usings.cs +14 -0
  167. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.gRpc.Test/CodeDesignPlus.Net.Microservice.gRpc.Test.csproj +39 -0
  168. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.gRpc.Test/Core/Mapster/MapsterConfigTest.cs +19 -0
  169. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.gRpc.Test/Services/OrderServiceTest.cs +72 -0
  170. package/generators/microservice/templates/microservice/tests/unit/CodeDesignPlus.Net.Microservice.gRpc.Test/Usings.cs +15 -0
  171. package/generators/microservice/templates/microservice/tools/convert-crlf-to-lf.sh +6 -0
  172. package/generators/microservice/templates/microservice/tools/sonarqube/sonar.ps1 +18 -0
  173. package/generators/microservice/templates/microservice/tools/sonarqube/sonar.sh +18 -0
  174. package/generators/microservice/templates/microservice/tools/update-packages/update-packages.ps1 +10 -0
  175. package/generators/microservice/templates/microservice/tools/update-packages/update-packages.sh +11 -0
  176. package/generators/microservice/templates/microservice/tools/upgrade-dotnet/upgrade-assistant.ps1 +10 -0
  177. package/generators/microservice/templates/microservice/tools/upgrade-dotnet/upgrade-assistant.sh +11 -0
  178. package/generators/microservice/templates/microservice/tools/vault/config-vault.ps1 +178 -0
  179. package/generators/microservice/templates/microservice/tools/vault/config-vault.sh +152 -0
  180. package/generators/microservice/templates/others/MapsterConfig.cs +9 -0
  181. package/generators/microservice/templates/query/ItemQuery.cs +4 -0
  182. package/generators/microservice/templates/query/ItemQueryHandler.cs +9 -0
  183. package/generators/microservice/templates/repository/IItemRepository.cs +6 -0
  184. package/generators/microservice/templates/repository/ItemRepository.cs +7 -0
  185. package/generators/microservice/templates/value-object/ItemValueObject.cs +23 -0
  186. package/generators/microservice/types/aggregate.mjs +19 -0
  187. package/generators/microservice/types/appsettings.mjs +26 -0
  188. package/generators/microservice/types/base.mjs +24 -0
  189. package/generators/microservice/types/command.mjs +38 -0
  190. package/generators/microservice/types/consumer.mjs +21 -0
  191. package/generators/microservice/types/controller.mjs +20 -0
  192. package/generators/microservice/types/dataTransferObject.mjs +19 -0
  193. package/generators/microservice/types/domainEvents.mjs +22 -0
  194. package/generators/microservice/types/entity.mjs +21 -0
  195. package/generators/microservice/types/index.mjs +25 -0
  196. package/generators/microservice/types/proto.mjs +19 -0
  197. package/generators/microservice/types/query.mjs +38 -0
  198. package/generators/microservice/types/repository.mjs +21 -0
  199. package/generators/microservice/types/valueObject.mjs +23 -0
  200. package/package.json +70 -0
@@ -0,0 +1,36 @@
1
+ <Project Sdk="Microsoft.NET.Sdk">
2
+ <PropertyGroup>
3
+ <TargetFramework>net9.0</TargetFramework>
4
+ <ImplicitUsings>enable</ImplicitUsings>
5
+ <Nullable>enable</Nullable>
6
+ <IsPackable>false</IsPackable>
7
+ <IsTestProject>true</IsTestProject>
8
+ </PropertyGroup>
9
+ <ItemGroup>
10
+ <PackageReference Include="coverlet.collector" Version="6.0.3">
11
+ <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
12
+ <PrivateAssets>all</PrivateAssets>
13
+ </PackageReference>
14
+ <PackageReference Include="Microsoft.AspNetCore.Authentication" Version="2.2.0" />
15
+ <PackageReference Include="CodeDesignPlus.Net.xUnit.Microservice" Version="0.5.0-beta.60" />
16
+ <PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="9.0.0" />
17
+ <PackageReference Include="Ductus.FluentDocker.XUnit" Version="2.10.59" />
18
+ <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
19
+ <PackageReference Include="xunit" Version="2.9.2" />
20
+ <PackageReference Include="xunit.runner.visualstudio" Version="3.0.0">
21
+ <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
22
+ <PrivateAssets>all</PrivateAssets>
23
+ </PackageReference>
24
+ </ItemGroup>
25
+ <ItemGroup>
26
+ <ProjectReference Include="..\..\..\src\entrypoints\CodeDesignPlus.Net.Microservice.Rest\CodeDesignPlus.Net.Microservice.Rest.csproj" />
27
+ </ItemGroup>
28
+ <Target Name="DisableAnalyzers" BeforeTargets="CoreCompile">
29
+ <ItemGroup>
30
+ <Analyzer Remove="@(Analyzer)" Condition="'%(Filename)' == 'CodeDesignPlus.Net.Generator'" />
31
+ </ItemGroup>
32
+ </Target>
33
+ <ItemGroup>
34
+ <Using Include="Xunit" />
35
+ </ItemGroup>
36
+ </Project>
@@ -0,0 +1,337 @@
1
+ namespace CodeDesignPlus.Net.Microservice.Rest.Test.Controllers;
2
+
3
+ public class OrderControllerTest : ServerBase<Program>, IClassFixture<Server<Program>>
4
+ {
5
+ public OrderControllerTest(Server<Program> server) : base(server)
6
+ {
7
+ server.InMemoryCollection = (x) =>
8
+ {
9
+ x.Add("Vault:Enabled", "false");
10
+ x.Add("Vault:Address", "http://localhost:8200");
11
+ x.Add("Vault:Token", "root");
12
+ x.Add("Solution", "CodeDesignPlus");
13
+ x.Add("AppName", "my-test");
14
+ x.Add("RabbitMQ:UserName", "guest");
15
+ x.Add("RabbitMQ:Password", "guest");
16
+ x.Add("Security:ValidAudiences:0", Guid.NewGuid().ToString());
17
+ };
18
+ }
19
+
20
+ [Fact]
21
+ public async Task GetOrders_ReturnOk()
22
+ {
23
+ var tenant = Guid.NewGuid();
24
+ var order = await this.CreateOrderAsync(tenant);
25
+
26
+ var response = await this.RequestAsync("http://localhost/api/Orders", tenant, null, HttpMethod.Get);
27
+
28
+ Assert.NotNull(response);
29
+ Assert.Equal(HttpStatusCode.OK, response.StatusCode);
30
+
31
+ var json = await response.Content.ReadAsStringAsync();
32
+
33
+ var orders = Newtonsoft.Json.JsonConvert.DeserializeObject<IEnumerable<OrderDto>>(json);
34
+
35
+ Assert.NotNull(orders);
36
+ Assert.NotEmpty(orders);
37
+ Assert.Contains(orders, x => x.Id == order.Id);
38
+ }
39
+
40
+ [Fact]
41
+ public async Task GetOrderById_ReturnOk()
42
+ {
43
+ var tenant = Guid.NewGuid();
44
+ var orderCreated = await this.CreateOrderAsync(tenant);
45
+
46
+ var response = await this.RequestAsync($"http://localhost/api/Orders/{orderCreated.Id}", tenant, null, HttpMethod.Get);
47
+
48
+ Assert.NotNull(response);
49
+ Assert.Equal(HttpStatusCode.OK, response.StatusCode);
50
+
51
+ var json = await response.Content.ReadAsStringAsync();
52
+
53
+ var order = Newtonsoft.Json.JsonConvert.DeserializeObject<OrderDto>(json);
54
+
55
+ Assert.NotNull(order);
56
+ Assert.Equal(orderCreated.Id, order.Id);
57
+ Assert.Equal(orderCreated.Client.Name, order.Client.Name);
58
+ Assert.Equal(orderCreated.Client.Id, order.Client.Id);
59
+ }
60
+
61
+ [Fact]
62
+ public async Task CreateOrder_ReturnNoContent()
63
+ {
64
+ var tenant = Guid.NewGuid();
65
+ var data = new CreateOrderDto()
66
+ {
67
+ Id = Guid.NewGuid(),
68
+ Client = new ClientDto()
69
+ {
70
+ Name = "CodeDesignPlus",
71
+ Id = Guid.NewGuid(),
72
+ Document = "1234567890",
73
+ TypeDocument = "CC"
74
+ },
75
+ Address = new AddressDto()
76
+ {
77
+ Country = "Colombia",
78
+ State = "Bogota",
79
+ City = "Bogota",
80
+ Address = "Calle 123",
81
+ CodePostal = 123456
82
+ }
83
+ };
84
+
85
+ var json = Newtonsoft.Json.JsonConvert.SerializeObject(data);
86
+
87
+ var content = new StringContent(json, Encoding.UTF8, "application/json");
88
+
89
+ var response = await this.RequestAsync("http://localhost/api/Orders", tenant, content, HttpMethod.Post);
90
+
91
+ var order = await this.GetRecordAsync(data.Id);
92
+
93
+ Assert.NotNull(response);
94
+ Assert.Equal(HttpStatusCode.NoContent, response.StatusCode);
95
+
96
+ Assert.Equal(data.Id, order.Id);
97
+ Assert.Equal(data.Client.Name, order.Client.Name);
98
+ Assert.Equal(data.Client.Id, order.Client.Id);
99
+ Assert.NotEqual(Guid.Empty, order.CreatedBy);
100
+ Assert.Equal(Guid.Empty, order.UpdatedBy);
101
+ Assert.NotEqual(0, order.CreatedAt);
102
+ Assert.Equal(0, order.UpdatedAt);
103
+ }
104
+
105
+ [Fact]
106
+ public async Task CancelOrder_ReturnNoContent()
107
+ {
108
+ // Arrange
109
+ var tenant = Guid.NewGuid();
110
+ var orderCreated = await this.CreateOrderAsync(tenant);
111
+
112
+ var cancelOrder = new CancelOrderDto() { Id = Guid.NewGuid(), Reason = "Cancellation by address" };
113
+
114
+ var content = BuildBody(cancelOrder);
115
+
116
+ // Act
117
+ var response = await this.RequestAsync($"http://localhost/api/Orders/{orderCreated.Id}/cancel", tenant, content, HttpMethod.Delete);
118
+
119
+ var order = await this.GetRecordAsync(orderCreated.Id);
120
+
121
+ Assert.NotNull(response);
122
+ Assert.Equal(HttpStatusCode.NoContent, response.StatusCode);
123
+ Assert.Equal(cancelOrder.Reason, order.ReasonForCancellation);
124
+ Assert.Equal(Domain.Enums.OrderStatus.Cancelled, order.Status);
125
+ Assert.NotNull(order.CancelledAt);
126
+ Assert.NotEqual(Guid.Empty, order.CreatedBy);
127
+ Assert.NotEqual(Guid.Empty, order.UpdatedBy);
128
+ Assert.NotEqual(0, order.CreatedAt);
129
+ Assert.NotEqual(0, order.UpdatedAt);
130
+ }
131
+
132
+ [Fact]
133
+ public async Task CompleteOrder_ReturnNoContent()
134
+ {
135
+ // Arrange
136
+ var tenant = Guid.NewGuid();
137
+ var orderCreated = await this.CreateOrderAsync(tenant);
138
+
139
+ // Act
140
+ var response = await this.RequestAsync($"http://localhost/api/Orders/{orderCreated.Id}/complete", tenant, null, HttpMethod.Patch);
141
+
142
+ var order = await this.GetRecordAsync(orderCreated.Id);
143
+
144
+ Assert.NotNull(response);
145
+ Assert.Equal(HttpStatusCode.NoContent, response.StatusCode);
146
+ Assert.Equal(Domain.Enums.OrderStatus.Completed, order.Status);
147
+ Assert.NotNull(order.CompletedAt);
148
+ Assert.NotEqual(Guid.Empty, order.CreatedBy);
149
+ Assert.NotEqual(Guid.Empty, order.UpdatedBy);
150
+ Assert.NotEqual(0, order.CreatedAt);
151
+ Assert.NotEqual(0, order.UpdatedAt);
152
+ }
153
+
154
+ [Fact]
155
+ public async Task AddProductToOrder_ReturnNoContent()
156
+ {
157
+ // Arrange
158
+ var tenant = Guid.NewGuid();
159
+ var orderCreated = await this.CreateOrderAsync(tenant);
160
+
161
+ var addProduct = new AddProductToOrderDto()
162
+ {
163
+ Id = orderCreated.Id,
164
+ Description = "Product Test",
165
+ IdProduct = Guid.NewGuid(),
166
+ Name = "Product Test",
167
+ Price = 100,
168
+ Quantity = 2
169
+ };
170
+
171
+ var content = BuildBody(addProduct);
172
+
173
+ // Act
174
+ var response = await this.RequestAsync($"http://localhost/api/Orders/{orderCreated.Id}/products", tenant, content, HttpMethod.Post);
175
+
176
+ var order = await this.GetRecordAsync(orderCreated.Id);
177
+
178
+ Assert.NotNull(response);
179
+ Assert.Equal(HttpStatusCode.NoContent, response.StatusCode);
180
+ Assert.Single(order.Products);
181
+ Assert.Equal(addProduct.Description, order.Products.First().Description);
182
+ Assert.Equal(addProduct.IdProduct, order.Products.First().Id);
183
+ Assert.Equal(addProduct.Name, order.Products.First().Name);
184
+ Assert.Equal(addProduct.Price, order.Products.First().Price);
185
+ Assert.Equal(addProduct.Quantity, order.Products.First().Quantity);
186
+ Assert.NotEqual(Guid.Empty, order.CreatedBy);
187
+ Assert.NotEqual(Guid.Empty, order.UpdatedBy);
188
+ Assert.NotEqual(0, order.CreatedAt);
189
+ Assert.NotEqual(0, order.UpdatedAt);
190
+ }
191
+
192
+ [Fact]
193
+ public async Task UpdateQuantityProduct_ReturnNoContent()
194
+ {
195
+ // Arrange
196
+ var tenant = Guid.NewGuid();
197
+ var orderCreated = await this.CreateOrderAsync(tenant);
198
+
199
+ var addProduct = new AddProductToOrderDto()
200
+ {
201
+ Id = orderCreated.Id,
202
+ Description = "Product Test",
203
+ IdProduct = Guid.NewGuid(),
204
+ Name = "Product Test",
205
+ Price = 100,
206
+ Quantity = 2
207
+ };
208
+
209
+ var content = BuildBody(addProduct);
210
+
211
+ await this.RequestAsync($"http://localhost/api/Orders/{orderCreated.Id}/products", tenant, content, HttpMethod.Post);
212
+
213
+ var updateQuantity = new UpdateQuantityProductDto()
214
+ {
215
+ Id = orderCreated.Id,
216
+ ProductId = addProduct.IdProduct,
217
+ Quantity = 5
218
+ };
219
+
220
+ content = BuildBody(updateQuantity);
221
+
222
+ // Act
223
+ var response = await this.RequestAsync($"http://localhost/api/Orders/{orderCreated.Id}/products/{addProduct.IdProduct}", tenant, content, HttpMethod.Put);
224
+
225
+ var order = await this.GetRecordAsync(orderCreated.Id);
226
+
227
+ Assert.NotNull(response);
228
+ Assert.Equal(HttpStatusCode.NoContent, response.StatusCode);
229
+ Assert.Single(order.Products);
230
+ Assert.Equal(updateQuantity.Quantity, order.Products.First().Quantity);
231
+ Assert.NotEqual(Guid.Empty, order.CreatedBy);
232
+ Assert.NotEqual(Guid.Empty, order.UpdatedBy);
233
+ Assert.NotEqual(0, order.CreatedAt);
234
+ Assert.NotEqual(0, order.UpdatedAt);
235
+ }
236
+
237
+ [Fact]
238
+ public async Task RemoveProductFromOrder_ReturnNoContent()
239
+ {
240
+ // Arrange
241
+ var tenant = Guid.NewGuid();
242
+ var orderCreated = await this.CreateOrderAsync(tenant);
243
+
244
+ var addProduct = new AddProductToOrderDto()
245
+ {
246
+ Id = orderCreated.Id,
247
+ Description = "Product Test",
248
+ IdProduct = Guid.NewGuid(),
249
+ Name = "Product Test",
250
+ Price = 100,
251
+ Quantity = 2
252
+ };
253
+
254
+ var content = BuildBody(addProduct);
255
+
256
+ await this.RequestAsync($"http://localhost/api/Orders/{orderCreated.Id}/products", tenant, content, HttpMethod.Post);
257
+
258
+ // Act
259
+ var response = await this.RequestAsync($"http://localhost/api/Orders/{orderCreated.Id}/products/{addProduct.IdProduct}", tenant, null, HttpMethod.Delete);
260
+
261
+ var order = await this.GetRecordAsync(orderCreated.Id);
262
+
263
+ Assert.NotNull(response);
264
+ Assert.Equal(HttpStatusCode.NoContent, response.StatusCode);
265
+ Assert.Empty(order.Products);
266
+ Assert.NotEqual(Guid.Empty, order.CreatedBy);
267
+ Assert.NotEqual(Guid.Empty, order.UpdatedBy);
268
+ Assert.NotEqual(0, order.CreatedAt);
269
+ Assert.NotEqual(0, order.UpdatedAt);
270
+ }
271
+
272
+ private static StringContent BuildBody(object data)
273
+ {
274
+ var json = Newtonsoft.Json.JsonConvert.SerializeObject(data);
275
+
276
+ var content = new StringContent(json, Encoding.UTF8, "application/json");
277
+
278
+ return content;
279
+ }
280
+
281
+ private async Task<CreateOrderDto> CreateOrderAsync(Guid tenant)
282
+ {
283
+ var data = new CreateOrderDto()
284
+ {
285
+ Id = Guid.NewGuid(),
286
+ Client = new ClientDto()
287
+ {
288
+ Name = "CodeDesignPlus",
289
+ Id = Guid.NewGuid(),
290
+ Document = "1234567890",
291
+ TypeDocument = "CC"
292
+ },
293
+ Address = new AddressDto()
294
+ {
295
+ Country = "Colombia",
296
+ State = "Bogota",
297
+ City = "Bogota",
298
+ Address = "Calle 123",
299
+ CodePostal = 123456
300
+ }
301
+ };
302
+
303
+ var json = Newtonsoft.Json.JsonConvert.SerializeObject(data);
304
+
305
+ var content = new StringContent(json, Encoding.UTF8, "application/json");
306
+
307
+ await this.RequestAsync("http://localhost/api/Orders", tenant, content, HttpMethod.Post);
308
+
309
+ return data;
310
+ }
311
+
312
+ private async Task<OrderDto> GetRecordAsync(Guid id)
313
+ {
314
+ var response = await this.RequestAsync($"http://localhost/api/Orders/{id}", Guid.NewGuid(), null, HttpMethod.Get);
315
+
316
+ var json = await response.Content.ReadAsStringAsync();
317
+
318
+ return Newtonsoft.Json.JsonConvert.DeserializeObject<OrderDto>(json)!;
319
+ }
320
+
321
+ private async Task<HttpResponseMessage> RequestAsync(string uri, Guid tenant, HttpContent? content, HttpMethod method)
322
+ {
323
+ var httpRequestMessage = new HttpRequestMessage()
324
+ {
325
+ RequestUri = new Uri(uri),
326
+ Content = content,
327
+ Method = method
328
+ };
329
+ httpRequestMessage.Headers.Authorization = new AuthenticationHeaderValue("TestAuth");
330
+ httpRequestMessage.Headers.Add("X-Tenant", tenant.ToString());
331
+
332
+ var response = await Client.SendAsync(httpRequestMessage);
333
+
334
+ return response;
335
+ }
336
+
337
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "profiles": {
3
+ "CodeDesignPlus.Net.Microservice.Rest.Test": {
4
+ "commandName": "Project",
5
+ "launchBrowser": true,
6
+ "environmentVariables": {
7
+ "ASPNETCORE_ENVIRONMENT": "Development"
8
+ },
9
+ "applicationUrl": "https://localhost:57399;http://localhost:57400"
10
+ }
11
+ }
12
+ }
@@ -0,0 +1,8 @@
1
+ global using CodeDesignPlus.Microservice.Api.Dtos;
2
+ global using CodeDesignPlus.Net.xUnit.Microservice.Server;
3
+ global using System.Net;
4
+ global using System.Net.Http.Headers;
5
+ global using System.Text;
6
+ global using CodeDesignPlus.Net.Serializers;
7
+
8
+ global using CodeDesignPlus.Net.Microservice.Application.Order.DataTransferObjects;
@@ -0,0 +1,46 @@
1
+ <Project Sdk="Microsoft.NET.Sdk">
2
+ <PropertyGroup>
3
+ <TargetFramework>net9.0</TargetFramework>
4
+ <ImplicitUsings>enable</ImplicitUsings>
5
+ <Nullable>enable</Nullable>
6
+ <IsPackable>false</IsPackable>
7
+ <IsTestProject>true</IsTestProject>
8
+ </PropertyGroup>
9
+ <ItemGroup>
10
+ <PackageReference Include="coverlet.collector" Version="6.0.3">
11
+ <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
12
+ <PrivateAssets>all</PrivateAssets>
13
+ </PackageReference>
14
+ <PackageReference Include="Google.Protobuf" Version="3.29.2" />
15
+ <PackageReference Include="Grpc.Net.Client" Version="2.67.0" />
16
+ <PackageReference Include="Grpc.Tools" Version="2.68.1">
17
+ <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
18
+ <PrivateAssets>all</PrivateAssets>
19
+ </PackageReference>
20
+ <PackageReference Include="CodeDesignPlus.Net.xUnit.Microservice" Version="0.5.0-beta.60" />
21
+ <PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="9.0.0" />
22
+ <PackageReference Include="Microsoft.AspNetCore.Authentication" Version="2.2.0" />
23
+ <PackageReference Include="Microsoft.AspNetCore.TestHost" Version="9.0.0" />
24
+ <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
25
+ <PackageReference Include="xunit" Version="2.9.2" />
26
+ <PackageReference Include="xunit.runner.visualstudio" Version="3.0.0">
27
+ <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
28
+ <PrivateAssets>all</PrivateAssets>
29
+ </PackageReference>
30
+ <PackageReference Include="Ductus.FluentDocker.XUnit" Version="2.10.59" />
31
+ </ItemGroup>
32
+ <Target Name="DisableAnalyzers" BeforeTargets="CoreCompile">
33
+ <ItemGroup>
34
+ <Analyzer Remove="@(Analyzer)" Condition="'%(Filename)' == 'CodeDesignPlus.Net.Generator'" />
35
+ </ItemGroup>
36
+ </Target>
37
+ <ItemGroup>
38
+ <ProjectReference Include="..\..\..\src\entrypoints\CodeDesignPlus.Net.Microservice.gRpc\CodeDesignPlus.Net.Microservice.gRpc.csproj" />
39
+ </ItemGroup>
40
+ <ItemGroup Label="Protos">
41
+ <Protobuf Include="Protos\orders.proto" GrpcServices="Client" />
42
+ </ItemGroup>
43
+ <ItemGroup>
44
+ <Using Include="Xunit" />
45
+ </ItemGroup>
46
+ </Project>
@@ -0,0 +1,65 @@
1
+ syntax = "proto3";
2
+
3
+
4
+ import "google/protobuf/wrappers.proto";
5
+
6
+ option csharp_namespace = "CodeDesignPlus.Net.Microservice.gRpc.Test";
7
+
8
+ package orders;
9
+
10
+ enum OrderType {
11
+ NoneOrder = 0;
12
+ Asc = 1;
13
+ Desc = 2;
14
+ }
15
+
16
+ enum OrderStatus
17
+ {
18
+ NoneStatus = 0;
19
+ Created = 1;
20
+ Pending = 2;
21
+ Completed = 3;
22
+ Cancelled= 4;
23
+ }
24
+
25
+ // The orders service definition.
26
+ service Orders {
27
+ rpc GetOrder (stream GetOrderRequest) returns (stream GetOrderResponse);
28
+ }
29
+
30
+ message GetOrderRequest {
31
+ string Id = 1;
32
+ }
33
+
34
+ // Types to response
35
+ message GetOrderResponse {
36
+ Order Order = 1;
37
+ }
38
+
39
+ message Order {
40
+ string id = 1;
41
+ google.protobuf.Int64Value completed_at = 2;
42
+ google.protobuf.Int64Value cancelled_at = 3;
43
+ Client client = 4;
44
+ repeated Product products = 5;
45
+ OrderStatus status = 6;
46
+ google.protobuf.StringValue reason_for_cancellation = 7;
47
+ int64 created_at = 8;
48
+ string created_by = 9;
49
+ int64 updated_at = 10;
50
+ string updated_by = 11;
51
+ bool is_active = 12;
52
+ }
53
+
54
+ message Client {
55
+ string id = 1;
56
+ string name = 2;
57
+ }
58
+
59
+ message Product {
60
+ string id = 1;
61
+ string name = 2;
62
+ google.protobuf.StringValue description = 3;
63
+ double price = 4;
64
+ int32 quantity = 5;
65
+ }
@@ -0,0 +1,64 @@
1
+ using CodeDesignPlus.Net.Microservice.Domain.ValueObjects;
2
+
3
+ namespace CodeDesignPlus.Net.Microservice.gRpc.Test.Services;
4
+
5
+ public class OrdersServiceTest : ServerBase<Program>, IClassFixture<Server<Program>>
6
+ {
7
+ public OrdersServiceTest(Server<Program> server) : base(server)
8
+ {
9
+ server.InMemoryCollection = (x) =>
10
+ {
11
+ x.Add("Vault:Enabled", "false");
12
+ x.Add("Vault:Address", "http://localhost:8200");
13
+ x.Add("Vault:Token", "root");
14
+ x.Add("Solution", "CodeDesignPlus");
15
+ x.Add("AppName", "my-test");
16
+ x.Add("RabbitMQ:UserName", "guest");
17
+ x.Add("RabbitMQ:Password", "guest");
18
+ };
19
+ }
20
+
21
+ [Fact]
22
+ public async Task GetOrder_BidirectionalStreaming_ValidId_ReturnsOrder()
23
+ {
24
+ bool isInvoked = false;
25
+ var orderClient = new Orders.OrdersClient(Channel);
26
+ var client = ClientValueObject.Create(Guid.NewGuid(), "CodeDesignPlus", "1234567890", "CC");
27
+ var address = AddressValueObject.Create("Colombia", "Bogota", "Bogota", "Calle 123", 123456);
28
+
29
+ var orderExpected = OrderAggregate.Create(Guid.NewGuid(), client, address, Guid.NewGuid(), Guid.NewGuid());
30
+
31
+ var repository = Services.GetRequiredService<IOrderRepository>();
32
+
33
+ await repository.CreateAsync(orderExpected, CancellationToken.None);
34
+
35
+ using var streamingCall = orderClient.GetOrder();
36
+
37
+ _ = Task.Run(async () =>
38
+ {
39
+ await foreach (var response in streamingCall.ResponseStream.ReadAllAsync())
40
+ {
41
+ Assert.NotNull(response);
42
+ Assert.Equal(orderExpected.Id.ToString(), response.Order.Id);
43
+ Assert.Equal(orderExpected.Client.Id.ToString(), response.Order.Client.Id);
44
+ Assert.Equal(orderExpected.Client.Name, response.Order.Client.Name);
45
+ Assert.Equal(orderExpected.CreatedBy.ToString(), response.Order.CreatedBy);
46
+ Assert.True(response.Order.CreatedAt > 0);
47
+
48
+ isInvoked = true;
49
+ }
50
+ });
51
+
52
+ await streamingCall.RequestStream.WriteAsync(new GetOrderRequest
53
+ {
54
+ Id = orderExpected.Id.ToString()
55
+ });
56
+
57
+ await Task.Delay(1000);
58
+
59
+ await streamingCall.RequestStream.CompleteAsync();
60
+
61
+ Assert.True(isInvoked);
62
+ }
63
+
64
+ }
@@ -0,0 +1,7 @@
1
+ global using CodeDesignPlus.Net.xUnit.Microservice.Server;
2
+ global using Grpc.Core;
3
+ global using Microsoft.Extensions.DependencyInjection;
4
+ global using CodeDesignPlus.Net.Serializers;
5
+
6
+ global using CodeDesignPlus.Net.Microservice.Domain;
7
+ global using CodeDesignPlus.Net.Microservice.Domain.Repositories;
@@ -0,0 +1,63 @@
1
+ import { check, sleep } from 'k6';
2
+ import http from 'k6/http';
3
+ import { uuidv4, randomIntBetween } from 'https://jslib.k6.io/k6-utils/1.4.0/index.js';
4
+
5
+
6
+ const params = {
7
+ headers: {
8
+ 'Content-Type': 'application/json',
9
+ 'X-Tenant': uuidv4(),
10
+ 'Authorization': 'Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1jNTdkTzZRR1RWQndhTmsiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJhNzRjYjE5Mi01OThjLTQ3NTctOTVhZS1iMzE1NzkzYmJiY2EiLCJpc3MiOiJodHRwczovL2NvZGVkZXNpZ25wbHVzLmIyY2xvZ2luLmNvbS8zNDYxZTMxMS1hNjZlLTQ2YWItYWZkZi0yYmJmYjcyYTVjYjAvdjIuMC8iLCJleHAiOjE3MzYzMDg1ODIsIm5iZiI6MTczNjMwNDk4Miwib2lkIjoiYzAzZjI4ZGEtMTI4Yy00Yzk3LThjZTgtMDAzNmFkY2U1YmU1Iiwic3ViIjoiYzAzZjI4ZGEtMTI4Yy00Yzk3LThjZTgtMDAzNmFkY2U1YmU1IiwiZmFtaWx5X25hbWUiOiJMaXNjYW5vIiwiY2l0eSI6IkJvZ290w6EiLCJwb3N0YWxDb2RlIjoiMTExNjExIiwic3RyZWV0QWRkcmVzcyI6IkNhbGxlIDNhICMgNTNjLTEzIiwic3RhdGUiOiJCb2dvdGEiLCJnaXZlbl9uYW1lIjoiV2lsem9uIiwibmFtZSI6IldpbHpvbiBMaXNjYW5vIiwiY291bnRyeSI6IkNvbG9tYmlhIiwiam9iVGl0bGUiOiJBcmNoaXRlY2giLCJlbWFpbHMiOlsiY29kZWRlc2lnbnBsdXNAb3V0bG9vay5jb20iXSwidGZwIjoiQjJDXzFfQ29kZURlc2VpZ25QbHVzIiwic2NwIjoicmVhZCIsImF6cCI6ImE3NGNiMTkyLTU5OGMtNDc1Ny05NWFlLWIzMTU3OTNiYmJjYSIsInZlciI6IjEuMCIsImlhdCI6MTczNjMwNDk4Mn0.sI-xBgZEBL_1wlbGvXndYPljtL--4qw6225cUHqgR_ZDpbaiuok55wSRtI9t95mh105DwjMQLBIykyoT-Pn0VEyAvGproeBExiLNE49bM0-yIRQQs_4Bkt1hQAcgOizMRMOzeMVp_cNkxNoDKzinl8939deV8WXbr-HP2hQRzn9eY_odbhfyBKl5EclUTfePXhZszsn8lYs5oxpdWSyD5MvBrXySu-0bV2Q9Tmi6NNfcnRLZ36qQPoQfoSt0ETBFOj1iICpp4767xb5Zd4b4bVkKcuXB1F0sBLNKjDRb-yeRxVNepUDrLflb2zymSQw6u8dZXxnOWSspGmnejpXg6A'
11
+ },
12
+ };
13
+
14
+ export const options = {
15
+ discardResponseBodies: true,
16
+ scenarios: {
17
+ contacts: {
18
+ executor: 'constant-arrival-rate',
19
+ duration: '600s',
20
+
21
+ // How many iterations per timeUnit
22
+ rate: 10,
23
+
24
+ // Start `rate` iterations per second
25
+ timeUnit: '1s',
26
+
27
+ // Pre-allocate 2 VUs before starting the test
28
+ preAllocatedVUs: 3,
29
+
30
+ // Spin up a maximum of 50 VUs to sustain the defined
31
+ // constant arrival rate.
32
+ maxVUs: 5000,
33
+ },
34
+ },
35
+ };
36
+
37
+ export default async function () {
38
+
39
+ const order = JSON.stringify({
40
+ "id": uuidv4(),
41
+ "client": {
42
+ "id": uuidv4(),
43
+ "name": `Client ${randomIntBetween(1, 1000)}`,
44
+ "document": `${randomIntBetween(1, 2123123)}`,
45
+ "typeDocument": "CC"
46
+ },
47
+ "address": {
48
+ "country": "Colombia",
49
+ "state": "Bogotá",
50
+ "city": "Bogotá",
51
+ "address": "Calle siempre viva",
52
+ "codePostal": 111611
53
+ }
54
+ });
55
+
56
+ let response = await http.asyncRequest('POST', 'http://localhost:5175/api/orders', order, params);
57
+
58
+ check(response, {
59
+ 'is status 204': (r) => r.status === 204,
60
+ });
61
+
62
+ sleep(1);
63
+ }
@@ -0,0 +1,34 @@
1
+ <Project Sdk="Microsoft.NET.Sdk">
2
+ <PropertyGroup>
3
+ <TargetFramework>net9.0</TargetFramework>
4
+ <ImplicitUsings>enable</ImplicitUsings>
5
+ <Nullable>enable</Nullable>
6
+ <IsPackable>false</IsPackable>
7
+ <IsTestProject>true</IsTestProject>
8
+ <IsPackable>false</IsPackable>
9
+ <SonarQubeExclude>true</SonarQubeExclude>
10
+ </PropertyGroup>
11
+ <ItemGroup>
12
+ <PackageReference Include="coverlet.msbuild" Version="6.0.3">
13
+ <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
14
+ <PrivateAssets>all</PrivateAssets>
15
+ </PackageReference>
16
+ <PackageReference Include="coverlet.collector" Version="6.0.3">
17
+ <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
18
+ <PrivateAssets>all</PrivateAssets>
19
+ </PackageReference>
20
+ <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
21
+ <PackageReference Include="Moq" Version="4.20.72" />
22
+ <PackageReference Include="xunit" Version="2.9.2" />
23
+ <PackageReference Include="xunit.runner.visualstudio" Version="3.0.0">
24
+ <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
25
+ <PrivateAssets>all</PrivateAssets>
26
+ </PackageReference>
27
+ </ItemGroup>
28
+ <ItemGroup>
29
+ <Using Include="Xunit" />
30
+ </ItemGroup>
31
+ <ItemGroup>
32
+ <ProjectReference Include="..\..\..\src\domain\CodeDesignPlus.Net.Microservice.Application\CodeDesignPlus.Net.Microservice.Application.csproj" />
33
+ </ItemGroup>
34
+ </Project>