Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Better support for interfaces as query responses #305

Merged
merged 1 commit into from
Nov 13, 2024

Better support for interfaces as QueryValues

a3c4917
Select commit
Loading
Failed to load commit list.
Sign in for the full log view
Merged

Better support for interfaces as query responses #305

Better support for interfaces as QueryValues
a3c4917
Select commit
Loading
Failed to load commit list.
GitHub Actions / Jest Tests 18 succeeded Nov 13, 2024 in 1s

380 passed, 0 failed and 1 skipped

Tests passed successfully

✅ reports/jest-junit.xml

381 tests were completed in 18s with 380 passed, 0 failed and 1 skipped.

Test suite Passed Failed Skipped Time
tests/functional/client-configuration.test.ts 23✅ 367ms
tests/functional/feed-client-configuration.test.ts 15✅ 126ms
tests/functional/feed-client.test.ts 7✅ 186ms
tests/functional/stream-client-configuration.test.ts 9✅ 124ms
tests/integration/client-last-txn-tracking.test.ts 3✅ 555ms
tests/integration/doc.test.ts 8✅ 443ms
tests/integration/existing-collection.test.ts 1✅ 572ms
tests/integration/feed.test.ts 11✅ 3s
tests/integration/query-limits.test.ts 1⚪ 101ms
tests/integration/query-typings.test.ts 8✅ 174ms
tests/integration/query.test.ts 32✅ 9s
tests/integration/schema-version.test.ts 1✅ 402ms
tests/integration/set.test.ts 12✅ 969ms
tests/integration/stream.test.ts 16✅ 14s
tests/integration/template-format.test.ts 32✅ 587ms
tests/unit/client.test.ts 4✅ 263ms
tests/unit/datetime.test.ts 28✅ 125ms
tests/unit/doc.test.ts 10✅ 116ms
tests/unit/error.test.ts 53✅ 152ms
tests/unit/fetch-client.test.ts 6✅ 301ms
tests/unit/node-http2-client.test.ts 3✅ 89ms
tests/unit/package-verison.test.ts 1✅ 165ms
tests/unit/query-builder.test.ts 12✅ 131ms
tests/unit/query.test.ts 14✅ 8s
tests/unit/retryable.test.ts 4✅ 643ms
tests/unit/set.test.ts 11✅ 212ms
tests/unit/tagged-format.test.ts 56✅ 7s

✅ tests/functional/client-configuration.test.ts

ClientConfiguration
  ✅ Client exposes a default client configuration
  ✅ can be initialized with an endpoint from the environment
  ✅ Client respects passed in client configuration over defaults
  ✅ A ClientConfiguration setting with no secret throws an error on driver construction
  ✅ endpoints is extensible
  ✅ client allows txn time to be set
  ✅ Setting clientConfiguration linearized leads to it being sent in headers
  ✅ Setting clientConfiguration max_contention_retries leads to it being sent in headers
  ✅ Setting clientConfiguration query_tags leads to it being sent in headers
  ✅ Setting clientConfiguration traceparent leads to it being sent in headers
  ✅ Setting clientConfiguration typecheck leads to it being sent in headers
  ✅ can accept endpoints with or without a trailing slash.
  ✅ throws if client_timeout_buffer_ms provided is undefined
  ✅ throws if endpoint provided is undefined
  ✅ throws if format provided is undefined
  ✅ throws if http2_session_idle_ms provided is undefined
  ✅ throws if query_timeout_ms provided is undefined
  ✅ throws if http2_max_streams provided is undefined
  ✅ throws if fetch_keepalive provided is undefined
  ✅ throws if long_type provided is undefined
  ✅ throws a RangeError if 'client_timeout_buffer_ms' is less than or equal to zero
  ✅ throws a RangeError if 'query_timeout_ms' is less than or equal to zero
  ✅ throws a RangeError if 'http2_max_streams' is less than or equal to zero

✅ tests/functional/feed-client-configuration.test.ts

FeedClientConfiguration
  ✅ can be instantiated directly with a token
  ✅ can be instantiated directly with a lambda
  ✅ throws a RangeError if 'max_backoff' is less than or equal to zero
  ✅ throws a TypeError if long_type provided is undefined
  ✅ throws a TypeError if httpClient provided is undefined
  ✅ throws a TypeError if max_backoff provided is undefined
  ✅ throws a TypeError if max_attempts provided is undefined
  ✅ throws a TypeError if client_timeout_buffer_ms provided is undefined
  ✅ throws a TypeError if query_timeout_ms provided is undefined
  ✅ throws a TypeError if secret provided is undefined
  ✅ throws a RangeError if 'max_attempts' is less than or equal to zero
  ✅ throws a TypeError is start_ts and cursor are both provided
  ✅ throws a RangeError if 'query_timeout_ms' is less than or equal to zero
  ✅ throws a RangeError if 'client_timeout_buffer_ms' is less than or equal to zero
  ✅ throws a TypeError if 'cursor' is not a string

✅ tests/functional/feed-client.test.ts

FeedClient
  ✅ returns a valid page of events
  ✅ uses a valid HTTPRequest
  ✅ uses page_size when set
  ✅ uses cursor when set
  ✅ uses start_ts when set
  ✅ retries throttling errors
  ✅ throws an error for an error response

✅ tests/functional/stream-client-configuration.test.ts

StreamClientConfiguration
  ✅ can be instantiated directly with a token
  ✅ can be instantiated directly with a lambda
  ✅ throws a TypeError if long_type provided is undefined
  ✅ throws a TypeError if httpStreamClient provided is undefined
  ✅ throws a TypeError if max_backoff provided is undefined
  ✅ throws a TypeError if max_attempts provided is undefined
  ✅ throws a TypeError if secret provided is undefined
  ✅ throws a RangeError if 'max_backoff' is less than or equal to zero
  ✅ throws a RangeError if 'max_attempts' is less than or equal to zero

✅ tests/integration/client-last-txn-tracking.test.ts

last_txn_ts tracking in client
  ✅ Tracks the last_txn_ts datetime and send in the headers
  ✅ Accepts an override of the last_txn_ts datetime and sends in the headers
  ✅ Ignores overrides  of the lastTxnTs that are less than the current value or undefined

✅ tests/integration/doc.test.ts

querying for doc types
  ✅ can round-trip Module
  ✅ can round-trip DocumentReference to a non-existent doc
  ✅ can round-trip DocumentReference to an existent doc
  ✅ can round-trip Document
  ✅ can round-trip NamedDocumentReference
  ✅ can round-trip NamedDocument
  ✅ get doc types from FQL
  ✅ can set and read ttl

✅ tests/integration/existing-collection.test.ts

querying for existing data
  ✅ Can query an existing index

✅ tests/integration/feed.test.ts

Client
  ✅ should throw a ClientError if not using a stream token
  ✅ should return a iterable feed from a stream token
  ✅ should return an iterable feed with a lambda
  ✅ should pass configuration to the feed client
  ✅ can resume from a cursor using a query
FeedClient
  ✅ can be instantiated directly with a token and client configuration
  ✅ can pass an existing cursor
  ✅ throws an error on an error event within a page of events
  ✅ can return a flattened array of events
  ✅ throws a QueryTimeoutError if the query times out
  ✅ throws a NetworkError if the client times out

✅ tests/integration/query-limits.test.ts

Query with limits enabled
  ⚪ succeeds on retry after getting throttled

✅ tests/integration/query-typings.test.ts

query typings
  ✅ allows customers to use their own types in queries
  ✅ allows customers to use their own interfaces in queries
  ✅ allows customers to infer their own types in queries from fql statements
  ✅ allows customers to use subtyped queries
paginate typings
  ✅ allows customers to use their own types in queries
  ✅ allows customers to use their own interfaces in queries
  ✅ allows customers to infer their own types in queries from fql statements
  ✅ allows customers to use subtyped queries

✅ tests/integration/query.test.ts

query
  ✅ Can query an FQL v10 endpoint
  ✅ Can query with arguments
  ✅ Can query with tags
  ✅ respects QueryRequest field format over ClientConfiguration format
  ✅ respects QueryRequest field linearized over ClientConfiguration linearized
  ✅ respects QueryRequest field query_timeout_ms over ClientConfiguration query_timeout_ms
  ✅ respects QueryRequest field max_contention_retries over ClientConfiguration max_contention_retries
  ✅ respects QueryRequest field query_tags over ClientConfiguration query_tags
  ✅ respects QueryRequest field traceparent over ClientConfiguration traceparent
  ✅ respects QueryRequest field typecheck over ClientConfiguration typecheck
  ✅ respects typechecked: undefined
  ✅ can send arguments directly
  ✅ throws a QueryCheckError if the query is invalid
  ✅ throws a QueryRuntimeError if the query hits a runtime error
  ✅ Includes constraint failures when present
  ✅ throws an InvalidRequestError when request is invalid
  ✅ throws a AbortError is the `abort` function is called
  ✅ throws a QueryTimeoutError if the query times out
  ✅ throws a AuthenticationError creds are invalid
  ✅ throws a AuthorizationError if creds are not permissioned.
  ✅ throws a NetworkError if the connection fails.
  ✅ throws a NetworkError on client timeout
  ✅ throws a ClientError if the client fails unexpectedly
  ✅ throws a ProtocolError if the http fails outside Fauna
  ✅ session is closed regardless of number of clients
  ✅ can be called after session idle timeout
query can encode / decode QueryValue correctly
  ✅ treats undefined as unprovided when in object
  ✅ undefined arguments throw a TypeError
  ✅ symbol arguments throw a TypeError
  ✅ function arguments throw a TypeError
  ✅ symbol arguments throw a TypeError in arguments
  ✅ function arguments throw a TypeError in arguments

✅ tests/integration/schema-version.test.ts

schema version is returned by the client
  ✅ returns the schema version

✅ tests/integration/set.test.ts

querying for set
  ✅ can round-trip Page
SetIterator
  ✅ can get single page using for..of when the set is small
  ✅ can get multiple pages using for..of when the set is large
  ✅ can get pages using next()
  ✅ can get pages using a loop with next()
  ✅ can can stop the iterator with the return method
  ✅ can can stop the iterator with the throw method
  ✅ can paginate a query that returns a set
  ✅ can paginate a query that does NOT return a set
  ✅ can be flattened
  ✅ each page respects QueryOptions using an existing Page
  ✅ each page respects QueryOptions using an a query

✅ tests/integration/stream.test.ts

Client
  ✅ can initiate a stream from a Client
  ✅ can initiate a stream from a Client, providing a query
  ✅ can resume a stream from an event cursor
  ✅ rejects cursor when not using a stream token
StreamClient
  ✅ can initiate a stream
  ✅ can initiate a stream with a lambda
  ✅ can get events with async iterator
  ✅ can get events with callbacks
  ✅ catches InvalidRequestError when establishing a stream
  ✅ handles InvalidRequestError via callback when establishing a stream
  ✅ catches an AbortError if abort is called when processing an event
  ✅ catches a QueryRuntimeError when processing an event
  ✅ handles an AbortError via callback if abort is called when processing an event
  ✅ handles a QueryRuntimeError via callback when processing an event
  ✅ decodes values from streams correctly
  ✅ yields all events when Fauna sends them as a single chunk

✅ tests/integration/template-format.test.ts

query using template format
  ✅ succeeds with no arguments
  ✅ succeeds with a string variable
  ✅ succeeds with an Int variable
  ✅ succeeds with a Long variable
  ✅ succeeds with a Double variable
  ✅ succeeds with a boolean variable
  ✅ succeeds with a null variable
  ✅ succeeds with an object variable
  ✅ succeeds with an array variable
  ✅ succeeds with multiple variables
  ✅ succeeds with nested expressions
  ✅ succeeds with deep nested expressions
  ✅ succeeds with deep nested expressions - example 2
  ✅ succeeds with expressions nested within objects
  ✅ succeeds with expressions nested within arrays
  ✅ succeeds with expressions nested within arrays and objects combined
  ✅ succeeds with multiple layers of nesting of arrays and objects
  ✅ succeeds with FQL string interpolation
  ✅ succeeds with a Date arg
  ✅ succeeds with an ArrayBuffer variable
  ✅ succeeds with Uint8Array variables
  ✅ fails with [Function Int8Array] variables
  ✅ fails with [Function Uint8ClampedArray] variables
  ✅ fails with [Function Int16Array] variables
  ✅ fails with [Function Uint16Array] variables
  ✅ fails with [Function Int32Array] variables
  ✅ fails with [Function Uint32Array] variables
  ✅ fails with [Function Float32Array] variables
  ✅ fails with [Function Float64Array] variables
  ✅ fails with [Function BigInt64Array] variables
  ✅ fails with [Function BigUint64Array] variables
  ✅ succeeds using Node Buffer to encode strings

✅ tests/unit/client.test.ts

Client
  ✅ Allows setting a secret in query
  ✅ Refuses further requests after close
  ✅ Refuses calls to close after client is closed.
  ✅ Allows for creation and usage of a new client after first client closed.

✅ tests/unit/datetime.test.ts

values
  ✅ can construct TimeStub from strings: Z
  ✅ can construct TimeStub from strings: - HH:MM
  ✅ can construct TimeStub from strings: - HHMM
  ✅ can construct TimeStub from strings: + HH:MM
  ✅ can construct TimeStub from strings: + HHMM
  ✅ can construct TimeStub from strings: +yyyyy
  ✅ can construct TimeStub from strings: -yyyy
  ✅ can construct DateStub from strings: some date
  ✅ can construct DateStub from strings: leap year
  ✅ can construct TimeStub from Date: Z
  ✅ can construct TimeStub from Date: - HH:MM
  ✅ can construct TimeStub from Date: + HH:MM
  ✅ can construct TimeStub from Date: no timezone
  ✅ can construct TimeStub from Date: no time
  ✅ can construct DateStub from Date: Z
  ✅ can construct DateStub from Date: - HH:MM
  ✅ can construct DateStub from Date: + HH:MM
  ✅ can construct DateStub from Date: no timezone
  ✅ can construct DateStub from Date: no time
  ✅ can deconstruct TimeStub into a Date: Z
  ✅ can deconstruct TimeStub into a Date: - HH:MM
  ✅ can deconstruct TimeStub into a Date: - HHMM
  ✅ can deconstruct TimeStub into a Date: + HH:MM
  ✅ can deconstruct TimeStub into a Date: + HHMM
  ✅ can deconstruct TimeStub into a Date: +yyyyy
  ✅ can deconstruct TimeStub into a Date: -yyyy
  ✅ can deconstruct DateStub into a Date: some date
  ✅ can deconstruct DateStub into a Date: leap year

✅ tests/unit/doc.test.ts

Module
  ✅ can be constructed directly
DocumentReference
  ✅ can be constructed directly
Document
  ✅ can be constructed directly
  ✅ can access ttl
  ✅ can access user data
NamedDocumentReference
  ✅ can be constructed directly
NamedDocument
  ✅ can be constructed without data
  ✅ can be constructed without data
NullDocument
  ✅ can be constructed directly with a DocumentReference
  ✅ can be constructed directly with a NamedDocumentReference

✅ tests/unit/error.test.ts

query
  ✅ QueryFailures with status '400' and code 'invalid_query' are correctly mapped to [Function QueryCheckError]
  ✅ QueryFailures with status '400' and code 'unbound_variable' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '400' and code 'index_out_of_bounds' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '400' and code 'type_mismatch' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '400' and code 'invalid_argument' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '400' and code 'invalid_bounds' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '400' and code 'invalid_regex' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '400' and code 'invalid_schema' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '400' and code 'invalid_document_id' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '400' and code 'document_id_exists' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '400' and code 'document_not_found' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '400' and code 'document_deleted' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '400' and code 'invalid_function_invocation' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '400' and code 'invalid_index_invocation' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '400' and code 'null_value' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '400' and code 'invalid_null_access' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '400' and code 'invalid_cursor' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '400' and code 'permission_denied' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '400' and code 'invalid_effect' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '400' and code 'invalid_write' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '400' and code 'internal_failure' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '400' and code 'divide_by_zero' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '400' and code 'invalid_id' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '400' and code 'invalid_secret' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '400' and code 'invalid_time' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '400' and code 'invalid_unit' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '400' and code 'invalid_date' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '400' and code 'limit_exceeded' are correctly mapped to [Function ThrottlingError]
  ✅ QueryFailures with status '400' and code 'stack_overflow' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '400' and code 'invalid_computed_field_access' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '400' and code 'disabled_feature' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '400' and code 'invalid_receiver' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '400' and code 'invalid_timestamp_field_access' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '400' and code 'invalid_request' are correctly mapped to [Function InvalidRequestError]
  ✅ QueryFailures with status '400' and code 'abort' are correctly mapped to [Function AbortError]
  ✅ QueryFailures with status '400' and code 'constraint_failure' are correctly mapped to [Function ConstraintFailureError]
  ✅ QueryFailures with status '401' and code 'unauthorized' are correctly mapped to [Function AuthenticationError]
  ✅ QueryFailures with status '403' and code 'forbidden' are correctly mapped to [Function AuthorizationError]
  ✅ QueryFailures with status '409' and code 'contended_transaction' are correctly mapped to [Function ContendedTransactionError]
  ✅ QueryFailures with status '429' and code 'limit_exceeded' are correctly mapped to [Function ThrottlingError]
  ✅ QueryFailures with status '440' and code 'time_out' are correctly mapped to [Function QueryTimeoutError]
  ✅ QueryFailures with status '503' and code 'time_out' are correctly mapped to [Function QueryTimeoutError]
  ✅ QueryFailures with status '500' and code 'internal_error' are correctly mapped to [Function ServiceInternalError]
  ✅ QueryFailures with status '400' and code 'some unhandled code' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '401' and code 'some unhandled code' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '403' and code 'some unhandled code' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '409' and code 'some unhandled code' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '429' and code 'some unhandled code' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '440' and code 'some unhandled code' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '500' and code 'some unhandled code' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '503' and code 'some unhandled code' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status '999' and code 'some unhandled code' are correctly mapped to [Function QueryRuntimeError]
  ✅ QueryFailures with status 'undefined' and code 'some unhandled code' are correctly mapped to [Function QueryRuntimeError]

✅ tests/unit/fetch-client.test.ts

fetch client
  ✅ returns a valid query response on success
  ✅ returns a valid query response on failure
  ✅ returns a NetworkError if fetch rejects
  ✅ returns a NetworkError if client timeout causes an abort
  ✅ uses the default path if one is not provided in HttpRequest
  ✅ uses the path provided in the HttpRequest if provided

✅ tests/unit/node-http2-client.test.ts

node http2 client
  ✅ default client for Node.js is the NodeHTTP2Client
  ✅ uses the default request path if none is provided
  ✅ uses the path provided in HttpRequest if provided

✅ tests/unit/package-verison.test.ts

package version
  ✅ is correct

✅ tests/unit/query-builder.test.ts

fql method producing Querys
  ✅ parses with no variables
  ✅ parses with a string variable
  ✅ parses with a number variable
  ✅ parses with a boolean variable
  ✅ parses with a null variable
  ✅ parses with an object variable
  ✅ parses with an object variable having a toQuery property
  ✅ parses with an array variable
  ✅ parses with multiple variables
  ✅ parses nested expressions
  ✅ parses deep nested expressions
  ✅ parses with FQL string interpolation

✅ tests/unit/query.test.ts

query
  ✅ throws an [Function AuthorizationError] on a 403
  ✅ throws an [Function QueryTimeoutError] on a 440
  ✅ throws an [Function ServiceError] on a 999
  ✅ throws an [Function ThrottlingError] on a 429
  ✅ throws an [Function ServiceInternalError] on a 500
  ✅ throws an [Function QueryTimeoutError] on a 503
  ✅ Includes a summary when not present in error field but present at top-level
  ✅ Includes a summary when not present in error field but present at top-level
  ✅ Includes a summary when not present in error field but present at top-level
  ✅ Includes a summary when not present in error field but present at top-level
  ✅ Includes a summary when not present in error field but present at top-level
  ✅ Includes a summary when not present in error field but present at top-level
  ✅ retries throttling errors and then succeeds
  ✅ Includes a summary in a QueryResult when present at top-level

✅ tests/unit/retryable.test.ts

retryable
  ✅ should retry
  ✅ should throw the last error if attempts are greater than or equal to maxAttempts
  ✅ should not retry if shouldRetry returns false
  ✅ should backoff

✅ tests/unit/set.test.ts

Page
  ✅ can be constructed directly
  ✅ after is optional
Embedded Set
  ✅ can be constructed directly
SetIterator
  ✅ can be constructed from a Page
  ✅ can be constructed from an EmbeddedSet
  ✅ can be constructed with an initial thunk for a T
  ✅ can be constructed with an initial thunk for a Page<T>
  ✅ can be constructed with an initial thunk for an EmbeddedSet
  ✅ can be flattened
  ✅ can flatten a Page
  ✅ throws if data and after are both undefined

✅ tests/unit/tagged-format.test.ts

tagged format with long_type number
  ✅ can be decoded
  ✅ can be encoded
  ✅ can be encoded as interpolation query
  ✅ handles conflicts
  ✅ handles conflicts in interpolation queries
  ✅ handles nested conflict types
  ✅ handles nested conflict types in interpolation queries
  ✅ wraps user-provided `@` fields
  ✅ Properly encodes and decodes number -(2**63)
  ✅ Properly encodes and decodes number -(2**53)
  ✅ Properly encodes and decodes number -(2**53 - 1)
  ✅ Properly encodes and decodes number -(2**31) - 1
  ✅ Properly encodes and decodes number -(2**31)
  ✅ Properly encodes and decodes number 0 (Int)
  ✅ Properly encodes and decodes number 1 (Int)
  ✅ Properly encodes and decodes number 0 (Long)
  ✅ Properly encodes and decodes number 2**31 - 1
  ✅ Properly encodes and decodes number 2**31
  ✅ Properly encodes and decodes number 2**53 - 1
  ✅ Properly encodes and decodes number 2**53
  ✅ Properly encodes and decodes number 2**64 - 1
  ✅ Properly encodes and decodes number 1.3**63
  ✅ Properly encodes and decodes number 1.3
  ✅ Properly encodes and decodes number 0.000000008
  ✅ Throws if BigInt value is lower than -(2**63) - 1
  ✅ Throws if BigInt value is greater than 2**63
  ✅ Throws if BigInt value is NEGATIVE_INFINITY
  ✅ Throws if BigInt value is POSITIVE_INFINITY
tagged format with long_type bigint
  ✅ can be decoded
  ✅ can be encoded
  ✅ can be encoded as interpolation query
  ✅ handles conflicts
  ✅ handles conflicts in interpolation queries
  ✅ handles nested conflict types
  ✅ handles nested conflict types in interpolation queries
  ✅ wraps user-provided `@` fields
  ✅ Properly encodes and decodes number -(2**63)
  ✅ Properly encodes and decodes number -(2**53)
  ✅ Properly encodes and decodes number -(2**53 - 1)
  ✅ Properly encodes and decodes number -(2**31) - 1
  ✅ Properly encodes and decodes number -(2**31)
  ✅ Properly encodes and decodes number 0 (Int)
  ✅ Properly encodes and decodes number 1 (Int)
  ✅ Properly encodes and decodes number 0 (Long)
  ✅ Properly encodes and decodes number 2**31 - 1
  ✅ Properly encodes and decodes number 2**31
  ✅ Properly encodes and decodes number 2**53 - 1
  ✅ Properly encodes and decodes number 2**53
  ✅ Properly encodes and decodes number 2**64 - 1
  ✅ Properly encodes and decodes number 1.3**63
  ✅ Properly encodes and decodes number 1.3
  ✅ Properly encodes and decodes number 0.000000008
  ✅ Throws if BigInt value is lower than -(2**63) - 1
  ✅ Throws if BigInt value is greater than 2**63
  ✅ Throws if BigInt value is NEGATIVE_INFINITY
  ✅ Throws if BigInt value is POSITIVE_INFINITY