using Autofac.Features.Metadata; using e_suite.API.Common.repository; using e_suite.Database.Audit; using e_suite.Database.Audit.Models; using e_suite.Database.Core.Extensions; using e_suite.Database.Core.Helpers; using e_suite.Database.Core.Tables.CustomFields; using e_suite.Database.Core.Tables.Glossaries; using e_suite.UnitTestCore; using eSuite.Core.CustomFields; using eSuite.Core.Miscellaneous; using MockQueryable; using MockQueryable.Moq; using System.Collections.Generic; using System.Collections.ObjectModel; namespace GlossariesManager.UnitTests.Repository; public class FakeGlossariesManagerRepository : FakeRepository, IGlossariesManagerRepository { public FakeGlossariesManagerRepository() { CustomFields = [ new() { Id = 1, Name = "CustomField1", FieldType = FieldType.Text, Guid = new Guid("{AA4D6C9C-EFE5-495B-993E-97C977EDF9D7}") }, new() { Id = 2, Name = "CustomField2", FieldType = FieldType.Text, Guid = new Guid("{67E85B6D-B25D-4AA7-8148-0B52BA694967}") } ]; } public List Glossaries { get; set; } = []; public List GlossaryCustomFields { get; set; } = []; public List CustomFields { get; set; } public List GlossaryCustomFieldValues { get; set; } = []; public Task AddGlossaryItem(AuditUserDetails auditUserDetails, Glossary glossary, CancellationToken cancellationToken) { var items = new List { glossary }; AddGlossaryItems(auditUserDetails, items, cancellationToken); return Task.CompletedTask; } public Task AddGlossaryItems(AuditUserDetails auditUserDetails, IEnumerable items, CancellationToken cancellationToken) { foreach( var glossary in items) Glossaries.Add(glossary); return Task.CompletedTask; } public async Task GetParentGlossary(IGeneralIdRef? glossaryItemParent, CancellationToken cancellationToken) { if (glossaryItemParent == null) return null; return await FindGlossary(glossaryItemParent, cancellationToken); } public IQueryable GetGlossaryCustomFields(long glossaryId) { return GlossaryCustomFields.BuildMock() .Where(x => x.GlossaryId == glossaryId); } public Task SaveChildCustomFieldDefinitions(AuditUserDetails auditUserDetails, IReadOnlyList removalList, IReadOnlyList additionList, CancellationToken cancellationToken) { foreach (var item in removalList) GlossaryCustomFields.Remove(item); foreach (var glossaryCustomField in additionList) { glossaryCustomField.Glossary ??= Glossaries.Single(x => x.Id == glossaryCustomField.GlossaryId); glossaryCustomField.CustomField ??= CustomFields.Single(x => x.Id == glossaryCustomField.CustomFieldId); GlossaryCustomFields.Add(glossaryCustomField); } return Task.CompletedTask; } public Task> GetGlossaryCustomValues(IId glossary, CancellationToken cancellationToken) { return Task.FromResult(GlossaryCustomFieldValues.Where(x => x.GlossaryId == glossary.Id).ToList()); } public Task SaveCustomFieldValues(AuditUserDetails auditUserDetails, Delta delta, CancellationToken cancellationToken) { foreach (var addition in delta.Additions) { GlossaryCustomFieldValues.Add(addition); } //foreach(var deletion in delta.Deletions) //{ // GlossaryCustomFieldValues.Remove(deletion); //} return Task.CompletedTask; } public Task SaveCustomFieldValues(AuditUserDetails auditUserDetails, IEnumerable> deltas, CancellationToken cancellationToken) { foreach (var delta in deltas) { SaveCustomFieldValues(auditUserDetails, delta, cancellationToken); } return Task.CompletedTask; } public Task FindGlossary(IGeneralIdRef glossaryItemParent, CancellationToken cancellationToken) { var glossary = Glossaries.SingleOrDefault(x => x.Guid == glossaryItemParent.Guid | x.Id == glossaryItemParent.Id); if (glossary != null) glossary.CustomFieldDefinitions = new Collection(GlossaryCustomFields.Where(x => x.GlossaryId == glossary.Id).ToList()); return Task.FromResult(glossary); } public Task> FindGlossaryChildren(long parentId, CancellationToken cancellationToken) { var children = Glossaries.Where(x => x.ParentId == parentId).ToList(); return Task.FromResult>(children); } public Task> GetCustomFieldDefinitions(IEnumerable customFields, CancellationToken cancellationToken) { var result = new List(); foreach (var customField in customFields) { var field = CustomFields.FindByGeneralIdRef(customField); if (field != null) result.Add(field); else throw new NullReferenceException(); } return Task.FromResult(result); } #pragma warning disable IDE0060 // Remove unused parameter public Task SaveCustomFieldValues(AuditUserDetails auditUserDetails, IEnumerable glossaryCustomFieldValues, CancellationToken cancellationToken) #pragma warning restore IDE0060 // Remove unused parameter { foreach (var glossaryCustomFieldValue in glossaryCustomFieldValues) { GlossaryCustomFieldValues.Add(glossaryCustomFieldValue); } return Task.CompletedTask; } public Task EditGlossaryItem(AuditUserDetails auditUserDetails, Glossary glossaryItem, CancellationToken cancellationToken) { return Task.CompletedTask; } }