lukas
d9fe99963a
Fix htmx_middleware tests
2026-05-12 11:01:48 +02:00
lukas
1a4e51c95a
Update NameWithIcon
...
The `NameWithIcon()` function had a `platform` parameter that was immediately overwritten by `platform = None` and never used (dead code). The function mixed data lookup (database queries via IDs) with rendering, making it untestable.
**Fix**: Refactored `NameWithIcon()` to follow the `LinkedPurchase` pattern — accepts model objects (`Game`, `Session`) instead of IDs. Extracted `_resolve_name_with_icon()` helper for testable computation logic (name resolution, platform extraction, link creation). Fixed bug where `platform` was not extracted when `session` parameter was passed. Removed dead `platform` parameter from the public API. Updated all 3 production call sites (already using model objects). Added 10 unit tests for `_resolve_name_with_icon()` covering session override, custom names, linkify behavior, platform resolution, and edge cases. Updated 6 integration tests to use model-based parameters.
2026-05-12 10:05:15 +02:00
lukas
eae020fd34
Add component tests
2026-05-12 09:43:45 +02:00
lukas
656a96f55c
Fix A() component
...
Replaced single `url` parameter with explicit `url_name` (URL pattern name resolved via `reverse()`) and `href` (literal path). Fixes:
- Silent fallback (typos like `"ad_puchase"` silently became broken links) → now raises `NoReverseMatch` at render time
- `type(url) is str` gate → removed (implicit dual-mode eliminated entirely)
- Callable parameter (`url: Callable`) dead code → removed
- Implicit dual-mode (`url="name"` vs `url=reverse("name")`) → `url_name` vs `href` are now mutually exclusive params
- Inconsistent type annotation mixing `Callable` with string default → cleaned up
- Added `ValueError` when both `url_name` and `href` are provided
- Updated all 10 call sites across 6 view files and internal callers (`LinkedPurchase()`, `NameWithIcon()`)
2026-05-12 09:01:05 +02:00
lukas
ebef0bba87
Make randomid deterministic to improve caching
2026-05-12 08:27:11 +02:00
lukas
f82c61ef1e
Add toast notification system
...
Django CI/CD / test (push) Successful in 35s
Django CI/CD / build-and-push (push) Successful in 54s
Add more toast types
2026-05-11 20:22:23 +02:00
lukas
4e3b0ddb08
Allow directly updating device in session list
Django CI/CD / test (push) Successful in 30s
Django CI/CD / build-and-push (push) Successful in 1m12s
2026-05-11 12:54:42 +02:00
lukas
a549050860
Make edit_session use the same template as add_session
Django CI/CD / test (push) Successful in 34s
Django CI/CD / build-and-push (push) Successful in 1m36s
2026-05-06 10:43:57 +02:00
lukas
596d1ccfe1
Fix refund confirmation not working
Django CI/CD / test (push) Successful in 27s
Django CI/CD / build-and-push (push) Successful in 1m34s
2026-03-05 20:34:58 +01:00
lukas
bb26fec5e3
Fix extra submit button when adding purchase
Django CI/CD / test (push) Successful in 35s
Django CI/CD / build-and-push (push) Successful in 1m13s
2026-02-25 08:04:48 +01:00
lukas
1ba7de0bb7
Use pointer cursor for search field button
Django CI/CD / test (push) Successful in 30s
Django CI/CD / build-and-push (push) Successful in 1m2s
2026-02-21 21:50:46 +01:00
lukas
3391fb72f2
Fix secondary submit buttons not working
2026-02-21 21:48:31 +01:00
lukas
0986e59fe7
Improve styles
Django CI/CD / test (push) Successful in 30s
Django CI/CD / build-and-push (push) Successful in 1m4s
2026-02-18 23:30:30 +01:00
lukas
46b1199863
Fix button not passing attributes
2026-02-18 23:30:12 +01:00
lukas
bc1092b0b3
Add prompt to set game to Abandoned upon refund
Django CI/CD / test (push) Successful in 36s
Django CI/CD / build-and-push (push) Successful in 1m55s
2026-02-17 22:14:36 +01:00
lukas
996c0107c9
Housekeeping
...
* Updated flowbite to 4.x
* Start revamping styles
* Remove unused GraphQL code
* Make some templates more robuts
2026-02-17 22:14:16 +01:00
lukas
4e3a5ef682
Make buttons use pointer cursor
2026-01-30 11:45:42 +01:00
lukas
016f307240
Upgrade to Tailwind v4
2026-01-29 13:17:04 +01:00
lukas
0bc48d01a7
Fix search field icon misalignment
Django CI/CD / test (push) Successful in 16s
Django CI/CD / build-and-push (push) Successful in 1m0s
2026-01-29 12:17:40 +01:00
lukas
6b89bab0a6
Switch from poetry to uv
Django CI/CD / test (push) Successful in 9m34s
Django CI/CD / build-and-push (push) Failing after 1m55s
2026-01-27 20:03:39 +01:00
lukas
2bc2d98f88
Fix purchase form logic
2026-01-27 19:30:07 +01:00
lukas
06096d471e
Improve dark/light mode
2026-01-27 19:28:05 +01:00
lukas
40869e25f3
Pre-calculate playevent time from last playevent
2026-01-27 18:39:09 +01:00
lukas
4f0ac21ba3
Fill up
2026-01-27 18:39:09 +01:00
lukas
3801949fdb
Keep calculate_price_per_game stub
Django CI/CD / test (push) Successful in 24s
Django CI/CD / build-and-push (push) Successful in 2m1s
2026-01-16 12:32:32 +01:00
lukas
04601ca13d
Replace game selector on game view with component
2026-01-15 23:12:54 +01:00
lukas
d53575ab48
Create game status selector template
2026-01-15 23:11:13 +01:00
lukas
4e1f55855d
Update history when status changes
2026-01-15 22:43:17 +01:00
lukas
95af4ceed6
Use c-gamestatus everywhere
2026-01-15 22:40:29 +01:00
lukas
bd5525e57e
Add verbose names to selected fields
2026-01-15 21:18:58 +01:00
lukas
5cac19be7b
Fix dropdown and formatting
2026-01-15 21:18:40 +01:00
lukas
a6577a9e53
Remove redundant task
...
price_per_game is a generated column, which means it's update
automatically
2026-01-15 17:49:30 +01:00
lukas
243830a84a
Make removing games and associated purchases more robust
2026-01-15 17:49:03 +01:00
lukas
7032b8c7c7
Fix signals interfering with deleting a game with sessions
Django CI/CD / test (push) Successful in 2m29s
Django CI/CD / build-and-push (push) Failing after 1m31s
2025-12-30 13:24:09 +01:00
lukas
5cc1652002
Always set game status change timestamp to now instead of game's last updated_at
Django CI/CD / test (push) Successful in 1m16s
Django CI/CD / build-and-push (push) Successful in 2m15s
2025-06-07 20:28:14 +02:00
lukas
7cf2180192
Allow setting game to Finished when creating PlayEvent
Django CI/CD / test (push) Successful in 1m17s
Django CI/CD / build-and-push (push) Successful in 2m21s
2025-06-07 20:14:14 +02:00
lukas
ad0641f95b
Fix playtime stats per year
Django CI/CD / test (push) Successful in 58s
Django CI/CD / build-and-push (push) Successful in 2m39s
2025-04-17 16:15:38 +02:00
lukas
abdcfdfe64
Redirect to previous page after editing a session
Django CI/CD / test (push) Successful in 1m9s
Django CI/CD / build-and-push (push) Successful in 2m17s
2025-04-01 15:36:40 +02:00
lukas
31daf2efe0
Make game overview playthrough dropdown close when clicked outside
Django CI/CD / test (push) Successful in 1m6s
Django CI/CD / build-and-push (push) Successful in 2m17s
2025-03-28 13:43:46 +01:00
lukas
6d53fca910
Always return timedelta in update_game_playtime
Django CI/CD / test (push) Successful in 1m3s
Django CI/CD / build-and-push (push) Successful in 2m19s
2025-03-26 12:05:10 +01:00
lukas
f7e426e030
Make it easier to create a play event
2025-03-26 12:04:46 +01:00
lukas
b29e4edd72
Continue making use of improved duration handling
Django CI/CD / test (push) Successful in 1m5s
Django CI/CD / build-and-push (push) Successful in 2m22s
2025-03-25 23:38:04 +01:00
lukas
3c58851b88
Improve form fields for duration and currency
Django CI/CD / test (push) Successful in 1m0s
Django CI/CD / build-and-push (push) Successful in 2m10s
2025-03-25 22:46:17 +01:00
lukas
99f3540825
Improve duration handling for sessions and games
2025-03-25 22:46:01 +01:00
lukas
5e778bec30
Fix stats having hardcoded year
Django CI/CD / test (push) Successful in 1m20s
Django CI/CD / build-and-push (push) Successful in 2m35s
2025-03-25 15:56:20 +01:00
lukas
fea9d9784d
Fix purchase-name partial
Django CI/CD / test (push) Successful in 1m5s
Django CI/CD / build-and-push (push) Successful in 2m13s
2025-03-24 21:02:13 +01:00
lukas
23b4a7a069
Make it possible to edit and delete status changes
Django CI/CD / test (push) Successful in 1m11s
Django CI/CD / build-and-push (push) Successful in 2m18s
2025-03-22 23:45:02 +01:00
lukas
89de85c00d
Introduce game status, playevents
Django CI/CD / test (push) Successful in 1m10s
Django CI/CD / build-and-push (push) Successful in 2m21s
2025-03-22 20:59:23 +01:00
lukas
341e62283b
Change gamestatus to non-block element
2025-03-22 20:54:20 +01:00
lukas
9d16bc2546
Update exchangerates.yaml
2025-03-22 20:49:21 +01:00