SettingsServiceTest.cs 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507
  1. using System.Globalization;
  2. using qdr.fnd.core.test;
  3. using Quadarax.Application.QLiberace.Base.Repositories;
  4. using Quadarax.Application.QLiberace.Base.Services;
  5. using Quadarax.Application.QLiberace.Base.Tests.Services.Base;
  6. using Quadarax.Application.QLiberace.Base.Tests.Services.Fakes;
  7. using Quadarax.Application.QLiberace.Common;
  8. using Quadarax.Application.QLiberace.Common.Domain;
  9. using Quadarax.Foundation.Core.Data;
  10. using Quadarax.Foundation.Core.Data.Domain;
  11. using Quadarax.Foundation.Core.Value.Extensions;
  12. #pragma warning disable CS8625
  13. namespace Quadarax.Application.QLiberace.Base.Tests.Services
  14. {
  15. [TestFixture(Category = "Srv")]
  16. public class SettingsServiceTest : TenantBasedService<SettingsService, RepoSetting>
  17. {
  18. protected override RepoSetting GetRepository()
  19. {
  20. return new RepoSetting(Uow.As<IDataDomain>(), Context);
  21. }
  22. protected override SettingsService GetService()
  23. {
  24. return new SettingsService(GetRepository(), new ContextFake(), new LoggerFactoryFake());
  25. }
  26. [Test]
  27. public void CreateSettingsOK()
  28. {
  29. var service = GetService();
  30. var settings = new ModuleSettingFake();
  31. var result = service.CreateSettings<ModuleSettingFake>(settings);
  32. Assert.That(result, Is.Not.Null);
  33. Assert.That(result.IsSuccess, Is.True);
  34. Assert.That(result.Errors.Count(), Is.EqualTo(0));
  35. //check if stored in database
  36. Uow.Commit();
  37. var repo = GetRepository();
  38. var value = repo.Get("test", nameof(settings.PropertyString1));
  39. Assert.That(value, Is.Not.Null);
  40. Assert.That(value.Value, Is.EqualTo(settings.PropertyString1));
  41. Assert.That(value.IsEnabled, Is.True);
  42. Assert.That(value.ValueTypeQualified, Is.EqualTo(typeof(string).FullName));
  43. }
  44. [Test]
  45. public void CreateSettingsFail()
  46. {
  47. var service = GetService();
  48. // no module attribute
  49. var settings = new ModuleSettingWoAttributeFake();
  50. var result = service.CreateSettings<ModuleSettingWoAttributeFake>(settings);
  51. Assert.That(result, Is.Not.Null);
  52. Assert.That(result.IsSuccess, Is.False);
  53. Assert.That(result.Errors.Count(), Is.GreaterThan(0));
  54. Assert.That(result.Errors.First().Message.StartsWith("ModuleAttribute"), Is.True);
  55. }
  56. [Test]
  57. public void GetSettingsOK()
  58. {
  59. var service = GetService();
  60. var settings = new ModuleSettingFake();
  61. settings.PropertyString2 = DateTime.Now.ToOADate().ToString(CultureInfo.InvariantCulture);
  62. var result = service.CreateSettings<ModuleSettingFake>(settings);
  63. Assert.That(result, Is.Not.Null);
  64. Assert.That(result.IsSuccess, Is.True);
  65. Assert.That(result.Errors.Count(), Is.EqualTo(0));
  66. Uow.Commit();
  67. // gets the settings as dto
  68. var resultSettings = service.GetSettings<ModuleSettingFake>("test");
  69. Assert.That(resultSettings, Is.Not.Null);
  70. Assert.That(resultSettings.IsSuccess, Is.True);
  71. Assert.That(resultSettings.Errors.Count(), Is.EqualTo(0));
  72. Assert.That(resultSettings.Value, Is.Not.Null);
  73. Assert.That(resultSettings.Value.PropertyString2, Is.EquivalentTo(settings.PropertyString2));
  74. }
  75. [Test]
  76. public void GetSettingsFail()
  77. {
  78. var service = GetService();
  79. // invalid module code
  80. var resultSettings = service.GetSettings<ModuleSettingFake>("testx");
  81. Assert.That(resultSettings, Is.Not.Null);
  82. Assert.That(resultSettings.IsSuccess, Is.False);
  83. Assert.That(resultSettings.Errors.Count(), Is.GreaterThan(0));
  84. Assert.That(resultSettings.Errors.First().Code,
  85. Is.EqualTo(ExceptionLibrary.ExceptionsCodes.SettingsNotFoundForModuleCode));
  86. // empty module code
  87. Assert.That(Assert.Throws<ArgumentNullException>(() =>
  88. service.GetSettings<ModuleSettingFake>(string.Empty))
  89. ?.ParamName,
  90. Is.EqualTo("moduleCode"));
  91. }
  92. [Test]
  93. public void GetSettingsValueOK()
  94. {
  95. var service = GetService();
  96. // create one settings
  97. var settings = new ModuleSettingFake();
  98. settings.PropertyString2 = DateTime.Now.ToOADate().ToString(CultureInfo.InvariantCulture);
  99. var result = service.CreateSettings<ModuleSettingFake>(settings);
  100. Assert.That(result, Is.Not.Null);
  101. Assert.That(result.IsSuccess, Is.True);
  102. Assert.That(result.Errors.Count(), Is.EqualTo(0));
  103. Uow.Commit();
  104. var settingGot = service.GetSettingsValues("test", Paging.NoPaging());
  105. Assert.That(settingGot, Is.Not.Null);
  106. Assert.That(settingGot.IsSuccess, Is.True);
  107. Assert.That(settingGot.Errors.Count(), Is.EqualTo(0));
  108. Assert.That(settingGot.Values.Count, Is.EqualTo(8));
  109. Assert.That(((DateTime?)settingGot.Values["PropertyDateTimeNow"])?.ToFileShortDateTimeString(),
  110. Is.EqualTo(settings.PropertyDateTimeNow?.ToFileShortDateTimeString()));
  111. }
  112. [Test]
  113. public void GetSettingsValueFail()
  114. {
  115. var service = GetService();
  116. // empty module code
  117. Assert.That(Assert.Throws<ArgumentNullException>(() =>
  118. service.GetSettingsValues(string.Empty, Paging.NoPaging()))
  119. ?.ParamName,
  120. Is.EqualTo("moduleCode"));
  121. // not existing module
  122. var settings = service.GetSettingsValues("testx", Paging.NoPaging());
  123. Assert.That(settings, Is.Not.Null);
  124. Assert.That(settings.IsSuccess, Is.True);
  125. Assert.That(settings.Errors.Count(), Is.EqualTo(0));
  126. Assert.That(settings.Values.Count, Is.EqualTo(0));
  127. }
  128. [Test]
  129. public void ExistsSettingsValueOK()
  130. {
  131. var service = GetService();
  132. // create one settings
  133. var settings = new ModuleSettingFake();
  134. settings.PropertyString2 = DateTime.Now.ToOADate().ToString(CultureInfo.InvariantCulture);
  135. var result = service.CreateSettings<ModuleSettingFake>(settings);
  136. Assert.That(result, Is.Not.Null);
  137. Assert.That(result.IsSuccess, Is.True);
  138. Assert.That(result.Errors.Count(), Is.EqualTo(0));
  139. Uow.Commit();
  140. var value = service.GetSettingsValue<DateTime?>("test", "PropertyDateTimeNow");
  141. Assert.That(value, Is.Not.Null);
  142. Assert.That(value.IsSuccess, Is.True);
  143. Assert.That(value.Errors.Count(), Is.EqualTo(0));
  144. Assert.That(((DateTime?)value.Value)?.ToFileShortDateTimeString(),
  145. Is.EqualTo(settings.PropertyDateTimeNow?.ToFileShortDateTimeString()));
  146. }
  147. [Test]
  148. public void ExistsSettingsValueFail()
  149. {
  150. var service = GetService();
  151. // create one settings
  152. var settings = new ModuleSettingFake();
  153. settings.PropertyString2 = DateTime.Now.ToOADate().ToString(CultureInfo.InvariantCulture);
  154. var result = service.CreateSettings<ModuleSettingFake>(settings);
  155. Assert.That(result, Is.Not.Null);
  156. Assert.That(result.IsSuccess, Is.True);
  157. Assert.That(result.Errors.Count(), Is.EqualTo(0));
  158. Uow.Commit();
  159. // empty module code
  160. Assert.That(Assert.Throws<ArgumentNullException>(() =>
  161. service.GetSettingsValue<DateTime?>(string.Empty, "PropertyDateTimeNow"))
  162. ?.ParamName,
  163. Is.EqualTo("moduleCode"));
  164. // not empty value code
  165. Assert.That(Assert.Throws<ArgumentNullException>(() =>
  166. service.GetSettingsValue<DateTime?>("test", string.Empty))
  167. ?.ParamName,
  168. Is.EqualTo("valueCode"));
  169. // not existing value code
  170. var fail = service.GetSettingsValue<DateTime?>("test", "PropertyDateTimeNow2");
  171. Assert.That(fail, Is.Not.Null);
  172. Assert.That(fail.IsSuccess, Is.False);
  173. Assert.That(fail.Errors.Count(), Is.EqualTo(1));
  174. Assert.That(fail.Errors.First().Code, Is.EqualTo(ExceptionLibrary.ExceptionsCodes.SettingsNotFoundCode));
  175. }
  176. [Test]
  177. public void AddSettingsValueOK()
  178. {
  179. var service = GetService();
  180. // add new value
  181. var result = service.AddSettingsValue<string>("test", "foo", "this is a foo", "value");
  182. Assert.That(result, Is.Not.Null);
  183. Assert.That(result.IsSuccess, Is.True);
  184. Assert.That(result.Errors.Count(), Is.EqualTo(0));
  185. Uow.Commit();
  186. // read new created value
  187. var resultValue = service.GetSettingsValue<string>("test", "foo");
  188. Assert.That(resultValue, Is.Not.Null);
  189. Assert.That(resultValue.IsSuccess, Is.True);
  190. Assert.That(resultValue.Errors.Count(), Is.EqualTo(0));
  191. Assert.That(resultValue.Value, Is.EqualTo("value"));
  192. }
  193. [Test]
  194. public void AddSettingsValueFail()
  195. {
  196. var service = GetService();
  197. // add new value correct
  198. var result = service.AddSettingsValue<string>("test", "foo", "this is a foo", "value");
  199. Assert.That(result, Is.Not.Null);
  200. Assert.That(result.IsSuccess, Is.True);
  201. Assert.That(result.Errors.Count(), Is.EqualTo(0));
  202. Uow.Commit();
  203. // add duplicit value
  204. var fail = service.AddSettingsValue<string>("test", "foo", "this is a foo", "value");
  205. Assert.That(fail, Is.Not.Null);
  206. Assert.That(fail.IsSuccess, Is.False);
  207. Assert.That(fail.Errors.Count(), Is.EqualTo(1));
  208. Assert.That(fail.Errors.First().Code,
  209. Is.EqualTo(ExceptionLibrary.ExceptionsCodes.SettingsAlreadyExistsCode));
  210. // empty module code
  211. Assert.That(Assert.Throws<ArgumentNullException>(() =>
  212. service.AddSettingsValue<string>(string.Empty, "foo", "this is a foo", "value"))
  213. ?.ParamName,
  214. Is.EqualTo("moduleCode"));
  215. // not empty value code
  216. Assert.That(Assert.Throws<ArgumentNullException>(() =>
  217. service.AddSettingsValue<string>("test", string.Empty, "this is a foo", "value"))
  218. ?.ParamName,
  219. Is.EqualTo("valueCode"));
  220. }
  221. [Test]
  222. public void UpdateSettingsOK()
  223. {
  224. var service = GetService();
  225. // create one settings
  226. var settings = new ModuleSettingFake();
  227. settings.PropertyString2 = DateTime.Now.ToOADate().ToString(CultureInfo.InvariantCulture);
  228. var result = service.CreateSettings<ModuleSettingFake>(settings);
  229. Assert.That(result, Is.Not.Null);
  230. Assert.That(result.IsSuccess, Is.True);
  231. Assert.That(result.Errors.Count(), Is.EqualTo(0));
  232. Uow.Commit();
  233. settings.PropertyBool = !settings.PropertyBool;
  234. settings.PropertyDateTime1 = DateTime.Now;
  235. settings.PropertyDateTime2 = DateTime.Now;
  236. settings.PropertyInt = null;
  237. result = service.UpdateSettings<ModuleSettingFake>(settings);
  238. Assert.That(result, Is.Not.Null);
  239. Assert.That(result.IsSuccess, Is.True);
  240. Assert.That(result.Errors.Count(), Is.EqualTo(0));
  241. Uow.Commit();
  242. var settingGot = service.GetSettings<ModuleSettingFake>("test");
  243. Assert.That(settingGot, Is.Not.Null);
  244. Assert.That(settingGot.IsSuccess, Is.True);
  245. Assert.That(settingGot.Errors.Count(), Is.EqualTo(0));
  246. Assert.That(settingGot.Value.PropertyDateTimeNow?.ToFileShortDateTimeString(),
  247. Is.EqualTo(settings.PropertyDateTimeNow?.ToFileShortDateTimeString()));
  248. Assert.That(settingGot.Value.PropertyDateTime1.ToFileShortDateTimeString(),
  249. Is.EqualTo(settings.PropertyDateTime1.ToFileShortDateTimeString()));
  250. }
  251. [Test]
  252. public void UpdateSettingsFail()
  253. {
  254. var service = GetService();
  255. // create one settings
  256. var settings = new ModuleSettingFake();
  257. Assert.That(Assert.Throws<ArgumentNullException>(() =>
  258. service.UpdateSettings<ModuleSettingFake>(null))?.ParamName,
  259. Is.EqualTo("settings"));
  260. var fail = service.UpdateSettings<ModuleSettingFake>(settings);
  261. Assert.That(fail, Is.Not.Null);
  262. Assert.That(fail.IsSuccess, Is.False);
  263. Assert.That(fail.Errors.Count(), Is.EqualTo(1));
  264. Assert.That(fail.Errors.First().Code,
  265. Is.EqualTo(ExceptionLibrary.ExceptionsCodes.SettingsNotFoundForModuleCode));
  266. // include test for attributes
  267. //Assert.That(Assert.Throws<InvalidOperationException>(() =>
  268. // service.UpdateSettings<ModuleSettingWoAttributeFake>(new ModuleSettingWoAttributeFake()))?.Message.StartsWith("ModuleAttribute"),
  269. // Is.True);
  270. }
  271. [Test]
  272. public void UpdateSettingsValueOK()
  273. {
  274. var service = GetService();
  275. // create one settings
  276. var settings = new ModuleSettingFake();
  277. settings.PropertyString2 = DateTime.Now.ToOADate().ToString(CultureInfo.InvariantCulture);
  278. var result = service.CreateSettings<ModuleSettingFake>(settings);
  279. Assert.That(result, Is.Not.Null);
  280. Assert.That(result.IsSuccess, Is.True);
  281. Assert.That(result.Errors.Count(), Is.EqualTo(0));
  282. Uow.Commit();
  283. var now = DateTime.Now;
  284. result = service.UpdateSettingsValue("test", "PropertyDateTime1", now);
  285. Assert.That(result, Is.Not.Null);
  286. Assert.That(result.IsSuccess, Is.True);
  287. Assert.That(result.Errors.Count(), Is.EqualTo(0));
  288. Uow.Commit();
  289. var settingGot = service.GetSettingsValue<DateTime>("test", "PropertyDateTime1");
  290. Assert.That(settingGot, Is.Not.Null);
  291. Assert.That(settingGot.IsSuccess, Is.True);
  292. Assert.That(settingGot.Errors.Count(), Is.EqualTo(0));
  293. Assert.That(((DateTime)settingGot.Value).ToFileShortDateTimeString(),
  294. Is.EqualTo(now.ToFileShortDateTimeString()));
  295. result = service.UpdateSettingsValue("test", "PropertyInt", null);
  296. }
  297. [Test]
  298. public void UpdateSettingsValueFail()
  299. {
  300. var service = GetService();
  301. // add duplicit value
  302. var fail = service.UpdateSettingsValue("test", "foo", "value");
  303. Assert.That(fail, Is.Not.Null);
  304. Assert.That(fail.IsSuccess, Is.False);
  305. Assert.That(fail.Errors.Count(), Is.EqualTo(1));
  306. Assert.That(fail.Errors.First().Code, Is.EqualTo(ExceptionLibrary.ExceptionsCodes.SettingsNotFoundCode));
  307. // empty module code
  308. Assert.That(Assert.Throws<ArgumentNullException>(() =>
  309. service.UpdateSettingsValue(string.Empty, "foo", "value"))
  310. ?.ParamName,
  311. Is.EqualTo("moduleCode"));
  312. // not empty value code
  313. Assert.That(Assert.Throws<ArgumentNullException>(() =>
  314. service.UpdateSettingsValue("test", string.Empty, "value"))
  315. ?.ParamName,
  316. Is.EqualTo("valueCode"));
  317. }
  318. [Test]
  319. public void AddOrUpdateSettingsValueOK()
  320. {
  321. var service = GetService();
  322. var now = DateTime.Now;
  323. var result = service.AddOrUpdateSettingsValue<DateTime>("test", "PropertyDateTime1", now);
  324. Assert.That(result, Is.Not.Null);
  325. Assert.That(result.IsSuccess, Is.True);
  326. Assert.That(result.Errors.Count(), Is.EqualTo(0));
  327. Uow.Commit();
  328. var settingGot = service.GetSettingsValue<DateTime>("test", "PropertyDateTime1");
  329. Assert.That(settingGot, Is.Not.Null);
  330. Assert.That(settingGot.IsSuccess, Is.True);
  331. Assert.That(settingGot.Errors.Count(), Is.EqualTo(0));
  332. Assert.That(((DateTime)settingGot.Value).ToFileShortDateTimeString(),
  333. Is.EqualTo(now.ToFileShortDateTimeString()));
  334. now = DateTime.Now.AddHours(1);
  335. result = service.AddOrUpdateSettingsValue<DateTime>("test", "PropertyDateTime1", now);
  336. Assert.That(result, Is.Not.Null);
  337. Assert.That(result.IsSuccess, Is.True);
  338. Assert.That(result.Errors.Count(), Is.EqualTo(0));
  339. Uow.Commit();
  340. settingGot = service.GetSettingsValue<DateTime>("test", "PropertyDateTime1");
  341. Assert.That(settingGot, Is.Not.Null);
  342. Assert.That(settingGot.IsSuccess, Is.True);
  343. Assert.That(settingGot.Errors.Count(), Is.EqualTo(0));
  344. Assert.That(((DateTime)settingGot.Value).ToFileShortDateTimeString(),
  345. Is.EqualTo(now.ToFileShortDateTimeString()));
  346. }
  347. [Test]
  348. public void AddOrUpdateSettingsValueFail()
  349. {
  350. var service = GetService();
  351. // empty module code
  352. Assert.That(Assert.Throws<ArgumentNullException>(() =>
  353. service.AddOrUpdateSettingsValue<DateTime>(string.Empty, "foo", "value"))
  354. ?.ParamName,
  355. Is.EqualTo("moduleCode"));
  356. // not empty value code
  357. Assert.That(Assert.Throws<ArgumentNullException>(() =>
  358. service.AddOrUpdateSettingsValue<DateTime>("test", string.Empty, "value"))
  359. ?.ParamName,
  360. Is.EqualTo("valueCode"));
  361. }
  362. [Test]
  363. public void GetSettingsValuesOK()
  364. {
  365. var service = GetService();
  366. // create one settings
  367. var settings = new ModuleSettingFake();
  368. var result = service.CreateSettings<ModuleSettingFake>(settings);
  369. Assert.That(result, Is.Not.Null);
  370. Assert.That(result.IsSuccess, Is.True);
  371. Assert.That(result.Errors.Count(), Is.EqualTo(0));
  372. Uow.Commit();
  373. var settingGot = service.GetSettingsValues("test", Paging.NoPaging());
  374. Assert.That(settingGot, Is.Not.Null);
  375. Assert.That(settingGot.IsSuccess, Is.True);
  376. Assert.That(settingGot.Errors.Count(), Is.EqualTo(0));
  377. Assert.That(settingGot.Values.Count, Is.EqualTo(8));
  378. }
  379. [Test]
  380. public void GetSettingsValuesFail()
  381. {
  382. var service = GetService();
  383. // empty module code
  384. Assert.That(Assert.Throws<ArgumentNullException>(() =>
  385. service.GetSettingsValues(string.Empty, null))
  386. ?.ParamName,
  387. Is.EqualTo("moduleCode"));
  388. var settingGot = service.GetSettingsValues("testx", Paging.NoPaging());
  389. Assert.That(settingGot, Is.Not.Null);
  390. Assert.That(settingGot.IsSuccess, Is.True);
  391. Assert.That(settingGot.Errors.Count(), Is.EqualTo(0));
  392. Assert.That(settingGot.Values.Count, Is.EqualTo(0));
  393. }
  394. protected override void OnSetup()
  395. {
  396. base.OnSetup();
  397. var repoTenant = new RepoTenant(Uow.As<IDataDomain>(),new QlbrcContext(null, "default", 1));
  398. var tenant = repoTenant.New();
  399. tenant.Code = "default";
  400. tenant.Name = "Default system tenant";
  401. tenant.IsLocked = false;
  402. repoTenant.Set(tenant);
  403. Uow.Commit();
  404. }
  405. }
  406. }