Skip to content

Commit 7981d3c

Browse files
Merge pull request #24 from Chinchill-AI/coverage-and-docs
test: coverage improvements + doc updates
2 parents 34b75cb + 94cbf9c commit 7981d3c

5 files changed

Lines changed: 22 additions & 8 deletions

File tree

.coverage

0 Bytes
Binary file not shown.

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
# Changelog
22

3+
## 0.0.1a7 (2026-04-03)
4+
5+
Fixture replay tests and coverage hardening.
6+
7+
- All fixture replay tests pass (46 tests, 28 JSON fixtures copied from TS SDK)
8+
- GChat: fix float startIndex in annotation parsing
9+
- Postgres: atomic lock upsert to eliminate TOCTOU race
10+
- Coverage tests added for 4 low-coverage modules
11+
- Documentation updates (TESTING.md, ARCHITECTURE.md)
12+
313
## 0.0.1a6 (2026-04-07)
414

515
Systematic port fidelity scan — 10 more bugs fixed.

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
Multi-platform async chat SDK for Python. Port of [Vercel Chat](https://github.com/vercel/chat).
44

5-
> **Status: Alpha (0.0.1a6)** — API may change. Not yet tested in production.
5+
> **Status: Alpha (0.0.1a7)** — API may change. Not yet tested in production.
66
77
## Why chat-sdk?
88

docs/TESTING.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -228,15 +228,15 @@ def assert_no_camel_case_keys(d, path="", *, skip_raw=True):
228228

229229
This test suite is a regression guard. Without it, any refactoring of adapter dispatch code could reintroduce camelCase keys without any test failure. The test runs on every CI build and takes < 1 second.
230230

231-
## Plans: Webhook JSON Fixtures
231+
## Webhook JSON Fixtures (Done)
232232

233-
The TS SDK repository contains recorded webhook JSON payloads used for testing. We plan to copy these fixtures into `tests/fixtures/` to enable:
233+
28 webhook JSON fixtures were copied from the TS SDK repository into `tests/fixtures/` and 46 replay tests now pass against them. The fixtures enable:
234234

235-
1. **Cross-language parity testing**: Verify that the Python adapter produces the same normalized `Message` objects as the TS adapter for identical webhook payloads.
235+
1. **Cross-language parity testing**: The Python adapter produces the same normalized `Message` objects as the TS adapter for identical webhook payloads.
236236
2. **Platform version regression**: When platforms change their webhook format, the fixture files make it obvious what changed.
237-
3. **Replay tests without mocks**: Drive the full adapter pipeline with real payloads instead of hand-constructed dicts.
237+
3. **Replay tests without mocks**: The full adapter pipeline is driven with real payloads instead of hand-constructed dicts.
238238

239-
The fixture format will be:
239+
The fixture layout:
240240
```
241241
tests/fixtures/
242242
slack/

pyproject.toml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "chat-sdk"
3-
version = "0.0.1a6"
3+
version = "0.0.1a7"
44
description = "Multi-platform async chat SDK for Python — port of Vercel Chat"
55
readme = "README.md"
66
license = {text = "MIT"}
@@ -34,7 +34,8 @@ discord = ["pynacl>=1.5", "aiohttp>=3.9"]
3434
teams = ["aiohttp>=3.9"]
3535
telegram = ["aiohttp>=3.9"]
3636
whatsapp = ["aiohttp>=3.9"]
37-
google-chat = ["aiohttp>=3.9", "google-auth>=2.0", "pyjwt>=2.8"]
37+
google-chat = ["aiohttp>=3.9",
38+
"pyjwt[crypto]>=2.8", "google-auth>=2.0", "pyjwt>=2.8"]
3839
linear = ["aiohttp>=3.9"]
3940
all = [
4041
"slack-sdk>=3.27.0",
@@ -44,6 +45,7 @@ all = [
4445
"cryptography>=42.0",
4546
"pynacl>=1.5",
4647
"aiohttp>=3.9",
48+
"pyjwt[crypto]>=2.8",
4749
"google-auth>=2.0",
4850
]
4951

@@ -70,5 +72,7 @@ dev = [
7072
"pytest>=8.0",
7173
"pytest-asyncio>=0.23.0",
7274
"pytest-cov>=5.0",
75+
"aiohttp>=3.9",
76+
"pyjwt[crypto]>=2.8",
7377
"ruff>=0.4.0",
7478
]

0 commit comments

Comments
 (0)