Files
member-console/internal/server/testdata/operator_activity/feed.html
T
cgalo5758 340f19e21c List same-instant feed events by kind, then the later-written row first
Events of the recent-activity feed that share one timestamp now list by
kind (grant, invoice, payment, tier change, as before) and, within a kind,
the one the console recorded later first. Invoice and payment events had no
Seq, so two of them at one instant fell through to their summary text and
organization id: "$100.00" listed above "$20.00" and Zeta above Alpha
whichever was recorded later. They now carry their own row's id, as grant
and tier events already did, and activityLess breaks the tie on it, so
every event has one place in the order. The comment on ActivityEvent.Seq
and on activityLess say so. The requirement "Invoice and payment events
are placed when they happened" now states the order of events that share
one timestamp, through the change same-instant-feed-order, archived in
this commit with the delta synced into the main spec.

How it was shown to change only that: TestRecentActivityTiesListTheLaterWrittenFirst
(invoices of two organizations, invoices of one organization, rows of one
kind in any input order) fails in all three subtests at the parent and
passes here. The feed's golden diff is exactly two pairs of rows swapped in
feed.json and in feed.html: Alpha's invoice above Zeta's, and "$20.00"
above "$100.00" for the invoices of one organization. Names and results of
internal/server are equal to the parent's (1473 at the parent, 1477 here:
the new test and its three subtests), 0 failures. Four breaks (the invoice
Seq, the payment Seq, the id direction, the kind direction) are each caught
by the new test or the feed's golden. The lint snapshot is unchanged
(0 added, 0 removed). Walkthroughs are equal at the parent and here (16
pass, 6 skip); screens at the parent and here differ from the baseline only
in the masked regions, so operator-overview is unchanged: the demo feed
holds no same-kind ties.

Unprobed: payments tied in the database. The database subtests tie
invoices only; ties of payments, and of three rows of one kind, are checked
without a database through the comparator, because the tie rests on the
payment row carrying its id, which the comparator check and the payment
break cover.
2026-10-10 20:42:09 -05:00

612 lines
37 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<div id="activity-panel">
<div class="card mb-3">
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover table-sm table-record">
<thead>
<tr>
<th scope="col">Summary</th>
<th scope="col">When</th>
<th scope="col">Event</th>
<th scope="col">Organization</th>
<th scope="col">Actor</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row"><a href="/operator/organizations/<org:Org G>">Ended: —</a></th>
<td class="text-nowrap"><span class="d-block">t01</span><span class="d-block text-muted">t01</span></td>
<td>
<span class="badge text-bg-light border">Transition</span>
</td>
<td>
<a href="/operator/organizations/<org:Org G>">Org G</a>
</td>
<td>
<a href="/operator/persons/<person:Ann>">Ann</a>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/organizations/<org:Org G>">Issued Max (complimentary)</a></th>
<td class="text-nowrap"><span class="d-block">t02</span><span class="d-block text-muted">t02</span></td>
<td>
<span class="badge text-bg-light border">Grant</span>
</td>
<td>
<a href="/operator/organizations/<org:Org G>">Org G</a>
</td>
<td>
<a href="/operator/persons/<person:Ann>">Ann</a>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/organizations/<org:Org G>">Started: rank 2</a></th>
<td class="text-nowrap"><span class="d-block">t02</span><span class="d-block text-muted">t02</span></td>
<td>
<span class="badge text-bg-light border">Transition</span>
</td>
<td>
<a href="/operator/organizations/<org:Org G>">Org G</a>
</td>
<td>
<a href="/operator/persons/<person:Ann>">Ann</a>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/organizations/<org:Org F>">Issued Pro2 (complimentary)</a></th>
<td class="text-nowrap"><span class="d-block">t03</span><span class="d-block text-muted">t03</span></td>
<td>
<span class="badge text-bg-light border">Grant</span>
</td>
<td>
<a href="/operator/organizations/<org:Org F>">Org F</a>
</td>
<td>
<a href="/operator/persons/<person:Ann>">Ann</a>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/organizations/<org:Org F>">Upgraded: Pro2 to Basic</a></th>
<td class="text-nowrap"><span class="d-block">t03</span><span class="d-block text-muted">t03</span></td>
<td>
<span class="badge text-bg-light border">Transition</span>
</td>
<td>
<a href="/operator/organizations/<org:Org F>">Org F</a>
</td>
<td>
<a href="/operator/persons/<person:Ann>">Ann</a>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/organizations/<org:Org F>">Ended: Pro2</a></th>
<td class="text-nowrap"><span class="d-block">t03</span><span class="d-block text-muted">t03</span></td>
<td>
<span class="badge text-bg-light border">Transition</span>
</td>
<td>
<a href="/operator/organizations/<org:Org F>">Org F</a>
</td>
<td>
<a href="/operator/persons/<person:Ann>">Ann</a>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/organizations/<org:Org F>">Issued Basic (complimentary)</a></th>
<td class="text-nowrap"><span class="d-block">t04</span><span class="d-block text-muted">t04</span></td>
<td>
<span class="badge text-bg-light border">Grant</span>
</td>
<td>
<a href="/operator/organizations/<org:Org F>">Org F</a>
</td>
<td>
<a href="/operator/persons/<person:Ann>">Ann</a>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/organizations/<org:Org F>">Started: Pro2</a></th>
<td class="text-nowrap"><span class="d-block">t04</span><span class="d-block text-muted">t04</span></td>
<td>
<span class="badge text-bg-light border">Transition</span>
</td>
<td>
<a href="/operator/organizations/<org:Org F>">Org F</a>
</td>
<td>
<a href="/operator/persons/<person:Ann>">Ann</a>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/organizations/<org:Org E>">Issued Chat Plus (complimentary)</a></th>
<td class="text-nowrap"><span class="d-block">t05</span><span class="d-block text-muted">t05</span></td>
<td>
<span class="badge text-bg-light border">Grant</span>
</td>
<td>
<a href="/operator/organizations/<org:Org E>">Org E</a>
</td>
<td>
<a href="/operator/persons/<person:Ann>">Ann</a>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/organizations/<org:Org E>">Started: Chat Plus</a></th>
<td class="text-nowrap"><span class="d-block">t05</span><span class="d-block text-muted">t05</span></td>
<td>
<span class="badge text-bg-light border">Transition</span>
</td>
<td>
<a href="/operator/organizations/<org:Org E>">Org E</a>
</td>
<td>
<a href="/operator/persons/<person:Ann>">Ann</a>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/organizations/<org:Org D>">Extended: Plus</a></th>
<td class="text-nowrap"><span class="d-block">t06</span><span class="d-block text-muted">t06</span></td>
<td>
<span class="badge text-bg-light border">Grant</span>
</td>
<td>
<a href="/operator/organizations/<org:Org D>">Org D</a>
</td>
<td>
<a href="/operator/persons/<person:Ann>">Ann</a>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/organizations/<org:Org D>">Upgraded: Plus to Pro</a></th>
<td class="text-nowrap"><span class="d-block">t07</span><span class="d-block text-muted">t07</span></td>
<td>
<span class="badge text-bg-light border">Transition</span>
</td>
<td>
<a href="/operator/organizations/<org:Org D>">Org D</a>
</td>
<td>
<span class="text-body-secondary">—</span>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/organizations/<org:Org D>">Ended: Plus</a></th>
<td class="text-nowrap"><span class="d-block">t07</span><span class="d-block text-muted">t07</span></td>
<td>
<span class="badge text-bg-light border">Transition</span>
</td>
<td>
<a href="/operator/organizations/<org:Org D>">Org D</a>
</td>
<td>
<span class="text-body-secondary">—</span>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/organizations/<org:Org D>">Issued Plus (complimentary)</a></th>
<td class="text-nowrap"><span class="d-block">t08</span><span class="d-block text-muted">t08</span></td>
<td>
<span class="badge text-bg-light border">Grant</span>
</td>
<td>
<a href="/operator/organizations/<org:Org D>">Org D</a>
</td>
<td>
<a href="/operator/persons/<person:Ann>">Ann</a>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/organizations/<org:Org D>">Started: Plus</a></th>
<td class="text-nowrap"><span class="d-block">t08</span><span class="d-block text-muted">t08</span></td>
<td>
<span class="badge text-bg-light border">Transition</span>
</td>
<td>
<a href="/operator/organizations/<org:Org D>">Org D</a>
</td>
<td>
<a href="/operator/persons/<person:Ann>">Ann</a>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/organizations/<org:Org C>">Extended: Plus</a></th>
<td class="text-nowrap"><span class="d-block">t09</span><span class="d-block text-muted">t09</span></td>
<td>
<span class="badge text-bg-light border">Transition</span>
</td>
<td>
<a href="/operator/organizations/<org:Org C>">Org C</a>
</td>
<td>
<a href="/operator/persons/<person:Ann>">Ann</a>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/organizations/<org:Org C>">Issued Plus (complimentary)</a></th>
<td class="text-nowrap"><span class="d-block">t10</span><span class="d-block text-muted">t10</span></td>
<td>
<span class="badge text-bg-light border">Grant</span>
</td>
<td>
<a href="/operator/organizations/<org:Org C>">Org C</a>
</td>
<td>
<a href="/operator/persons/<person:Ann>">Ann</a>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/organizations/<org:Org C>">Started: Plus</a></th>
<td class="text-nowrap"><span class="d-block">t10</span><span class="d-block text-muted">t10</span></td>
<td>
<span class="badge text-bg-light border">Transition</span>
</td>
<td>
<a href="/operator/organizations/<org:Org C>">Org C</a>
</td>
<td>
<a href="/operator/persons/<person:Ann>">Ann</a>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/organizations/<org:Org B>">Resumed: Plus</a></th>
<td class="text-nowrap"><span class="d-block">t11</span><span class="d-block text-muted">t11</span></td>
<td>
<span class="badge text-bg-light border">Transition</span>
</td>
<td>
<a href="/operator/organizations/<org:Org B>">Org B</a>
</td>
<td>
<span class="text-body-secondary">—</span>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/organizations/<org:Org B>">Ended: Pro</a></th>
<td class="text-nowrap"><span class="d-block">t11</span><span class="d-block text-muted">t11</span></td>
<td>
<span class="badge text-bg-light border">Transition</span>
</td>
<td>
<a href="/operator/organizations/<org:Org B>">Org B</a>
</td>
<td>
<span class="text-body-secondary">—</span>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/organizations/<org:Org B>">Upgraded: Plus to Pro</a></th>
<td class="text-nowrap"><span class="d-block">t12</span><span class="d-block text-muted">t12</span></td>
<td>
<span class="badge text-bg-light border">Transition</span>
</td>
<td>
<a href="/operator/organizations/<org:Org B>">Org B</a>
</td>
<td>
<span class="text-body-secondary">—</span>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/organizations/<org:Org B>">Ended: Plus</a></th>
<td class="text-nowrap"><span class="d-block">t12</span><span class="d-block text-muted">t12</span></td>
<td>
<span class="badge text-bg-light border">Transition</span>
</td>
<td>
<a href="/operator/organizations/<org:Org B>">Org B</a>
</td>
<td>
<span class="text-body-secondary">—</span>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/organizations/<org:Org B>">Issued Plus (complimentary)</a></th>
<td class="text-nowrap"><span class="d-block">t13</span><span class="d-block text-muted">t13</span></td>
<td>
<span class="badge text-bg-light border">Grant</span>
</td>
<td>
<a href="/operator/organizations/<org:Org B>">Org B</a>
</td>
<td>
<a href="/operator/persons/<person:Bea>">Bea</a>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/organizations/<org:Org B>">Started: Plus</a></th>
<td class="text-nowrap"><span class="d-block">t13</span><span class="d-block text-muted">t13</span></td>
<td>
<span class="badge text-bg-light border">Transition</span>
</td>
<td>
<a href="/operator/organizations/<org:Org B>">Org B</a>
</td>
<td>
<a href="/operator/persons/<person:Bea>">Bea</a>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/organizations/<org:Org A>">Issued Free (default) after Plus ended</a></th>
<td class="text-nowrap"><span class="d-block">t14</span><span class="d-block text-muted">t14</span></td>
<td>
<span class="badge text-bg-light border">Grant</span>
</td>
<td>
<a href="/operator/organizations/<org:Org A>">Org A</a>
</td>
<td>
<span class="text-body-secondary">—</span>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/organizations/<org:Org A>">Started: Free</a></th>
<td class="text-nowrap"><span class="d-block">t14</span><span class="d-block text-muted">t14</span></td>
<td>
<span class="badge text-bg-light border">Transition</span>
</td>
<td>
<a href="/operator/organizations/<org:Org A>">Org A</a>
</td>
<td>
<span class="text-body-secondary">—</span>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/organizations/<org:Org A>">Ended: Plus</a></th>
<td class="text-nowrap"><span class="d-block">t14</span><span class="d-block text-muted">t14</span></td>
<td>
<span class="badge text-bg-light border">Transition</span>
</td>
<td>
<a href="/operator/organizations/<org:Org A>">Org A</a>
</td>
<td>
<a href="/operator/persons/<person:Ann>">Ann</a>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/organizations/<org:Org A>">Issued Plus (complimentary)</a></th>
<td class="text-nowrap"><span class="d-block">t15</span><span class="d-block text-muted">t15</span></td>
<td>
<span class="badge text-bg-light border">Grant</span>
</td>
<td>
<a href="/operator/organizations/<org:Org A>">Org A</a>
</td>
<td>
<a href="/operator/persons/<person:Ann>">Ann</a>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/billing/invoices">Invoice USD 50.00 · open</a></th>
<td class="text-nowrap"><span class="d-block">t15</span><span class="d-block text-muted">t15</span></td>
<td>
<span class="badge text-bg-light border">Invoice</span>
</td>
<td>
<a href="/operator/organizations/<org:Org A>">Org A</a>
</td>
<td>
<span class="text-body-secondary">—</span>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/organizations/<org:Org A>">Upgraded: Free to Plus</a></th>
<td class="text-nowrap"><span class="d-block">t15</span><span class="d-block text-muted">t15</span></td>
<td>
<span class="badge text-bg-light border">Transition</span>
</td>
<td>
<a href="/operator/organizations/<org:Org A>">Org A</a>
</td>
<td>
<a href="/operator/persons/<person:Ann>">Ann</a>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/organizations/<org:Org A>">Ended: Free</a></th>
<td class="text-nowrap"><span class="d-block">t15</span><span class="d-block text-muted">t15</span></td>
<td>
<span class="badge text-bg-light border">Transition</span>
</td>
<td>
<a href="/operator/organizations/<org:Org A>">Org A</a>
</td>
<td>
<a href="/operator/persons/<person:Ann>">Ann</a>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/organizations/<org:Org A>">Issued Free (default)</a></th>
<td class="text-nowrap"><span class="d-block">t16</span><span class="d-block text-muted">t16</span></td>
<td>
<span class="badge text-bg-light border">Grant</span>
</td>
<td>
<a href="/operator/organizations/<org:Org A>">Org A</a>
</td>
<td>
<span class="text-body-secondary">—</span>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/organizations/<org:Org A>">Started: Free</a></th>
<td class="text-nowrap"><span class="d-block">t16</span><span class="d-block text-muted">t16</span></td>
<td>
<span class="badge text-bg-light border">Transition</span>
</td>
<td>
<a href="/operator/organizations/<org:Org A>">Org A</a>
</td>
<td>
<span class="text-body-secondary">—</span>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/billing/payments">Payment USD 100.00 · succeeded</a></th>
<td class="text-nowrap"><span class="d-block">t17</span><span class="d-block text-muted">t17</span></td>
<td>
<span class="badge text-bg-light border">Payment</span>
</td>
<td>
<a href="/operator/organizations/<org:Org A>">Org A</a>
</td>
<td>
<span class="text-body-secondary">—</span>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/billing/payments">Payment USD 20.00 · failed</a></th>
<td class="text-nowrap"><span class="d-block">t18</span><span class="d-block text-muted">t18</span></td>
<td>
<span class="badge text-bg-light border">Payment</span>
</td>
<td>
<a href="/operator/organizations/<org:Org A>">Org A</a>
</td>
<td>
<span class="text-body-secondary">—</span>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/billing/invoices">Invoice USD 20.00 · open</a></th>
<td class="text-nowrap"><span class="d-block">t19</span><span class="d-block text-muted">t19</span></td>
<td>
<span class="badge text-bg-light border">Invoice</span>
</td>
<td>
<a href="/operator/organizations/<org:Org A>">Org A</a>
</td>
<td>
<span class="text-body-secondary">—</span>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/billing/invoices">Invoice USD 100.00 · open</a></th>
<td class="text-nowrap"><span class="d-block">t19</span><span class="d-block text-muted">t19</span></td>
<td>
<span class="badge text-bg-light border">Invoice</span>
</td>
<td>
<a href="/operator/organizations/<org:Org A>">Org A</a>
</td>
<td>
<span class="text-body-secondary">—</span>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/billing/invoices">Invoice USD 10.00 · open</a></th>
<td class="text-nowrap"><span class="d-block">t20</span><span class="d-block text-muted">t20</span></td>
<td>
<span class="badge text-bg-light border">Invoice</span>
</td>
<td>
<a href="/operator/organizations/<org:Alpha>">Alpha</a>
</td>
<td>
<span class="text-body-secondary">—</span>
</td>
</tr>
<tr>
<th scope="row"><a href="/operator/billing/invoices">Invoice USD 10.00 · open</a></th>
<td class="text-nowrap"><span class="d-block">t20</span><span class="d-block text-muted">t20</span></td>
<td>
<span class="badge text-bg-light border">Invoice</span>
</td>
<td>
<a href="/operator/organizations/<org:Zeta>">Zeta</a>
</td>
<td>
<span class="text-body-secondary">—</span>
</td>
</tr>
</tbody>
</table>
</div>
<div class="d-flex flex-wrap align-items-center justify-content-between gap-2 mt-2">
<p class="small text-body-secondary mb-0">Showing 1–39 of 39</p>
<p class="small text-body-secondary mb-0">Per page:
<a href="/operator" hx-get="/operator" hx-push-url="true" hx-select="#activity-panel" hx-swap="outerHTML" hx-target="#activity-panel">10</a>
<a href="/operator?act_per=25" hx-get="/operator?act_per=25" hx-push-url="true" hx-select="#activity-panel" hx-swap="outerHTML" hx-target="#activity-panel">25</a>
<strong>50</strong>
</p>
</div>
</div>
</div>
</div>