TenantServiceTest.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396
  1. using qdr.fnd.core.test;
  2. using Quadarax.Application.QLiberace.Base.Dtos;
  3. using Quadarax.Application.QLiberace.Base.Mapper;
  4. using Quadarax.Application.QLiberace.Base.Repositories;
  5. using Quadarax.Application.QLiberace.Base.Services;
  6. using Quadarax.Application.QLiberace.Base.Tests.Services.Base;
  7. using Quadarax.Application.QLiberace.Base.Tests.Services.Fakes;
  8. using Quadarax.Application.QLiberace.Common;
  9. using Quadarax.Application.QLiberace.Common.Domain;
  10. using Quadarax.Foundation.Core.Data.Domain;
  11. using Quadarax.Foundation.Core.Data.Interface.Entity;
  12. using Quadarax.Foundation.Core.Value;
  13. #pragma warning disable CS8625
  14. namespace Quadarax.Application.QLiberace.Base.Tests.Services
  15. {
  16. [TestFixture(Category = "Srv")]
  17. public class TenantServiceTest: TenantBasedService<TenantService, RepoTenant>
  18. {
  19. protected override RepoTenant GetRepository()
  20. {
  21. return new RepoTenant(Uow.As<IDataDomain>(), new QlbrcContext(null,"default", 1));
  22. }
  23. protected override TenantService GetService()
  24. {
  25. return new TenantService(GetRepository(), new ContextFake(), null);
  26. }
  27. [Test]
  28. public void ExistsTenantOK()
  29. {
  30. var service = GetService();
  31. // exists tenant
  32. var result = service.ExistsTenant(TenantOneCode);
  33. Assert.That(result, Is.Not.Null);
  34. Assert.That(result.IsSuccess, Is.True);
  35. Assert.That(result.Value, Is.True);
  36. // not exists tenant
  37. result = service.ExistsTenant(TenantOneCode + "x");
  38. Assert.That(result, Is.Not.Null);
  39. Assert.That(result.IsSuccess, Is.True);
  40. Assert.That(result.Value, Is.False);
  41. }
  42. [Test]
  43. public void ExistsTenantFail()
  44. {
  45. var service = GetService();
  46. // empty tenant code
  47. Assert.That(Assert.Throws<ArgumentNullException>(() =>
  48. service.ExistsTenant(string.Empty))
  49. ?.ParamName,
  50. Is.EqualTo("tenantCode"));
  51. }
  52. [Test]
  53. public void LockOK()
  54. {
  55. var service = GetService();
  56. // set tenant locked
  57. var result = service.Lock(TenantOneCode, true);
  58. Assert.That(result, Is.Not.Null);
  59. Assert.That(result.IsSuccess, Is.True);
  60. Uow.Commit();
  61. //verify tenant if locked
  62. var tenant = service.GetTenant(TenantOneCode);
  63. Assert.That(tenant, Is.Not.Null);
  64. Assert.That(tenant.IsSuccess, Is.True);
  65. Assert.That(tenant.Value, Is.Not.Null);
  66. Assert.That(tenant?.Value?.IsLocked, Is.EqualTo(true));
  67. // set tenant unlocked
  68. result = service.Lock(TenantOneCode, false);
  69. Assert.That(result, Is.Not.Null);
  70. Assert.That(result.IsSuccess, Is.True);
  71. Uow.Commit();
  72. //verify tenant if unlocked
  73. tenant = service.GetTenant(TenantOneCode);
  74. Assert.That(tenant, Is.Not.Null);
  75. Assert.That(tenant.IsSuccess, Is.True);
  76. Assert.That(tenant.Value, Is.Not.Null);
  77. Assert.That(tenant?.Value?.IsLocked, Is.EqualTo(false));
  78. }
  79. [Test]
  80. public void LockFail()
  81. {
  82. var service = GetService();
  83. // empty tenant code
  84. Assert.That(Assert.Throws<ArgumentNullException>(() =>
  85. service.Lock(string.Empty, true))
  86. ?.ParamName,
  87. Is.EqualTo("tenantCode"));
  88. // invalid tenant code
  89. var resultTenant = service.Lock("testx", true);
  90. Assert.That(resultTenant, Is.Not.Null);
  91. Assert.That(resultTenant.IsSuccess, Is.False);
  92. Assert.That(resultTenant.Errors.Count(), Is.GreaterThan(0));
  93. Assert.That(resultTenant.Errors.First().Code,
  94. Is.EqualTo(ExceptionLibrary.ExceptionsCodes.TenantNotFoundCode));
  95. }
  96. [Test]
  97. public void ValidateOK()
  98. {
  99. var service = GetService();
  100. // check validate unlocked
  101. var result = service.Validate(TenantOneCode);
  102. Assert.That(result, Is.Not.Null);
  103. Assert.That(result.IsSuccess, Is.True);
  104. // set tenant locked
  105. var resultLock = service.Lock(TenantOneCode, true);
  106. Assert.That(resultLock, Is.Not.Null);
  107. Assert.That(resultLock.IsSuccess, Is.True);
  108. Uow.Commit();
  109. // check validate locked
  110. result = service.Validate(TenantOneCode);
  111. Assert.That(result, Is.Not.Null);
  112. Assert.That(result.IsSuccess, Is.False);
  113. Assert.That(result.Errors.Count(), Is.GreaterThan(0));
  114. Assert.That(result.Errors.First().Code,
  115. Is.EqualTo(ExceptionLibrary.ExceptionsCodes.TenantLockedCode));
  116. }
  117. [Test]
  118. public void ValidateFail()
  119. {
  120. var service = GetService();
  121. // empty tenant code
  122. Assert.That(Assert.Throws<ArgumentNullException>(() =>
  123. service.Lock(string.Empty, true))
  124. ?.ParamName,
  125. Is.EqualTo("tenantCode"));
  126. // invalid tenant code
  127. var resultTenant = service.Lock("testx", true);
  128. Assert.That(resultTenant, Is.Not.Null);
  129. Assert.That(resultTenant.IsSuccess, Is.False);
  130. Assert.That(resultTenant.Errors.Count(), Is.GreaterThan(0));
  131. Assert.That(resultTenant.Errors.First().Code,
  132. Is.EqualTo(ExceptionLibrary.ExceptionsCodes.TenantNotFoundCode));
  133. }
  134. [Test]
  135. public void GetTenantOK()
  136. {
  137. var service = GetService();
  138. // get tenant by code
  139. var result = service.GetTenant(TenantOneCode);
  140. Assert.That(result, Is.Not.Null);
  141. Assert.That(result.IsSuccess, Is.True);
  142. Assert.That(result.Value, Is.Not.Null);
  143. Assert.That(result.Value?.Code, Is.EqualTo(TenantOneCode));
  144. Assert.That(result.Value?.Name, Is.EqualTo(TenantOneName));
  145. Assert.That(result.Value?.IsLocked, Is.EqualTo(TenantOneIsLocked));
  146. // get tenant by id
  147. result = service.GetTenant(2);
  148. Assert.That(result, Is.Not.Null);
  149. Assert.That(result.IsSuccess, Is.True);
  150. Assert.That(result.Value, Is.Not.Null);
  151. Assert.That(result.Value?.Code, Is.EqualTo(TenantOneCode));
  152. Assert.That(result.Value?.Name, Is.EqualTo(TenantOneName));
  153. Assert.That(result.Value?.IsLocked, Is.EqualTo(TenantOneIsLocked));
  154. }
  155. [Test]
  156. public void GetTenantFail()
  157. {
  158. var service = GetService();
  159. // empty tenant code
  160. Assert.That(Assert.Throws<ArgumentNullException>(() =>
  161. service.GetTenant(string.Empty))
  162. ?.ParamName,
  163. Is.EqualTo("tenantCode"));
  164. // get tenant by code
  165. var result = service.GetTenant(TenantOneCode + "X");
  166. Assert.That(result, Is.Not.Null);
  167. Assert.That(result.IsSuccess, Is.False);
  168. Assert.That(result.Errors.Count(), Is.GreaterThan(0));
  169. Assert.That(result.Errors.First().Code,
  170. Is.EqualTo(ExceptionLibrary.ExceptionsCodes.TenantNotFoundCode));
  171. // get tenant by id
  172. result = service.GetTenant(-1);
  173. Assert.That(result, Is.Not.Null);
  174. Assert.That(result.IsSuccess, Is.False);
  175. Assert.That(result.Errors.Count(), Is.GreaterThan(0));
  176. Assert.That(result.Errors.First().Code,
  177. Is.EqualTo(ExceptionLibrary.ExceptionsCodes.TenantNotFoundCode));
  178. }
  179. [Test]
  180. public void CreateTenantOK()
  181. {
  182. var service = GetService();
  183. var newTenant = new TenantWDto()
  184. {
  185. Code = "NewTenant",
  186. Name = "NewTenant"
  187. };
  188. var result = service.CreateTenant(newTenant);
  189. Assert.That(result, Is.Not.Null);
  190. Assert.That(result.IsSuccess, Is.True);
  191. Assert.That(result.Value, Is.Not.Null);
  192. Uow.Commit();
  193. var tenant = service.GetTenant(newTenant.Code);
  194. Assert.That(tenant, Is.Not.Null);
  195. Assert.That(tenant.IsSuccess, Is.True);
  196. Assert.That(tenant.Value, Is.Not.Null);
  197. Assert.That(tenant.Value?.Code, Is.EqualTo(newTenant.Code));
  198. Assert.That(tenant.Value?.Name, Is.EqualTo(newTenant.Name));
  199. Assert.That(tenant.Value?.LastAccess, Is.Not.Null);
  200. }
  201. [Test]
  202. public void CreateTenantFail()
  203. {
  204. var service = GetService();
  205. // empty tenant code
  206. Assert.That(Assert.Throws<ArgumentNullException>(() =>
  207. service.CreateTenant(null))
  208. ?.ParamName,
  209. Is.EqualTo("tenant"));
  210. var newTenant = new TenantWDto()
  211. {
  212. Code = "NewTenant",
  213. Name = "NewTenant"
  214. };
  215. // create one tenant
  216. var result = service.CreateTenant(newTenant);
  217. Assert.That(result, Is.Not.Null);
  218. Assert.That(result.IsSuccess, Is.True);
  219. Assert.That(result.Value, Is.Not.Null);
  220. Uow.Commit();
  221. // create same/duplicit tenant
  222. result = service.CreateTenant(newTenant);
  223. Assert.That(result, Is.Not.Null);
  224. Assert.That(result.IsSuccess, Is.False);
  225. Assert.That(result.Value, Is.Not.Null);
  226. Assert.That(result.Errors.Count(), Is.GreaterThan(0));
  227. Assert.That(result.Errors.First().Code,
  228. Is.EqualTo(ExceptionLibrary.ExceptionsCodes.TenantAlreadyExistsCode));
  229. // create not valid tenant (code oveflow)
  230. newTenant.Code = new string('x', 21);
  231. result = service.CreateTenant(newTenant);
  232. Assert.That(result, Is.Not.Null);
  233. Assert.That(result.IsSuccess, Is.False);
  234. Assert.That(result.Value, Is.Not.Null);
  235. Assert.That(result.Errors.Count(), Is.GreaterThan(0));
  236. Assert.That(result.Errors.First().Code,
  237. Is.EqualTo(ExceptionLibrary.ExceptionsCodes.ValidationErrorsCode));
  238. }
  239. [Test]
  240. public void UpdateTenantOK()
  241. {
  242. var service = GetService();
  243. // gets existing tenant
  244. var tenant = service.GetTenant(TenantOneCode);
  245. Assert.That(tenant, Is.Not.Null);
  246. Assert.That(tenant.IsSuccess, Is.True);
  247. Assert.That(tenant.Value, Is.Not.Null);
  248. //update some properties
  249. var tenantW = tenant.Value.MapDto2Dto<TenantRDto, TenantWDto>();
  250. Assert.That(tenantW, Is.Not.Null);
  251. tenantW.Name = TenantOneName + "x";
  252. var result = service.UpdateTenant(tenantW);
  253. Assert.That(result, Is.Not.Null);
  254. Assert.That(result.IsSuccess, Is.True);
  255. Assert.That(result.Errors.Count(), Is.EqualTo(0));
  256. }
  257. [Test]
  258. public void UpdateTenantFail()
  259. {
  260. var service = GetService();
  261. // empty tenant code
  262. Assert.That(Assert.Throws<ArgumentNullException>(() =>
  263. service.UpdateTenant(null))
  264. ?.ParamName,
  265. Is.EqualTo("tenant"));
  266. // gets existing tenant
  267. var tenant = service.GetTenant(TenantOneCode);
  268. Assert.That(tenant, Is.Not.Null);
  269. Assert.That(tenant.IsSuccess, Is.True);
  270. Assert.That(tenant.Value, Is.Not.Null);
  271. //update some properties fails
  272. var tenantW = tenant.Value.MapDto2Dto<TenantRDto, TenantWDto>();
  273. Assert.That(tenantW, Is.Not.Null);
  274. tenantW.Name = new string('x',201);
  275. var result = service.UpdateTenant(tenantW);
  276. Assert.That(result, Is.Not.Null);
  277. Assert.That(result.IsSuccess, Is.False);
  278. Assert.That(result.Errors.Count(), Is.GreaterThan(0));
  279. Assert.That(result.Errors.First().Code,
  280. Is.EqualTo(ExceptionLibrary.ExceptionsCodes.ValidationErrorsCode));
  281. //update with bad tenant code
  282. tenantW.Name = TenantDefaultName;
  283. tenantW.Code = TenantOneCode + "x";
  284. result = service.UpdateTenant(tenantW);
  285. Assert.That(result, Is.Not.Null);
  286. Assert.That(result.IsSuccess, Is.False);
  287. Assert.That(result.Errors.Count(), Is.GreaterThan(0));
  288. Assert.That(result.Errors.First().Code,
  289. Is.EqualTo(ExceptionLibrary.ExceptionsCodes.TenantNotFoundCode));
  290. }
  291. [Test]
  292. public void DeleteTenantOK()
  293. {
  294. var service = GetService();
  295. var result = service.GetTenant(TenantOneCode);
  296. Assert.That(result, Is.Not.Null);
  297. Assert.That(result.IsSuccess, Is.True);
  298. Assert.That(result.Value, Is.Not.Null);
  299. // delete tenant
  300. var delete = service.DeleteTenant(result.Value!.Id);
  301. Assert.That(delete, Is.Not.Null);
  302. Assert.That(delete.IsSuccess, Is.True);
  303. Uow.Commit();
  304. // verify delete
  305. result = service.GetTenant(TenantOneCode);
  306. Assert.That(result, Is.Not.Null);
  307. Assert.That(result.IsSuccess, Is.False);
  308. Assert.That(result.Errors.Count(), Is.GreaterThan(0));
  309. Assert.That(result.Errors.First().Code,
  310. Is.EqualTo(ExceptionLibrary.ExceptionsCodes.TenantNotFoundCode));
  311. }
  312. [Test]
  313. public void DeleteTenantFail()
  314. {
  315. var service = GetService();
  316. // delete tenant
  317. var delete = service.DeleteTenant(-1);
  318. Assert.That(delete, Is.Not.Null);
  319. Assert.That(delete.IsSuccess, Is.False);
  320. Assert.That(delete.Errors.Count(), Is.GreaterThan(0));
  321. Assert.That(delete.Errors.First().Code,
  322. Is.EqualTo(ExceptionLibrary.ExceptionsCodes.TenantNotFoundCode));
  323. }
  324. protected override void OnSetup()
  325. {
  326. base.OnSetup();
  327. var repoTenant = new RepoTenant(Uow.As<IDataDomain>(),new QlbrcContext(null, "default", 1));
  328. var tenant = repoTenant.New();
  329. tenant.Code = "default";
  330. tenant.Name = "Default system tenant";
  331. tenant.IsLocked = false;
  332. repoTenant.Set(tenant);
  333. Uow.Commit();
  334. }
  335. }
  336. }