SettingsServiceTest.cs 20 KB

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