Commit 7a5adac
Reset PK sequences after mounting cached fixtures (#51)
ActiveRecordCoder#mount replays INSERTs that include explicit primary
key values. Postgres sequences don't observe these inserts, so a later
Model.create can call nextval and collide with an id we just inserted —
intermittent PG::UniqueViolation in test runs that mount the cache onto
a database whose sequence is at its initial value (e.g. parallel test
workers with their own DB copies).
Reset the sequence per connection after the batch executes:
- Prefer connection.reset_column_sequences! when available (Rails main
/ 8.2+) — batches the reset in one round-trip per connection
- Fall back to per-table connection.reset_pk_sequence! (Rails 8.0/8.1)
- Skip silently on adapters that expose neither (MySQL, SQLite)
Adds spec/integration/pk_sequence_repro_spec.rb that simulates the
parallel-worker scenario by wiping the table and resetting the PK
generator after the auto-mount, then re-mounting and asserting that a
fresh Model.create succeeds. Without the fix this fails on Postgres
with PG::UniqueViolation; passes naturally on MySQL/SQLite.
Closes #51
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>1 parent be65794 commit 7a5adac
3 files changed
Lines changed: 122 additions & 2 deletions
File tree
- lib/fixture_kit/coders
- spec
- integration
- unit/coders
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
43 | 43 | | |
44 | 44 | | |
45 | 45 | | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
46 | 52 | | |
47 | 53 | | |
48 | 54 | | |
| |||
108 | 114 | | |
109 | 115 | | |
110 | 116 | | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
111 | 127 | | |
112 | 128 | | |
113 | 129 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
156 | 156 | | |
157 | 157 | | |
158 | 158 | | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
159 | 198 | | |
160 | 199 | | |
161 | 200 | | |
| |||
212 | 251 | | |
213 | 252 | | |
214 | 253 | | |
| 254 | + | |
| 255 | + | |
215 | 256 | | |
216 | 257 | | |
217 | 258 | | |
218 | 259 | | |
219 | | - | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
220 | 265 | | |
221 | | - | |
| 266 | + | |
222 | 267 | | |
223 | 268 | | |
224 | 269 | | |
| |||
0 commit comments