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); }
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); } }