Пример #1
0
		/// <summary>
		/// Constructor.
		/// </summary>
		public UserService(
			DatabaseContext dbContext,
			IIdentityProvider identityProvider,
			IGitHubUserClient gitHubUserClient, 
			IGitHubOrganizationClient gitHubOrgClient,
			IGitHubTeamClient gitHubTeamClient,
			IEmailProvider emailProvider,
			ActivationToken activationToken)
		{
			_dbContext = dbContext;
			_identityProvider = identityProvider;
			_gitHubUserClient = gitHubUserClient;
			_gitHubOrgClient = gitHubOrgClient;
			_gitHubTeamClient = gitHubTeamClient;
			_emailProvider = emailProvider;
			_activationToken = activationToken;
		}
		public async Task RegisterFirstSuperUserAsync_ValidRegistration_Successful()
		{
			var database = new TestDatabaseBuilder().Build();

			var modelErrors = new MockErrorCollection();
			var activationToken = new ActivationToken("ActivationToken");
			var gitHubUserClient = GetMockGitHubUserClient(userExists: true);
			var identityProvider = GetMockIdentityProvider(GetIdentity("User1"));

			var userService = GetUserService
			(
				database.Context, 
				identityProvider.Object, 
				gitHubUserClient.Object, 
				activationToken: activationToken
			);

			var result = await userService.RegisterFirstSuperUserAsync
			(
				new SuperUserRegistration()
				{
					LastName = "LastName",
					FirstName = "FirstName",
					ActivationToken = "ActivationToken",
					GitHubLogin = "******",
					EmailAddress = "EmailAddress"
				},
				modelErrors
			);

			database.Reload();

			var user = database.Context.Users.Single();

			Assert.Equal(RegisterNewUserResult.Success, result);
			Assert.False(modelErrors.HasErrors);
			Assert.Equal(1, database.Context.Users.Count());
			Assert.Equal("LastName", user.LastName);
			Assert.Equal("FirstName", user.FirstName);
			Assert.Equal("User1Id", user.UniqueId);
			Assert.Equal("User1", user.UserName);
			Assert.Equal("GitHubUser", user.GitHubLogin);
			Assert.Equal("EmailAddress", user.EmailAddress);
			Assert.True(user.EmailAddressConfirmed);
			Assert.True(user.SuperUser);
		}
		public async Task RegisterFirstSuperUserAsync_WrongActivationToken_DoesNotRegister()
		{
			var database = new TestDatabaseBuilder().Build();

			var modelErrors = new MockErrorCollection();
			var activationToken = new ActivationToken("ActivationToken");

			var userService = GetUserService
			(
				database.Context,
				activationToken: activationToken
			);

			var result = await userService.RegisterFirstSuperUserAsync
			(
				new SuperUserRegistration() { ActivationToken = "Wrong" },
				modelErrors
			);

			Assert.Equal(RegisterNewUserResult.Failed, result);
			Assert.True(modelErrors.VerifyErrors("ActivationToken"));
			Assert.Equal(0, database.Context.Users.Count());
		}
		public async Task RegisterFirstSuperUserAsync_NonExistentGitHubUser_DoesNotRegister()
		{
			var database = new TestDatabaseBuilder().Build();

			var modelErrors = new MockErrorCollection();
			var activationToken = new ActivationToken("ActivationToken");
			var gitHubUserClient = GetMockGitHubUserClient(userExists: false);

			var userService = GetUserService
			(
				database.Context,
				activationToken: activationToken,
				gitHubUserClient: gitHubUserClient.Object
			);

			var result = await userService.RegisterFirstSuperUserAsync
			(
				new SuperUserRegistration()
				{
					ActivationToken = "ActivationToken",
					GitHubLogin = "******"
				},
				modelErrors
			);

			Assert.Equal(RegisterNewUserResult.Failed, result);
			Assert.True(modelErrors.VerifyErrors("GitHubLogin"));
			Assert.Equal(0, database.Context.Users.Count());
		}
		/// <summary>
		/// Returns a user service.
		/// </summary>
		private IUserService GetUserService(
			DatabaseContext dbContext = null,
			IIdentityProvider identityProvider = null,
			IGitHubUserClient gitHubUserClient = null,
			IGitHubOrganizationClient gitHubOrgClient = null,
			IGitHubTeamClient gitHubTeamClient = null,
			IEmailProvider emailProvider = null,
			ActivationToken activationToken = null)
		{
			return new UserService
			(
				dbContext,
				identityProvider,
				gitHubUserClient,
				gitHubOrgClient,
				gitHubTeamClient,
				emailProvider,
				activationToken
			);
		}