[API-321] Tests for comms mutations - #338

Merged
schottra merged 8 commits into
mainfrom
comms-mutate-tests
Aug 26, 2025
Merged

[API-321] Tests for comms mutations#338
schottra merged 8 commits into
mainfrom
comms-mutate-tests

Conversation

@schottra

@schottraschottra commented Aug 21, 2025

Copy link
Copy Markdown
Contributor
  • Migrated all but the blast tests over from protocol. These are all query/db level tests that run the validator/processor code and then check the results in the db.
  • Changed from sqlx to pgx patterns for querying
  • Updated the chat*() functions that write to the DB to support using a transaction or a pool
  • Updated the rate limiter to be just a config instead of a struct we query values from. This was over-engineered because we don't actually change it at runtime
  • Updated processor/validator to take rate limit config as an arg so that we can change it for the tests. They are randomly flaky when trying to execute 10+ queries in under a second.
  • Added some basic tests for the endpoint processing to make sure we are decoding RPCs correctly.

Handful of TODOs to take care of, but wanted to get it up for review.

@schottra
schottra marked this pull request as ready for review August 22, 2025 20:26

@raymondjacobsonraymondjacobson left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks great!

)

func TestChatCreate(t *testing.T) {
// Create test database

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lol @ AI comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You wouldn't believe how many of these I deleted before pushing up the PR lol

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LOLOLL


// Set up test data
// user 1 follows user 2
_, err := pool.Exec(ctx, "insert into follows (follower_user_id, followee_user_id, is_current, is_delete, created_at) values ($1, $2, true, false, now())", user1Id, user2Id)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this could be done w/ our fixtures right?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeahhhhhh. I was kind of in a "leave the tests as close as possible to the originals and make sure they pass" mindset. But we could definitely use fixtures for a lot of this stuff.
I may do a pass after I have it all merged and working correctly to normalize it.

@schottra
schottra merged commit e49d465 into mainAug 26, 2025
5 checks passed
@schottra
schottra deleted the comms-mutate-tests branch August 26, 2025 20:02
schottra added a commit that referenced this pull request Aug 29, 2025
This is a followup to #338 to migrate the quite sizable blasts test
file. Source is here:
https://github.com/AudiusProject/audius-protocol/blob/ab73d979f98e151ac0aa408c7a82c105c3b6355e/comms/discovery/rpcz/chat_blast_test.go#L760
* Migrated everything to pgx patterns
* Split the file into multiple isolated tests instead of one huge test
* Using fixtures instead of manual inserts for setup data
* Removed a lot of the 'in the past' time variables in favor of just
using time.Now() for operations that are sequential
* Updated the version of `getNewBlasts` in the comms directory to match
the one we use in the get endpoint. We are being intentionally WET here.
* Fixed an issue with upgrading blasts to chats where the timestamp that
we assign to the new message would be in the wrong timezone if run on a
machine not set to UTC. In practice, this won't break on CI or
production, but it _does_ break when running on a local machine 😢
As a bonus, also cleaned up the tests from the previous PR to match the
patterns here.
dylanjeffers added a commit that referenced this pull request Jul 27, 2026
…audio#421) (#996)
Bumps both `github.com/OpenAudio/go-openaudio` and `.../pkg/etl` pins
from `b4a5ebe` (2026-07-16) to `1d9f697` — the merge of
**OpenAudio/go-openaudio#421**, same flow as #994 did for the #410 CID
fix.
## What the new pin brings (ETL / entity manager)
- Persist `orig_filename` on track create/update (never-clear, like the
CIDs) — new stem rows no longer rely on the `/stems` endpoint's title
fallback
- Ignore explicit `"stem_of": null` on track updates so client edits
can't unlink a stem from its parent (#410 failure class)
- Upsert the `stems` join row when an update carries `stem_of` (on-chain
repair path for lost links)
Intervening upstream commits also included (library-only for api):
mediorum transcode/retry fixes (#338, #417#419) and core/logging spam
guards (#420). Nothing release- or mainnet-config-related.
## Relation to #995#995 is the unblocking change (endpoint tolerates NULLs already in the
DB); this bump prevents recurrence at the write path. Both trace back to
the July stems-invisible incident (Andrew Lux's "Alone" remix contest).
Verified locally: `go build ./...`, stems endpoint tests, and `go test
./indexer/...` all pass on the new pin.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@schottra@raymondjacobson
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

[API-321] Tests for comms mutations - #338

Merged
schottra merged 8 commits into
mainfrom
comms-mutate-tests
Aug 26, 2025
Merged

[API-321] Tests for comms mutations#338
schottra merged 8 commits into
mainfrom
comms-mutate-tests

Conversation

@schottra

@schottraschottra commented Aug 21, 2025

Copy link
Copy Markdown
Contributor
  • Migrated all but the blast tests over from protocol. These are all query/db level tests that run the validator/processor code and then check the results in the db.
  • Changed from sqlx to pgx patterns for querying
  • Updated the chat*() functions that write to the DB to support using a transaction or a pool
  • Updated the rate limiter to be just a config instead of a struct we query values from. This was over-engineered because we don't actually change it at runtime
  • Updated processor/validator to take rate limit config as an arg so that we can change it for the tests. They are randomly flaky when trying to execute 10+ queries in under a second.
  • Added some basic tests for the endpoint processing to make sure we are decoding RPCs correctly.

Handful of TODOs to take care of, but wanted to get it up for review.

@schottra
schottra marked this pull request as ready for review August 22, 2025 20:26

@raymondjacobsonraymondjacobson left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks great!

)

func TestChatCreate(t *testing.T) {
// Create test database

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lol @ AI comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You wouldn't believe how many of these I deleted before pushing up the PR lol

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LOLOLL


// Set up test data
// user 1 follows user 2
_, err := pool.Exec(ctx, "insert into follows (follower_user_id, followee_user_id, is_current, is_delete, created_at) values ($1, $2, true, false, now())", user1Id, user2Id)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this could be done w/ our fixtures right?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeahhhhhh. I was kind of in a "leave the tests as close as possible to the originals and make sure they pass" mindset. But we could definitely use fixtures for a lot of this stuff.
I may do a pass after I have it all merged and working correctly to normalize it.

@schottra
schottra merged commit e49d465 into mainAug 26, 2025
5 checks passed
@schottra
schottra deleted the comms-mutate-tests branch August 26, 2025 20:02
schottra added a commit that referenced this pull request Aug 29, 2025
This is a followup to #338 to migrate the quite sizable blasts test
file. Source is here:
https://github.com/AudiusProject/audius-protocol/blob/ab73d979f98e151ac0aa408c7a82c105c3b6355e/comms/discovery/rpcz/chat_blast_test.go#L760
* Migrated everything to pgx patterns
* Split the file into multiple isolated tests instead of one huge test
* Using fixtures instead of manual inserts for setup data
* Removed a lot of the 'in the past' time variables in favor of just
using time.Now() for operations that are sequential
* Updated the version of `getNewBlasts` in the comms directory to match
the one we use in the get endpoint. We are being intentionally WET here.
* Fixed an issue with upgrading blasts to chats where the timestamp that
we assign to the new message would be in the wrong timezone if run on a
machine not set to UTC. In practice, this won't break on CI or
production, but it _does_ break when running on a local machine 😢
As a bonus, also cleaned up the tests from the previous PR to match the
patterns here.
dylanjeffers added a commit that referenced this pull request Jul 27, 2026
…audio#421) (#996)
Bumps both `github.com/OpenAudio/go-openaudio` and `.../pkg/etl` pins
from `b4a5ebe` (2026-07-16) to `1d9f697` — the merge of
**OpenAudio/go-openaudio#421**, same flow as #994 did for the #410 CID
fix.
## What the new pin brings (ETL / entity manager)
- Persist `orig_filename` on track create/update (never-clear, like the
CIDs) — new stem rows no longer rely on the `/stems` endpoint's title
fallback
- Ignore explicit `"stem_of": null` on track updates so client edits
can't unlink a stem from its parent (#410 failure class)
- Upsert the `stems` join row when an update carries `stem_of` (on-chain
repair path for lost links)
Intervening upstream commits also included (library-only for api):
mediorum transcode/retry fixes (#338, #417#419) and core/logging spam
guards (#420). Nothing release- or mainnet-config-related.
## Relation to #995#995 is the unblocking change (endpoint tolerates NULLs already in the
DB); this bump prevents recurrence at the write path. Both trace back to
the July stems-invisible incident (Andrew Lux's "Alone" remix contest).
Verified locally: `go build ./...`, stems endpoint tests, and `go test
./indexer/...` all pass on the new pin.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@schottra@raymondjacobson
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[API-321] Tests for comms mutations - #338

Merged
schottra merged 8 commits into
mainfrom
comms-mutate-tests
Aug 26, 2025
Merged

[API-321] Tests for comms mutations#338
schottra merged 8 commits into
mainfrom
comms-mutate-tests

Conversation

@schottra

@schottraschottra commented Aug 21, 2025

Copy link
Copy Markdown
Contributor
  • Migrated all but the blast tests over from protocol. These are all query/db level tests that run the validator/processor code and then check the results in the db.
  • Changed from sqlx to pgx patterns for querying
  • Updated the chat*() functions that write to the DB to support using a transaction or a pool
  • Updated the rate limiter to be just a config instead of a struct we query values from. This was over-engineered because we don't actually change it at runtime
  • Updated processor/validator to take rate limit config as an arg so that we can change it for the tests. They are randomly flaky when trying to execute 10+ queries in under a second.
  • Added some basic tests for the endpoint processing to make sure we are decoding RPCs correctly.

Handful of TODOs to take care of, but wanted to get it up for review.

@schottra
schottra marked this pull request as ready for review August 22, 2025 20:26

@raymondjacobsonraymondjacobson left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks great!

)

func TestChatCreate(t *testing.T) {
// Create test database

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lol @ AI comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You wouldn't believe how many of these I deleted before pushing up the PR lol

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LOLOLL


// Set up test data
// user 1 follows user 2
_, err := pool.Exec(ctx, "insert into follows (follower_user_id, followee_user_id, is_current, is_delete, created_at) values ($1, $2, true, false, now())", user1Id, user2Id)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this could be done w/ our fixtures right?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeahhhhhh. I was kind of in a "leave the tests as close as possible to the originals and make sure they pass" mindset. But we could definitely use fixtures for a lot of this stuff.
I may do a pass after I have it all merged and working correctly to normalize it.

@schottra
schottra merged commit e49d465 into mainAug 26, 2025
5 checks passed
@schottra
schottra deleted the comms-mutate-tests branch August 26, 2025 20:02
schottra added a commit that referenced this pull request Aug 29, 2025
This is a followup to #338 to migrate the quite sizable blasts test
file. Source is here:
https://github.com/AudiusProject/audius-protocol/blob/ab73d979f98e151ac0aa408c7a82c105c3b6355e/comms/discovery/rpcz/chat_blast_test.go#L760
* Migrated everything to pgx patterns
* Split the file into multiple isolated tests instead of one huge test
* Using fixtures instead of manual inserts for setup data
* Removed a lot of the 'in the past' time variables in favor of just
using time.Now() for operations that are sequential
* Updated the version of `getNewBlasts` in the comms directory to match
the one we use in the get endpoint. We are being intentionally WET here.
* Fixed an issue with upgrading blasts to chats where the timestamp that
we assign to the new message would be in the wrong timezone if run on a
machine not set to UTC. In practice, this won't break on CI or
production, but it _does_ break when running on a local machine 😢
As a bonus, also cleaned up the tests from the previous PR to match the
patterns here.
dylanjeffers added a commit that referenced this pull request Jul 27, 2026
…audio#421) (#996)
Bumps both `github.com/OpenAudio/go-openaudio` and `.../pkg/etl` pins
from `b4a5ebe` (2026-07-16) to `1d9f697` — the merge of
**OpenAudio/go-openaudio#421**, same flow as #994 did for the #410 CID
fix.
## What the new pin brings (ETL / entity manager)
- Persist `orig_filename` on track create/update (never-clear, like the
CIDs) — new stem rows no longer rely on the `/stems` endpoint's title
fallback
- Ignore explicit `"stem_of": null` on track updates so client edits
can't unlink a stem from its parent (#410 failure class)
- Upsert the `stems` join row when an update carries `stem_of` (on-chain
repair path for lost links)
Intervening upstream commits also included (library-only for api):
mediorum transcode/retry fixes (#338, #417#419) and core/logging spam
guards (#420). Nothing release- or mainnet-config-related.
## Relation to #995#995 is the unblocking change (endpoint tolerates NULLs already in the
DB); this bump prevents recurrence at the write path. Both trace back to
the July stems-invisible incident (Andrew Lux's "Alone" remix contest).
Verified locally: `go build ./...`, stems endpoint tests, and `go test
./indexer/...` all pass on the new pin.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@schottra@raymondjacobson
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[API-321] Tests for comms mutations - #338

Merged
schottra merged 8 commits into
mainfrom
comms-mutate-tests
Aug 26, 2025
Merged

[API-321] Tests for comms mutations#338
schottra merged 8 commits into
mainfrom
comms-mutate-tests

Conversation

@schottra

@schottraschottra commented Aug 21, 2025

Copy link
Copy Markdown
Contributor
  • Migrated all but the blast tests over from protocol. These are all query/db level tests that run the validator/processor code and then check the results in the db.
  • Changed from sqlx to pgx patterns for querying
  • Updated the chat*() functions that write to the DB to support using a transaction or a pool
  • Updated the rate limiter to be just a config instead of a struct we query values from. This was over-engineered because we don't actually change it at runtime
  • Updated processor/validator to take rate limit config as an arg so that we can change it for the tests. They are randomly flaky when trying to execute 10+ queries in under a second.
  • Added some basic tests for the endpoint processing to make sure we are decoding RPCs correctly.

Handful of TODOs to take care of, but wanted to get it up for review.

@schottra
schottra marked this pull request as ready for review August 22, 2025 20:26

@raymondjacobsonraymondjacobson left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks great!

)

func TestChatCreate(t *testing.T) {
// Create test database

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lol @ AI comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You wouldn't believe how many of these I deleted before pushing up the PR lol

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LOLOLL


// Set up test data
// user 1 follows user 2
_, err := pool.Exec(ctx, "insert into follows (follower_user_id, followee_user_id, is_current, is_delete, created_at) values ($1, $2, true, false, now())", user1Id, user2Id)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this could be done w/ our fixtures right?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeahhhhhh. I was kind of in a "leave the tests as close as possible to the originals and make sure they pass" mindset. But we could definitely use fixtures for a lot of this stuff.
I may do a pass after I have it all merged and working correctly to normalize it.

@schottra
schottra merged commit e49d465 into mainAug 26, 2025
5 checks passed
@schottra
schottra deleted the comms-mutate-tests branch August 26, 2025 20:02
schottra added a commit that referenced this pull request Aug 29, 2025
This is a followup to #338 to migrate the quite sizable blasts test
file. Source is here:
https://github.com/AudiusProject/audius-protocol/blob/ab73d979f98e151ac0aa408c7a82c105c3b6355e/comms/discovery/rpcz/chat_blast_test.go#L760
* Migrated everything to pgx patterns
* Split the file into multiple isolated tests instead of one huge test
* Using fixtures instead of manual inserts for setup data
* Removed a lot of the 'in the past' time variables in favor of just
using time.Now() for operations that are sequential
* Updated the version of `getNewBlasts` in the comms directory to match
the one we use in the get endpoint. We are being intentionally WET here.
* Fixed an issue with upgrading blasts to chats where the timestamp that
we assign to the new message would be in the wrong timezone if run on a
machine not set to UTC. In practice, this won't break on CI or
production, but it _does_ break when running on a local machine 😢
As a bonus, also cleaned up the tests from the previous PR to match the
patterns here.
dylanjeffers added a commit that referenced this pull request Jul 27, 2026
…audio#421) (#996)
Bumps both `github.com/OpenAudio/go-openaudio` and `.../pkg/etl` pins
from `b4a5ebe` (2026-07-16) to `1d9f697` — the merge of
**OpenAudio/go-openaudio#421**, same flow as #994 did for the #410 CID
fix.
## What the new pin brings (ETL / entity manager)
- Persist `orig_filename` on track create/update (never-clear, like the
CIDs) — new stem rows no longer rely on the `/stems` endpoint's title
fallback
- Ignore explicit `"stem_of": null` on track updates so client edits
can't unlink a stem from its parent (#410 failure class)
- Upsert the `stems` join row when an update carries `stem_of` (on-chain
repair path for lost links)
Intervening upstream commits also included (library-only for api):
mediorum transcode/retry fixes (#338, #417#419) and core/logging spam
guards (#420). Nothing release- or mainnet-config-related.
## Relation to #995#995 is the unblocking change (endpoint tolerates NULLs already in the
DB); this bump prevents recurrence at the write path. Both trace back to
the July stems-invisible incident (Andrew Lux's "Alone" remix contest).
Verified locally: `go build ./...`, stems endpoint tests, and `go test
./indexer/...` all pass on the new pin.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@schottra@raymondjacobson
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

[API-321] Tests for comms mutations - #338

Merged
schottra merged 8 commits into
mainfrom
comms-mutate-tests
Aug 26, 2025
Merged

[API-321] Tests for comms mutations#338
schottra merged 8 commits into
mainfrom
comms-mutate-tests

Conversation

@schottra

@schottraschottra commented Aug 21, 2025

Copy link
Copy Markdown
Contributor
  • Migrated all but the blast tests over from protocol. These are all query/db level tests that run the validator/processor code and then check the results in the db.
  • Changed from sqlx to pgx patterns for querying
  • Updated the chat*() functions that write to the DB to support using a transaction or a pool
  • Updated the rate limiter to be just a config instead of a struct we query values from. This was over-engineered because we don't actually change it at runtime
  • Updated processor/validator to take rate limit config as an arg so that we can change it for the tests. They are randomly flaky when trying to execute 10+ queries in under a second.
  • Added some basic tests for the endpoint processing to make sure we are decoding RPCs correctly.

Handful of TODOs to take care of, but wanted to get it up for review.

@schottra
schottra marked this pull request as ready for review August 22, 2025 20:26

@raymondjacobsonraymondjacobson left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks great!

)

func TestChatCreate(t *testing.T) {
// Create test database

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lol @ AI comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You wouldn't believe how many of these I deleted before pushing up the PR lol

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LOLOLL


// Set up test data
// user 1 follows user 2
_, err := pool.Exec(ctx, "insert into follows (follower_user_id, followee_user_id, is_current, is_delete, created_at) values ($1, $2, true, false, now())", user1Id, user2Id)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this could be done w/ our fixtures right?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeahhhhhh. I was kind of in a "leave the tests as close as possible to the originals and make sure they pass" mindset. But we could definitely use fixtures for a lot of this stuff.
I may do a pass after I have it all merged and working correctly to normalize it.

@schottra
schottra merged commit e49d465 into mainAug 26, 2025
5 checks passed
@schottra
schottra deleted the comms-mutate-tests branch August 26, 2025 20:02
schottra added a commit that referenced this pull request Aug 29, 2025
This is a followup to #338 to migrate the quite sizable blasts test
file. Source is here:
https://github.com/AudiusProject/audius-protocol/blob/ab73d979f98e151ac0aa408c7a82c105c3b6355e/comms/discovery/rpcz/chat_blast_test.go#L760
* Migrated everything to pgx patterns
* Split the file into multiple isolated tests instead of one huge test
* Using fixtures instead of manual inserts for setup data
* Removed a lot of the 'in the past' time variables in favor of just
using time.Now() for operations that are sequential
* Updated the version of `getNewBlasts` in the comms directory to match
the one we use in the get endpoint. We are being intentionally WET here.
* Fixed an issue with upgrading blasts to chats where the timestamp that
we assign to the new message would be in the wrong timezone if run on a
machine not set to UTC. In practice, this won't break on CI or
production, but it _does_ break when running on a local machine 😢
As a bonus, also cleaned up the tests from the previous PR to match the
patterns here.
dylanjeffers added a commit that referenced this pull request Jul 27, 2026
…audio#421) (#996)
Bumps both `github.com/OpenAudio/go-openaudio` and `.../pkg/etl` pins
from `b4a5ebe` (2026-07-16) to `1d9f697` — the merge of
**OpenAudio/go-openaudio#421**, same flow as #994 did for the #410 CID
fix.
## What the new pin brings (ETL / entity manager)
- Persist `orig_filename` on track create/update (never-clear, like the
CIDs) — new stem rows no longer rely on the `/stems` endpoint's title
fallback
- Ignore explicit `"stem_of": null` on track updates so client edits
can't unlink a stem from its parent (#410 failure class)
- Upsert the `stems` join row when an update carries `stem_of` (on-chain
repair path for lost links)
Intervening upstream commits also included (library-only for api):
mediorum transcode/retry fixes (#338, #417#419) and core/logging spam
guards (#420). Nothing release- or mainnet-config-related.
## Relation to #995#995 is the unblocking change (endpoint tolerates NULLs already in the
DB); this bump prevents recurrence at the write path. Both trace back to
the July stems-invisible incident (Andrew Lux's "Alone" remix contest).
Verified locally: `go build ./...`, stems endpoint tests, and `go test
./indexer/...` all pass on the new pin.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@schottra@raymondjacobson
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[API-321] Tests for comms mutations - #338

Merged
schottra merged 8 commits into
mainfrom
comms-mutate-tests
Aug 26, 2025
Merged

[API-321] Tests for comms mutations#338
schottra merged 8 commits into
mainfrom
comms-mutate-tests

Conversation

@schottra

@schottraschottra commented Aug 21, 2025

Copy link
Copy Markdown
Contributor
  • Migrated all but the blast tests over from protocol. These are all query/db level tests that run the validator/processor code and then check the results in the db.
  • Changed from sqlx to pgx patterns for querying
  • Updated the chat*() functions that write to the DB to support using a transaction or a pool
  • Updated the rate limiter to be just a config instead of a struct we query values from. This was over-engineered because we don't actually change it at runtime
  • Updated processor/validator to take rate limit config as an arg so that we can change it for the tests. They are randomly flaky when trying to execute 10+ queries in under a second.
  • Added some basic tests for the endpoint processing to make sure we are decoding RPCs correctly.

Handful of TODOs to take care of, but wanted to get it up for review.

@schottra
schottra marked this pull request as ready for review August 22, 2025 20:26

@raymondjacobsonraymondjacobson left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks great!

)

func TestChatCreate(t *testing.T) {
// Create test database

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lol @ AI comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You wouldn't believe how many of these I deleted before pushing up the PR lol

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LOLOLL


// Set up test data
// user 1 follows user 2
_, err := pool.Exec(ctx, "insert into follows (follower_user_id, followee_user_id, is_current, is_delete, created_at) values ($1, $2, true, false, now())", user1Id, user2Id)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this could be done w/ our fixtures right?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeahhhhhh. I was kind of in a "leave the tests as close as possible to the originals and make sure they pass" mindset. But we could definitely use fixtures for a lot of this stuff.
I may do a pass after I have it all merged and working correctly to normalize it.

@schottra
schottra merged commit e49d465 into mainAug 26, 2025
5 checks passed
@schottra
schottra deleted the comms-mutate-tests branch August 26, 2025 20:02
schottra added a commit that referenced this pull request Aug 29, 2025
This is a followup to #338 to migrate the quite sizable blasts test
file. Source is here:
https://github.com/AudiusProject/audius-protocol/blob/ab73d979f98e151ac0aa408c7a82c105c3b6355e/comms/discovery/rpcz/chat_blast_test.go#L760
* Migrated everything to pgx patterns
* Split the file into multiple isolated tests instead of one huge test
* Using fixtures instead of manual inserts for setup data
* Removed a lot of the 'in the past' time variables in favor of just
using time.Now() for operations that are sequential
* Updated the version of `getNewBlasts` in the comms directory to match
the one we use in the get endpoint. We are being intentionally WET here.
* Fixed an issue with upgrading blasts to chats where the timestamp that
we assign to the new message would be in the wrong timezone if run on a
machine not set to UTC. In practice, this won't break on CI or
production, but it _does_ break when running on a local machine 😢
As a bonus, also cleaned up the tests from the previous PR to match the
patterns here.
dylanjeffers added a commit that referenced this pull request Jul 27, 2026
…audio#421) (#996)
Bumps both `github.com/OpenAudio/go-openaudio` and `.../pkg/etl` pins
from `b4a5ebe` (2026-07-16) to `1d9f697` — the merge of
**OpenAudio/go-openaudio#421**, same flow as #994 did for the #410 CID
fix.
## What the new pin brings (ETL / entity manager)
- Persist `orig_filename` on track create/update (never-clear, like the
CIDs) — new stem rows no longer rely on the `/stems` endpoint's title
fallback
- Ignore explicit `"stem_of": null` on track updates so client edits
can't unlink a stem from its parent (#410 failure class)
- Upsert the `stems` join row when an update carries `stem_of` (on-chain
repair path for lost links)
Intervening upstream commits also included (library-only for api):
mediorum transcode/retry fixes (#338, #417#419) and core/logging spam
guards (#420). Nothing release- or mainnet-config-related.
## Relation to #995#995 is the unblocking change (endpoint tolerates NULLs already in the
DB); this bump prevents recurrence at the write path. Both trace back to
the July stems-invisible incident (Andrew Lux's "Alone" remix contest).
Verified locally: `go build ./...`, stems endpoint tests, and `go test
./indexer/...` all pass on the new pin.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@schottra@raymondjacobson
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[API-321] Tests for comms mutations - #338

Merged
schottra merged 8 commits into
mainfrom
comms-mutate-tests
Aug 26, 2025
Merged

[API-321] Tests for comms mutations#338
schottra merged 8 commits into
mainfrom
comms-mutate-tests

Conversation

@schottra

@schottraschottra commented Aug 21, 2025

Copy link
Copy Markdown
Contributor
  • Migrated all but the blast tests over from protocol. These are all query/db level tests that run the validator/processor code and then check the results in the db.
  • Changed from sqlx to pgx patterns for querying
  • Updated the chat*() functions that write to the DB to support using a transaction or a pool
  • Updated the rate limiter to be just a config instead of a struct we query values from. This was over-engineered because we don't actually change it at runtime
  • Updated processor/validator to take rate limit config as an arg so that we can change it for the tests. They are randomly flaky when trying to execute 10+ queries in under a second.
  • Added some basic tests for the endpoint processing to make sure we are decoding RPCs correctly.

Handful of TODOs to take care of, but wanted to get it up for review.

@schottra
schottra marked this pull request as ready for review August 22, 2025 20:26

@raymondjacobsonraymondjacobson left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks great!

)

func TestChatCreate(t *testing.T) {
// Create test database

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lol @ AI comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You wouldn't believe how many of these I deleted before pushing up the PR lol

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LOLOLL


// Set up test data
// user 1 follows user 2
_, err := pool.Exec(ctx, "insert into follows (follower_user_id, followee_user_id, is_current, is_delete, created_at) values ($1, $2, true, false, now())", user1Id, user2Id)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this could be done w/ our fixtures right?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeahhhhhh. I was kind of in a "leave the tests as close as possible to the originals and make sure they pass" mindset. But we could definitely use fixtures for a lot of this stuff.
I may do a pass after I have it all merged and working correctly to normalize it.

@schottra
schottra merged commit e49d465 into mainAug 26, 2025
5 checks passed
@schottra
schottra deleted the comms-mutate-tests branch August 26, 2025 20:02
schottra added a commit that referenced this pull request Aug 29, 2025
This is a followup to #338 to migrate the quite sizable blasts test
file. Source is here:
https://github.com/AudiusProject/audius-protocol/blob/ab73d979f98e151ac0aa408c7a82c105c3b6355e/comms/discovery/rpcz/chat_blast_test.go#L760
* Migrated everything to pgx patterns
* Split the file into multiple isolated tests instead of one huge test
* Using fixtures instead of manual inserts for setup data
* Removed a lot of the 'in the past' time variables in favor of just
using time.Now() for operations that are sequential
* Updated the version of `getNewBlasts` in the comms directory to match
the one we use in the get endpoint. We are being intentionally WET here.
* Fixed an issue with upgrading blasts to chats where the timestamp that
we assign to the new message would be in the wrong timezone if run on a
machine not set to UTC. In practice, this won't break on CI or
production, but it _does_ break when running on a local machine 😢
As a bonus, also cleaned up the tests from the previous PR to match the
patterns here.
dylanjeffers added a commit that referenced this pull request Jul 27, 2026
…audio#421) (#996)
Bumps both `github.com/OpenAudio/go-openaudio` and `.../pkg/etl` pins
from `b4a5ebe` (2026-07-16) to `1d9f697` — the merge of
**OpenAudio/go-openaudio#421**, same flow as #994 did for the #410 CID
fix.
## What the new pin brings (ETL / entity manager)
- Persist `orig_filename` on track create/update (never-clear, like the
CIDs) — new stem rows no longer rely on the `/stems` endpoint's title
fallback
- Ignore explicit `"stem_of": null` on track updates so client edits
can't unlink a stem from its parent (#410 failure class)
- Upsert the `stems` join row when an update carries `stem_of` (on-chain
repair path for lost links)
Intervening upstream commits also included (library-only for api):
mediorum transcode/retry fixes (#338, #417#419) and core/logging spam
guards (#420). Nothing release- or mainnet-config-related.
## Relation to #995#995 is the unblocking change (endpoint tolerates NULLs already in the
DB); this bump prevents recurrence at the write path. Both trace back to
the July stems-invisible incident (Andrew Lux's "Alone" remix contest).
Verified locally: `go build ./...`, stems endpoint tests, and `go test
./indexer/...` all pass on the new pin.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@schottra@raymondjacobson
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

[API-321] Tests for comms mutations - #338

Merged
schottra merged 8 commits into
mainfrom
comms-mutate-tests
Aug 26, 2025
Merged

[API-321] Tests for comms mutations#338
schottra merged 8 commits into
mainfrom
comms-mutate-tests

Conversation

@schottra

@schottraschottra commented Aug 21, 2025

Copy link
Copy Markdown
Contributor
  • Migrated all but the blast tests over from protocol. These are all query/db level tests that run the validator/processor code and then check the results in the db.
  • Changed from sqlx to pgx patterns for querying
  • Updated the chat*() functions that write to the DB to support using a transaction or a pool
  • Updated the rate limiter to be just a config instead of a struct we query values from. This was over-engineered because we don't actually change it at runtime
  • Updated processor/validator to take rate limit config as an arg so that we can change it for the tests. They are randomly flaky when trying to execute 10+ queries in under a second.
  • Added some basic tests for the endpoint processing to make sure we are decoding RPCs correctly.

Handful of TODOs to take care of, but wanted to get it up for review.

@schottra
schottra marked this pull request as ready for review August 22, 2025 20:26

@raymondjacobsonraymondjacobson left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks great!

)

func TestChatCreate(t *testing.T) {
// Create test database

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lol @ AI comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You wouldn't believe how many of these I deleted before pushing up the PR lol

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LOLOLL


// Set up test data
// user 1 follows user 2
_, err := pool.Exec(ctx, "insert into follows (follower_user_id, followee_user_id, is_current, is_delete, created_at) values ($1, $2, true, false, now())", user1Id, user2Id)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this could be done w/ our fixtures right?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeahhhhhh. I was kind of in a "leave the tests as close as possible to the originals and make sure they pass" mindset. But we could definitely use fixtures for a lot of this stuff.
I may do a pass after I have it all merged and working correctly to normalize it.

@schottra
schottra merged commit e49d465 into mainAug 26, 2025
5 checks passed
@schottra
schottra deleted the comms-mutate-tests branch August 26, 2025 20:02
schottra added a commit that referenced this pull request Aug 29, 2025
This is a followup to #338 to migrate the quite sizable blasts test
file. Source is here:
https://github.com/AudiusProject/audius-protocol/blob/ab73d979f98e151ac0aa408c7a82c105c3b6355e/comms/discovery/rpcz/chat_blast_test.go#L760
* Migrated everything to pgx patterns
* Split the file into multiple isolated tests instead of one huge test
* Using fixtures instead of manual inserts for setup data
* Removed a lot of the 'in the past' time variables in favor of just
using time.Now() for operations that are sequential
* Updated the version of `getNewBlasts` in the comms directory to match
the one we use in the get endpoint. We are being intentionally WET here.
* Fixed an issue with upgrading blasts to chats where the timestamp that
we assign to the new message would be in the wrong timezone if run on a
machine not set to UTC. In practice, this won't break on CI or
production, but it _does_ break when running on a local machine 😢
As a bonus, also cleaned up the tests from the previous PR to match the
patterns here.
dylanjeffers added a commit that referenced this pull request Jul 27, 2026
…audio#421) (#996)
Bumps both `github.com/OpenAudio/go-openaudio` and `.../pkg/etl` pins
from `b4a5ebe` (2026-07-16) to `1d9f697` — the merge of
**OpenAudio/go-openaudio#421**, same flow as #994 did for the #410 CID
fix.
## What the new pin brings (ETL / entity manager)
- Persist `orig_filename` on track create/update (never-clear, like the
CIDs) — new stem rows no longer rely on the `/stems` endpoint's title
fallback
- Ignore explicit `"stem_of": null` on track updates so client edits
can't unlink a stem from its parent (#410 failure class)
- Upsert the `stems` join row when an update carries `stem_of` (on-chain
repair path for lost links)
Intervening upstream commits also included (library-only for api):
mediorum transcode/retry fixes (#338, #417#419) and core/logging spam
guards (#420). Nothing release- or mainnet-config-related.
## Relation to #995#995 is the unblocking change (endpoint tolerates NULLs already in the
DB); this bump prevents recurrence at the write path. Both trace back to
the July stems-invisible incident (Andrew Lux's "Alone" remix contest).
Verified locally: `go build ./...`, stems endpoint tests, and `go test
./indexer/...` all pass on the new pin.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@schottra@raymondjacobson