public async Task NoContent_Active() { var usersClientMock = new Mock <IUsersClient>(); usersClientMock.Setup(x => x.GetUserByEmailAsync(It.IsAny <string>())).ReturnsAsync(new UserInfo { UserId = 1 }); Services.AddSingleton(usersClientMock.Object); var db = AddDbContext(); var originalInvitation = new CompanyInvitation { Status = InvitationStatus.Pending }.SetStringProperties(); originalInvitation.Permissions = "0"; db.Add(originalInvitation); db.SaveChanges(); var controller = GetController(); var result = await controller.Respond(originalInvitation.Token, true); Assert.IsType <NoContentResult>(result); db = Db; var companyUser = db.CompanyUsers.Single(); Assert.Equal(1, companyUser.UserId); Assert.False(db.CompanyInvitations.Any()); }
public async Task <IActionResult> Invite(int companyId, string responseUrl, [FromBody] CompanyInvitationRequest request) { if (await db.CompanyInvitations.AnyAsync(x => x.CompanyId == companyId && x.Email == request.Email)) { return(this.BadRequest(nameof(CompanyInvitation.Email), "An invitation has already been sent to this email.")); } var invitation = new CompanyInvitation(); invitation.Token = Guid.NewGuid(); invitation.CompanyId = companyId; invitation.Email = request.Email; invitation.Status = InvitationStatus.Pending; invitation.Permissions = string.Join(",", request.Permissions); db.Add(invitation); await db.SaveChangesAsync(); var companyName = await db.Companies .Where(x => x.CompanyId == companyId) .Select(x => x.Name) .SingleAsync(); await emailingClient.SendAsync(new EmailRequest { Data = new Dictionary <string, string> { ["CompanyName"] = companyName, ["ResponseUrl"] = string.Format(WebUtility.UrlDecode(responseUrl), invitation.Token) }, Subject = "Company Invitation", TemplateKey = "CompanyInvitation", To = request.Email }); var responseUri = new Uri(string.Format(WebUtility.UrlDecode(responseUrl), invitation.Token)); var user = await usersClient.GetUserByEmailAsync(request.Email); if (user != null) { await notificationsClient.NotifyAsync(user.UserId, new NotifyRequest { RedirectPath = responseUri.PathAndQuery, Subject = $"Company Invitation", Body = $"You have been invited to to join the company <strong>{companyName}</strong>." }); } return(NoContent()); }
public async Task Forbid() { var db = AddDbContext(); db.Add(new CompanyUser { CompanyId = 1, UserId = 1 }); var originalInvitation = new CompanyInvitation { Status = InvitationStatus.Pending }.SetStringProperties(); db.Add(originalInvitation); db.SaveChanges(); var controller = GetController(1); var result = await controller.Delete(originalInvitation.Token); Assert.IsType <ForbidResult>(result); }
public async Task NoContent_Rejected() { var db = AddDbContext(); var originalInvitation = new CompanyInvitation { Status = InvitationStatus.Pending }.SetStringProperties(); db.Add(originalInvitation); db.SaveChanges(); var controller = GetController(); var result = await controller.Respond(originalInvitation.Token, false); Assert.IsType <NoContentResult>(result); db = Db; var invitation = db.CompanyInvitations.Single(); Assert.Equal(InvitationStatus.Rejected, invitation.Status); }
public async Task Ok_Activated() { var db = AddDbContext(); var invitation = new CompanyInvitation { CompanyId = 1, Email = "Email", Status = InvitationStatus.Accepted, Token = Guid.Empty }; db.Add(invitation); db.SaveChanges(); var controller = GetController(); var result = await controller.Activate(invitation.Email, 8); var ok = Assert.IsType <OkObjectResult>(result); Assert.True((bool)ok.Value); }
public async Task NoContent_Accepted() { var usersClientMock = new Mock <IUsersClient>(); usersClientMock.Setup(x => x.IsEmailUniqueAsync(It.IsAny <string>())).ReturnsAsync(true); Services.AddSingleton(usersClientMock.Object); var db = AddDbContext(); var originalInvitation = new CompanyInvitation { Status = InvitationStatus.Pending }.SetStringProperties(); db.Add(originalInvitation); db.SaveChanges(); var controller = GetController(); var result = await controller.Respond(originalInvitation.Token, true); Assert.IsType <NoContentResult>(result); db = Db; var invitation = db.CompanyInvitations.Single(); Assert.Equal(InvitationStatus.Accepted, invitation.Status); }