From 1cbb75de882bdbc419aca6cda4e1017b9ecac238 Mon Sep 17 00:00:00 2001 From: Chad Miller Date: Tue, 28 Oct 2025 18:09:41 -0700 Subject: [PATCH] fix tests, format --- .github/workflows/test.yml | 23 +++++ src/goose.gleam | 5 +- test/goose_test.gleam | 199 ++++++++++++++++++++----------------- 3 files changed, 137 insertions(+), 90 deletions(-) create mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..f6e42b5 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,23 @@ +name: test + +on: + push: + branches: + - master + - main + pull_request: + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: erlef/setup-beam@v1 + with: + otp-version: "28" + gleam-version: "1.13.0" + rebar3-version: "3" + # elixir-version: "1" + - run: gleam deps download + - run: gleam test + - run: gleam format --check src test diff --git a/src/goose.gleam b/src/goose.gleam index eba5742..944de47 100644 --- a/src/goose.gleam +++ b/src/goose.gleam @@ -95,7 +95,10 @@ pub fn build_url(config: JetstreamConfig) -> String { let mut_params = case config.max_message_size_bytes { option.None -> mut_params option.Some(size_val) -> - list.append(["maxMessageSizeBytes=" <> string.inspect(size_val)], mut_params) + list.append( + ["maxMessageSizeBytes=" <> string.inspect(size_val)], + mut_params, + ) } // Add compress parameter (always include it) diff --git a/test/goose_test.gleam b/test/goose_test.gleam index b4ad046..5ffb1e2 100644 --- a/test/goose_test.gleam +++ b/test/goose_test.gleam @@ -11,147 +11,165 @@ pub fn build_url_default_test() { let config = goose.default_config() let url = goose.build_url(config) - assert url == "wss://jetstream2.us-east.bsky.network/subscribe" + assert url + == "wss://jetstream2.us-east.bsky.network/subscribe?compress=false&requireHello=false" } // Test build_url with wanted collections pub fn build_url_with_collections_test() { - let config = goose.JetstreamConfig( - endpoint: "wss://jetstream2.us-east.bsky.network/subscribe", - wanted_collections: ["app.bsky.feed.post", "app.bsky.feed.like"], - wanted_dids: [], - cursor: option.None, - max_message_size_bytes: option.None, - compress: False, - require_hello: False, - ) + let config = + goose.JetstreamConfig( + endpoint: "wss://jetstream2.us-east.bsky.network/subscribe", + wanted_collections: ["app.bsky.feed.post", "app.bsky.feed.like"], + wanted_dids: [], + cursor: option.None, + max_message_size_bytes: option.None, + compress: False, + require_hello: False, + ) let url = goose.build_url(config) - assert url == "wss://jetstream2.us-east.bsky.network/subscribe?wantedCollections=app.bsky.feed.like&wantedCollections=app.bsky.feed.post" + assert url + == "wss://jetstream2.us-east.bsky.network/subscribe?wantedCollections=app.bsky.feed.like&wantedCollections=app.bsky.feed.post&compress=false&requireHello=false" } // Test build_url with wanted DIDs pub fn build_url_with_dids_test() { - let config = goose.JetstreamConfig( - endpoint: "wss://jetstream2.us-east.bsky.network/subscribe", - wanted_collections: [], - wanted_dids: ["did:plc:example123", "did:plc:example456"], - cursor: option.None, - max_message_size_bytes: option.None, - compress: False, - require_hello: False, - ) + let config = + goose.JetstreamConfig( + endpoint: "wss://jetstream2.us-east.bsky.network/subscribe", + wanted_collections: [], + wanted_dids: ["did:plc:example123", "did:plc:example456"], + cursor: option.None, + max_message_size_bytes: option.None, + compress: False, + require_hello: False, + ) let url = goose.build_url(config) - assert url == "wss://jetstream2.us-east.bsky.network/subscribe?wantedDids=did:plc:example456&wantedDids=did:plc:example123" + assert url + == "wss://jetstream2.us-east.bsky.network/subscribe?wantedDids=did:plc:example456&wantedDids=did:plc:example123&compress=false&requireHello=false" } // Test build_url with both collections and DIDs pub fn build_url_with_both_test() { - let config = goose.JetstreamConfig( - endpoint: "wss://jetstream2.us-east.bsky.network/subscribe", - wanted_collections: ["app.bsky.feed.post"], - wanted_dids: ["did:plc:example123"], - cursor: option.None, - max_message_size_bytes: option.None, - compress: False, - require_hello: False, - ) + let config = + goose.JetstreamConfig( + endpoint: "wss://jetstream2.us-east.bsky.network/subscribe", + wanted_collections: ["app.bsky.feed.post"], + wanted_dids: ["did:plc:example123"], + cursor: option.None, + max_message_size_bytes: option.None, + compress: False, + require_hello: False, + ) let url = goose.build_url(config) - assert url == "wss://jetstream2.us-east.bsky.network/subscribe?wantedCollections=app.bsky.feed.post&wantedDids=did:plc:example123" + assert url + == "wss://jetstream2.us-east.bsky.network/subscribe?wantedCollections=app.bsky.feed.post&wantedDids=did:plc:example123&compress=false&requireHello=false" } // Test build_url with cursor pub fn build_url_with_cursor_test() { - let config = goose.JetstreamConfig( - endpoint: "wss://jetstream2.us-east.bsky.network/subscribe", - wanted_collections: [], - wanted_dids: [], - cursor: option.Some(1234567890123456), - max_message_size_bytes: option.None, - compress: False, - require_hello: False, - ) + let config = + goose.JetstreamConfig( + endpoint: "wss://jetstream2.us-east.bsky.network/subscribe", + wanted_collections: [], + wanted_dids: [], + cursor: option.Some(1_234_567_890_123_456), + max_message_size_bytes: option.None, + compress: False, + require_hello: False, + ) let url = goose.build_url(config) - assert url == "wss://jetstream2.us-east.bsky.network/subscribe?cursor=1234567890123456" + assert url + == "wss://jetstream2.us-east.bsky.network/subscribe?cursor=1234567890123456&compress=false&requireHello=false" } // Test build_url with max_message_size_bytes pub fn build_url_with_max_size_test() { - let config = goose.JetstreamConfig( - endpoint: "wss://jetstream2.us-east.bsky.network/subscribe", - wanted_collections: [], - wanted_dids: [], - cursor: option.None, - max_message_size_bytes: option.Some(1048576), - compress: False, - require_hello: False, - ) + let config = + goose.JetstreamConfig( + endpoint: "wss://jetstream2.us-east.bsky.network/subscribe", + wanted_collections: [], + wanted_dids: [], + cursor: option.None, + max_message_size_bytes: option.Some(1_048_576), + compress: False, + require_hello: False, + ) let url = goose.build_url(config) - assert url == "wss://jetstream2.us-east.bsky.network/subscribe?maxMessageSizeBytes=1048576" + assert url + == "wss://jetstream2.us-east.bsky.network/subscribe?maxMessageSizeBytes=1048576&compress=false&requireHello=false" } // Test build_url with compress enabled pub fn build_url_with_compress_test() { - let config = goose.JetstreamConfig( - endpoint: "wss://jetstream2.us-east.bsky.network/subscribe", - wanted_collections: [], - wanted_dids: [], - cursor: option.None, - max_message_size_bytes: option.None, - compress: True, - require_hello: False, - ) + let config = + goose.JetstreamConfig( + endpoint: "wss://jetstream2.us-east.bsky.network/subscribe", + wanted_collections: [], + wanted_dids: [], + cursor: option.None, + max_message_size_bytes: option.None, + compress: True, + require_hello: False, + ) let url = goose.build_url(config) - assert url == "wss://jetstream2.us-east.bsky.network/subscribe?compress=true" + assert url + == "wss://jetstream2.us-east.bsky.network/subscribe?compress=true&requireHello=false" } // Test build_url with require_hello enabled pub fn build_url_with_require_hello_test() { - let config = goose.JetstreamConfig( - endpoint: "wss://jetstream2.us-east.bsky.network/subscribe", - wanted_collections: [], - wanted_dids: [], - cursor: option.None, - max_message_size_bytes: option.None, - compress: False, - require_hello: True, - ) + let config = + goose.JetstreamConfig( + endpoint: "wss://jetstream2.us-east.bsky.network/subscribe", + wanted_collections: [], + wanted_dids: [], + cursor: option.None, + max_message_size_bytes: option.None, + compress: False, + require_hello: True, + ) let url = goose.build_url(config) - assert url == "wss://jetstream2.us-east.bsky.network/subscribe?requireHello=true" + assert url + == "wss://jetstream2.us-east.bsky.network/subscribe?compress=false&requireHello=true" } // Test build_url with all options combined pub fn build_url_with_all_options_test() { - let config = goose.JetstreamConfig( - endpoint: "wss://jetstream2.us-east.bsky.network/subscribe", - wanted_collections: ["app.bsky.feed.post"], - wanted_dids: ["did:plc:example123"], - cursor: option.Some(9876543210), - max_message_size_bytes: option.Some(2097152), - compress: True, - require_hello: True, - ) + let config = + goose.JetstreamConfig( + endpoint: "wss://jetstream2.us-east.bsky.network/subscribe", + wanted_collections: ["app.bsky.feed.post"], + wanted_dids: ["did:plc:example123"], + cursor: option.Some(9_876_543_210), + max_message_size_bytes: option.Some(2_097_152), + compress: True, + require_hello: True, + ) let url = goose.build_url(config) - assert url == "wss://jetstream2.us-east.bsky.network/subscribe?wantedCollections=app.bsky.feed.post&wantedDids=did:plc:example123&cursor=9876543210&maxMessageSizeBytes=2097152&compress=true&requireHello=true" + assert url + == "wss://jetstream2.us-east.bsky.network/subscribe?wantedCollections=app.bsky.feed.post&wantedDids=did:plc:example123&cursor=9876543210&maxMessageSizeBytes=2097152&compress=true&requireHello=true" } // Test parsing a commit event (create operation with record) pub fn parse_commit_event_create_test() { - let json = "{\"did\":\"did:plc:test123\",\"time_us\":1234567890,\"commit\":{\"rev\":\"abc123\",\"operation\":\"create\",\"collection\":\"app.bsky.feed.post\",\"rkey\":\"post123\",\"record\":{\"text\":\"Hello world\"},\"cid\":\"cid123\"}}" + let json = + "{\"did\":\"did:plc:test123\",\"time_us\":1234567890,\"commit\":{\"rev\":\"abc123\",\"operation\":\"create\",\"collection\":\"app.bsky.feed.post\",\"rkey\":\"post123\",\"record\":{\"text\":\"Hello world\"},\"cid\":\"cid123\"}}" let event = goose.parse_event(json) case event { goose.CommitEvent(did, time_us, commit) -> { assert did == "did:plc:test123" - assert time_us == 1234567890 + assert time_us == 1_234_567_890 assert commit.rev == "abc123" assert commit.operation == "create" assert commit.collection == "app.bsky.feed.post" @@ -163,14 +181,15 @@ pub fn parse_commit_event_create_test() { // Test parsing a commit event (delete operation without record) pub fn parse_commit_event_delete_test() { - let json = "{\"did\":\"did:plc:test456\",\"time_us\":9876543210,\"commit\":{\"rev\":\"xyz789\",\"operation\":\"delete\",\"collection\":\"app.bsky.feed.like\",\"rkey\":\"like456\"}}" + let json = + "{\"did\":\"did:plc:test456\",\"time_us\":9876543210,\"commit\":{\"rev\":\"xyz789\",\"operation\":\"delete\",\"collection\":\"app.bsky.feed.like\",\"rkey\":\"like456\"}}" let event = goose.parse_event(json) case event { goose.CommitEvent(did, time_us, commit) -> { assert did == "did:plc:test456" - assert time_us == 9876543210 + assert time_us == 9_876_543_210 assert commit.rev == "xyz789" assert commit.operation == "delete" assert commit.collection == "app.bsky.feed.like" @@ -182,14 +201,15 @@ pub fn parse_commit_event_delete_test() { // Test parsing an identity event pub fn parse_identity_event_test() { - let json = "{\"did\":\"did:plc:identity123\",\"time_us\":1111111111,\"identity\":{\"did\":\"did:plc:identity123\",\"handle\":\"alice.bsky.social\",\"seq\":42,\"time\":\"2024-01-01T00:00:00Z\"}}" + let json = + "{\"did\":\"did:plc:identity123\",\"time_us\":1111111111,\"identity\":{\"did\":\"did:plc:identity123\",\"handle\":\"alice.bsky.social\",\"seq\":42,\"time\":\"2024-01-01T00:00:00Z\"}}" let event = goose.parse_event(json) case event { goose.IdentityEvent(did, time_us, identity) -> { assert did == "did:plc:identity123" - assert time_us == 1111111111 + assert time_us == 1_111_111_111 assert identity.did == "did:plc:identity123" assert identity.handle == "alice.bsky.social" assert identity.seq == 42 @@ -201,14 +221,15 @@ pub fn parse_identity_event_test() { // Test parsing an account event pub fn parse_account_event_test() { - let json = "{\"did\":\"did:plc:account789\",\"time_us\":2222222222,\"account\":{\"active\":true,\"did\":\"did:plc:account789\",\"seq\":99,\"time\":\"2024-01-02T00:00:00Z\"}}" + let json = + "{\"did\":\"did:plc:account789\",\"time_us\":2222222222,\"account\":{\"active\":true,\"did\":\"did:plc:account789\",\"seq\":99,\"time\":\"2024-01-02T00:00:00Z\"}}" let event = goose.parse_event(json) case event { goose.AccountEvent(did, time_us, account) -> { assert did == "did:plc:account789" - assert time_us == 2222222222 + assert time_us == 2_222_222_222 assert account.active == True assert account.did == "did:plc:account789" assert account.seq == 99 -- 2.51.2