public LargeDocumentStore(IDocumentDbAccessProvider dbAccessProvider) : base(dbAccessProvider, false)
            {
                var config = new DocumentStoreConfigBuilder("LargeStore");

                var largeDocumentType = config.AddDocument("LargeDocument");

                var attachmentDocumentType = config.AddDocument("AttachmentDocument");
                var attachmentType         = attachmentDocumentType.AddAttachment("Attachment");

                _largeMapping = config.AddDocumentMapping <LargeDocument>(largeDocumentType.Name)
                                .SetIdMapper(x => x.Id.ToString())
                                .SetPartitionMapper(x => x.Id.ToString())
                                .Finish();

                _smallMapping = config.AddDocumentMapping <SmallDocumentWithLargeAttachment>(attachmentDocumentType.Name)
                                .SetIdMapper(x => x.Id.ToString())
                                .SetPartitionMapper(x => x.Id.ToString())
                                .Finish();

                _attachmentMapping = _smallMapping.AddAttachmentMapping <LargeDocument>(attachmentType.Name)
                                     .Finish();

                _config = config.Finish();
                _client = CreateStoreLogic(DbAccess, _config);

                DbAccess.ConfigRegistry.RegisterStoreConfigSource(this);
            }
        public void CreateSignatureForEqualConfigsWithSingleInput()
        {
            DocumentStoreConfigBuilder storeABuilder = new DocumentStoreConfigBuilder("StoreA");

            storeABuilder.AddDocument("DocA");
            storeABuilder.AddDocument("DocB");
            storeABuilder.AddDocument("DocC");

            DoSignatureTest(new[] { storeABuilder.Finish() });
        }
        public void CreateSignatureForEqualConfigsWithMultipleInputs()
        {
            DocumentStoreConfigBuilder builderA = new DocumentStoreConfigBuilder("StoreA");

            builderA.AddDocument("DocA");
            builderA.AddDocument("DocB");
            builderA.AddDocument("DocC");

            DocumentStoreConfigBuilder builderB = new DocumentStoreConfigBuilder("StoreB");

            builderB.AddDocument("DocA");
            builderB.AddDocument("DocB");

            DocumentStoreConfigBuilder builderC = new DocumentStoreConfigBuilder("StoreC");

            builderB.AddDocument("DocD");

            DoSignatureTest(new[] { builderA, builderB, builderC }.Select(x => x.Finish()).ToArray());
        }
            public DocumentStore(IDocumentDbAccessProvider dbAccessProvider) : base(dbAccessProvider)
            {
                var config = new DocumentStoreConfigBuilder("Documents");

                var documentType  = config.AddDocument("Document1");
                var document2Type = config.AddDocument("Document2");

                _documentMapping = config.AddDocumentMapping <Document1>(documentType.Name)
                                   .SetIdMapper(x => x.Id.ToString())
                                   .SetPartitionMapper(x => x.Id.ToString())
                                   .Finish();

                _document2Mapping = config.AddDocumentMapping <Document2>(document2Type.Name)
                                    .SetIdMapper(x => x.Id.ToString())
                                    .SetPartitionMapper(x => x.Id.ToString())
                                    .Finish();

                _config = config.Finish();
                _client = CreateStoreLogic(DbAccess, _config);
            }
        private IDocumentStoreConfigSource CreateConfigSource(string storeName)
        {
            DocumentStoreConfigBuilder storeABuilder = new DocumentStoreConfigBuilder(storeName);

            storeABuilder.AddDocument("DocA");

            var configSource = Substitute.For <IDocumentStoreConfigSource>();

            configSource.GetConfig().Returns(storeABuilder.Finish());

            return(configSource);
        }
Exemple #6
0
        public FlowerStore(
            IDocumentDbAccessProvider dbAccessProvider,
            IDocumentMetadataSource metadataSource) : base(dbAccessProvider, false)
        {
            var config = new DocumentStoreConfigBuilder("Flowers");

            var daisyDocumentType = config.AddDocument("Daisy").Finish();
            var roseDocumentType  = config.AddDocument("Rose").Finish();

            _daisyMapping = config.AddDocumentMapping <Daisy>(daisyDocumentType.DocumentName)
                            .SetIdMapper(x => x.Id.ToString())
                            .SetPartitionMapper(x => x.Id.ToString())
                            .Finish();

            _gardenMapping = config.AddDocumentMapping <Garden>(roseDocumentType.DocumentName)
                             .SetIdMapper(x => x.Id.ToString())
                             .SetPartitionMapper(x => x.Id.ToString())
                             .Finish();

            _config = config.Finish();
            _client = CreateStoreLogic(DbAccess, _config, metadataSource);
        }
            public FruitStore(IDocumentDbAccessProvider dbAccessProvider, IDocumentMetadataSource metadataSource)
                : base(dbAccessProvider, false)
            {
                var config = new DocumentStoreConfigBuilder("Fruit");

                var appleDocumentType = config.AddDocument("Apple").Finish();
                var pearDocumentType  = config.AddDocument("Pear").Finish();

                _appleMapping = config.AddDocumentMapping <Apple>(appleDocumentType.DocumentName)
                                .SetIdMapper(x => x.Id.ToString())
                                .SetPartitionMapper(x => x.Id.ToString())
                                .Finish();

                _pearMapping = config.AddDocumentMapping <Pear>(pearDocumentType.DocumentName)
                               .SetIdMapper(x => x.Id.ToString())
                               .SetPartitionMapper(x => x.Id.ToString())
                               .Finish();

                _config = config.Finish();
                _client = CreateStoreLogic(DbAccess, _config, metadataSource);

                DbAccess.ConfigRegistry.RegisterStoreConfigSource(this);
            }
            public FlowerStore(IDocumentDbAccessProvider dbAccessProvider) : base(dbAccessProvider, false)
            {
                var config = new DocumentStoreConfigBuilder("Flowers");

                var documentType = config.AddDocument("Daisy").Finish();

                _mapping = config.AddDocumentMapping <Daisy>(documentType.DocumentName)
                           .SetIdMapper(x => x.Id.ToString())
                           .SetPartitionMapper(x => x.Id.ToString())
                           .Finish();

                _config = config.Finish();
                _client = CreateStoreLogic(DbAccess, _config);

                DbAccess.ConfigRegistry.RegisterStoreConfigSource(this);
            }
Exemple #9
0
        public OrderStore(
            IDocumentDbAccessProvider dbAccessProvider,
            IDocumentMetadataSource metadataSource) : base(dbAccessProvider)
        {
            var config = new DocumentStoreConfigBuilder("Orders");

            var orderDocumentType = config.AddDocument("Order").Finish();

            _orderMapping = config.AddDocumentMapping <Order>(orderDocumentType.DocumentName)
                            .SetIdMapper(x => x.Id.ToString())
                            .SetPartitionMapper(x => x.Id.ToString())
                            .Finish();

            _config = config.Finish();
            _client = CreateStoreLogic(DbAccess, _config, metadataSource);
        }
            public EmailStore(IDocumentDbAccessProvider dbAccessProvider) : base(dbAccessProvider, false)
            {
                var config = new DocumentStoreConfigBuilder("EmailClient");

                var documentType   = config.AddDocument("Email");
                var attachmentType = documentType.AddAttachment("EmailAttachment");

                _mapping = config.AddDocumentMapping <Email>(documentType.Name)
                           .SetIdMapper(x => x.Id.ToString())
                           .SetPartitionMapper(x => x.Id.ToString())
                           .Finish();

                _attachmentMapping = _mapping.AddAttachmentMapping <EmailAttachment>(attachmentType.Name)
                                     .Finish();

                _config = config.Finish();
                _client = CreateStoreLogic(DbAccess, _config);

                DbAccess.ConfigRegistry.RegisterStoreConfigSource(this);
            }
        public void CreateSignatureForInequalConfigs()
        {
            DocumentStoreConfigBuilder builder = new DocumentStoreConfigBuilder("StoreA");

            builder.AddDocument("DocA");

            DocumentStoreConfigBuilder builderChangedStoreName = new DocumentStoreConfigBuilder("StoreB");

            builderChangedStoreName.AddDocument("DocA");

            DocumentStoreConfigBuilder builderChangedDocName = new DocumentStoreConfigBuilder("StoreA");

            builderChangedDocName.AddDocument("DocC");

            var configA = new[] { builder.Finish() };
            var configB = new[] { builderChangedStoreName.Finish() };
            var configC = new[] { builderChangedDocName.Finish() };

            DoSignatureInequalTest(new IList <DocumentStoreConfig>[] { configA, configB, configC });
        }
        public async void EnsureConfigCurrentWithChangedSignature()
        {
            var dbConfig = CreateDbConfig();

            string oldSig    = "old_sig";
            string newSig    = "new_sig";
            var    configDoc = CreateConfigDoc("Test", oldSig);

            DocumentStoreConfigBuilder storeABuilder = new DocumentStoreConfigBuilder("StoreA");

            storeABuilder.AddDocument("DocA");

            DocumentStoreConfigBuilder storeBBuilder = new DocumentStoreConfigBuilder("StoreB");

            storeBBuilder.AddDocument("DocA");
            storeBBuilder.AddDocument("DocB");

            var configSourceA = CreateConfigSource(storeABuilder);
            var configSourceB = CreateConfigSource(storeBBuilder);

            _signatureGenerator.CreateSignature(Arg.Any <IList <DocumentStoreConfig> >()).Returns(newSig);
            _documentClient.ReadDocumentAsync(Arg.Any <Uri>(), Arg.Is <RequestOptions>(x => x.PartitionKey != null)).Returns(WrapResource(configDoc));

            // Existing index that should remain.
            var includeIdx1 = new IncludedPath();

            includeIdx1.Path = "/content_Test_StoreA_DocA/*";
            includeIdx1.Indexes.Add(new HashIndex(DataType.String, -1));

            // Existing index that should be removed. It is no longer present.
            var includeIdx2 = new IncludedPath();

            includeIdx2.Path = "/content_Test_StoreB_DocA/PropA/*";
            includeIdx2.Indexes.Add(new RangeIndex(DataType.String));

            var col1 = new DocumentCollection();

            col1.IndexingPolicy.IncludedPaths.Add(includeIdx1);
            col1.IndexingPolicy.IncludedPaths.Add(includeIdx2);

            _documentClient.ReadDocumentCollectionAsync(Arg.Any <Uri>()).Returns(WrapResource(col1));

            var manager = new ServiceDbConfigManager("Test", _signatureGenerator);

            var foo = WrapResource(col1);

            _documentClient.ReplaceDocumentCollectionAsync(Arg.Any <DocumentCollection>(), Arg.Any <RequestOptions>()).Returns(foo);

            _documentClient.UpsertDocumentAsync(
                Arg.Any <Uri>(),
                Arg.Is <object>(r => ((ServiceDbConfigManager.ServiceConfigRecord)r).Signature == newSig),
                Arg.Any <RequestOptions>())
            .Returns(WrapResource(CreateConfigDoc(configDoc.Id, newSig)));

            manager.RegisterStoreConfigSource(configSourceA);
            manager.RegisterStoreConfigSource(configSourceB);

            manager.EnsureConfigCurrent(_documentClient, dbConfig);

            await _documentClient.Received(1).UpsertDocumentAsync(Arg.Any <Uri>(), Arg.Any <object>(), Arg.Any <RequestOptions>());

            await _documentClient.Received().ReplaceDocumentCollectionAsync(
                Arg.Is <DocumentCollection>(c =>
                                            IncludedPathCheck(
                                                c.IndexingPolicy.IncludedPaths, "/content_Test_StoreA_DocA/*", "/content_Test_StoreB_DocA/*", "/content_Test_StoreB_DocB/*")),
                Arg.Any <RequestOptions>());
        }