Пример #1
0
        public TenantStoreTests()
        {
            // Configure connection strings per tenant
            var connStr = new List <KeyValuePair <string, string> >();

            _tenantNames.ForEach(t => connStr.Add(new KeyValuePair <string, string>($"{ConnectionStrings}:{ConnKeyPrefix}{t}", $"{ConnValuePrefix}{t}")));
            // Build configuration
            var cb = new ConfigurationBuilder();

            cb.AddInMemoryCollection(connStr);
            var config = cb.Build();

            // Create the mocked store with only 1 method setup for moq
            var tenantStoreMock = new Mock <TenantStore>(config, new NullLogger <TenantStore>());

            tenantStoreMock.CallBase = true; // IMPORTANT if original methods shall be used
            // Just override one method:
            tenantStoreMock.Setup(s => s.ReadTenantConfigFile(It.IsAny <string>())).Returns((string tenantName) =>
            {
                var tenant = new TenantContext
                {
                    Identifier          = tenantName,
                    IsDefault           = tenantName.Equals("DefaultTenant"),
                    Guid                = Guid.NewGuid(),
                    Filename            = tenantName,
                    SiteContext         = { UrlSegmentValue = tenantName },
                    DbContext           = { ConnectionKey = ConnKeyPrefix + tenantName },
                    OrganizationContext = { Name = "Long: " + tenantName, ShortName = "Short: " + tenantName }
                };
                return(tenant.Serialize());
            });
            tenantStoreMock.Setup(s => s.LoadTenants());
            _store = tenantStoreMock.Object;
            _store.GetTenantConfigurationFiles = () => _tenantNames.ToArray();
        }
Пример #2
0
        public async Task OnPostAsync()
        {
            if (Input.Name.IsNullOrEmpty())
            {
                Response.Cookies.Delete(Options.TenantKey);
            }
            else
            {
                var tenant = await TenantStore.FindAsync(Input.Name);

                if (tenant == null)
                {
                    throw new UserFriendlyException(L["GivenTenantIsNotAvailable", Input.Name]);
                }

                Response.Cookies.Append(
                    Options.TenantKey,
                    tenant.Id.ToString(),
                    new CookieOptions
                {
                    Path     = "/",
                    HttpOnly = false,
                    Expires  = DateTimeOffset.Now.AddYears(10)
                }
                    );
            }
        }
Пример #3
0
        private void ConfigureLlblgenPro(TenantStore tenantStore)
        {
            foreach (var tenant in tenantStore.GetTenants().Values)
            {
                var connectionString = Configuration.GetConnectionString(tenant.DbContext.ConnectionKey);
                RuntimeConfiguration.AddConnectionString(tenant.DbContext.ConnectionKey, connectionString);
                // Enable low-level (result set) caching when specified in selected queries
                // The cache of a query can be overwritten using property 'OverwriteIfPresent'
                CacheController.RegisterCache(connectionString, new ResultsetCache());
                CacheController.CachingEnabled = true;
            }

            if (WebHostEnvironment.IsProduction())
            {
                RuntimeConfiguration.ConfigureDQE <SD.LLBLGen.Pro.DQE.SqlServer.SQLServerDQEConfiguration>(c => c
                                                                                                           .SetTraceLevel(TraceLevel.Off)
                                                                                                           .AddDbProviderFactory(typeof(System.Data.SqlClient.SqlClientFactory)));
            }
            else
            {
                RuntimeConfiguration.ConfigureDQE <SD.LLBLGen.Pro.DQE.SqlServer.SQLServerDQEConfiguration>(c => c
                                                                                                           .SetTraceLevel(TraceLevel.Verbose)
                                                                                                           .AddDbProviderFactory(typeof(System.Data.SqlClient.SqlClientFactory)));

                RuntimeConfiguration.Tracing.SetTraceLevel("ORMPersistenceExecution", TraceLevel.Verbose);
                RuntimeConfiguration.Tracing.SetTraceLevel("ORMPlainSQLQueryExecution", TraceLevel.Verbose);
            }
        }
        public async Task GetTenantCallsBlobStorageToRetrieveTenant()
        {
            var mockTenantBlobContainer = new Mock <IAzureBlobContainer <Tenant> >();
            var store = new TenantStore(mockTenantBlobContainer.Object, null, new Mock <IInitializationStatusService>().Object);

            await store.GetTenantAsync("tenant");

            mockTenantBlobContainer.Verify(c => c.GetAsync("tenant"), Times.Once());
        }
Пример #5
0
        public void GetTenantCallsBlobStorageToRetrieveTenant()
        {
            var mockTenantBlobContainer = new Mock<IAzureBlobContainer<Tenant>>();
            var store = new TenantStore(mockTenantBlobContainer.Object, null);

            store.GetTenant("tenant");

            mockTenantBlobContainer.Verify(c => c.Get("tenant"), Times.Once());
        }
Пример #6
0
        public void InitializeEnsuresContainerExists()
        {
            var mockTenantBlobContainer = new Mock<IAzureBlobContainer<Tenant>>();
            var store = new TenantStore(mockTenantBlobContainer.Object, new Mock<IAzureBlobContainer<byte[]>>().Object);

            store.Initialize();

            mockTenantBlobContainer.Verify(c => c.EnsureExist(), Times.Once());
        }
Пример #7
0
        public void GetTenantCallsBlobStorageToRetrieveTenant()
        {
            var mockTenantBlobContainer = new Mock <IAzureBlobContainer <Tenant> >();
            var store = new TenantStore(mockTenantBlobContainer.Object, null);

            store.GetTenant("tenant");

            mockTenantBlobContainer.Verify(c => c.Get("tenant"), Times.Once());
        }
        public async Task InitializeEnsuresContainerExists()
        {
            var mockTenantBlobContainer = new Mock <IAzureBlobContainer <Tenant> >();
            var store = new TenantStore(mockTenantBlobContainer.Object, new Mock <IAzureBlobContainer <byte[]> >().Object, new Mock <IInitializationStatusService>().Object);

            await store.InitializeAsync();

            mockTenantBlobContainer.Verify(c => c.EnsureExistsAsync(), Times.Once());
        }
Пример #9
0
        public void InitializeEnsuresContainerExists()
        {
            var mockTenantBlobContainer = new Mock <IAzureBlobContainer <Tenant> >();
            var store = new TenantStore(mockTenantBlobContainer.Object, new Mock <IAzureBlobContainer <byte[]> >().Object);

            store.Initialize();

            mockTenantBlobContainer.Verify(c => c.EnsureExist(), Times.Once());
        }
Пример #10
0
 private TenantStore GetTenantStore()
 {
     var store = cache.Get<TenantStore>(KEY);
     if (store == null)
     {
         cache.Insert(KEY, store = new TenantStore(), DateTime.UtcNow.Add(CacheExpiration));
     }
     return store;
 }
Пример #11
0
        internal TenantStore GetTenantStore()
        {
            var store = Cache.Get <TenantStore>(KEY);

            if (store == null)
            {
                Cache.Insert(KEY, store = new TenantStore(), DateTime.UtcNow.Add(CacheExpiration));
            }
            return(store);
        }
Пример #12
0
        public async Task <IViewComponentResult> InvokeAsync()
        {
            var model = new TenantSwitchViewModel();

            if (CurrentTenant.Id.HasValue)
            {
                model.Tenant = await TenantStore.FindAsync(CurrentTenant.GetId());
            }

            return(View("~/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Components/TenantSwitch/Default.cshtml", model));
        }
Пример #13
0
 protected virtual async Task <TenantConfiguration> FindTenantAsync(string tenantIdOrName)
 {
     if (Guid.TryParse(tenantIdOrName, out var parsedTenantId))
     {
         return(await TenantStore.FindAsync(parsedTenantId));
     }
     else
     {
         return(await TenantStore.FindAsync(tenantIdOrName));
     }
 }
Пример #14
0
        public async Task OnGetAsync()
        {
            Input = new TenantInfoModel();

            if (CurrentTenant.IsAvailable)
            {
                var tenant = await TenantStore.FindAsync(CurrentTenant.GetId());

                Input.Name = tenant?.Name;
            }
        }
Пример #15
0
 public Home(ITenantContext tenantContext, TenantStore tenantStore, Axuno.BackgroundTask.IBackgroundQueue queue, SendEmailTask sendEmailTask, ILogger <Home> logger, IStringLocalizer <Account> localizer)
 {
     _tenantContext = tenantContext;
     _tenantStore   = tenantStore;
     _appDb         = _tenantContext.DbContext.AppDb;
     _queue         = queue;
     _sendEmailTask = sendEmailTask;
     _logger        = logger;
     _localizer     = localizer;
     _tenantContext = tenantContext;
 }
Пример #16
0
        public void GetTenantReturnsTenantFromBlobStorage()
        {
            var mockTenantBlobContainer = new Mock<IAzureBlobContainer<Tenant>>();
            var store = new TenantStore(mockTenantBlobContainer.Object, null);
            var tenant = new Tenant();
            mockTenantBlobContainer.Setup(c => c.Get("tenant")).Returns(tenant);

            var actualTenant = store.GetTenant("tenant");

            Assert.AreSame(tenant, actualTenant);
        }
Пример #17
0
    private async Task <string> GetCurrentTenantNameAsync()
    {
        if (CurrentTenant.Id.HasValue && CurrentTenant.Name.IsNullOrEmpty())
        {
            var tenantConfiguration = await TenantStore.FindAsync(CurrentTenant.Id.Value);

            return(tenantConfiguration.Name);
        }

        return(CurrentTenant.Name);
    }
Пример #18
0
        public void UploadLogoGetsTenatToUpdateFromContainer()
        {
            var mockLogosBlobContainer = new Mock<IAzureBlobContainer<byte[]>>();
            var mockTenantContainer = new Mock<IAzureBlobContainer<Tenant>>();
            var store = new TenantStore(mockTenantContainer.Object, mockLogosBlobContainer.Object);
            mockTenantContainer.Setup(c => c.Get("tenant")).Returns(new Tenant() { Name = "tenant" }).Verifiable();
            mockLogosBlobContainer.Setup(c => c.GetUri(It.IsAny<string>())).Returns(new Uri("http://bloburi"));

            store.UploadLogo("tenant", new byte[1]);

            mockTenantContainer.Verify();
        }
Пример #19
0
        public void GetTenantReturnsTenantFromBlobStorage()
        {
            var mockTenantBlobContainer = new Mock <IAzureBlobContainer <Tenant> >();
            var store  = new TenantStore(mockTenantBlobContainer.Object, null);
            var tenant = new Tenant();

            mockTenantBlobContainer.Setup(c => c.Get("tenant")).Returns(tenant);

            var actualTenant = store.GetTenant("tenant");

            Assert.AreSame(tenant, actualTenant);
        }
Пример #20
0
 public Cron(TenantStore tenantStore, ITenantContext tenantContext, IConfiguration configuration,
             Axuno.BackgroundTask.IBackgroundQueue queue,
             SendEmailTask sendMailTask, IMemoryCache cache, ILogger <Cron> logger)
 {
     _tenantContext = tenantContext;
     _configuration = configuration;
     _queue         = queue;
     _sendMailTask  = sendMailTask;
     _tenantStore   = tenantStore;
     _cache         = cache;
     _logger        = logger;
 }
        public async Task GetTenantReturnsTenantFromBlobStorage()
        {
            var mockTenantBlobContainer = new Mock <IAzureBlobContainer <Tenant> >();
            var store  = new TenantStore(mockTenantBlobContainer.Object, null, new Mock <IInitializationStatusService>().Object);
            var tenant = new Tenant();

            mockTenantBlobContainer.Setup(c => c.GetAsync("tenant")).ReturnsAsync(tenant);

            var actualTenant = await store.GetTenantAsync("tenant");

            Assert.AreSame(tenant, actualTenant);
        }
Пример #22
0
        public void GetTenantNamesReturnsBlobNamesFromContainer()
        {
            var mockTenantBlobContainer = new Mock<IAzureBlobContainer<Tenant>>();
            var store = new TenantStore(mockTenantBlobContainer.Object, null);
            var blobs = new List<IListBlobItemWithName>() { new MockListBlobItem("b1"), new MockListBlobItem("b2") };
            mockTenantBlobContainer.Setup(c => c.GetBlobList()).Returns(blobs);

            var tenantNames = store.GetTenantNames().ToList();

            Assert.AreEqual(2, tenantNames.Count());
            CollectionAssert.Contains(tenantNames, "b1");
            CollectionAssert.Contains(tenantNames, "b2");
        }
Пример #23
0
        public void UploadLogoGetsTenatToUpdateFromContainer()
        {
            var mockLogosBlobContainer = new Mock <IAzureBlobContainer <byte[]> >();
            var mockTenantContainer    = new Mock <IAzureBlobContainer <Tenant> >();
            var store = new TenantStore(mockTenantContainer.Object, mockLogosBlobContainer.Object);

            mockTenantContainer.Setup(c => c.Get("tenant")).Returns(new Tenant()
            {
                Name = "tenant"
            }).Verifiable();
            mockLogosBlobContainer.Setup(c => c.GetUri(It.IsAny <string>())).Returns(new Uri("http://bloburi"));

            store.UploadLogo("tenant", new byte[1]);

            mockTenantContainer.Verify();
        }
        public async Task UploadLogoSaveTenatWithLogoUrl()
        {
            var mockLogosBlobContainer = new Mock <IAzureBlobContainer <byte[]> >();
            var mockTenantContainer    = new Mock <IAzureBlobContainer <Tenant> >();
            var store = new TenantStore(mockTenantContainer.Object, mockLogosBlobContainer.Object, new Mock <IInitializationStatusService>().Object);

            mockTenantContainer.Setup(c => c.GetAsync("tenant")).ReturnsAsync(new Tenant()
            {
                TenantId = "tenant"
            });
            mockLogosBlobContainer.Setup(c => c.GetUri(It.IsAny <string>())).Returns(new Uri("http://bloburi/"));

            await store.UploadLogoAsync("tenant", new byte[1]);

            mockTenantContainer.Verify(c => c.SaveAsync("tenant", It.Is <Tenant>(t => t.Logo == "http://bloburi/")));
        }
Пример #25
0
        public void UploadLogoSaveTenatWithLogoUrl()
        {
            var mockLogosBlobContainer = new Mock <IAzureBlobContainer <byte[]> >();
            var mockTenantContainer    = new Mock <IAzureBlobContainer <Tenant> >();
            var store = new TenantStore(mockTenantContainer.Object, mockLogosBlobContainer.Object);

            mockTenantContainer.Setup(c => c.Get("tenant")).Returns(new Tenant()
            {
                Name = "tenant"
            });
            mockLogosBlobContainer.Setup(c => c.GetUri(It.IsAny <string>())).Returns(new Uri("http://bloburi/"));

            store.UploadLogo("tenant", new byte[1]);

            mockTenantContainer.Verify(c => c.Save("tenant", It.Is <Tenant>(t => t.Logo == "http://bloburi/")));
        }
        public async Task UploadLogoGetsTenatToUpdateFromContainer()
        {
            var mockLogosBlobContainer = new Mock <IAzureBlobContainer <byte[]> >();
            var mockTenantContainer    = new Mock <IAzureBlobContainer <Tenant> >();
            var store = new TenantStore(mockTenantContainer.Object, mockLogosBlobContainer.Object, new Mock <IInitializationStatusService>().Object);

            mockTenantContainer.Setup(c => c.GetAsync("tenant")).ReturnsAsync(new Tenant()
            {
                TenantId = "tenant"
            }).Verifiable();
            mockLogosBlobContainer.Setup(c => c.GetUri(It.IsAny <string>())).Returns(new Uri("http://bloburi"));

            await store.UploadLogoAsync("tenant", new byte[1]);

            mockTenantContainer.Verify();
        }
Пример #27
0
        public void UploadLogoSavesLogoToContainer()
        {
            var mockLogosBlobContainer = new Mock <IAzureBlobContainer <byte[]> >();
            var mockTenantContainer    = new Mock <IAzureBlobContainer <Tenant> >();
            var store = new TenantStore(mockTenantContainer.Object, mockLogosBlobContainer.Object);

            mockTenantContainer.Setup(c => c.Get("tenant")).Returns(new Tenant()
            {
                Name = "tenant"
            });
            mockLogosBlobContainer.Setup(c => c.GetUri(It.IsAny <string>())).Returns(new Uri("http://bloburi"));
            var logo = new byte[1];

            store.UploadLogo("tenant", logo);

            mockLogosBlobContainer.Verify(c => c.Save("tenant", logo), Times.Once());
        }
Пример #28
0
        public void GetTenantNamesReturnsBlobNamesFromContainer()
        {
            var mockTenantBlobContainer = new Mock <IAzureBlobContainer <Tenant> >();
            var store = new TenantStore(mockTenantBlobContainer.Object, null);
            var blobs = new List <IListBlobItemWithName>()
            {
                new MockListBlobItem("b1"), new MockListBlobItem("b2")
            };

            mockTenantBlobContainer.Setup(c => c.GetBlobList()).Returns(blobs);

            var tenantNames = store.GetTenantNames().ToList();

            Assert.AreEqual(2, tenantNames.Count());
            CollectionAssert.Contains(tenantNames, "b1");
            CollectionAssert.Contains(tenantNames, "b2");
        }
        public async Task UploadLogoSavesLogoToContainer()
        {
            var mockLogosBlobContainer = new Mock <IAzureBlobContainer <byte[]> >();
            var mockTenantContainer    = new Mock <IAzureBlobContainer <Tenant> >();
            var store = new TenantStore(mockTenantContainer.Object, mockLogosBlobContainer.Object, new Mock <IInitializationStatusService>().Object);

            mockTenantContainer.Setup(c => c.GetAsync("tenant")).ReturnsAsync(new Tenant()
            {
                TenantId = "tenant"
            });
            mockLogosBlobContainer.Setup(c => c.GetUri(It.IsAny <string>())).Returns(new Uri("http://bloburi"));
            var logo = new byte[1];

            await store.UploadLogoAsync("tenant", logo);

            mockLogosBlobContainer.Verify(c => c.SaveAsync("tenant", logo), Times.Once());
        }
Пример #30
0
        private TenantStore GetTenantStore(ref bool fromdb)
        {
            var store = cache.Get(KEY) as TenantStore;

            if (store == null || interval.Expired || fromdb)
            {
                fromdb = true;
                var date = store != null ? interval.StartTime : DateTime.MinValue;
                interval.Start(DbExpiration);

                var tenants = service.GetTenants(date);
                if (store == null)
                {
                    cache.Insert(KEY, store = new TenantStore(), CacheExpiration);
                }

                foreach (var t in tenants)
                {
                    store.Insert(t);
                }
            }
            return(store);
        }
Пример #31
0
        public virtual async Task OnPostAsync()
        {
            Guid?tenantId = null;

            if (!Input.Name.IsNullOrEmpty())
            {
                var tenant = await TenantStore.FindAsync(Input.Name);

                if (tenant == null)
                {
                    throw new UserFriendlyException(L["GivenTenantIsNotExist", Input.Name]);
                }

                if (!tenant.IsActive)
                {
                    throw new UserFriendlyException(L["GivenTenantIsNotAvailable", Input.Name]);
                }

                tenantId = tenant.Id;
            }

            AbpMultiTenancyCookieHelper.SetTenantCookie(HttpContext, tenantId, Options.TenantKey);
        }
Пример #32
0
 public LeaguesNavigationTreeBuilder(TenantStore tenantStore, IStringLocalizer <NavigationResource> localizer)
 {
     _tenantStore = tenantStore;
     _localizer   = localizer;
 }
Пример #33
0
        public void UploadLogoSavesLogoToContainer()
        {
            var mockLogosBlobContainer = new Mock<IAzureBlobContainer<byte[]>>();
            var mockTenantContainer = new Mock<IAzureBlobContainer<Tenant>>();
            var store = new TenantStore(mockTenantContainer.Object, mockLogosBlobContainer.Object);
            mockTenantContainer.Setup(c => c.Get("tenant")).Returns(new Tenant() { Name = "tenant" });
            mockLogosBlobContainer.Setup(c => c.GetUri(It.IsAny<string>())).Returns(new Uri("http://bloburi"));
            var logo = new byte[1];

            store.UploadLogo("tenant", logo);

            mockLogosBlobContainer.Verify(c => c.Save("tenant", logo), Times.Once());
        }
Пример #34
0
        /// <summary>
        ///     Creates a tenant, user on the tenant and some todos with tags
        /// </summary>
        public static async Task SeedData(this IServiceProvider services, ILogger log)
        {
            /**
             * Get registered services.
             */
            var context         = services.GetRequiredService <IDynamoDBContext>();
            var idGenerator     = services.GetRequiredService <IIdGenerator>();
            var userRightsStore = services.GetRequiredService <IUserRightStore>();
            var configuration   = services.GetRequiredService <IConfiguration>();

            /**
             * Setup the provisioning user
             */
            var provisioningUser = new User {
                Id = TrustDefaults.ProvisioningId
            };

            /**
             * Hand make up these because we want to inject the user with the provisioning user
             */
            var tenantStore = new TenantStore(
                provisioningUser,
                context,
                idGenerator,
                userRightsStore,
                services.GetRequiredService <ILogger <TenantStore> >());

            var userStore = new UserStore(
                provisioningUser,
                context,
                idGenerator,
                userRightsStore,
                services.GetRequiredService <ILogger <UserStore> >());

            var tagStore = new TagStore(
                provisioningUser,
                context,
                idGenerator,
                userRightsStore,
                services.GetRequiredService <ILogger <TagStore> >());

            var todoStore = new TodoStore(
                provisioningUser,
                context,
                idGenerator,
                userRightsStore,
                tagStore,
                tenantStore,
                services.GetRequiredService <ILogger <TodoStore> >());

            // ensure the database is up and tables are created
            await services.GetRequiredService <IAmazonDynamoDB>()
            .WaitForAllTables(log);


            log.Info("[Seed] create sample data");

            //////////////////////////
            // Authentication
            // ==============
            //

            // A precreated user (in third-party system) [or decoded JWT through https://jwt.io
            // grab it from the Authorization header in a request]
            var knownAuth0Id = configuration.GetSection("TestSeedUser").Value;

            log.DebugFormat("[Seed] found seed user '{0}'", knownAuth0Id);

            var rootUser = (await userStore.GetByExternalId(TrustDefaults.KnownRootIdentifier))
                           .ThrowConfigurationErrorsExceptionIfNull(() => "Root user has not been configured");


            //////////////////////////
            // Seed a user
            // =============
            //
            // Assume a known Auth0 (test) user, register a user and then link to tenant
            //

            var userData = new UserCreateData
            {
                Email      = "*****@*****.**",
                Name       = "test",
                ExternalId = knownAuth0Id
            };

            // create seeed data if the user doesn't exist
            if ((await userStore.GetByExternalId(userData.ExternalId)).IsNull())
            {
                log.Info($"[Seed] user {userData.Email}");

                var userId = await userStore.Create(
                    rootUser.Id,
                    TrustDefaults.KnownHomeResourceId,
                    userData,
                    Permission.FullControl | Permission.Owner,
                    CallerCollectionRights.User);

                //////////////////////////
                // Seed a tenant
                // =============
                //

                var tenantCreateData = new TenantCreateData
                {
                    Code        = "rewire.semanticlink.io",
                    Name        = "Rewire",
                    Description = "A sample tenant (company/organisation)"
                };

                log.Info($"[Seed] tenant '{tenantCreateData.Code}'");

                var tenantId = await tenantStore.Create(
                    rootUser.Id,
                    TrustDefaults.KnownHomeResourceId,
                    tenantCreateData,
                    Permission.FullControl | Permission.Owner,
                    CallerCollectionRights.Tenant);


                //////////////////////////
                // Add user to tenant
                // ==================
                //
                if (!await tenantStore.IsRegisteredOnTenant(tenantId, userId))
                {
                    await tenantStore.IncludeUser(
                        tenantId,
                        userId,
                        Permission.Get | Permission.Owner,
                        CallerCollectionRights.Tenant);
                }

                log.Info($"[Seed] registered user '{userData.Email}' against tenant '{tenantCreateData.Code}'");

                //////////////////////////
                // Seed global tags
                // =============
                //
                // create some global tags
                //
                var tagIds = (await Task.WhenAll(
                                  new[] { "Work", "Personal", "Grocery List" }
                                  .Select(tag => tagStore.Create(
                                              userId,
                                              TrustDefaults.KnownHomeResourceId,
                                              new TagCreateData {
                    Name = tag
                },
                                              Permission.Get,
                                              CallerCollectionRights.Tag)
                                          )))
                             .Where(result => result != null)
                             .ToList();

                log.InfoFormat("[Seed] tags: [{0}]", tagIds.ToCsvString(tagId => tagId));

                /////////////////////////////////////
                // Seed a named todo list
                // ======================
                //

                var todoCreateData = new TodoCreateData
                {
                    Parent = tenantId,
                    Name   = "Shopping Todo List",
                    Type   = TodoType.List
                };

                var todoListId = await todoStore.Create(
                    userId,
                    tenantId,
                    todoCreateData,
                    Permission.FullControl | Permission.Owner,
                    CallerCollectionRights.Todo);

                log.InfoFormat("[Seed] todo list [{0}]", todoListId);

                //////////////////////////
                // Seed some todos
                // ===============
                //

                var createTodoDatas = new List <TodoCreateData>
                {
                    new TodoCreateData
                    {
                        Name   = "One Todo",
                        Parent = todoListId,
                        Type   = TodoType.Item
                    },
                    new TodoCreateData
                    {
                        Name = "Two Todo (tag)",
                        Tags = new List <string> {
                            tagIds.First()
                        },
                        State  = TodoState.Complete,
                        Parent = todoListId,
                        Type   = TodoType.Item
                    },
                    new TodoCreateData
                    {
                        Name   = "Three Todo (tagged)",
                        Tags   = tagIds,
                        Parent = todoListId,
                        Type   = TodoType.Item
                    }
                };

                var ids = await Task.WhenAll(createTodoDatas
                                             .Select(data => todoStore.Create(
                                                         userId,
                                                         userId,
                                                         data,
                                                         Permission.FullControl | Permission.Owner,
                                                         CallerCollectionRights.Todo)));


                log.InfoFormat("[Seed] todos: [{0}]", ids.ToCsvString(id => id));
            }
            else
            {
                log.Debug("[Seed] test data already setup");
            }
        }
Пример #35
0
 /// <summary>
 /// CTOR.
 /// </summary>
 /// <param name="tenantStore"></param>
 /// <param name="httpContextAccessor"></param>
 public TenantResolver(TenantStore tenantStore, IHttpContextAccessor httpContextAccessor)
 {
     _tenantStore = tenantStore;
     _httpContext = httpContextAccessor.HttpContext;
 }
Пример #36
0
 private TenantStore GetTenantStore()
 {
     var store = cache.Get(KEY) as TenantStore;
     if (store == null)
     {
         cache.Insert(KEY, store = new TenantStore(), DateTime.UtcNow.Add(CacheExpiration));
     }
     return store;
 }
Пример #37
0
        public void UploadLogoSaveTenatWithLogoUrl()
        {
            var mockLogosBlobContainer = new Mock<IAzureBlobContainer<byte[]>>();
            var mockTenantContainer = new Mock<IAzureBlobContainer<Tenant>>();
            var store = new TenantStore(mockTenantContainer.Object, mockLogosBlobContainer.Object);
            mockTenantContainer.Setup(c => c.Get("tenant")).Returns(new Tenant() { Name = "tenant" });
            mockLogosBlobContainer.Setup(c => c.GetUri(It.IsAny<string>())).Returns(new Uri("http://bloburi/"));

            store.UploadLogo("tenant", new byte[1]);

            mockTenantContainer.Verify(c => c.Save("tenant", It.Is<Tenant>(t => t.Logo == "http://bloburi/")));
        }