Fixing tests

This commit is contained in:
rockstardev
2025-03-15 03:24:19 -05:00
parent 9cf25c7c9e
commit 5ce8648bd2
4 changed files with 63 additions and 39 deletions

View File

@@ -828,14 +828,16 @@ namespace BTCPayServer.Tests
Assert.DoesNotContain("You need to configure email settings before this feature works", s.Driver.PageSource);
s.Driver.FindElement(By.Id("CreateEmailRule")).Click();
var select = new SelectElement(s.Driver.FindElement(By.Id("Rules_0__Trigger")));
var select = new SelectElement(s.Driver.FindElement(By.Id("Trigger")));
select.SelectByText("An invoice has been settled", true);
s.Driver.FindElement(By.Id("Rules_0__To")).SendKeys("test@gmail.com");
s.Driver.FindElement(By.Id("Rules_0__CustomerEmail")).Click();
s.Driver.FindElement(By.Id("Rules_0__Subject")).SendKeys("Thanks!");
s.Driver.FindElement(By.Id("To")).SendKeys("test@gmail.com");
s.Driver.FindElement(By.Id("CustomerEmail")).Click();
s.Driver.FindElement(By.Id("Subject")).SendKeys("Thanks!");
s.Driver.FindElement(By.ClassName("note-editable")).SendKeys("Your invoice is settled");
s.Driver.FindElement(By.Id("SaveEmailRules")).Click();
Assert.Contains("Store email rules saved", s.FindAlertMessage().Text);
// we now have a rule
Assert.DoesNotContain("There are no rules yet.", s.Driver.PageSource);
Assert.Contains("test@gmail.com", s.Driver.PageSource);
s.GoToStore(StoreNavPages.Emails);
Assert.True(s.Driver.FindElement(By.Id("IsCustomSMTP")).Selected);

View File

@@ -4,6 +4,8 @@ using System.ComponentModel.DataAnnotations;
using System.Globalization;
using System.Linq;
using System.Threading.Tasks;
using BTCPayServer.Abstractions.Extensions;
using BTCPayServer.Abstractions.Models;
using BTCPayServer.Client;
using BTCPayServer.Data;
using BTCPayServer.Models;
@@ -18,10 +20,21 @@ namespace BTCPayServer.Controllers
public partial class UIStoresController
{
[HttpGet("{storeId}/emails/rules")]
public IActionResult EmailRulesIndex(string storeId)
public async Task<IActionResult> EmailRulesIndex(string storeId)
{
var store = HttpContext.GetStoreData();
if (store == null) return NotFound();
var configured = await _emailSenderFactory.IsComplete(store.Id);
if (!configured && !TempData.HasStatusMessage())
{
TempData.SetStatusMessageModel(new StatusMessageModel
{
Severity = StatusMessageModel.StatusSeverity.Warning,
Html = "You need to configure email settings before this feature works." +
$" <a class='alert-link' href='{Url.Action("StoreEmailSettings", new { storeId })}'>Configure store email settings</a>."
});
}
var rules = store.GetStoreBlob().EmailRules ?? new List<StoreEmailRule>();
return View("StoreEmailRulesList", rules);

View File

@@ -17,7 +17,7 @@
</ol>
<h2>@ViewData["Title"]</h2>
</nav>
<a id="page-primary" permission="@Policies.CanCreateNonApprovedPullPayments" asp-action="EmailRulesCreate" asp-route-storeId="@storeId"
<a id="CreateEmailRule" permission="@Policies.CanCreateNonApprovedPullPayments" asp-action="EmailRulesCreate" asp-route-storeId="@storeId"
class="btn btn-primary" role="button">
Create Email Rule
</a>
@@ -28,34 +28,43 @@
Email rules allow BTCPay Server to send customized emails from your store based on events.
</p>
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th>Trigger</th>
<th>Customer Email</th>
<th>To</th>
<th>Subject</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
@foreach (var rule in Model.Select((value, index) => new { value, index }))
{
<tr>
<td>@rule.value.Trigger</td>
<td>@(rule.value.CustomerEmail ? "Yes" : "No")</td>
<td>@rule.value.To</td>
<td>@rule.value.Subject</td>
<td>
<a asp-action="EmailRulesEdit" asp-route-storeId="@storeId" asp-route-ruleIndex="@rule.index">Edit</a>
-
<form asp-action="EmailRulesDelete" asp-route-storeId="@storeId" asp-route-ruleIndex="@rule.index" method="post" style="display:inline;">
<a href="#" class="text-danger" onclick="event.preventDefault(); if (confirm('Are you sure you want to delete this email rule?')) this.closest('form').submit();">Delete</a>
</form>
</td>
</tr>
}
</tbody>
</table>
</div>
@if (Model.Any())
{
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th>Trigger</th>
<th>Customer Email</th>
<th>To</th>
<th>Subject</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
@foreach (var rule in Model.Select((value, index) => new { value, index }))
{
<tr>
<td>@rule.value.Trigger</td>
<td>@(rule.value.CustomerEmail ? "Yes" : "No")</td>
<td>@rule.value.To</td>
<td>@rule.value.Subject</td>
<td>
<a asp-action="EmailRulesEdit" asp-route-storeId="@storeId" asp-route-ruleIndex="@rule.index">Edit</a>
-
<form asp-action="EmailRulesDelete" asp-route-storeId="@storeId" asp-route-ruleIndex="@rule.index" method="post" style="display:inline;">
<a href="#" class="text-danger" onclick="event.preventDefault(); if (confirm('Are you sure you want to delete this email rule?')) this.closest('form').submit();">Delete</a>
</form>
</td>
</tr>
}
</tbody>
</table>
</div>
}
else
{
<p class="text-secondary" text-translate="true">
There are no rules yet.
</p>
}

View File

@@ -17,7 +17,7 @@
<div class="sticky-header">
<h2 text-translate="true">@ViewData["Title"]</h2>
<div>
<button id="page-primary" type="submit" class="btn btn-primary">Save</button>
<button id="SaveEmailRules" type="submit" class="btn btn-primary">Save</button>
<a asp-action="EmailRulesIndex" asp-route-storeId="@storeId" class="btn btn-secondary">Cancel</a>
</div>
</div>