# Module 5 Expansion Drop: Fleshshape The lesson's [Expansion Drop](../lesson.md#expansion-drop) beat explains the task. This file holds the scenario, the test locations and the check. - Card: Fleshshape, 3-mana Death Knight spell, "Assemble a Deathrattle minion. Give all minions in your hand +2/+2." ([Fleshshape, hearthstone.wiki.gg](https://hearthstone.wiki.gg/wiki/Fleshshape)). - Tests: `tests/rust/test_05x.rs` and `tests/ts/test_05x.test.ts`. Copy the one for your track into your workspace's `tests/`. - Reference answer: `solution/cards/fleshshape.json`, one card file for both tracks. Copy it into your workspace's `cards/`. Nothing under `src/engine/` changes, and neither does the harness. It is not in `course/cards/`, so `start-module` doesn't hand it to you. - Check: commit your workspace before you start, then run `node tools/expansion-check.mjs ` from the course repository. It fails if any file under `src/engine/` changed. Fleshshape is `Test Workshop` (a Module 5 test card) with two values changed: the pool filter's trigger is `deathrattle` instead of `battlecry`, and the buff is +2/+2 instead of +1/+1. The wiki says a pool named on the card applies only to the base minion ([Assemble, hearthstone.wiki.gg](https://hearthstone.wiki.gg/wiki/Assemble)), which is what the `filter` of an `assemble` effect does: the donor options are not filtered. ## Scenario ### test_05x_fleshshape_pool_filter - Setup: `newGame()` (no decks). Set a chooser that records every call and answers `"Loot Hoarder"` for `"base"`, `"Novice Engineer"` for `"donor"` and `"top"` for `"half"`. Call `clearLog()`. - Action: player 0 casts `Fleshshape`. - Assertions: - The chooser was called exactly three times, with kinds `"base"`, `"donor"`, `"half"` in that order. - The `"base"` options are exactly the names of the minion files in `cards/` that have a `deathrattle` trigger clause, sorted. That list includes `Loot Hoarder` and not `Novice Engineer`. (With the course's cards: `Harvest Golem`, `Loot Hoarder`, `Unstable Ghoul`.) - The `"donor"` options include `"Novice Engineer"`: the filter applies to the base only. - `hand(0)` has exactly 1 card, A. `nameOf(A)` is `"Loot Hoarder (Assembled)"` ("Battlecry: Draw a card."), `cost(A)` is 2, `attack(A)` is 4 and `health(A)` is 3: Loot Hoarder's 2/1, then +2/+2. - The log is exactly: `SpellCast{card: "Fleshshape"}`, `StatsChanged{id: A, attack: 4, health: 3}`.