Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
            }
        }
Esempio n. 3
0
        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);
            }
        }