// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using System.Linq; using System.Threading; using System.Threading.Tasks; using Microsoft.Framework.DependencyInjection; using Microsoft.Framework.DependencyInjection.Fallback; using Xunit; namespace Microsoft.AspNet.Identity.Test { public class RoleManagerTest { [Fact] public void RolesQueryableFailWhenStoreNotImplemented() { var manager = CreateRoleManager(new NoopRoleStore()); Assert.False(manager.SupportsQueryableRoles); Assert.Throws(() => manager.Roles.Count()); } [Fact] public void DisposeAfterDisposeDoesNotThrow() { var manager = CreateRoleManager(new NoopRoleStore()); manager.Dispose(); manager.Dispose(); } [Fact] public async Task RoleManagerPublicNullChecks() { var provider = new ServiceCollection().BuildServiceProvider(); Assert.Throws("store", () => new RoleManager(null, new RoleValidator())); Assert.Throws("roleValidator", () => new RoleManager(new NotImplementedStore(), null)); var manager = CreateRoleManager(new NotImplementedStore()); await Assert.ThrowsAsync("role", async () => await manager.CreateAsync(null)); await Assert.ThrowsAsync("role", async () => await manager.UpdateAsync(null)); await Assert.ThrowsAsync("role", async () => await manager.DeleteAsync(null)); await Assert.ThrowsAsync("roleName", async () => await manager.FindByNameAsync(null)); await Assert.ThrowsAsync("roleName", async () => await manager.RoleExistsAsync(null)); } [Fact] public async Task RoleStoreMethodsThrowWhenDisposed() { var manager = CreateRoleManager(new NoopRoleStore()); manager.Dispose(); await Assert.ThrowsAsync(() => manager.FindByIdAsync(null)); await Assert.ThrowsAsync(() => manager.FindByNameAsync(null)); await Assert.ThrowsAsync(() => manager.RoleExistsAsync(null)); await Assert.ThrowsAsync(() => manager.CreateAsync(null)); await Assert.ThrowsAsync(() => manager.UpdateAsync(null)); await Assert.ThrowsAsync(() => manager.DeleteAsync(null)); } private static RoleManager CreateRoleManager(IRoleStore roleStore) { return new RoleManager(roleStore, new RoleValidator()); } private class NotImplementedStore : IRoleStore { public Task CreateAsync(TestRole role, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task UpdateAsync(TestRole role, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task DeleteAsync(TestRole role, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task GetRoleIdAsync(TestRole role, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task GetRoleNameAsync(TestRole role, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task SetRoleNameAsync(TestRole role, string roleName, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task FindByIdAsync(string roleId, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public Task FindByNameAsync(string roleName, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } public void Dispose() { throw new NotImplementedException(); } } } }