public async Task Test_IndexServiceNeverDuplicatesPathMasterRecords() { var _connection = new SqliteConnection("DataSource=:memory:"); _connection.Open(); var options = new DbContextOptionsBuilder <DbCtxt>() .UseSqlite(_connection) .EnableSensitiveDataLogging(true) .Options; var dbc = new DbCtxt(options); await dbc.Database.EnsureCreatedAsync(); var r = new IndexDbRepo(dbc, _logger); var indexService = new IndexService(r); var container = new ContainerDto { ContainerNumber = new ContainerNumberDto() { Number = "bcdefghijklmnopqrstuvwxyabcdefghijklmnopqrstuvwxz :123456789012345678901234567890 12345678901234567890 12345678901234567890123456789012bcdefghijklmnopqrst uvwxyabcdefghijklmnopqrstuvwxz:12345678901234 567890123456789012345678 901234567890123456 78901234567890123456789012" }, AssignedTo = new ContainerDto.CarrierDto { Code = "aby", Name = "name", phones = new string[] { "bcdefghijklmnopqrstuvwxyabcdefghijklmnopqrstuvwxz:1234567890123456789012345678901234567890123456789012345678901234567890123456789012bcdefghijklmnopqrstuvwxyabcdefghijklmnopqrstuvwxz:1234567890123456789012345678901234567890123456789012345678901234567890123456789012" } } }; var cmd = indexService.CreateUpdateCommand("0001", container); await indexService.Handle(cmd); var attchs = new List <AttachmentDto>(); attchs.Add(new AttachmentDto { Type = "invoice", DownloadUrl = "hdhjdhjhsa" }); container.Attachments = attchs.ToArray(); var cmd2 = indexService.CreateUpdateCommand("0001", container); await indexService.Handle(cmd2); attchs.Add(new AttachmentDto { Type = "invoice3", DownloadUrl = "hdhjdhjhsa3" }); container.Attachments = attchs.ToArray(); var cmd3 = indexService.CreateUpdateCommand("0001", container); await indexService.Handle(cmd3); var paths = dbc.Set <DbDocSourcePath>().Select(p => p).Where(p => p.PathString == "$.Attachments.[].DownloadUrl").ToArray(); var tokens = dbc.Set <DbDocToken>().Select(t => t).ToArray(); // load paths from database //var paths = await dbc.Set<DbDocSourcePath>().Where(p=>p.PathString == "$.Attachments.[].DownloadUrl").ToArrayAsync(); Assert.AreEqual(1, paths.Length); }
public async Task UpdateArrayTest() { var _dbc = await GetDbContext(); var repo = new IndexDbRepo(_dbc, _logger); var emps = new List <Employee>() { new Employee { Phones = new[] { "123" }, Name = "layan", EndDate = DateTime.UtcNow, Id = 1, ContractType = EmploymentType.Permenant }, new Employee { Phones = new[] { "899", "635", "7877", "98898", "09090" }, Name = "yaser", EndDate = DateTime.UtcNow, Id = 2, ContractType = EmploymentType.Permenant } }; var docs = emps.Select(e => new Document() { Data = e, Source = new DocumentSource(new DocumentType(e.GetType()), ContentFactory.Default.CreateFrom($"{e.ContractType.ToString()}:{e.Id}")) }); await repo.UpdateDocuments(docs.ToArray()); var emps2 = emps.ToArray(); emps2[0].Name = "layan khater"; emps[1].Name = "samer"; emps2[0].Phones = new string[0]; await repo.UpdateDocuments(docs.ToArray()); _dbc = await GetDbContext(); var docs3 = await _dbc.Set <DbDoc>() .Include(d => d.Tokens) .ThenInclude(d => d.Path) .ToArrayAsync(); foreach (var d in docs3) { Assert.AreEqual(emps[(int)d.Id - 1].Name, d.Tokens.First(t => t.Path.PathString == "$.Name").ValueAsAny); Assert.AreEqual(emps[(int)d.Id - 1].Phones.Length, d.Tokens.Where(t => t.Path.PathString == "$.Phones").Count()); Assert.AreEqual(JsonUtil.Serialize(emps[(int)d.Id - 1]), d.BodyData); } }
public async Task TestBulks() { var _dbc = await GetDbContext(); var repo = new IndexDbRepo(_dbc, _logger); var list = Enumerable.Range(1, 50); var emps = new List <Employee>(); foreach (var i in list) { emps.Add(new Employee { Phones = new[] { "123", "456", "789" }, Name = "layan", EndDate = DateTime.UtcNow, Id = i, ContractType = EmploymentType.Permenant }); } ; var docs = emps.Select(e => new Document() { Data = e, Source = new DocumentSource(new DocumentType(e.GetType()), ContentFactory.Default.CreateFrom($"{e.ContractType.ToString()}:{e.Id}")) }); await repo.UpdateDocuments(docs.ToArray()); foreach (var i in list) { var emp = emps[i - 1]; emp.Name = $"{emp.Name}{emp.ContractType.ToString()}:{emp.Id}"; emp.Phones = new string[0]; } ; await repo.UpdateDocuments(docs.ToArray()); _dbc = await GetDbContext(); var docs2 = await _dbc.Set <DbDoc>() .Include(d => d.Tokens) .ThenInclude(d => d.Path) .ToArrayAsync(); foreach (var d in docs2) { //check that the phone tokens have deleted Assert.AreEqual(4, d.Tokens.Count); //check that the name token has changed Assert.AreEqual($"layan{d.SourceIdString}", d.Tokens.ToList().First(t => t.Path.PathString == "$.Name").ValueAsAny); } }