Esempio n. 1
0
        public async Task ConcurentAutoNrGenerationForTheSameDocumentWorksAsExpectedWhenTwoServicesAsksForNumber()
        {
            var tableName = RandomTableNameName();

            Console.WriteLine($"Table name for this test: {tableName}");

            var service1 = new TableStorageAutoNrService(connString, tableName);
            var service2 = new TableStorageAutoNrService(connString, tableName);
            var service3 = new TableStorageAutoNrService(connString, tableName);

            service1.Init();
            service2.Init();
            service3.Init();

            var offer1 = new TestOffer()
            {
                Date = new DateTime(2015, 11, 21)
            };
            var offer2 = new TestOffer()
            {
                Date = new DateTime(2015, 11, 22)
            };

            var generator = new AutoNrGenerator <SequenceData, NrData>((sequenceNewNr, config, prev) =>
            {
                var sequence = $"OFF-{offer2.Date.Year}/{offer2.Date.Month}/";
                var nr       = $"{sequence}{sequenceNewNr:d5}";
                return(new AutoNrResult <SequenceData, NrData>(
                           config ?? new SequenceData(),
                           new NrData()
                {
                    DocumentNr = nr
                }));
            });

            var nr1 = await service1.GetAutoNr <SequenceData, NrData>(
                "rcsoffers",
                offer1.Id.Value,
                generator);

            NrData nr2 = null;

            var nr3 = await service3.GetAutoNr <SequenceData, NrData>(
                "rcsoffers",
                offer2.Id.Value,
                (sequenceNewNr, config, prev) =>
            {
                nr2 = service2.GetAutoNr <SequenceData, NrData>("rcsoffers", offer2.Id.Value, generator).Result;
                return(generator(sequenceNewNr, config, prev));
            });

            Assert.AreEqual("OFF-2015/11/00001", nr1.DocumentNr);
            Assert.AreEqual(nr2.DocumentNr, nr3.DocumentNr);
            Assert.AreEqual("OFF-2015/11/00002", nr2.DocumentNr);
        }
Esempio n. 2
0
        public async Task GetAutoNrGeneratesUniqueNrsTest()
        {
            var tableName = RandomTableNameName();

            Console.WriteLine($"Table name for this test: {tableName}");

            var service = new TableStorageAutoNrService(connString, tableName);

            service.Init();

            var offers = Enumerable.Range(1, 30).Select(day => new TestOffer()
            {
                Date = new DateTime(2015, 11, day)
            }).ToArray();
            var nrs = new NrData[30];

            for (int i = 0; i < 30; i++)
            {
                var offer     = offers[i];
                var generator = new AutoNrGenerator <SequenceData, NrData>((sequenceNewNr, config, prev) =>
                {
                    var sequence = $"OFF-{offer.Date.Year}/{offer.Date.Month}/";
                    var nr       = $"{sequence}{sequenceNewNr:d5}";
                    return(new AutoNrResult <SequenceData, NrData>(
                               config ?? new SequenceData(),
                               new NrData()
                    {
                        DocumentNr = nr
                    }));
                });
                nrs[i] = await service.GetAutoNr("rcsoffers", offer.Id.Value, generator);

                //Console.WriteLine(nrs[i]);
            }
            for (int i = 0; i < 30; i++)
            {
                Assert.AreEqual($"OFF-2015/11/{i + 1:d5}", nrs[i].DocumentNr);
            }
        }