using e_suite.API.Common.repository; using e_suite.Database.Audit; using e_suite.Database.Core.Extensions; using e_suite.Database.Core.Helpers; using e_suite.Database.Core.Tables.Forms; using e_suite.UnitTestCore; using eSuite.Core.Miscellaneous; using MockQueryable; using MockQueryable.Moq; namespace e_suite.Modules.FormsManagerUnitTests; public class FakeFormsRepository : FakeRepository, IFormRepository { public List FormTemplates { get; set; } = []; public List FormTemplateVersions { get; set; } = []; public List FormInstances { get; set; } = []; public List FormFieldValues { get; set; } = []; public Task CreateNewFormVersionAsync(AuditUserDetails auditUserDetails, FormTemplateVersion formTemplateVersion, CancellationToken cancellationToken) { FormTemplateVersions.Add(formTemplateVersion); return Task.CompletedTask; } public IQueryable GetAllFormVersions(long templateId) { return FormTemplateVersions.Where( x => x.TemplateId == templateId).ToList().BuildMock(); } public Task CreateTemplateAsync(AuditUserDetails auditUserDetails, FormTemplate template, CancellationToken cancellationToken) { FormTemplates.Add(template); return Task.CompletedTask; } public Task DeleteAllVersionsAsync(AuditUserDetails auditUserDetails, IEnumerable formTemplateVersions, CancellationToken cancellationToken) { FormTemplateVersions.ForEach(x => { if (formTemplateVersions.Any(f => f.Id == x.Id) || formTemplateVersions.Any(f => f.Guid == x.Guid)) { x.Deleted = true; }; }); return Task.CompletedTask; } public Task EditFormTemplateAsync(AuditUserDetails auditUserDetails, FormTemplate formTemplate, CancellationToken cancellationToken) { var form = FormTemplates.First(x => x.Id == formTemplate.Id || x.Guid == formTemplate.Guid); form.Name = formTemplate.Name; return Task.CompletedTask; } #pragma warning disable IDE0060 // Remove unused parameter public Task> GetAllFormVersionsAsync(long templateId, CancellationToken cancellationToken) #pragma warning restore IDE0060 // Remove unused parameter { return Task.FromResult(FormTemplateVersions.Where(x => x.TemplateId == templateId)); } public Task GetFormTemplateVersionAsync(IGeneralIdRef templateId, CancellationToken cancellationToken) { return Task.FromResult(FormTemplateVersions.FirstOrDefault(x => x.Id == templateId.Id || x.Guid == templateId.Guid)); } public Task GetFormTemplateWithSpecificVersionAsync(IGeneralIdRef id, long formTemplateVersionId, CancellationToken cancellationToken) { return Task.FromResult(FormTemplates.FirstOrDefault(x => x.Id == id.Id || x.Guid == id.Guid)); } public Task AddFormInstance( AuditUserDetails auditUserDetails, FormInstance newFormInstance, CancellationToken cancellationToken ) { FormInstances.Add(newFormInstance); return Task.CompletedTask; } public Task AddFormInstances(AuditUserDetails auditUserDetails, IEnumerable newFormInstance, CancellationToken cancellationToken) { FormInstances.AddRange(newFormInstance); return Task.CompletedTask; } public Task AddFormInstanceValues( AuditUserDetails auditUserDetails, List customFieldValues, CancellationToken cancellationToken ) { FormFieldValues.AddRange(customFieldValues); return Task.CompletedTask; } public Task GetFormInstance(GeneralIdRef createFormInstanceId, bool tracking, CancellationToken cancellationToken) { return Task.FromResult(FormInstances.FindByGeneralIdRef(createFormInstanceId)); } public Task> GetFormInstances(IEnumerable generalIdRefs, bool tracking, CancellationToken cancellationToken) { throw new NotImplementedException(); } public Task SaveCustomFieldValues(AuditUserDetails auditUserDetails, Delta delta, CancellationToken cancellationToken) { SaveCustomFieldValuesCalled = true; return Task.CompletedTask; } public Task> GetFormsContainingFieldValue(IGeneralIdRef customFieldGeneralIdRef, string value, CancellationToken cancellationToken) { throw new NotImplementedException(); } public bool SaveCustomFieldValuesCalled { get; set; } = false; public Task GetTemplateAsync(IGeneralIdRef id, CancellationToken cancellationToken) { var form = FormTemplates.FirstOrDefault(x => x.Id == id.Id || x.Guid == id.Guid); if (form is null) return Task.FromResult(form)!; form!.Versions = [.. FormTemplateVersions.Where(f => f.TemplateId == form.Id).OrderBy(f => f.Version)]; return Task.FromResult(form)!; } public IQueryable GetTemplates() { return FormTemplates.BuildMock(); } #pragma warning disable IDE0060 // Remove unused parameter public Task> GetTemplatesAsync(CancellationToken cancellationToken) #pragma warning restore IDE0060 // Remove unused parameter { return Task.FromResult((IEnumerable)FormTemplates); } public Task GetTemplateWithOutLoadedRefereranceAsync(IGeneralIdRef id, CancellationToken cancellationToken) { var res = FormTemplates.FirstOrDefault(x => x.Id == id.Id || x.Guid == id.Guid); if (res is null) { return Task.FromResult(res); } res.Versions = null!; return Task.FromResult(res)!; } }